From 3d7e31d264148043df511ea003c02b5a2446e715 Mon Sep 17 00:00:00 2001 From: davidjharder Date: Wed, 20 Sep 2023 15:11:56 +0000 Subject: [PATCH] deploy: dba7afd4ff25d7ac823de1ce6586de162c976482 --- 404.html | 8 ++++---- assets/js/04b18502.932c2914.js | 1 + ...07a26486.9a623b21.js => 07a26486.5704788a.js} | 2 +- ...09dbd43b.388ca3cc.js => 09dbd43b.b36d86ee.js} | 2 +- ...0b254e3a.2b36160c.js => 0b254e3a.be587819.js} | 2 +- ...0e3c5e6b.70838903.js => 0e3c5e6b.ae1fcb38.js} | 2 +- ...0e862883.de324c5c.js => 0e862883.5dbae821.js} | 2 +- ...14488e92.232af388.js => 14488e92.c88b7d89.js} | 2 +- ...1a698c37.76da1876.js => 1a698c37.8915a5ac.js} | 2 +- ...1ae709a2.3f55e578.js => 1ae709a2.a32b4de3.js} | 2 +- ...21944812.bd158eae.js => 21944812.66093e96.js} | 2 +- ...257b9082.b3b62835.js => 257b9082.2d6d903d.js} | 2 +- ...2598a3a5.0dc5c588.js => 2598a3a5.95cb9f93.js} | 2 +- ...2609550e.9f5041e2.js => 2609550e.a33e5523.js} | 2 +- ...2a37c7d8.0a574d35.js => 2a37c7d8.0910234a.js} | 2 +- ...2b4abe09.8fee6b10.js => 2b4abe09.9fa70df7.js} | 2 +- ...2b61a93c.4da1e849.js => 2b61a93c.42b300e7.js} | 2 +- ...2c3e84bd.a048d2ce.js => 2c3e84bd.e3bd251d.js} | 2 +- ...38920c38.84cc1aa6.js => 38920c38.38e7e25e.js} | 2 +- assets/js/3a2d2d08.10ae7eaf.js | 1 - ...3fdfc7ff.3b617f7e.js => 3fdfc7ff.413b93a6.js} | 2 +- ...3ff05326.8a629749.js => 3ff05326.b216cff8.js} | 2 +- ...41a4de91.47177ad2.js => 41a4de91.a8d42878.js} | 2 +- ...45e9d313.995b7c40.js => 45e9d313.822063af.js} | 2 +- ...46a65d96.2ba878eb.js => 46a65d96.e9f47525.js} | 2 +- ...49b71c16.6e583e3d.js => 49b71c16.8e2a1e09.js} | 2 +- assets/js/513b6405.2eb17c49.js | 1 + ...528b6a6b.9053fe9a.js => 528b6a6b.748f3bea.js} | 2 +- ...533eefa9.91179800.js => 533eefa9.8326f15c.js} | 2 +- assets/js/55e618af.6e451025.js | 1 - ...5b7f3753.12c46d98.js => 5b7f3753.22b35b86.js} | 2 +- ...5f194406.041badad.js => 5f194406.6895d0f0.js} | 2 +- assets/js/61c953b4.a304f614.js | 1 + assets/js/61c953b4.cc613f3c.js | 1 - ...64699048.a8545eff.js => 64699048.2670a513.js} | 2 +- ...6787574e.fd64fe82.js => 6787574e.729d102a.js} | 2 +- ...6cfe09a0.2f6cd3cf.js => 6cfe09a0.031ee958.js} | 2 +- ...74470af4.f0828f78.js => 74470af4.84252df9.js} | 2 +- ...793c86b2.fdd37ed6.js => 793c86b2.fcb5b3ec.js} | 2 +- ...7a24477a.229829cb.js => 7a24477a.e7535e48.js} | 2 +- ...7e4100d6.3489598e.js => 7e4100d6.ba9f4b31.js} | 2 +- ...8490a22d.8c49350c.js => 8490a22d.863372c0.js} | 2 +- ...88a83a8c.c72b314a.js => 88a83a8c.68d5338a.js} | 2 +- ...8e3d5b32.277e2ac1.js => 8e3d5b32.460f3fad.js} | 2 +- ...8e861970.4d1c311e.js => 8e861970.85c0a4da.js} | 2 +- ...8e886580.31bc524e.js => 8e886580.c11a7914.js} | 2 +- ...9284d474.3a00d7d6.js => 9284d474.e6173745.js} | 2 +- assets/js/935f2afb.89c611e0.js | 1 + assets/js/935f2afb.adda72a5.js | 1 - ...947d9ca4.9785f005.js => 947d9ca4.150e443b.js} | 2 +- ...9485dea6.43fdc4f0.js => 9485dea6.6cf47957.js} | 2 +- ...96af6484.562a2145.js => 96af6484.3ccdd597.js} | 2 +- ...97c623e4.76315bc7.js => 97c623e4.22441dd2.js} | 2 +- ...99bedda9.677079a2.js => 99bedda9.7ed71c6d.js} | 2 +- ...a05bfad9.15135640.js => a05bfad9.00edc6aa.js} | 2 +- ...a398ef57.f60a77ac.js => a398ef57.50d529ba.js} | 2 +- ...a9e19215.4eaf6825.js => a9e19215.ce4fad62.js} | 2 +- ...b4302412.3f071b86.js => b4302412.b850d2c4.js} | 2 +- ...b4d4ace7.d984a3d9.js => b4d4ace7.bfe1ff06.js} | 2 +- ...baf1b6e8.4353b3e5.js => baf1b6e8.97d73802.js} | 2 +- ...bb4d5b57.3f98d2b3.js => bb4d5b57.8d4c5c0a.js} | 2 +- ...be4ac66b.0f726a9a.js => be4ac66b.302c3329.js} | 2 +- ...be79d003.aafcea05.js => be79d003.83b54d5b.js} | 2 +- assets/js/c50daad9.fb5ec8b4.js | 1 - ...c55c138b.abba0708.js => c55c138b.5173adc3.js} | 2 +- ...c5de29d4.01d7dcec.js => c5de29d4.c4bbf0f0.js} | 2 +- ...c9c1a3f4.a4853454.js => c9c1a3f4.875a2ee7.js} | 2 +- assets/js/cca891e2.341b8cf5.js | 1 + assets/js/cca891e2.4656b42f.js | 1 - ...cec10a63.8bd6048a.js => cec10a63.f899895b.js} | 2 +- ...d00f7e62.bba59f46.js => d00f7e62.10e03b87.js} | 2 +- ...d0d2faf6.ff39b142.js => d0d2faf6.dec1fefd.js} | 2 +- ...d0e18f29.7f0a69f4.js => d0e18f29.6ea00662.js} | 2 +- ...d4762887.643bb3e8.js => d4762887.b351c12b.js} | 2 +- ...dabd6b33.bdcb0d4c.js => dabd6b33.ce2a57f0.js} | 2 +- ...ddc41e4a.58c520ab.js => ddc41e4a.17f94293.js} | 2 +- ...e5595530.9d7cca91.js => e5595530.ab57b9a1.js} | 2 +- ...eae77de0.d96fad7a.js => eae77de0.0064c776.js} | 2 +- ...ec4e4367.eacd3b00.js => ec4e4367.1765454a.js} | 2 +- ...f0629c21.a37c7bda.js => f0629c21.2dcc08f4.js} | 2 +- ...f1d13e1b.79e47fe5.js => f1d13e1b.a260f6b4.js} | 2 +- ...f4aa4739.a00d9d23.js => f4aa4739.62c6d938.js} | 2 +- ...f4c9601b.0b01dd6a.js => f4c9601b.975f8b18.js} | 2 +- ...f6faa2b4.33c09626.js => f6faa2b4.d2083429.js} | 2 +- ...f8dd8223.f044cd26.js => f8dd8223.49f1d1fd.js} | 2 +- ...fb6dc457.0e2a9dd2.js => fb6dc457.e5f8375f.js} | 2 +- ...fb8d634e.089db480.js => fb8d634e.7413179b.js} | 2 +- ...fc733b73.0aab545f.js => fc733b73.1757ec18.js} | 2 +- assets/js/ff402cbc.5df141a7.js | 1 - assets/js/main.05c86a04.js | 2 ++ ....LICENSE.txt => main.05c86a04.js.LICENSE.txt} | 0 assets/js/main.cbeddd1f.js | 2 -- assets/js/runtime~main.bdbbda6d.js | 1 + assets/js/runtime~main.d14fca4f.js | 1 - docs/category/advanced-configuration/index.html | 8 ++++---- docs/category/compatibility/index.html | 8 ++++---- docs/category/contributing/index.html | 8 ++++---- docs/category/localization/index.html | 8 ++++---- docs/category/mobile/index.html | 8 ++++---- docs/category/networking/index.html | 8 ++++---- docs/category/package-management/index.html | 8 ++++---- docs/category/peripherals/index.html | 8 ++++---- docs/category/procedures/index.html | 10 +++++----- docs/category/quick-start/index.html | 8 ++++---- docs/category/software/index.html | 8 ++++---- docs/category/utilities/index.html | 8 ++++---- docs/category/virtualization/index.html | 8 ++++---- docs/category/web/index.html | 8 ++++---- .../eopkg-configuration/index.html | 10 +++++----- .../advanced-config/local-repository/index.html | 10 +++++----- docs/packaging/creating-a-new-package/index.html | 10 +++++----- docs/packaging/git-basics/index.html | 10 +++++----- docs/packaging/index.html | 11 +++++------ docs/packaging/package.yml/index.html | 10 +++++----- docs/packaging/packaging-changes/index.html | 10 +++++----- docs/packaging/packaging-practices/index.html | 10 +++++----- docs/packaging/prepare-for-packaging/index.html | 13 ++++++------- .../procedures/diff-to-pull-request/index.html | 16 ---------------- .../procedures/maintainership/index.html | 10 +++++----- .../migrate-repos-to-github/index.html | 16 ---------------- .../procedures/package-inclusion/index.html | 10 +++++----- .../procedures/release-processes/index.html | 10 +++++----- .../request-a-package-update/index.html | 10 +++++----- .../procedures/request-a-package/index.html | 10 +++++----- .../submitting-a-pull-request/index.html | 12 ++++++------ docs/packaging/testing-a-package/index.html | 10 +++++----- docs/packaging/update-dev-environment/index.html | 10 +++++----- .../updating-an-existing-package/index.html | 10 +++++----- .../your-first-package-update/index.html | 10 +++++----- .../contributing/community-guidelines/index.html | 10 +++++----- .../contributing/getting-involved/index.html | 10 +++++----- docs/user/contributing/testing-an-iso/index.html | 10 +++++----- .../editions/budgie/configuration/index.html | 10 +++++----- docs/user/editions/budgie/index.html | 10 +++++----- .../editions/budgie/tips-and-tricks/index.html | 10 +++++----- .../user/editions/gnome/configuration/index.html | 10 +++++----- docs/user/editions/gnome/index.html | 10 +++++----- .../editions/gnome/tips-and-tricks/index.html | 10 +++++----- docs/user/editions/index.html | 10 +++++----- docs/user/editions/mate/configuration/index.html | 10 +++++----- docs/user/editions/mate/index.html | 10 +++++----- .../editions/mate/tips-and-tricks/index.html | 10 +++++----- .../editions/plasma/configuration/index.html | 10 +++++----- docs/user/editions/plasma/index.html | 10 +++++----- .../editions/plasma/tips-and-tricks/index.html | 10 +++++----- .../hardware/compatibility/laptops/index.html | 10 +++++----- docs/user/hardware/compatibility/wifi/index.html | 10 +++++----- docs/user/hardware/index.html | 10 +++++----- docs/user/hardware/mobile/android/index.html | 10 +++++----- docs/user/hardware/mobile/apple/index.html | 10 +++++----- .../peripherals/mice-and-touchpads/index.html | 10 +++++----- .../peripherals/midi-keyboard/index.html | 10 +++++----- .../peripherals/printers-and-scanners/index.html | 10 +++++----- docs/user/intro/index.html | 10 +++++----- docs/user/package-management/basics/index.html | 10 +++++----- .../history-and-rollback/index.html | 10 +++++----- .../repo-management/index.html | 10 +++++----- docs/user/quick-start/boot-management/index.html | 10 +++++----- .../quick-start/default-applications/index.html | 10 +++++----- .../quick-start/installation/disks/index.html | 10 +++++----- docs/user/quick-start/installation/index.html | 10 +++++----- .../installation/secure-boot/index.html | 10 +++++----- .../package-management/eopkg/index.html | 10 +++++----- .../quick-start/package-management/index.html | 10 +++++----- docs/user/software/command-line/index.html | 10 +++++----- docs/user/software/desktops/index.html | 10 +++++----- .../user/software/development/android/index.html | 10 +++++----- .../software/development/containers/index.html | 10 +++++----- docs/user/software/development/index.html | 10 +++++----- docs/user/software/development/java/index.html | 10 +++++----- .../software/development/postgresql/index.html | 10 +++++----- .../development/r-and-rstudio/index.html | 10 +++++----- docs/user/software/development/rust/index.html | 10 +++++----- docs/user/software/development/web/index.html | 10 +++++----- docs/user/software/gaming/index.html | 10 +++++----- docs/user/software/localization/ibus/index.html | 10 +++++----- docs/user/software/networking/samba/index.html | 10 +++++----- .../user/software/networking/tigervnc/index.html | 10 +++++----- .../software/networking/wireshark/index.html | 10 +++++----- docs/user/software/networking/xrdp/index.html | 10 +++++----- docs/user/software/sound/index.html | 10 +++++----- docs/user/software/third-party/index.html | 10 +++++----- .../user/software/utilities/ksysguard/index.html | 10 +++++----- docs/user/software/utilities/kwallet/index.html | 10 +++++----- .../virtualization/virtualbox/index.html | 10 +++++----- docs/user/software/web/obs/index.html | 10 +++++----- docs/user/troubleshooting/boot-rescue/index.html | 10 +++++----- docs/user/troubleshooting/index.html | 10 +++++----- .../user/troubleshooting/installation/index.html | 10 +++++----- index.html | 8 ++++---- search-index-docs-default-current.json | 2 +- sitemap.xml | 2 +- 192 files changed, 548 insertions(+), 584 deletions(-) create mode 100644 assets/js/04b18502.932c2914.js rename assets/js/{07a26486.9a623b21.js => 07a26486.5704788a.js} (99%) rename assets/js/{09dbd43b.388ca3cc.js => 09dbd43b.b36d86ee.js} (99%) rename assets/js/{0b254e3a.2b36160c.js => 0b254e3a.be587819.js} (99%) rename assets/js/{0e3c5e6b.70838903.js => 0e3c5e6b.ae1fcb38.js} (98%) rename assets/js/{0e862883.de324c5c.js => 0e862883.5dbae821.js} (99%) rename assets/js/{14488e92.232af388.js => 14488e92.c88b7d89.js} (99%) rename assets/js/{1a698c37.76da1876.js => 1a698c37.8915a5ac.js} (98%) rename assets/js/{1ae709a2.3f55e578.js => 1ae709a2.a32b4de3.js} (98%) rename assets/js/{21944812.bd158eae.js => 21944812.66093e96.js} (99%) rename assets/js/{257b9082.b3b62835.js => 257b9082.2d6d903d.js} (98%) rename assets/js/{2598a3a5.0dc5c588.js => 2598a3a5.95cb9f93.js} (99%) rename assets/js/{2609550e.9f5041e2.js => 2609550e.a33e5523.js} (99%) rename assets/js/{2a37c7d8.0a574d35.js => 2a37c7d8.0910234a.js} (99%) rename assets/js/{2b4abe09.8fee6b10.js => 2b4abe09.9fa70df7.js} (98%) rename assets/js/{2b61a93c.4da1e849.js => 2b61a93c.42b300e7.js} (98%) rename assets/js/{2c3e84bd.a048d2ce.js => 2c3e84bd.e3bd251d.js} (97%) rename assets/js/{38920c38.84cc1aa6.js => 38920c38.38e7e25e.js} (99%) delete mode 100644 assets/js/3a2d2d08.10ae7eaf.js rename assets/js/{3fdfc7ff.3b617f7e.js => 3fdfc7ff.413b93a6.js} (99%) rename assets/js/{3ff05326.8a629749.js => 3ff05326.b216cff8.js} (99%) rename assets/js/{41a4de91.47177ad2.js => 41a4de91.a8d42878.js} (99%) rename assets/js/{45e9d313.995b7c40.js => 45e9d313.822063af.js} (98%) rename assets/js/{46a65d96.2ba878eb.js => 46a65d96.e9f47525.js} (99%) rename assets/js/{49b71c16.6e583e3d.js => 49b71c16.8e2a1e09.js} (99%) create mode 100644 assets/js/513b6405.2eb17c49.js rename assets/js/{528b6a6b.9053fe9a.js => 528b6a6b.748f3bea.js} (98%) rename assets/js/{533eefa9.91179800.js => 533eefa9.8326f15c.js} (99%) delete mode 100644 assets/js/55e618af.6e451025.js rename assets/js/{5b7f3753.12c46d98.js => 5b7f3753.22b35b86.js} (99%) rename assets/js/{5f194406.041badad.js => 5f194406.6895d0f0.js} (99%) create mode 100644 assets/js/61c953b4.a304f614.js delete mode 100644 assets/js/61c953b4.cc613f3c.js rename assets/js/{64699048.a8545eff.js => 64699048.2670a513.js} (98%) rename assets/js/{6787574e.fd64fe82.js => 6787574e.729d102a.js} (99%) rename assets/js/{6cfe09a0.2f6cd3cf.js => 6cfe09a0.031ee958.js} (99%) rename assets/js/{74470af4.f0828f78.js => 74470af4.84252df9.js} (99%) rename assets/js/{793c86b2.fdd37ed6.js => 793c86b2.fcb5b3ec.js} (99%) rename assets/js/{7a24477a.229829cb.js => 7a24477a.e7535e48.js} (99%) rename assets/js/{7e4100d6.3489598e.js => 7e4100d6.ba9f4b31.js} (98%) rename assets/js/{8490a22d.8c49350c.js => 8490a22d.863372c0.js} (99%) rename assets/js/{88a83a8c.c72b314a.js => 88a83a8c.68d5338a.js} (99%) rename assets/js/{8e3d5b32.277e2ac1.js => 8e3d5b32.460f3fad.js} (98%) rename assets/js/{8e861970.4d1c311e.js => 8e861970.85c0a4da.js} (98%) rename assets/js/{8e886580.31bc524e.js => 8e886580.c11a7914.js} (98%) rename assets/js/{9284d474.3a00d7d6.js => 9284d474.e6173745.js} (99%) create mode 100644 assets/js/935f2afb.89c611e0.js delete mode 100644 assets/js/935f2afb.adda72a5.js rename assets/js/{947d9ca4.9785f005.js => 947d9ca4.150e443b.js} (99%) rename assets/js/{9485dea6.43fdc4f0.js => 9485dea6.6cf47957.js} (99%) rename assets/js/{96af6484.562a2145.js => 96af6484.3ccdd597.js} (99%) rename assets/js/{97c623e4.76315bc7.js => 97c623e4.22441dd2.js} (98%) rename assets/js/{99bedda9.677079a2.js => 99bedda9.7ed71c6d.js} (99%) rename assets/js/{a05bfad9.15135640.js => a05bfad9.00edc6aa.js} (98%) rename assets/js/{a398ef57.f60a77ac.js => a398ef57.50d529ba.js} (98%) rename assets/js/{a9e19215.4eaf6825.js => a9e19215.ce4fad62.js} (98%) rename assets/js/{b4302412.3f071b86.js => b4302412.b850d2c4.js} (98%) rename assets/js/{b4d4ace7.d984a3d9.js => b4d4ace7.bfe1ff06.js} (56%) rename assets/js/{baf1b6e8.4353b3e5.js => baf1b6e8.97d73802.js} (99%) rename assets/js/{bb4d5b57.3f98d2b3.js => bb4d5b57.8d4c5c0a.js} (99%) rename assets/js/{be4ac66b.0f726a9a.js => be4ac66b.302c3329.js} (99%) rename assets/js/{be79d003.aafcea05.js => be79d003.83b54d5b.js} (98%) delete mode 100644 assets/js/c50daad9.fb5ec8b4.js rename assets/js/{c55c138b.abba0708.js => c55c138b.5173adc3.js} (99%) rename assets/js/{c5de29d4.01d7dcec.js => c5de29d4.c4bbf0f0.js} (82%) rename assets/js/{c9c1a3f4.a4853454.js => c9c1a3f4.875a2ee7.js} (99%) create mode 100644 assets/js/cca891e2.341b8cf5.js delete mode 100644 assets/js/cca891e2.4656b42f.js rename assets/js/{cec10a63.8bd6048a.js => cec10a63.f899895b.js} (99%) rename assets/js/{d00f7e62.bba59f46.js => d00f7e62.10e03b87.js} (79%) rename assets/js/{d0d2faf6.ff39b142.js => d0d2faf6.dec1fefd.js} (99%) rename assets/js/{d0e18f29.7f0a69f4.js => d0e18f29.6ea00662.js} (72%) rename assets/js/{d4762887.643bb3e8.js => d4762887.b351c12b.js} (97%) rename assets/js/{dabd6b33.bdcb0d4c.js => dabd6b33.ce2a57f0.js} (99%) rename assets/js/{ddc41e4a.58c520ab.js => ddc41e4a.17f94293.js} (98%) rename assets/js/{e5595530.9d7cca91.js => e5595530.ab57b9a1.js} (99%) rename assets/js/{eae77de0.d96fad7a.js => eae77de0.0064c776.js} (98%) rename assets/js/{ec4e4367.eacd3b00.js => ec4e4367.1765454a.js} (98%) rename assets/js/{f0629c21.a37c7bda.js => f0629c21.2dcc08f4.js} (99%) rename assets/js/{f1d13e1b.79e47fe5.js => f1d13e1b.a260f6b4.js} (98%) rename assets/js/{f4aa4739.a00d9d23.js => f4aa4739.62c6d938.js} (98%) rename assets/js/{f4c9601b.0b01dd6a.js => f4c9601b.975f8b18.js} (99%) rename assets/js/{f6faa2b4.33c09626.js => f6faa2b4.d2083429.js} (99%) rename assets/js/{f8dd8223.f044cd26.js => f8dd8223.49f1d1fd.js} (99%) rename assets/js/{fb6dc457.0e2a9dd2.js => fb6dc457.e5f8375f.js} (99%) rename assets/js/{fb8d634e.089db480.js => fb8d634e.7413179b.js} (98%) rename assets/js/{fc733b73.0aab545f.js => fc733b73.1757ec18.js} (99%) delete mode 100644 assets/js/ff402cbc.5df141a7.js create mode 100644 assets/js/main.05c86a04.js rename assets/js/{main.cbeddd1f.js.LICENSE.txt => main.05c86a04.js.LICENSE.txt} (100%) delete mode 100644 assets/js/main.cbeddd1f.js create mode 100644 assets/js/runtime~main.bdbbda6d.js delete mode 100644 assets/js/runtime~main.d14fca4f.js delete mode 100644 docs/packaging/procedures/diff-to-pull-request/index.html delete mode 100644 docs/packaging/procedures/migrate-repos-to-github/index.html diff --git a/404.html b/404.html index b1bebe52e..e1133e3d9 100644 --- a/404.html +++ b/404.html @@ -4,13 +4,13 @@ Page Not Found | Solus Help Center - - + +
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

- - + + \ No newline at end of file diff --git a/assets/js/04b18502.932c2914.js b/assets/js/04b18502.932c2914.js new file mode 100644 index 000000000..0f1151281 --- /dev/null +++ b/assets/js/04b18502.932c2914.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[1942],{3905:(e,a,t)=>{t.d(a,{Zo:()=>g,kt:()=>d});var r=t(7294);function n(e,a,t){return a in e?Object.defineProperty(e,a,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[a]=t,e}function i(e,a){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);a&&(r=r.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),t.push.apply(t,r)}return t}function o(e){for(var a=1;a=0||(n[t]=e[t]);return n}(e,a);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(n[t]=e[t])}return n}var c=r.createContext({}),l=function(e){var a=r.useContext(c),t=a;return e&&(t="function"==typeof e?e(a):o(o({},a),e)),t},g=function(e){var a=l(e.components);return r.createElement(c.Provider,{value:a},e.children)},s="mdxType",u={inlineCode:"code",wrapper:function(e){var a=e.children;return r.createElement(r.Fragment,{},a)}},k=r.forwardRef((function(e,a){var t=e.components,n=e.mdxType,i=e.originalType,c=e.parentName,g=p(e,["components","mdxType","originalType","parentName"]),s=l(t),k=n,d=s["".concat(c,".").concat(k)]||s[k]||u[k]||i;return t?r.createElement(d,o(o({ref:a},g),{},{components:t})):r.createElement(d,o({ref:a},g))}));function d(e,a){var t=arguments,n=a&&a.mdxType;if("string"==typeof e||n){var i=t.length,o=new Array(i);o[0]=k;var p={};for(var c in a)hasOwnProperty.call(a,c)&&(p[c]=a[c]);p.originalType=e,p[s]="string"==typeof e?e:n,o[1]=p;for(var l=2;l{t.r(a),t.d(a,{assets:()=>c,contentTitle:()=>o,default:()=>u,frontMatter:()=>i,metadata:()=>p,toc:()=>l});var r=t(7462),n=(t(7294),t(3905));const i={title:"Packaging Overview",summary:"Steps for setting up a packaging environment and submitting packages",sidebar_position:0},o="Packaging Overview",p={unversionedId:"packaging/index",id:"packaging/index",title:"Packaging Overview",description:"This is the overall workflow for creating or updating a package.",source:"@site/docs/packaging/index.md",sourceDirName:"packaging",slug:"/packaging/",permalink:"/docs/packaging/",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/index.md",tags:[],version:"current",lastUpdatedAt:1695222528,formattedLastUpdatedAt:"Sep 20, 2023",sidebarPosition:0,frontMatter:{title:"Packaging Overview",summary:"Steps for setting up a packaging environment and submitting packages",sidebar_position:0},sidebar:"packagingSidebar",next:{title:"Prepare for Packaging",permalink:"/docs/packaging/prepare-for-packaging"}},c={},l=[{value:"Development Environment Preparation",id:"development-environment-preparation",level:2},{value:"Prior to Building a Package",id:"prior-to-building-a-package",level:2},{value:"Building Packages",id:"building-packages",level:2}],g={toc:l},s="wrapper";function u(e){let{components:a,...t}=e;return(0,n.kt)(s,(0,r.Z)({},g,t,{components:a,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"packaging-overview"},"Packaging Overview"),(0,n.kt)("p",null,"This is the overall workflow for creating or updating a package."),(0,n.kt)("h2",{id:"development-environment-preparation"},"Development Environment Preparation"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("a",{parentName:"li",href:"/docs/packaging/prepare-for-packaging"},"Prepare for Packaging")),(0,n.kt)("li",{parentName:"ol"},"Review the ",(0,n.kt)("a",{parentName:"li",href:"/docs/packaging/package.yml"},"requirements for the package.yml file"),"."),(0,n.kt)("li",{parentName:"ol"},"Also review our ",(0,n.kt)("a",{parentName:"li",href:"/docs/packaging/packaging-practices"},"Packaging Practices"),".")),(0,n.kt)("h2",{id:"prior-to-building-a-package"},"Prior to Building a Package"),(0,n.kt)("p",null,"Please check the following:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Search ",(0,n.kt)("a",{parentName:"li",href:"https://github.com/getsolus/packages/issues?q=label%3A%22Package+Request%22"},"open package requests")," to see if there is one for the package. If there isn't an existing issue, go ahead and submit your pull request. If there is already a pull request, please check its status to avoid duplicating work."),(0,n.kt)("li",{parentName:"ul"},"If you are submitting a pull request for the inclusion of software in the repo, the package has a corresponding package request that is ",(0,n.kt)("strong",{parentName:"li"},"accepted for inclusion")," or is a dependency of a package that has been accepted into the repository.")),(0,n.kt)("h2",{id:"building-packages"},"Building Packages"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("a",{parentName:"li",href:"/docs/packaging/update-dev-environment"},"Update your development environment")),(0,n.kt)("li",{parentName:"ol"},"Prepare the package directory and build the package")),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"For a new package that does not yet exist in the repos see ",(0,n.kt)("a",{parentName:"li",href:"/docs/packaging/creating-a-new-package"},"Creating a New Package")),(0,n.kt)("li",{parentName:"ul"},"For updating a package that already is in the repos see ",(0,n.kt)("a",{parentName:"li",href:"/docs/packaging/updating-an-existing-package"},"Updating an Existing Package"))),(0,n.kt)("ol",{start:3},(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("a",{parentName:"li",href:"/docs/packaging/testing-a-package"},"Test the Package")),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("a",{parentName:"li",href:"/docs/packaging/submitting-a-pull-request"},"Submit a Pull Request for Review"))))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/07a26486.9a623b21.js b/assets/js/07a26486.5704788a.js similarity index 99% rename from assets/js/07a26486.9a623b21.js rename to assets/js/07a26486.5704788a.js index 6eb9ca421..5c2b50105 100644 --- a/assets/js/07a26486.9a623b21.js +++ b/assets/js/07a26486.5704788a.js @@ -1 +1 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[9273],{3905:(e,a,t)=>{t.d(a,{Zo:()=>u,kt:()=>m});var o=t(7294);function n(e,a,t){return a in e?Object.defineProperty(e,a,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[a]=t,e}function r(e,a){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);a&&(o=o.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),t.push.apply(t,o)}return t}function l(e){for(var a=1;a=0||(n[t]=e[t]);return n}(e,a);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(n[t]=e[t])}return n}var p=o.createContext({}),i=function(e){var a=o.useContext(p),t=a;return e&&(t="function"==typeof e?e(a):l(l({},a),e)),t},u=function(e){var a=i(e.components);return o.createElement(p.Provider,{value:a},e.children)},c="mdxType",g={inlineCode:"code",wrapper:function(e){var a=e.children;return o.createElement(o.Fragment,{},a)}},d=o.forwardRef((function(e,a){var t=e.components,n=e.mdxType,r=e.originalType,p=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),c=i(t),d=n,m=c["".concat(p,".").concat(d)]||c[d]||g[d]||r;return t?o.createElement(m,l(l({ref:a},u),{},{components:t})):o.createElement(m,l({ref:a},u))}));function m(e,a){var t=arguments,n=a&&a.mdxType;if("string"==typeof e||n){var r=t.length,l=new Array(r);l[0]=d;var s={};for(var p in a)hasOwnProperty.call(a,p)&&(s[p]=a[p]);s.originalType=e,s[c]="string"==typeof e?e:n,l[1]=s;for(var i=2;i{t.r(a),t.d(a,{assets:()=>p,contentTitle:()=>l,default:()=>g,frontMatter:()=>r,metadata:()=>s,toc:()=>i});var o=t(7462),n=(t(7294),t(3905));const r={title:"eopkg",summary:"Quick intro to package management with eopkg",lastmod:null},l="eopkg",s={unversionedId:"user/quick-start/package-management/eopkg",id:"user/quick-start/package-management/eopkg",title:"eopkg",description:"Solus uses the eopkg package management system to deliver software to the end-user. It is actively developed by Solus, for Solus. We hope you enjoy the simplicity it offers for day-to-day use. For power users, there's plenty for you too!",source:"@site/docs/user/quick-start/package-management/eopkg.md",sourceDirName:"user/quick-start/package-management",slug:"/user/quick-start/package-management/eopkg",permalink:"/docs/user/quick-start/package-management/eopkg",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/quick-start/package-management/eopkg.md",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"eopkg",summary:"Quick intro to package management with eopkg",lastmod:null},sidebar:"userSidebar",previous:{title:"Software Center",permalink:"/docs/user/quick-start/package-management/"},next:{title:"Contributing",permalink:"/docs/category/contributing"}},p={},i=[{value:"Installing Software",id:"installing-software",level:2},{value:"Reinstalling Software",id:"reinstalling-software",level:2},{value:"Uninstalling Software",id:"uninstalling-software",level:2},{value:"Get Information on Software",id:"get-information-on-software",level:2},{value:"Updating",id:"updating",level:2},{value:"Searching",id:"searching",level:2},{value:"History and Rollback",id:"history-and-rollback",level:2},{value:"History",id:"history",level:3},{value:"Rollback",id:"rollback",level:3},{value:"Repository Management",id:"repository-management",level:2},{value:"Adding a Repository",id:"adding-a-repository",level:3},{value:"Removing a Repository",id:"removing-a-repository",level:3},{value:"Enabling a Repository",id:"enabling-a-repository",level:3},{value:"Disabling a Repository",id:"disabling-a-repository",level:3},{value:"Updating a Repository",id:"updating-a-repository",level:3},{value:"List repositories",id:"list-repositories",level:3}],u={toc:i},c="wrapper";function g(e){let{components:a,...t}=e;return(0,n.kt)(c,(0,o.Z)({},u,t,{components:a,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"eopkg"},"eopkg"),(0,n.kt)("p",null,"Solus uses the ",(0,n.kt)("inlineCode",{parentName:"p"},"eopkg")," package management system to deliver software to the end-user. It is actively developed by Solus, for Solus. We hope you enjoy the simplicity it offers for day-to-day use. For power users, there's plenty for you too!"),(0,n.kt)("h1",{id:"basics"},"Basics"),(0,n.kt)("h2",{id:"installing-software"},"Installing Software"),(0,n.kt)("p",null,"You can install one or more packages by using:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg install packagename\n")),(0,n.kt)("p",null,"For example:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg install gnome-documents gnome-music\n")),(0,n.kt)("h2",{id:"reinstalling-software"},"Reinstalling Software"),(0,n.kt)("p",null,"You can reinstall one or more packages by using:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg install --reinstall packagename\n")),(0,n.kt)("p",null,"For example:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg install --reinstall gnome-documents gnome-music\n")),(0,n.kt)("h2",{id:"uninstalling-software"},"Uninstalling Software"),(0,n.kt)("p",null,"You can uninstall one or more packages by using:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"sudo eopkg remove packagename\n")),(0,n.kt)("p",null,"For example:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg remove gnome-documents gnome-music\n")),(0,n.kt)("h2",{id:"get-information-on-software"},"Get Information on Software"),(0,n.kt)("p",null,"You can get information on software, such as its description, version, installation size, and more, by using"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg info packagename\n")),(0,n.kt)("p",null,"For example:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg info gnome-documents\n")),(0,n.kt)("h2",{id:"updating"},"Updating"),(0,n.kt)("p",null,"You can update your system by using:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg upgrade\n")),(0,n.kt)("p",null,"If you want to ",(0,n.kt)("strong",{parentName:"p"},"only")," update a specific piece of software on your system, you can specify is like below:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg upgrade firefox\n")),(0,n.kt)("h2",{id:"searching"},"Searching"),(0,n.kt)("p",null,"You can search the software selection Solus provides by using:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg search term\n")),(0,n.kt)("p",null,"For example:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg search documents\n")),(0,n.kt)("p",null,"Notice that you don't need to search for a specific software name, although you can do that. We search summaries and software names by default."),(0,n.kt)("h1",{id:"advanced"},"Advanced"),(0,n.kt)("h2",{id:"history-and-rollback"},"History and Rollback"),(0,n.kt)("p",null,"Solus provides a history and rollback feature via its package manager, eopkg. This feature allows you to see when your repository was last updated, actions such as installation, removal, and upgrading of software."),(0,n.kt)("p",null,"Our rollback feature allows you to essentially rewind your system's software back to a previous state, assuming you or our repository has the versions in question."),(0,n.kt)("h3",{id:"history"},"History"),(0,n.kt)("p",null,"You can see the history from eopkg by using:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg history\n")),(0,n.kt)("h3",{id:"rollback"},"Rollback"),(0,n.kt)("p",null,"To rollback your system, first use the above history command to check what the transaction / operation number was. Then, we use the following command:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg history -t number\n")),(0,n.kt)("p",null,"The number, in this case, is the operation before the one you want to change. So if the number was ",(0,n.kt)("inlineCode",{parentName:"p"},"100"),", then you would use ",(0,n.kt)("inlineCode",{parentName:"p"},"99"),"."),(0,n.kt)("h2",{id:"repository-management"},"Repository Management"),(0,n.kt)("p",null,"While Solus currently only provides two repositories, stable (shannon) and unstable, our package manager does support actively using multiple repositories on your system. This is useful if you are using a vendor-provided repository."),(0,n.kt)("h3",{id:"adding-a-repository"},"Adding a Repository"),(0,n.kt)("p",null,"You can add a repository by using:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg add-repo Name Url\n")),(0,n.kt)("p",null,"For example:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg add-repo Example https://example.com/repo/eopkg-index.xml.gz\n")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Note:")," This does not enable the repository."),(0,n.kt)("h3",{id:"removing-a-repository"},"Removing a Repository"),(0,n.kt)("p",null,"You can remove a repository by using:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg remove-repo Name\n")),(0,n.kt)("p",null,"For example:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg remove-repo Example\n")),(0,n.kt)("h3",{id:"enabling-a-repository"},"Enabling a Repository"),(0,n.kt)("p",null,"You can enable a repository for usage, by using:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg enable-repo Name\n")),(0,n.kt)("p",null,"For example:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg enable-repo Example\n")),(0,n.kt)("h3",{id:"disabling-a-repository"},"Disabling a Repository"),(0,n.kt)("p",null,"You can disable a repository by using:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg disable-repo Name\n")),(0,n.kt)("p",null,"For example:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg disable-repo Example\n")),(0,n.kt)("h3",{id:"updating-a-repository"},"Updating a Repository"),(0,n.kt)("p",null,"You can update the index of a repository by using:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg update-repo Name\n")),(0,n.kt)("p",null,"For example:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg update-repo Example\n")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Note:")," You can update all repository by ",(0,n.kt)("strong",{parentName:"p"},"not")," providing a name."),(0,n.kt)("h3",{id:"list-repositories"},"List repositories"),(0,n.kt)("p",null,"You can list all the repositories added on your system by using:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg list-repo\n")))}g.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[9273],{3905:(e,a,t)=>{t.d(a,{Zo:()=>u,kt:()=>m});var o=t(7294);function n(e,a,t){return a in e?Object.defineProperty(e,a,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[a]=t,e}function r(e,a){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);a&&(o=o.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),t.push.apply(t,o)}return t}function l(e){for(var a=1;a=0||(n[t]=e[t]);return n}(e,a);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(n[t]=e[t])}return n}var p=o.createContext({}),i=function(e){var a=o.useContext(p),t=a;return e&&(t="function"==typeof e?e(a):l(l({},a),e)),t},u=function(e){var a=i(e.components);return o.createElement(p.Provider,{value:a},e.children)},c="mdxType",g={inlineCode:"code",wrapper:function(e){var a=e.children;return o.createElement(o.Fragment,{},a)}},d=o.forwardRef((function(e,a){var t=e.components,n=e.mdxType,r=e.originalType,p=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),c=i(t),d=n,m=c["".concat(p,".").concat(d)]||c[d]||g[d]||r;return t?o.createElement(m,l(l({ref:a},u),{},{components:t})):o.createElement(m,l({ref:a},u))}));function m(e,a){var t=arguments,n=a&&a.mdxType;if("string"==typeof e||n){var r=t.length,l=new Array(r);l[0]=d;var s={};for(var p in a)hasOwnProperty.call(a,p)&&(s[p]=a[p]);s.originalType=e,s[c]="string"==typeof e?e:n,l[1]=s;for(var i=2;i{t.r(a),t.d(a,{assets:()=>p,contentTitle:()=>l,default:()=>g,frontMatter:()=>r,metadata:()=>s,toc:()=>i});var o=t(7462),n=(t(7294),t(3905));const r={title:"eopkg",summary:"Quick intro to package management with eopkg",lastmod:null},l="eopkg",s={unversionedId:"user/quick-start/package-management/eopkg",id:"user/quick-start/package-management/eopkg",title:"eopkg",description:"Solus uses the eopkg package management system to deliver software to the end-user. It is actively developed by Solus, for Solus. We hope you enjoy the simplicity it offers for day-to-day use. For power users, there's plenty for you too!",source:"@site/docs/user/quick-start/package-management/eopkg.md",sourceDirName:"user/quick-start/package-management",slug:"/user/quick-start/package-management/eopkg",permalink:"/docs/user/quick-start/package-management/eopkg",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/quick-start/package-management/eopkg.md",tags:[],version:"current",lastUpdatedAt:1695222528,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"eopkg",summary:"Quick intro to package management with eopkg",lastmod:null},sidebar:"userSidebar",previous:{title:"Software Center",permalink:"/docs/user/quick-start/package-management/"},next:{title:"Contributing",permalink:"/docs/category/contributing"}},p={},i=[{value:"Installing Software",id:"installing-software",level:2},{value:"Reinstalling Software",id:"reinstalling-software",level:2},{value:"Uninstalling Software",id:"uninstalling-software",level:2},{value:"Get Information on Software",id:"get-information-on-software",level:2},{value:"Updating",id:"updating",level:2},{value:"Searching",id:"searching",level:2},{value:"History and Rollback",id:"history-and-rollback",level:2},{value:"History",id:"history",level:3},{value:"Rollback",id:"rollback",level:3},{value:"Repository Management",id:"repository-management",level:2},{value:"Adding a Repository",id:"adding-a-repository",level:3},{value:"Removing a Repository",id:"removing-a-repository",level:3},{value:"Enabling a Repository",id:"enabling-a-repository",level:3},{value:"Disabling a Repository",id:"disabling-a-repository",level:3},{value:"Updating a Repository",id:"updating-a-repository",level:3},{value:"List repositories",id:"list-repositories",level:3}],u={toc:i},c="wrapper";function g(e){let{components:a,...t}=e;return(0,n.kt)(c,(0,o.Z)({},u,t,{components:a,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"eopkg"},"eopkg"),(0,n.kt)("p",null,"Solus uses the ",(0,n.kt)("inlineCode",{parentName:"p"},"eopkg")," package management system to deliver software to the end-user. It is actively developed by Solus, for Solus. We hope you enjoy the simplicity it offers for day-to-day use. For power users, there's plenty for you too!"),(0,n.kt)("h1",{id:"basics"},"Basics"),(0,n.kt)("h2",{id:"installing-software"},"Installing Software"),(0,n.kt)("p",null,"You can install one or more packages by using:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg install packagename\n")),(0,n.kt)("p",null,"For example:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg install gnome-documents gnome-music\n")),(0,n.kt)("h2",{id:"reinstalling-software"},"Reinstalling Software"),(0,n.kt)("p",null,"You can reinstall one or more packages by using:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg install --reinstall packagename\n")),(0,n.kt)("p",null,"For example:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg install --reinstall gnome-documents gnome-music\n")),(0,n.kt)("h2",{id:"uninstalling-software"},"Uninstalling Software"),(0,n.kt)("p",null,"You can uninstall one or more packages by using:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"sudo eopkg remove packagename\n")),(0,n.kt)("p",null,"For example:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg remove gnome-documents gnome-music\n")),(0,n.kt)("h2",{id:"get-information-on-software"},"Get Information on Software"),(0,n.kt)("p",null,"You can get information on software, such as its description, version, installation size, and more, by using"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg info packagename\n")),(0,n.kt)("p",null,"For example:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg info gnome-documents\n")),(0,n.kt)("h2",{id:"updating"},"Updating"),(0,n.kt)("p",null,"You can update your system by using:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg upgrade\n")),(0,n.kt)("p",null,"If you want to ",(0,n.kt)("strong",{parentName:"p"},"only")," update a specific piece of software on your system, you can specify is like below:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg upgrade firefox\n")),(0,n.kt)("h2",{id:"searching"},"Searching"),(0,n.kt)("p",null,"You can search the software selection Solus provides by using:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg search term\n")),(0,n.kt)("p",null,"For example:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg search documents\n")),(0,n.kt)("p",null,"Notice that you don't need to search for a specific software name, although you can do that. We search summaries and software names by default."),(0,n.kt)("h1",{id:"advanced"},"Advanced"),(0,n.kt)("h2",{id:"history-and-rollback"},"History and Rollback"),(0,n.kt)("p",null,"Solus provides a history and rollback feature via its package manager, eopkg. This feature allows you to see when your repository was last updated, actions such as installation, removal, and upgrading of software."),(0,n.kt)("p",null,"Our rollback feature allows you to essentially rewind your system's software back to a previous state, assuming you or our repository has the versions in question."),(0,n.kt)("h3",{id:"history"},"History"),(0,n.kt)("p",null,"You can see the history from eopkg by using:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg history\n")),(0,n.kt)("h3",{id:"rollback"},"Rollback"),(0,n.kt)("p",null,"To rollback your system, first use the above history command to check what the transaction / operation number was. Then, we use the following command:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg history -t number\n")),(0,n.kt)("p",null,"The number, in this case, is the operation before the one you want to change. So if the number was ",(0,n.kt)("inlineCode",{parentName:"p"},"100"),", then you would use ",(0,n.kt)("inlineCode",{parentName:"p"},"99"),"."),(0,n.kt)("h2",{id:"repository-management"},"Repository Management"),(0,n.kt)("p",null,"While Solus currently only provides two repositories, stable (shannon) and unstable, our package manager does support actively using multiple repositories on your system. This is useful if you are using a vendor-provided repository."),(0,n.kt)("h3",{id:"adding-a-repository"},"Adding a Repository"),(0,n.kt)("p",null,"You can add a repository by using:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg add-repo Name Url\n")),(0,n.kt)("p",null,"For example:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg add-repo Example https://example.com/repo/eopkg-index.xml.gz\n")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Note:")," This does not enable the repository."),(0,n.kt)("h3",{id:"removing-a-repository"},"Removing a Repository"),(0,n.kt)("p",null,"You can remove a repository by using:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg remove-repo Name\n")),(0,n.kt)("p",null,"For example:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg remove-repo Example\n")),(0,n.kt)("h3",{id:"enabling-a-repository"},"Enabling a Repository"),(0,n.kt)("p",null,"You can enable a repository for usage, by using:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg enable-repo Name\n")),(0,n.kt)("p",null,"For example:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg enable-repo Example\n")),(0,n.kt)("h3",{id:"disabling-a-repository"},"Disabling a Repository"),(0,n.kt)("p",null,"You can disable a repository by using:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg disable-repo Name\n")),(0,n.kt)("p",null,"For example:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg disable-repo Example\n")),(0,n.kt)("h3",{id:"updating-a-repository"},"Updating a Repository"),(0,n.kt)("p",null,"You can update the index of a repository by using:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg update-repo Name\n")),(0,n.kt)("p",null,"For example:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg update-repo Example\n")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Note:")," You can update all repository by ",(0,n.kt)("strong",{parentName:"p"},"not")," providing a name."),(0,n.kt)("h3",{id:"list-repositories"},"List repositories"),(0,n.kt)("p",null,"You can list all the repositories added on your system by using:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg list-repo\n")))}g.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/09dbd43b.388ca3cc.js b/assets/js/09dbd43b.b36d86ee.js similarity index 99% rename from assets/js/09dbd43b.388ca3cc.js rename to assets/js/09dbd43b.b36d86ee.js index 4442a63a2..a2fcc8db1 100644 --- a/assets/js/09dbd43b.388ca3cc.js +++ b/assets/js/09dbd43b.b36d86ee.js @@ -1 +1 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[9397],{3905:(e,t,o)=>{o.d(t,{Zo:()=>p,kt:()=>h});var n=o(7294);function r(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function i(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,n)}return o}function s(e){for(var t=1;t=0||(r[o]=e[o]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(r[o]=e[o])}return r}var l=n.createContext({}),u=function(e){var t=n.useContext(l),o=t;return e&&(o="function"==typeof e?e(t):s(s({},t),e)),o},p=function(e){var t=u(e.components);return n.createElement(l.Provider,{value:t},e.children)},d="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},c=n.forwardRef((function(e,t){var o=e.components,r=e.mdxType,i=e.originalType,l=e.parentName,p=a(e,["components","mdxType","originalType","parentName"]),d=u(o),c=r,h=d["".concat(l,".").concat(c)]||d[c]||m[c]||i;return o?n.createElement(h,s(s({ref:t},p),{},{components:o})):n.createElement(h,s({ref:t},p))}));function h(e,t){var o=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var i=o.length,s=new Array(i);s[0]=c;var a={};for(var l in t)hasOwnProperty.call(t,l)&&(a[l]=t[l]);a.originalType=e,a[d]="string"==typeof e?e:r,s[1]=a;for(var u=2;u{o.r(t),o.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>m,frontMatter:()=>i,metadata:()=>a,toc:()=>u});var n=o(7462),r=(o(7294),o(3905));const i={title:"Boot Rescue",summary:"Troubleshooting the boot process for Solus"},s="Boot Rescue",a={unversionedId:"user/troubleshooting/boot-rescue",id:"user/troubleshooting/boot-rescue",title:"Boot Rescue",description:"In this document, we will walk through restoring the ability to boot Solus.",source:"@site/docs/user/troubleshooting/boot-rescue.md",sourceDirName:"user/troubleshooting",slug:"/user/troubleshooting/boot-rescue",permalink:"/docs/user/troubleshooting/boot-rescue",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/troubleshooting/boot-rescue.md",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Boot Rescue",summary:"Troubleshooting the boot process for Solus"},sidebar:"userSidebar",previous:{title:"Troubleshooting",permalink:"/docs/user/troubleshooting/"},next:{title:"Installation Issues",permalink:"/docs/user/troubleshooting/installation"}},l={},u=[{value:"Multi-Booting",id:"multi-booting",level:2},{value:"An entry is present in /etc/fstab that is not present at boot time",id:"an-entry-is-present-in-etcfstab-that-is-not-present-at-boot-time",level:2},{value:"Incorrectly Applied Updates / Disk Changes",id:"incorrectly-applied-updates--disk-changes",level:2},{value:"Mounting your system",id:"mounting-your-system",level:3},{value:"Encrypted Systems / LVM Systems",id:"encrypted-systems--lvm-systems",level:4},{value:"UEFI",id:"uefi",level:4},{value:"Other partitions",id:"other-partitions",level:4},{value:"Chrooting to your Solus system",id:"chrooting-to-your-solus-system",level:3},{value:"Networking",id:"networking",level:3},{value:"Repairing Packages",id:"repairing-packages",level:3},{value:"Correcting disks",id:"correcting-disks",level:3},{value:"Re-run System-Wide Configuration Triggers",id:"re-run-system-wide-configuration-triggers",level:3},{value:"Unmounting your system",id:"unmounting-your-system",level:3}],p={toc:u},d="wrapper";function m(e){let{components:t,...o}=e;return(0,r.kt)(d,(0,n.Z)({},p,o,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"boot-rescue"},"Boot Rescue"),(0,r.kt)("p",null,"In this document, we will walk through restoring the ability to boot Solus."),(0,r.kt)("p",null,"The inability to boot Solus can be attributed to various issues, such as:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},'Multi-booting with an other operating system that "owns" GRUB and fails to show Solus after an upgrade of Solus is performed.'),(0,r.kt)("li",{parentName:"ul"},'Upgrades, such as to the kernel, that may not have applied correctly. In which case this could affect "legacy boot" (non-UEFI) or UEFI systems.'),(0,r.kt)("li",{parentName:"ul"},"If a disk is added, removed or had its UUID / mount point change.")),(0,r.kt)("p",null,'NOTE: Most examples below use sdX as the drive name. If your system has nvme drives, substitute the appropriate name, for example "nvme0n1".'),(0,r.kt)("h2",{id:"multi-booting"},"Multi-Booting"),(0,r.kt)("p",null,'Multi-booting is when you have multiple operating systems on the same device. Also referred to as "dual-booting" when only having two operating systems on the same device.'),(0,r.kt)("p",null,'The inability to access Solus in a multi-boot scenario typically applies to "legacy boot" (non-UEFI), where the other operating system owns GRUB, which is used booting itself and Solus. This can be resolved by accessing the other operating system and running ',(0,r.kt)("inlineCode",{parentName:"p"},"sudo update-grub"),"."),(0,r.kt)("h2",{id:"an-entry-is-present-in-etcfstab-that-is-not-present-at-boot-time"},"An entry is present in /etc/fstab that is not present at boot time"),(0,r.kt)("p",null,'If you get to an emergency prompt when the system tries to boot, check /etc/fstab. Look for any entries that might refer to disks not present at boot, such as a USB drive or nfs mount. Try adding "noauto" and rebooting. A USB drive entry might look like:'),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"UUID=XXXXXX /mnt/mydisk exfat noauto,uid=1000,gid=1000,umask=0022 0 0\n")),(0,r.kt)("h2",{id:"incorrectly-applied-updates--disk-changes"},"Incorrectly Applied Updates / Disk Changes"),(0,r.kt)("p",null,"In the case that updates have not been applied correctly by the system, the updates were interrupted, or the disks have changed, it may be possible to boot rescue the Solus system. To do so, you will need:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"A Live ISO of Solus booted on your system"),(0,r.kt)("li",{parentName:"ol"},"A terminal in that Live ISO opened")),(0,r.kt)("h3",{id:"mounting-your-system"},"Mounting your system"),(0,r.kt)("p",null,"Whether you're using GRUB or UEFI, you will need to mount your Solus root (",(0,r.kt)("inlineCode",{parentName:"p"},"/"),") partition as the first step of performing a boot rescue. This is typically your primary partition, formatted as the filesystem type ",(0,r.kt)("inlineCode",{parentName:"p"},"ext4"),"."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"First we need to be the root user. Type: ",(0,r.kt)("inlineCode",{parentName:"li"},"sudo su")),(0,r.kt)("li",{parentName:"ol"},"Next we make a directory where we will mount our local Solus system: ",(0,r.kt)("inlineCode",{parentName:"li"},"mkdir /target")),(0,r.kt)("li",{parentName:"ol"},"Now, using ",(0,r.kt)("inlineCode",{parentName:"li"},"lsblk"),", determine the partition of the Solus system. We recommend checking the size of the partition listed and if it matches the size of your Solus install, use that. It will likely be something along the lines of ",(0,r.kt)("inlineCode",{parentName:"li"},"sda#")," or ",(0,r.kt)("inlineCode",{parentName:"li"},"sdb#"),". For NVME drives, the name will look like ",(0,r.kt)("inlineCode",{parentName:"li"},"nvme0n1px"),'\nNote: If you see "lvm" as the type, the system has LVM partitions. See the next section for how to mount them.'),(0,r.kt)("li",{parentName:"ol"},'If your root partition is of type sdX / nvme0n1x, replace the "sdX#" in the following command with the partition and mount to the target directory we created: ',(0,r.kt)("inlineCode",{parentName:"li"},"mount /dev/sdX# /target"))),(0,r.kt)("h4",{id:"encrypted-systems--lvm-systems"},"Encrypted Systems / LVM Systems"),(0,r.kt)("p",null,"If you use LVM volumes on your system, the process for mounting the system is a little different.\nIf you use LUKS-based encryption, the process will involve decrypting your LUKS partition before mounting it to the correct location. To do this, note the sda / sdb device from the prior steps and follow the steps below:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"If the disk is encrypted, decrypt it by running ",(0,r.kt)("inlineCode",{parentName:"li"},"cryptsetup luksOpen /dev/sdX# decrypted"),", replacing ",(0,r.kt)("inlineCode",{parentName:"li"},"X#")," with the partition you identified, and enter your password when prompted."),(0,r.kt)("li",{parentName:"ol"},"Next check the output of ",(0,r.kt)("inlineCode",{parentName:"li"},"lsblk"),". This will show you any LVM volumes. You should now see ",(0,r.kt)("inlineCode",{parentName:"li"},"SolusSystem-Swap")," and ",(0,r.kt)("inlineCode",{parentName:"li"},"SolusSystem-Root"),".\nFor non-encrypted volumes, you may see something like this. In this example, ",(0,r.kt)("inlineCode",{parentName:"li"},"SolusSystem-Swap")," and ",(0,r.kt)("inlineCode",{parentName:"li"},"SolusSystem-Root"),' are under "sda2":')),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT\nloop0 7:0 0 1.3G 1 loop /run/initramfs/squashfs\nloop1 7:1 0 6.2G 1 loop /run/rootfsbase\nsr0 11:0 1 2.7G 0 rom /run/initramfs/live\nzram0 251:0 0 7.8G 0 disk [SWAP]\nsda 252:0 0 96G 0 disk\n\u251c\u2500sda1 252:1 0 287M 0 part\n\u2514\u2500sda2 252:2 0 69.7G 0 part\n \u251c\u2500SolusSystem-Swap 253:0 0 3.7G 0 lvm\n \u2514\u2500SolusSystem-Root 253:1 0 46G 0 lvm\n...\n")),(0,r.kt)("p",null," For decrypted volumes, the output should look similar to this, with ",(0,r.kt)("inlineCode",{parentName:"p"},"SolusSystem-Swap")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"SolusSystem-Root"),' being under "decrypted":'),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT\nloop0 7:0 0 1.3G 1 loop /run/initramfs/squashfs\nloop1 7:1 0 6.2G 1 loop /run/rootfsbase\nloop2 7:2 0 6.2G 1 loop\n\u2514\u2500live-base 253:0 0 6.2G 1 dm\nsda 8:0 0 238.5G 0 disk\n\u251c\u2500sda1 8:1 0 488.3M 0 part\n\u2514\u2500sda2 8:2 0 238G 0 part\n \u2514\u2500decrypted 253:1 0 238G 0 crypt\n \u251c\u2500SolusSystem-Swap 253:2 0 3.7G 0 lvm\n \u2514\u2500SolusSystem-Root 253:3 0 234.3G 0 lvm\nsdb 8:16 1 7.3G 0 disk\n\u251c\u2500sdb1 8:17 1 1.4G 0 part /run/initramfs/live\n\u2514\u2500sdb2 8:18 1 40M 0 part\n")),(0,r.kt)("ol",{start:3},(0,r.kt)("li",{parentName:"ol"},"Mount ",(0,r.kt)("inlineCode",{parentName:"li"},"SolusSystem-Root")," by running ",(0,r.kt)("inlineCode",{parentName:"li"},"mount /dev/mapper/SolusSystem-Root /target"))),(0,r.kt)("h4",{id:"uefi"},"UEFI"),(0,r.kt)("p",null,"If your system uses UEFI as opposed to GRUB, you will also need to mount your EFI System Partition, otherwise referred to as ESP. If you followed our ",(0,r.kt)("a",{parentName:"p",href:"/docs/user/quick-start/installation/disks#uefi"},"UEFI guide")," during installation of Solus, then in all likelihood your ESP will be about 500mb in size. If you're unsure of the partition, run the following, replacing X with the same letter during your mounting of your root file system, minus the number:"),(0,r.kt)("p",null,"For HDD / SDD drives:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"fdisk -o Device,Size,Type -l /dev/sdX\n")),(0,r.kt)("p",null,"For nvme drives:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"fdisk -o Device,Size,Type -l /dev/nvme0nX\n")),(0,r.kt)("p",null,"Your output may look something similar to:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"Device Size Type\n/dev/sda1 512M EFI System\n/dev/sda2 111.3G Linux filesystem\n")),(0,r.kt)("p",null,"Notice we have ",(0,r.kt)("inlineCode",{parentName:"p"},"/dev/sda1")," as the Device with the ",(0,r.kt)("inlineCode",{parentName:"p"},"EFI System")," type and roughly 500mb in size. This is the partition we will be mounting."),(0,r.kt)("p",null,"With our ESP device known, let's go ahead and mount it, replacing ",(0,r.kt)("inlineCode",{parentName:"p"},"sdX#")," in the case below with our partition."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"mount /dev/sdX# /target/boot\n")),(0,r.kt)("h4",{id:"other-partitions"},"Other partitions"),(0,r.kt)("p",null,"If your system has other specific partitions, such as a separate /home partition, they will also need to be mounted."),(0,r.kt)("h3",{id:"chrooting-to-your-solus-system"},"Chrooting to your Solus system"),(0,r.kt)("p",null,"To access your system and perform boot rescue, you will need to mount specific directories from the host system (in this case, our Live ISO), to our Solus system, and then chroot (change root) to the Solus system."),(0,r.kt)("p",null,"First run the following commands:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"mount --types proc /proc /target/proc\nmount --rbind /dev /target/dev\nmount --rbind /sys /target/sys\nmount --make-rslave /target/dev\nmount --make-rslave /target/sys\n")),(0,r.kt)("p",null,"Assuming all goes well, you should now be able to chroot into your Solus system by doing ",(0,r.kt)("inlineCode",{parentName:"p"},"chroot /target"),"."),(0,r.kt)("h3",{id:"networking"},"Networking"),(0,r.kt)("p",null,"To validate a working network connection (assuming a network connection is available in your live image), you can run ",(0,r.kt)("inlineCode",{parentName:"p"},"ping google.com")," in the chrooted environment. If you get responses from ",(0,r.kt)("inlineCode",{parentName:"p"},"google.com"),", you have a successful connection to the Internet. If you do not, try the following:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Exit the chroot by typing ",(0,r.kt)("inlineCode",{parentName:"li"},"exit")),(0,r.kt)("li",{parentName:"ol"},"Run ",(0,r.kt)("inlineCode",{parentName:"li"},"cp /etc/resolv.conf /target/etc/")),(0,r.kt)("li",{parentName:"ol"},"Chroot back into ",(0,r.kt)("inlineCode",{parentName:"li"},"/target")," by running ",(0,r.kt)("inlineCode",{parentName:"li"},"chroot /target")," again."),(0,r.kt)("li",{parentName:"ol"},"Retry networking.")),(0,r.kt)("h3",{id:"repairing-packages"},"Repairing Packages"),(0,r.kt)("p",null,"In the event you had an incomplete upgrade, try the following commands:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"sudo eopkg rebuild-db")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"sudo eopkg up")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"sudo eopkg check | grep Broken | awk '{print $4}' | xargs sudo eopkg it --reinstall"),'\nIf you see output that starts with "Usage", this means the system has no broken packages.'),(0,r.kt)("li",{parentName:"ol"},'Try reverting the latest package transaction (this should only be done if the first two steps, followed by the "Re-run System-Wide Configuration Triggers", failed to produce a successful bootup). See ',(0,r.kt)("a",{parentName:"li",href:"/docs/user/package-management/history-and-rollback"},"our documentation on history and rollback")," for more information, followed by re-applying your updates by running ",(0,r.kt)("inlineCode",{parentName:"li"},"sudo eopkg up"),".")),(0,r.kt)("h3",{id:"correcting-disks"},"Correcting disks"),(0,r.kt)("p",null,"In the event that disk changes had caused the system to fail to boot, try the following in the chroot environment:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Get the UUIDs of your partitions the system expects from ",(0,r.kt)("inlineCode",{parentName:"li"},"/etc/fstab"),"."),(0,r.kt)("li",{parentName:"ol"},"Compare this to the output of ",(0,r.kt)("inlineCode",{parentName:"li"},"ls -lah /dev/disk/by-uuid"))),(0,r.kt)("h3",{id:"re-run-system-wide-configuration-triggers"},"Re-run System-Wide Configuration Triggers"),(0,r.kt)("p",null,"In the chroot environment, run the following command which will perform various configuration triggers to update your icon cache, update GRUB and EFI configuration, re-compile settings, and more."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"sudo usysconf run -f\n")),(0,r.kt)("p",null,"After this, you should exit your chroot with ",(0,r.kt)("inlineCode",{parentName:"p"},"exit")," then reboot your system. In the event you are still unable to access Solus, please ",(0,r.kt)("a",{parentName:"p",href:"/docs/user/contributing/getting-involved"},"contact us"),"."),(0,r.kt)("h3",{id:"unmounting-your-system"},"Unmounting your system"),(0,r.kt)("p",null,"In case further partition modifications are required, there's a series of steps that must be followed."),(0,r.kt)("p",null,"If you are still chrooted you have to exit the chroot environment by pressing ",(0,r.kt)("inlineCode",{parentName:"p"},"Ctrl")," + ",(0,r.kt)("inlineCode",{parentName:"p"},"D"),"."),(0,r.kt)("p",null,"Then proceed with unmounting the filesystem."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"umount -R /target\n")),(0,r.kt)("p",null,"In case of having a LUKS-based encryption you'll have to deactivate your logical volumes plus volume groups and then close your LUKS partition."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"lvchange -a n /dev/SolusSystem/Swap # `-a n` means `active: no`\nlvchange -a n /dev/SolusSystem/Root\nvgchange -a n SolusSystem\ncryptsetup luksClose decrypted\n")))}m.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[9397],{3905:(e,t,o)=>{o.d(t,{Zo:()=>p,kt:()=>h});var n=o(7294);function r(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function i(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,n)}return o}function s(e){for(var t=1;t=0||(r[o]=e[o]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(r[o]=e[o])}return r}var l=n.createContext({}),u=function(e){var t=n.useContext(l),o=t;return e&&(o="function"==typeof e?e(t):s(s({},t),e)),o},p=function(e){var t=u(e.components);return n.createElement(l.Provider,{value:t},e.children)},d="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},c=n.forwardRef((function(e,t){var o=e.components,r=e.mdxType,i=e.originalType,l=e.parentName,p=a(e,["components","mdxType","originalType","parentName"]),d=u(o),c=r,h=d["".concat(l,".").concat(c)]||d[c]||m[c]||i;return o?n.createElement(h,s(s({ref:t},p),{},{components:o})):n.createElement(h,s({ref:t},p))}));function h(e,t){var o=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var i=o.length,s=new Array(i);s[0]=c;var a={};for(var l in t)hasOwnProperty.call(t,l)&&(a[l]=t[l]);a.originalType=e,a[d]="string"==typeof e?e:r,s[1]=a;for(var u=2;u{o.r(t),o.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>m,frontMatter:()=>i,metadata:()=>a,toc:()=>u});var n=o(7462),r=(o(7294),o(3905));const i={title:"Boot Rescue",summary:"Troubleshooting the boot process for Solus"},s="Boot Rescue",a={unversionedId:"user/troubleshooting/boot-rescue",id:"user/troubleshooting/boot-rescue",title:"Boot Rescue",description:"In this document, we will walk through restoring the ability to boot Solus.",source:"@site/docs/user/troubleshooting/boot-rescue.md",sourceDirName:"user/troubleshooting",slug:"/user/troubleshooting/boot-rescue",permalink:"/docs/user/troubleshooting/boot-rescue",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/troubleshooting/boot-rescue.md",tags:[],version:"current",lastUpdatedAt:1695222528,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Boot Rescue",summary:"Troubleshooting the boot process for Solus"},sidebar:"userSidebar",previous:{title:"Troubleshooting",permalink:"/docs/user/troubleshooting/"},next:{title:"Installation Issues",permalink:"/docs/user/troubleshooting/installation"}},l={},u=[{value:"Multi-Booting",id:"multi-booting",level:2},{value:"An entry is present in /etc/fstab that is not present at boot time",id:"an-entry-is-present-in-etcfstab-that-is-not-present-at-boot-time",level:2},{value:"Incorrectly Applied Updates / Disk Changes",id:"incorrectly-applied-updates--disk-changes",level:2},{value:"Mounting your system",id:"mounting-your-system",level:3},{value:"Encrypted Systems / LVM Systems",id:"encrypted-systems--lvm-systems",level:4},{value:"UEFI",id:"uefi",level:4},{value:"Other partitions",id:"other-partitions",level:4},{value:"Chrooting to your Solus system",id:"chrooting-to-your-solus-system",level:3},{value:"Networking",id:"networking",level:3},{value:"Repairing Packages",id:"repairing-packages",level:3},{value:"Correcting disks",id:"correcting-disks",level:3},{value:"Re-run System-Wide Configuration Triggers",id:"re-run-system-wide-configuration-triggers",level:3},{value:"Unmounting your system",id:"unmounting-your-system",level:3}],p={toc:u},d="wrapper";function m(e){let{components:t,...o}=e;return(0,r.kt)(d,(0,n.Z)({},p,o,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"boot-rescue"},"Boot Rescue"),(0,r.kt)("p",null,"In this document, we will walk through restoring the ability to boot Solus."),(0,r.kt)("p",null,"The inability to boot Solus can be attributed to various issues, such as:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},'Multi-booting with an other operating system that "owns" GRUB and fails to show Solus after an upgrade of Solus is performed.'),(0,r.kt)("li",{parentName:"ul"},'Upgrades, such as to the kernel, that may not have applied correctly. In which case this could affect "legacy boot" (non-UEFI) or UEFI systems.'),(0,r.kt)("li",{parentName:"ul"},"If a disk is added, removed or had its UUID / mount point change.")),(0,r.kt)("p",null,'NOTE: Most examples below use sdX as the drive name. If your system has nvme drives, substitute the appropriate name, for example "nvme0n1".'),(0,r.kt)("h2",{id:"multi-booting"},"Multi-Booting"),(0,r.kt)("p",null,'Multi-booting is when you have multiple operating systems on the same device. Also referred to as "dual-booting" when only having two operating systems on the same device.'),(0,r.kt)("p",null,'The inability to access Solus in a multi-boot scenario typically applies to "legacy boot" (non-UEFI), where the other operating system owns GRUB, which is used booting itself and Solus. This can be resolved by accessing the other operating system and running ',(0,r.kt)("inlineCode",{parentName:"p"},"sudo update-grub"),"."),(0,r.kt)("h2",{id:"an-entry-is-present-in-etcfstab-that-is-not-present-at-boot-time"},"An entry is present in /etc/fstab that is not present at boot time"),(0,r.kt)("p",null,'If you get to an emergency prompt when the system tries to boot, check /etc/fstab. Look for any entries that might refer to disks not present at boot, such as a USB drive or nfs mount. Try adding "noauto" and rebooting. A USB drive entry might look like:'),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"UUID=XXXXXX /mnt/mydisk exfat noauto,uid=1000,gid=1000,umask=0022 0 0\n")),(0,r.kt)("h2",{id:"incorrectly-applied-updates--disk-changes"},"Incorrectly Applied Updates / Disk Changes"),(0,r.kt)("p",null,"In the case that updates have not been applied correctly by the system, the updates were interrupted, or the disks have changed, it may be possible to boot rescue the Solus system. To do so, you will need:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"A Live ISO of Solus booted on your system"),(0,r.kt)("li",{parentName:"ol"},"A terminal in that Live ISO opened")),(0,r.kt)("h3",{id:"mounting-your-system"},"Mounting your system"),(0,r.kt)("p",null,"Whether you're using GRUB or UEFI, you will need to mount your Solus root (",(0,r.kt)("inlineCode",{parentName:"p"},"/"),") partition as the first step of performing a boot rescue. This is typically your primary partition, formatted as the filesystem type ",(0,r.kt)("inlineCode",{parentName:"p"},"ext4"),"."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"First we need to be the root user. Type: ",(0,r.kt)("inlineCode",{parentName:"li"},"sudo su")),(0,r.kt)("li",{parentName:"ol"},"Next we make a directory where we will mount our local Solus system: ",(0,r.kt)("inlineCode",{parentName:"li"},"mkdir /target")),(0,r.kt)("li",{parentName:"ol"},"Now, using ",(0,r.kt)("inlineCode",{parentName:"li"},"lsblk"),", determine the partition of the Solus system. We recommend checking the size of the partition listed and if it matches the size of your Solus install, use that. It will likely be something along the lines of ",(0,r.kt)("inlineCode",{parentName:"li"},"sda#")," or ",(0,r.kt)("inlineCode",{parentName:"li"},"sdb#"),". For NVME drives, the name will look like ",(0,r.kt)("inlineCode",{parentName:"li"},"nvme0n1px"),'\nNote: If you see "lvm" as the type, the system has LVM partitions. See the next section for how to mount them.'),(0,r.kt)("li",{parentName:"ol"},'If your root partition is of type sdX / nvme0n1x, replace the "sdX#" in the following command with the partition and mount to the target directory we created: ',(0,r.kt)("inlineCode",{parentName:"li"},"mount /dev/sdX# /target"))),(0,r.kt)("h4",{id:"encrypted-systems--lvm-systems"},"Encrypted Systems / LVM Systems"),(0,r.kt)("p",null,"If you use LVM volumes on your system, the process for mounting the system is a little different.\nIf you use LUKS-based encryption, the process will involve decrypting your LUKS partition before mounting it to the correct location. To do this, note the sda / sdb device from the prior steps and follow the steps below:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"If the disk is encrypted, decrypt it by running ",(0,r.kt)("inlineCode",{parentName:"li"},"cryptsetup luksOpen /dev/sdX# decrypted"),", replacing ",(0,r.kt)("inlineCode",{parentName:"li"},"X#")," with the partition you identified, and enter your password when prompted."),(0,r.kt)("li",{parentName:"ol"},"Next check the output of ",(0,r.kt)("inlineCode",{parentName:"li"},"lsblk"),". This will show you any LVM volumes. You should now see ",(0,r.kt)("inlineCode",{parentName:"li"},"SolusSystem-Swap")," and ",(0,r.kt)("inlineCode",{parentName:"li"},"SolusSystem-Root"),".\nFor non-encrypted volumes, you may see something like this. In this example, ",(0,r.kt)("inlineCode",{parentName:"li"},"SolusSystem-Swap")," and ",(0,r.kt)("inlineCode",{parentName:"li"},"SolusSystem-Root"),' are under "sda2":')),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT\nloop0 7:0 0 1.3G 1 loop /run/initramfs/squashfs\nloop1 7:1 0 6.2G 1 loop /run/rootfsbase\nsr0 11:0 1 2.7G 0 rom /run/initramfs/live\nzram0 251:0 0 7.8G 0 disk [SWAP]\nsda 252:0 0 96G 0 disk\n\u251c\u2500sda1 252:1 0 287M 0 part\n\u2514\u2500sda2 252:2 0 69.7G 0 part\n \u251c\u2500SolusSystem-Swap 253:0 0 3.7G 0 lvm\n \u2514\u2500SolusSystem-Root 253:1 0 46G 0 lvm\n...\n")),(0,r.kt)("p",null," For decrypted volumes, the output should look similar to this, with ",(0,r.kt)("inlineCode",{parentName:"p"},"SolusSystem-Swap")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"SolusSystem-Root"),' being under "decrypted":'),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT\nloop0 7:0 0 1.3G 1 loop /run/initramfs/squashfs\nloop1 7:1 0 6.2G 1 loop /run/rootfsbase\nloop2 7:2 0 6.2G 1 loop\n\u2514\u2500live-base 253:0 0 6.2G 1 dm\nsda 8:0 0 238.5G 0 disk\n\u251c\u2500sda1 8:1 0 488.3M 0 part\n\u2514\u2500sda2 8:2 0 238G 0 part\n \u2514\u2500decrypted 253:1 0 238G 0 crypt\n \u251c\u2500SolusSystem-Swap 253:2 0 3.7G 0 lvm\n \u2514\u2500SolusSystem-Root 253:3 0 234.3G 0 lvm\nsdb 8:16 1 7.3G 0 disk\n\u251c\u2500sdb1 8:17 1 1.4G 0 part /run/initramfs/live\n\u2514\u2500sdb2 8:18 1 40M 0 part\n")),(0,r.kt)("ol",{start:3},(0,r.kt)("li",{parentName:"ol"},"Mount ",(0,r.kt)("inlineCode",{parentName:"li"},"SolusSystem-Root")," by running ",(0,r.kt)("inlineCode",{parentName:"li"},"mount /dev/mapper/SolusSystem-Root /target"))),(0,r.kt)("h4",{id:"uefi"},"UEFI"),(0,r.kt)("p",null,"If your system uses UEFI as opposed to GRUB, you will also need to mount your EFI System Partition, otherwise referred to as ESP. If you followed our ",(0,r.kt)("a",{parentName:"p",href:"/docs/user/quick-start/installation/disks#uefi"},"UEFI guide")," during installation of Solus, then in all likelihood your ESP will be about 500mb in size. If you're unsure of the partition, run the following, replacing X with the same letter during your mounting of your root file system, minus the number:"),(0,r.kt)("p",null,"For HDD / SDD drives:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"fdisk -o Device,Size,Type -l /dev/sdX\n")),(0,r.kt)("p",null,"For nvme drives:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"fdisk -o Device,Size,Type -l /dev/nvme0nX\n")),(0,r.kt)("p",null,"Your output may look something similar to:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"Device Size Type\n/dev/sda1 512M EFI System\n/dev/sda2 111.3G Linux filesystem\n")),(0,r.kt)("p",null,"Notice we have ",(0,r.kt)("inlineCode",{parentName:"p"},"/dev/sda1")," as the Device with the ",(0,r.kt)("inlineCode",{parentName:"p"},"EFI System")," type and roughly 500mb in size. This is the partition we will be mounting."),(0,r.kt)("p",null,"With our ESP device known, let's go ahead and mount it, replacing ",(0,r.kt)("inlineCode",{parentName:"p"},"sdX#")," in the case below with our partition."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"mount /dev/sdX# /target/boot\n")),(0,r.kt)("h4",{id:"other-partitions"},"Other partitions"),(0,r.kt)("p",null,"If your system has other specific partitions, such as a separate /home partition, they will also need to be mounted."),(0,r.kt)("h3",{id:"chrooting-to-your-solus-system"},"Chrooting to your Solus system"),(0,r.kt)("p",null,"To access your system and perform boot rescue, you will need to mount specific directories from the host system (in this case, our Live ISO), to our Solus system, and then chroot (change root) to the Solus system."),(0,r.kt)("p",null,"First run the following commands:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"mount --types proc /proc /target/proc\nmount --rbind /dev /target/dev\nmount --rbind /sys /target/sys\nmount --make-rslave /target/dev\nmount --make-rslave /target/sys\n")),(0,r.kt)("p",null,"Assuming all goes well, you should now be able to chroot into your Solus system by doing ",(0,r.kt)("inlineCode",{parentName:"p"},"chroot /target"),"."),(0,r.kt)("h3",{id:"networking"},"Networking"),(0,r.kt)("p",null,"To validate a working network connection (assuming a network connection is available in your live image), you can run ",(0,r.kt)("inlineCode",{parentName:"p"},"ping google.com")," in the chrooted environment. If you get responses from ",(0,r.kt)("inlineCode",{parentName:"p"},"google.com"),", you have a successful connection to the Internet. If you do not, try the following:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Exit the chroot by typing ",(0,r.kt)("inlineCode",{parentName:"li"},"exit")),(0,r.kt)("li",{parentName:"ol"},"Run ",(0,r.kt)("inlineCode",{parentName:"li"},"cp /etc/resolv.conf /target/etc/")),(0,r.kt)("li",{parentName:"ol"},"Chroot back into ",(0,r.kt)("inlineCode",{parentName:"li"},"/target")," by running ",(0,r.kt)("inlineCode",{parentName:"li"},"chroot /target")," again."),(0,r.kt)("li",{parentName:"ol"},"Retry networking.")),(0,r.kt)("h3",{id:"repairing-packages"},"Repairing Packages"),(0,r.kt)("p",null,"In the event you had an incomplete upgrade, try the following commands:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"sudo eopkg rebuild-db")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"sudo eopkg up")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("inlineCode",{parentName:"li"},"sudo eopkg check | grep Broken | awk '{print $4}' | xargs sudo eopkg it --reinstall"),'\nIf you see output that starts with "Usage", this means the system has no broken packages.'),(0,r.kt)("li",{parentName:"ol"},'Try reverting the latest package transaction (this should only be done if the first two steps, followed by the "Re-run System-Wide Configuration Triggers", failed to produce a successful bootup). See ',(0,r.kt)("a",{parentName:"li",href:"/docs/user/package-management/history-and-rollback"},"our documentation on history and rollback")," for more information, followed by re-applying your updates by running ",(0,r.kt)("inlineCode",{parentName:"li"},"sudo eopkg up"),".")),(0,r.kt)("h3",{id:"correcting-disks"},"Correcting disks"),(0,r.kt)("p",null,"In the event that disk changes had caused the system to fail to boot, try the following in the chroot environment:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Get the UUIDs of your partitions the system expects from ",(0,r.kt)("inlineCode",{parentName:"li"},"/etc/fstab"),"."),(0,r.kt)("li",{parentName:"ol"},"Compare this to the output of ",(0,r.kt)("inlineCode",{parentName:"li"},"ls -lah /dev/disk/by-uuid"))),(0,r.kt)("h3",{id:"re-run-system-wide-configuration-triggers"},"Re-run System-Wide Configuration Triggers"),(0,r.kt)("p",null,"In the chroot environment, run the following command which will perform various configuration triggers to update your icon cache, update GRUB and EFI configuration, re-compile settings, and more."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"sudo usysconf run -f\n")),(0,r.kt)("p",null,"After this, you should exit your chroot with ",(0,r.kt)("inlineCode",{parentName:"p"},"exit")," then reboot your system. In the event you are still unable to access Solus, please ",(0,r.kt)("a",{parentName:"p",href:"/docs/user/contributing/getting-involved"},"contact us"),"."),(0,r.kt)("h3",{id:"unmounting-your-system"},"Unmounting your system"),(0,r.kt)("p",null,"In case further partition modifications are required, there's a series of steps that must be followed."),(0,r.kt)("p",null,"If you are still chrooted you have to exit the chroot environment by pressing ",(0,r.kt)("inlineCode",{parentName:"p"},"Ctrl")," + ",(0,r.kt)("inlineCode",{parentName:"p"},"D"),"."),(0,r.kt)("p",null,"Then proceed with unmounting the filesystem."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"umount -R /target\n")),(0,r.kt)("p",null,"In case of having a LUKS-based encryption you'll have to deactivate your logical volumes plus volume groups and then close your LUKS partition."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"lvchange -a n /dev/SolusSystem/Swap # `-a n` means `active: no`\nlvchange -a n /dev/SolusSystem/Root\nvgchange -a n SolusSystem\ncryptsetup luksClose decrypted\n")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/0b254e3a.2b36160c.js b/assets/js/0b254e3a.be587819.js similarity index 99% rename from assets/js/0b254e3a.2b36160c.js rename to assets/js/0b254e3a.be587819.js index 3d6e0a923..dd7faf4c1 100644 --- a/assets/js/0b254e3a.2b36160c.js +++ b/assets/js/0b254e3a.be587819.js @@ -1 +1 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[6726],{3905:(e,a,t)=>{t.d(a,{Zo:()=>c,kt:()=>m});var n=t(7294);function i(e,a,t){return a in e?Object.defineProperty(e,a,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[a]=t,e}function o(e,a){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),t.push.apply(t,n)}return t}function r(e){for(var a=1;a=0||(i[t]=e[t]);return i}(e,a);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(i[t]=e[t])}return i}var l=n.createContext({}),p=function(e){var a=n.useContext(l),t=a;return e&&(t="function"==typeof e?e(a):r(r({},a),e)),t},c=function(e){var a=p(e.components);return n.createElement(l.Provider,{value:a},e.children)},u="mdxType",g={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},d=n.forwardRef((function(e,a){var t=e.components,i=e.mdxType,o=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),u=p(t),d=i,m=u["".concat(l,".").concat(d)]||u[d]||g[d]||o;return t?n.createElement(m,r(r({ref:a},c),{},{components:t})):n.createElement(m,r({ref:a},c))}));function m(e,a){var t=arguments,i=a&&a.mdxType;if("string"==typeof e||i){var o=t.length,r=new Array(o);r[0]=d;var s={};for(var l in a)hasOwnProperty.call(a,l)&&(s[l]=a[l]);s.originalType=e,s[u]="string"==typeof e?e:i,r[1]=s;for(var p=2;p{t.d(a,{ZP:()=>s});var n=t(7462),i=(t(7294),t(3905));const o={toc:[]},r="wrapper";function s(e){let{components:a,...t}=e;return(0,i.kt)(r,(0,n.Z)({},o,t,{components:a,mdxType:"MDXLayout"}),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("p",{parentName:"admonition"},"The ",(0,i.kt)("inlineCode",{parentName:"p"}," --cleanup=scissors")," flag is necessary. By default, git treats lines starting with # as a comment, and removes them."),(0,i.kt)("p",{parentName:"admonition"},"If you would like to always use this flag without having to type it manually you can do so in one of two ways."),(0,i.kt)("ol",{parentName:"admonition"},(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("p",{parentName:"li"},"Set an alias in ",(0,i.kt)("a",{parentName:"p",href:"https://git-scm.com/docs/git-config#Documentation/git-config.txt-alias"},(0,i.kt)("inlineCode",{parentName:"a"},"~/.gitconfig"))," such as"),(0,i.kt)("pre",{parentName:"li"},(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"cs = commit --cleanup=scissors\n")),(0,i.kt)("p",{parentName:"li"},"You can then use ",(0,i.kt)("inlineCode",{parentName:"p"},"git cs")," which will do the same thing as ",(0,i.kt)("inlineCode",{parentName:"p"},"git commit --cleanup=scissors"),".")),(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("p",{parentName:"li"},"Set your git global config to always use the flag. To do so run"))),(0,i.kt)("pre",{parentName:"admonition"},(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"git config --global commit.cleanup scissors\n"))))}s.isMDXComponent=!0},2753:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>p,contentTitle:()=>s,default:()=>d,frontMatter:()=>r,metadata:()=>l,toc:()=>c});var n=t(7462),i=(t(7294),t(3905)),o=t(436);const r={title:"Updating an Existing Package",summary:"Updating an Existing Package",sidebar_position:4},s="Updating an Existing Package",l={unversionedId:"packaging/updating-an-existing-package",id:"packaging/updating-an-existing-package",title:"Updating an Existing Package",description:"This article will go over updating a package that is already in the Solus package repositories.",source:"@site/docs/packaging/updating-an-existing-package.md",sourceDirName:"packaging",slug:"/packaging/updating-an-existing-package",permalink:"/docs/packaging/updating-an-existing-package",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/updating-an-existing-package.md",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",sidebarPosition:4,frontMatter:{title:"Updating an Existing Package",summary:"Updating an Existing Package",sidebar_position:4},sidebar:"packagingSidebar",previous:{title:"Creating a New Package",permalink:"/docs/packaging/creating-a-new-package"},next:{title:"Testing a Package",permalink:"/docs/packaging/testing-a-package"}},p={},c=[{value:"Fork the getsolus/packages Repository / Update Your Fork",id:"fork-the-getsoluspackages-repository--update-your-fork",level:2},{value:"Create a Fork",id:"create-a-fork",level:3},{value:"Update a Fork",id:"update-a-fork",level:3},{value:"Clone the package repo / update your clone",id:"clone-the-package-repo--update-your-clone",level:2},{value:"Clone the repo",id:"clone-the-repo",level:3},{value:"Update an existing clone",id:"update-an-existing-clone",level:3},{value:"Switch to a New Git Branch",id:"switch-to-a-new-git-branch",level:2},{value:"Bumping a Package",id:"bumping-a-package",level:2},{value:"Updating a Package",id:"updating-a-package",level:2},{value:"The MAINTAINERS.md File",id:"the-maintainersmd-file",level:2},{value:"Build the package",id:"build-the-package",level:2},{value:"Commit Your Changes",id:"commit-your-changes",level:2},{value:"Commit message format for updated / bumped packages",id:"commit-message-format-for-updated--bumped-packages",level:3}],u={toc:c},g="wrapper";function d(e){let{components:a,...t}=e;return(0,i.kt)(g,(0,n.Z)({},u,t,{components:a,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"updating-an-existing-package"},"Updating an Existing Package"),(0,i.kt)("p",null,"This article will go over updating a package that is already in the Solus package repositories."),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("p",{parentName:"admonition"},(0,i.kt)("strong",{parentName:"p"},"Please ",(0,i.kt)("a",{parentName:"strong",href:"https://github.com/getsolus/packages/issues?q=label%3A%22Package+Request%22"},"look to see if an issue has been filed")," for the software update"),".\nIf there is an existing request, please add a link to it in your pull request. Ex:"),(0,i.kt)("pre",{parentName:"admonition"},(0,i.kt)("code",{parentName:"pre"},"This PR resolves software update request https://github.com/getsolus/packages/issues/123\n"))),(0,i.kt)("h2",{id:"fork-the-getsoluspackages-repository--update-your-fork"},"Fork the getsolus/packages Repository / Update Your Fork"),(0,i.kt)("h3",{id:"create-a-fork"},"Create a Fork"),(0,i.kt)("p",null,"If you had not yet done so already, fork ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/getsolus/packages"},"getsolus/packages")," using the GitHub web UI or ",(0,i.kt)("a",{parentName:"p",href:"https://cli.github.com/manual/gh_repo_fork"},(0,i.kt)("inlineCode",{parentName:"a"},"gh")," cli tool")," from the ",(0,i.kt)("inlineCode",{parentName:"p"},"github-cli")," package. It will be forked to ",(0,i.kt)("inlineCode",{parentName:"p"},"github.com/yourgithubaccount/packages"),"."),(0,i.kt)("h3",{id:"update-a-fork"},"Update a Fork"),(0,i.kt)("p",null,"If you already have a fork of ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/getsolus/packages"},"getsolus/packages")," in GitHub, log into GitHub. Make sure you're looking at the ",(0,i.kt)("inlineCode",{parentName:"p"},"main"),' branch. Check to see that your fork is up to date with the main repo it was forked from. If your fork indicates it is behind, use the "Sync fork" button to bring it up to date.'),(0,i.kt)("h2",{id:"clone-the-package-repo--update-your-clone"},"Clone the package repo / update your clone"),(0,i.kt)("h3",{id:"clone-the-repo"},"Clone the repo"),(0,i.kt)("p",null,"If you do not yet have a clone of your packages repo fork, change to your packaging directory and clone your fork. Then, switch to the directory of the package to update. For example:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"cd ~/solus-builds\ngh repo clone yourgithubaccount/packages\ncd packages/packages/n/nano\n")),(0,i.kt)("h3",{id:"update-an-existing-clone"},"Update an existing clone"),(0,i.kt)("p",null,"If you already have a local clone, you need to bring it up to date. To do so run:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"cd ~/solus-builds/packages/n/nano\ngit switch main\ngit pull\n")),(0,i.kt)("h2",{id:"switch-to-a-new-git-branch"},"Switch to a New Git Branch"),(0,i.kt)("p",null,"It's always a good idea to switch to a new git branch before beginning packaging work. This will allow you to more easily separate your work from any new changes made to the package repository, which will allow you to more easily rebase any changes if needed.\nExample:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"git switch -c update_nano\n")),(0,i.kt)("h2",{id:"bumping-a-package"},"Bumping a Package"),(0,i.kt)("p",null,"Bumping a package is typically done when rebuilding against a changed dependency, such as ",(0,i.kt)("inlineCode",{parentName:"p"},"imagemagick")," needing to be rebuilt if ",(0,i.kt)("inlineCode",{parentName:"p"},"libwebp")," changes. It is also done if changes are being made to the package, such as adding new dependencies or other modifications which aren't a version update."),(0,i.kt)("p",null,"This can be achieved by doing ",(0,i.kt)("inlineCode",{parentName:"p"},"go-task bump"),", which increments the release number by 1."),(0,i.kt)("h2",{id:"updating-a-package"},"Updating a Package"),(0,i.kt)("p",null,"To update the package to a newer version, use the ",(0,i.kt)("inlineCode",{parentName:"p"},"yupdate")," tool. This is located at ",(0,i.kt)("inlineCode",{parentName:"p"},"/usr/share/ypkg/yupdate.py"),". We recommend setting an alias via your ",(0,i.kt)("inlineCode",{parentName:"p"},".bashrc"),", ",(0,i.kt)("inlineCode",{parentName:"p"},".zshrc"),", or method appropropriate to your shell."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"alias updatePackage='/usr/share/ypkg/yupdate.py'\n")),(0,i.kt)("p",null,"This script takes two arguments, in the following order:"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"Version"),(0,i.kt)("li",{parentName:"ol"},"Source URL")),(0,i.kt)("p",null,"If you're updating the package to a newer version, naturally you would change both the version and source. If you're merely changing the source URL for the existing version, just pass the same version number and the new source URL."),(0,i.kt)("p",null,"Example:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"/usr/share/ypkg/yupdate.py 1.0 https://example.com/example-1.0.tar.xz\n")),(0,i.kt)("h2",{id:"the-maintainersmd-file"},"The ",(0,i.kt)("inlineCode",{parentName:"h2"},"MAINTAINERS.md")," File"),(0,i.kt)("p",null,"There must be a file called ",(0,i.kt)("inlineCode",{parentName:"p"},"MAINTAINERS.md")," using the template in ",(0,i.kt)("a",{parentName:"p",href:"/docs/packaging/procedures/maintainership"},"Maintainership"),". Add it if it does not already exist. It should name the current maintainer(s) of the package."),(0,i.kt)("h2",{id:"build-the-package"},"Build the package"),(0,i.kt)("p",null,"After bumping or updating the package, build it by running ",(0,i.kt)("inlineCode",{parentName:"p"},"go-task"),".\nOnce your package has built successfully, you will need to ",(0,i.kt)("a",{parentName:"p",href:"testing-a-package"},"test it"),"."),(0,i.kt)("h2",{id:"commit-your-changes"},"Commit Your Changes"),(0,i.kt)("p",null,"Check the ",(0,i.kt)("a",{parentName:"p",href:"git-basics#check-the-changes-in-your-files"},"changes in your files"),"."),(0,i.kt)("p",null,(0,i.kt)("a",{parentName:"p",href:"/docs/packaging/git-basics"},"Add / remove files as necessary to the commit"),". Then, ",(0,i.kt)("strong",{parentName:"p"},"check your branch"),"."),(0,i.kt)("p",null,"Run ",(0,i.kt)("inlineCode",{parentName:"p"},"git status"),". Make sure all the files you changed are staged, and that there are no untracked files. When all is well, run ",(0,i.kt)("inlineCode",{parentName:"p"},"git commit --cleanup=scissors"),"."),(0,i.kt)(o.ZP,{mdxType:"GitCommitCleanup"}),(0,i.kt)("h3",{id:"commit-message-format-for-updated--bumped-packages"},"Commit message format for updated / bumped packages"),(0,i.kt)("p",null,"There should be a meaningful summary line (which starts with the package name), a blank line, and then the rest of the commit message."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Bullet point lists should start with a dash."),(0,i.kt)("li",{parentName:"ul"},"Include a changelog with a brief list of updates from the upstream release notes, with no links."),(0,i.kt)("li",{parentName:"ul"},"There may also be a section for Solus specific work (e.g. rebuild against x / rework to remove dependency)."),(0,i.kt)("li",{parentName:"ul"},"Optional: A link to the upstream release notes page."),(0,i.kt)("li",{parentName:"ul"},"Include your Test Plan.")),(0,i.kt)("p",null,"Here is an example in our standard format (make sure to check the box in the checklist):"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"foo: Update to 1.2.3\n\n## Summary\n\nBugfixes:\n\n- Fixed a crash\n- Something else\n\nEnhancements:\n\n- Implemented a feature\n- Error when encountering a thing\n\n**Full release notes:**\n- [1.2.3](https://github.com/foo/foo/releases/tag/v1.2.3)\n\n## Test Plan\n\n- Launched the application\n- Exercised the UI\n- Exercised some feature\n\n## Checklist\n\n- [] Package was built and tested against unstable\n")),(0,i.kt)("p",null,"For more information on suitable commit messages, please check the ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/solus-project/tooling-central/blob/master/README.rst#using-git"},"tooling central documentation"),"."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"If you want to link this pull request to an existing issue, simply mention it in your commit message (use the full URL): ",(0,i.kt)("inlineCode",{parentName:"li"},"The inclusion of fixes https://github.com/getsolus/packages/issues/123")),(0,i.kt)("li",{parentName:"ul"},"If you need a change to depend on another change, mention it in the commit message too (use the full URL): ",(0,i.kt)("inlineCode",{parentName:"li"},"Depends on https://github.com/getsolus/packages/issues/234"))),(0,i.kt)("p",null,"Next, you'll ",(0,i.kt)("a",{parentName:"p",href:"/docs/packaging/submitting-a-pull-request"},"submit a pull request for review"),"."))}d.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[6726],{3905:(e,a,t)=>{t.d(a,{Zo:()=>c,kt:()=>m});var n=t(7294);function i(e,a,t){return a in e?Object.defineProperty(e,a,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[a]=t,e}function o(e,a){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),t.push.apply(t,n)}return t}function r(e){for(var a=1;a=0||(i[t]=e[t]);return i}(e,a);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(i[t]=e[t])}return i}var l=n.createContext({}),p=function(e){var a=n.useContext(l),t=a;return e&&(t="function"==typeof e?e(a):r(r({},a),e)),t},c=function(e){var a=p(e.components);return n.createElement(l.Provider,{value:a},e.children)},u="mdxType",g={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},d=n.forwardRef((function(e,a){var t=e.components,i=e.mdxType,o=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),u=p(t),d=i,m=u["".concat(l,".").concat(d)]||u[d]||g[d]||o;return t?n.createElement(m,r(r({ref:a},c),{},{components:t})):n.createElement(m,r({ref:a},c))}));function m(e,a){var t=arguments,i=a&&a.mdxType;if("string"==typeof e||i){var o=t.length,r=new Array(o);r[0]=d;var s={};for(var l in a)hasOwnProperty.call(a,l)&&(s[l]=a[l]);s.originalType=e,s[u]="string"==typeof e?e:i,r[1]=s;for(var p=2;p{t.d(a,{ZP:()=>s});var n=t(7462),i=(t(7294),t(3905));const o={toc:[]},r="wrapper";function s(e){let{components:a,...t}=e;return(0,i.kt)(r,(0,n.Z)({},o,t,{components:a,mdxType:"MDXLayout"}),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("p",{parentName:"admonition"},"The ",(0,i.kt)("inlineCode",{parentName:"p"}," --cleanup=scissors")," flag is necessary. By default, git treats lines starting with # as a comment, and removes them."),(0,i.kt)("p",{parentName:"admonition"},"If you would like to always use this flag without having to type it manually you can do so in one of two ways."),(0,i.kt)("ol",{parentName:"admonition"},(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("p",{parentName:"li"},"Set an alias in ",(0,i.kt)("a",{parentName:"p",href:"https://git-scm.com/docs/git-config#Documentation/git-config.txt-alias"},(0,i.kt)("inlineCode",{parentName:"a"},"~/.gitconfig"))," such as"),(0,i.kt)("pre",{parentName:"li"},(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"cs = commit --cleanup=scissors\n")),(0,i.kt)("p",{parentName:"li"},"You can then use ",(0,i.kt)("inlineCode",{parentName:"p"},"git cs")," which will do the same thing as ",(0,i.kt)("inlineCode",{parentName:"p"},"git commit --cleanup=scissors"),".")),(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("p",{parentName:"li"},"Set your git global config to always use the flag. To do so run"))),(0,i.kt)("pre",{parentName:"admonition"},(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"git config --global commit.cleanup scissors\n"))))}s.isMDXComponent=!0},2753:(e,a,t)=>{t.r(a),t.d(a,{assets:()=>p,contentTitle:()=>s,default:()=>d,frontMatter:()=>r,metadata:()=>l,toc:()=>c});var n=t(7462),i=(t(7294),t(3905)),o=t(436);const r={title:"Updating an Existing Package",summary:"Updating an Existing Package",sidebar_position:4},s="Updating an Existing Package",l={unversionedId:"packaging/updating-an-existing-package",id:"packaging/updating-an-existing-package",title:"Updating an Existing Package",description:"This article will go over updating a package that is already in the Solus package repositories.",source:"@site/docs/packaging/updating-an-existing-package.md",sourceDirName:"packaging",slug:"/packaging/updating-an-existing-package",permalink:"/docs/packaging/updating-an-existing-package",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/updating-an-existing-package.md",tags:[],version:"current",lastUpdatedAt:1695222528,formattedLastUpdatedAt:"Sep 20, 2023",sidebarPosition:4,frontMatter:{title:"Updating an Existing Package",summary:"Updating an Existing Package",sidebar_position:4},sidebar:"packagingSidebar",previous:{title:"Creating a New Package",permalink:"/docs/packaging/creating-a-new-package"},next:{title:"Testing a Package",permalink:"/docs/packaging/testing-a-package"}},p={},c=[{value:"Fork the getsolus/packages Repository / Update Your Fork",id:"fork-the-getsoluspackages-repository--update-your-fork",level:2},{value:"Create a Fork",id:"create-a-fork",level:3},{value:"Update a Fork",id:"update-a-fork",level:3},{value:"Clone the package repo / update your clone",id:"clone-the-package-repo--update-your-clone",level:2},{value:"Clone the repo",id:"clone-the-repo",level:3},{value:"Update an existing clone",id:"update-an-existing-clone",level:3},{value:"Switch to a New Git Branch",id:"switch-to-a-new-git-branch",level:2},{value:"Bumping a Package",id:"bumping-a-package",level:2},{value:"Updating a Package",id:"updating-a-package",level:2},{value:"The MAINTAINERS.md File",id:"the-maintainersmd-file",level:2},{value:"Build the package",id:"build-the-package",level:2},{value:"Commit Your Changes",id:"commit-your-changes",level:2},{value:"Commit message format for updated / bumped packages",id:"commit-message-format-for-updated--bumped-packages",level:3}],u={toc:c},g="wrapper";function d(e){let{components:a,...t}=e;return(0,i.kt)(g,(0,n.Z)({},u,t,{components:a,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"updating-an-existing-package"},"Updating an Existing Package"),(0,i.kt)("p",null,"This article will go over updating a package that is already in the Solus package repositories."),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("p",{parentName:"admonition"},(0,i.kt)("strong",{parentName:"p"},"Please ",(0,i.kt)("a",{parentName:"strong",href:"https://github.com/getsolus/packages/issues?q=label%3A%22Package+Request%22"},"look to see if an issue has been filed")," for the software update"),".\nIf there is an existing request, please add a link to it in your pull request. Ex:"),(0,i.kt)("pre",{parentName:"admonition"},(0,i.kt)("code",{parentName:"pre"},"This PR resolves software update request https://github.com/getsolus/packages/issues/123\n"))),(0,i.kt)("h2",{id:"fork-the-getsoluspackages-repository--update-your-fork"},"Fork the getsolus/packages Repository / Update Your Fork"),(0,i.kt)("h3",{id:"create-a-fork"},"Create a Fork"),(0,i.kt)("p",null,"If you had not yet done so already, fork ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/getsolus/packages"},"getsolus/packages")," using the GitHub web UI or ",(0,i.kt)("a",{parentName:"p",href:"https://cli.github.com/manual/gh_repo_fork"},(0,i.kt)("inlineCode",{parentName:"a"},"gh")," cli tool")," from the ",(0,i.kt)("inlineCode",{parentName:"p"},"github-cli")," package. It will be forked to ",(0,i.kt)("inlineCode",{parentName:"p"},"github.com/yourgithubaccount/packages"),"."),(0,i.kt)("h3",{id:"update-a-fork"},"Update a Fork"),(0,i.kt)("p",null,"If you already have a fork of ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/getsolus/packages"},"getsolus/packages")," in GitHub, log into GitHub. Make sure you're looking at the ",(0,i.kt)("inlineCode",{parentName:"p"},"main"),' branch. Check to see that your fork is up to date with the main repo it was forked from. If your fork indicates it is behind, use the "Sync fork" button to bring it up to date.'),(0,i.kt)("h2",{id:"clone-the-package-repo--update-your-clone"},"Clone the package repo / update your clone"),(0,i.kt)("h3",{id:"clone-the-repo"},"Clone the repo"),(0,i.kt)("p",null,"If you do not yet have a clone of your packages repo fork, change to your packaging directory and clone your fork. Then, switch to the directory of the package to update. For example:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"cd ~/solus-builds\ngh repo clone yourgithubaccount/packages\ncd packages/packages/n/nano\n")),(0,i.kt)("h3",{id:"update-an-existing-clone"},"Update an existing clone"),(0,i.kt)("p",null,"If you already have a local clone, you need to bring it up to date. To do so run:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"cd ~/solus-builds/packages/n/nano\ngit switch main\ngit pull\n")),(0,i.kt)("h2",{id:"switch-to-a-new-git-branch"},"Switch to a New Git Branch"),(0,i.kt)("p",null,"It's always a good idea to switch to a new git branch before beginning packaging work. This will allow you to more easily separate your work from any new changes made to the package repository, which will allow you to more easily rebase any changes if needed.\nExample:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"git switch -c update_nano\n")),(0,i.kt)("h2",{id:"bumping-a-package"},"Bumping a Package"),(0,i.kt)("p",null,"Bumping a package is typically done when rebuilding against a changed dependency, such as ",(0,i.kt)("inlineCode",{parentName:"p"},"imagemagick")," needing to be rebuilt if ",(0,i.kt)("inlineCode",{parentName:"p"},"libwebp")," changes. It is also done if changes are being made to the package, such as adding new dependencies or other modifications which aren't a version update."),(0,i.kt)("p",null,"This can be achieved by doing ",(0,i.kt)("inlineCode",{parentName:"p"},"go-task bump"),", which increments the release number by 1."),(0,i.kt)("h2",{id:"updating-a-package"},"Updating a Package"),(0,i.kt)("p",null,"To update the package to a newer version, use the ",(0,i.kt)("inlineCode",{parentName:"p"},"yupdate")," tool. This is located at ",(0,i.kt)("inlineCode",{parentName:"p"},"/usr/share/ypkg/yupdate.py"),". We recommend setting an alias via your ",(0,i.kt)("inlineCode",{parentName:"p"},".bashrc"),", ",(0,i.kt)("inlineCode",{parentName:"p"},".zshrc"),", or method appropropriate to your shell."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"alias updatePackage='/usr/share/ypkg/yupdate.py'\n")),(0,i.kt)("p",null,"This script takes two arguments, in the following order:"),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},"Version"),(0,i.kt)("li",{parentName:"ol"},"Source URL")),(0,i.kt)("p",null,"If you're updating the package to a newer version, naturally you would change both the version and source. If you're merely changing the source URL for the existing version, just pass the same version number and the new source URL."),(0,i.kt)("p",null,"Example:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"/usr/share/ypkg/yupdate.py 1.0 https://example.com/example-1.0.tar.xz\n")),(0,i.kt)("h2",{id:"the-maintainersmd-file"},"The ",(0,i.kt)("inlineCode",{parentName:"h2"},"MAINTAINERS.md")," File"),(0,i.kt)("p",null,"There must be a file called ",(0,i.kt)("inlineCode",{parentName:"p"},"MAINTAINERS.md")," using the template in ",(0,i.kt)("a",{parentName:"p",href:"/docs/packaging/procedures/maintainership"},"Maintainership"),". Add it if it does not already exist. It should name the current maintainer(s) of the package."),(0,i.kt)("h2",{id:"build-the-package"},"Build the package"),(0,i.kt)("p",null,"After bumping or updating the package, build it by running ",(0,i.kt)("inlineCode",{parentName:"p"},"go-task"),".\nOnce your package has built successfully, you will need to ",(0,i.kt)("a",{parentName:"p",href:"testing-a-package"},"test it"),"."),(0,i.kt)("h2",{id:"commit-your-changes"},"Commit Your Changes"),(0,i.kt)("p",null,"Check the ",(0,i.kt)("a",{parentName:"p",href:"git-basics#check-the-changes-in-your-files"},"changes in your files"),"."),(0,i.kt)("p",null,(0,i.kt)("a",{parentName:"p",href:"/docs/packaging/git-basics"},"Add / remove files as necessary to the commit"),". Then, ",(0,i.kt)("strong",{parentName:"p"},"check your branch"),"."),(0,i.kt)("p",null,"Run ",(0,i.kt)("inlineCode",{parentName:"p"},"git status"),". Make sure all the files you changed are staged, and that there are no untracked files. When all is well, run ",(0,i.kt)("inlineCode",{parentName:"p"},"git commit --cleanup=scissors"),"."),(0,i.kt)(o.ZP,{mdxType:"GitCommitCleanup"}),(0,i.kt)("h3",{id:"commit-message-format-for-updated--bumped-packages"},"Commit message format for updated / bumped packages"),(0,i.kt)("p",null,"There should be a meaningful summary line (which starts with the package name), a blank line, and then the rest of the commit message."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Bullet point lists should start with a dash."),(0,i.kt)("li",{parentName:"ul"},"Include a changelog with a brief list of updates from the upstream release notes, with no links."),(0,i.kt)("li",{parentName:"ul"},"There may also be a section for Solus specific work (e.g. rebuild against x / rework to remove dependency)."),(0,i.kt)("li",{parentName:"ul"},"Optional: A link to the upstream release notes page."),(0,i.kt)("li",{parentName:"ul"},"Include your Test Plan.")),(0,i.kt)("p",null,"Here is an example in our standard format (make sure to check the box in the checklist):"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"foo: Update to 1.2.3\n\n## Summary\n\nBugfixes:\n\n- Fixed a crash\n- Something else\n\nEnhancements:\n\n- Implemented a feature\n- Error when encountering a thing\n\n**Full release notes:**\n- [1.2.3](https://github.com/foo/foo/releases/tag/v1.2.3)\n\n## Test Plan\n\n- Launched the application\n- Exercised the UI\n- Exercised some feature\n\n## Checklist\n\n- [] Package was built and tested against unstable\n")),(0,i.kt)("p",null,"For more information on suitable commit messages, please check the ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/solus-project/tooling-central/blob/master/README.rst#using-git"},"tooling central documentation"),"."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"If you want to link this pull request to an existing issue, simply mention it in your commit message (use the full URL): ",(0,i.kt)("inlineCode",{parentName:"li"},"The inclusion of fixes https://github.com/getsolus/packages/issues/123")),(0,i.kt)("li",{parentName:"ul"},"If you need a change to depend on another change, mention it in the commit message too (use the full URL): ",(0,i.kt)("inlineCode",{parentName:"li"},"Depends on https://github.com/getsolus/packages/issues/234"))),(0,i.kt)("p",null,"Next, you'll ",(0,i.kt)("a",{parentName:"p",href:"/docs/packaging/submitting-a-pull-request"},"submit a pull request for review"),"."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/0e3c5e6b.70838903.js b/assets/js/0e3c5e6b.ae1fcb38.js similarity index 98% rename from assets/js/0e3c5e6b.70838903.js rename to assets/js/0e3c5e6b.ae1fcb38.js index 563ee0bdb..d97784052 100644 --- a/assets/js/0e3c5e6b.70838903.js +++ b/assets/js/0e3c5e6b.ae1fcb38.js @@ -1 +1 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[4859],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>f});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function s(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var l=n.createContext({}),p=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):s(s({},t),e)),r},u=function(e){var t=p(e.components);return n.createElement(l.Provider,{value:t},e.children)},c="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,l=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),c=p(r),d=a,f=c["".concat(l,".").concat(d)]||c[d]||m[d]||o;return r?n.createElement(f,s(s({ref:t},u),{},{components:r})):n.createElement(f,s({ref:t},u))}));function f(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,s=new Array(o);s[0]=d;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i[c]="string"==typeof e?e:a,s[1]=i;for(var p=2;p{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>m,frontMatter:()=>o,metadata:()=>i,toc:()=>p});var n=r(7462),a=(r(7294),r(3905));const o={title:"Plasma",summary:"A quick introduction to the Plasma edition of Solus"},s="Plasma",i={unversionedId:"user/editions/plasma/index",id:"user/editions/plasma/index",title:"Plasma",description:"Solus Plasma",source:"@site/docs/user/editions/plasma/index.md",sourceDirName:"user/editions/plasma",slug:"/user/editions/plasma/",permalink:"/docs/user/editions/plasma/",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/editions/plasma/index.md",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Plasma",summary:"A quick introduction to the Plasma edition of Solus"},sidebar:"userSidebar",previous:{title:"Tips and Tricks",permalink:"/docs/user/editions/mate/tips-and-tricks"},next:{title:"Configuration",permalink:"/docs/user/editions/plasma/configuration"}},l={},p=[],u={toc:p},c="wrapper";function m(e){let{components:t,...o}=e;return(0,a.kt)(c,(0,n.Z)({},u,o,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"plasma"},"Plasma"),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"Solus Plasma",src:r(2603).Z,width:"1920",height:"1080"})),(0,a.kt)("p",null,"The ",(0,a.kt)("em",{parentName:"p"},"Plasma")," desktop is a graphical user interface for Linux distributions that aims to offer users an intuitive and customizable user interface to interact with their devices. The Plasma desktop is developed by KDE."),(0,a.kt)("p",null,"To learn more about the Plasma desktop and KDE, refer to the following pages:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://kde.org/plasma-desktop/"},"https://kde.org/plasma-desktop/")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://kde.org/announcements/"},"https://kde.org/announcements/")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://kde.org/support/"},"https://kde.org/support/"))),(0,a.kt)("hr",null),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"configuration"},"Configuration")),(0,a.kt)("p",null,"Learn how to customize and configure the Plasma Desktop on Solus."),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"tips-and-tricks"},"Tips and Tricks")),(0,a.kt)("p",null,"Helpful tips and tricks for using Plasma on Solus."))}m.isMDXComponent=!0},2603:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/plasma-32bee314c05b57e65e0b26b6bf23f14f.jpg"}}]); \ No newline at end of file +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[4859],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>f});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function s(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var l=n.createContext({}),p=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):s(s({},t),e)),r},u=function(e){var t=p(e.components);return n.createElement(l.Provider,{value:t},e.children)},c="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,l=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),c=p(r),d=a,f=c["".concat(l,".").concat(d)]||c[d]||m[d]||o;return r?n.createElement(f,s(s({ref:t},u),{},{components:r})):n.createElement(f,s({ref:t},u))}));function f(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,s=new Array(o);s[0]=d;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i[c]="string"==typeof e?e:a,s[1]=i;for(var p=2;p{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>m,frontMatter:()=>o,metadata:()=>i,toc:()=>p});var n=r(7462),a=(r(7294),r(3905));const o={title:"Plasma",summary:"A quick introduction to the Plasma edition of Solus"},s="Plasma",i={unversionedId:"user/editions/plasma/index",id:"user/editions/plasma/index",title:"Plasma",description:"Solus Plasma",source:"@site/docs/user/editions/plasma/index.md",sourceDirName:"user/editions/plasma",slug:"/user/editions/plasma/",permalink:"/docs/user/editions/plasma/",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/editions/plasma/index.md",tags:[],version:"current",lastUpdatedAt:1695222528,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Plasma",summary:"A quick introduction to the Plasma edition of Solus"},sidebar:"userSidebar",previous:{title:"Tips and Tricks",permalink:"/docs/user/editions/mate/tips-and-tricks"},next:{title:"Configuration",permalink:"/docs/user/editions/plasma/configuration"}},l={},p=[],u={toc:p},c="wrapper";function m(e){let{components:t,...o}=e;return(0,a.kt)(c,(0,n.Z)({},u,o,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"plasma"},"Plasma"),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"Solus Plasma",src:r(2603).Z,width:"1920",height:"1080"})),(0,a.kt)("p",null,"The ",(0,a.kt)("em",{parentName:"p"},"Plasma")," desktop is a graphical user interface for Linux distributions that aims to offer users an intuitive and customizable user interface to interact with their devices. The Plasma desktop is developed by KDE."),(0,a.kt)("p",null,"To learn more about the Plasma desktop and KDE, refer to the following pages:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://kde.org/plasma-desktop/"},"https://kde.org/plasma-desktop/")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://kde.org/announcements/"},"https://kde.org/announcements/")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("a",{parentName:"li",href:"https://kde.org/support/"},"https://kde.org/support/"))),(0,a.kt)("hr",null),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"configuration"},"Configuration")),(0,a.kt)("p",null,"Learn how to customize and configure the Plasma Desktop on Solus."),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"tips-and-tricks"},"Tips and Tricks")),(0,a.kt)("p",null,"Helpful tips and tricks for using Plasma on Solus."))}m.isMDXComponent=!0},2603:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/plasma-32bee314c05b57e65e0b26b6bf23f14f.jpg"}}]); \ No newline at end of file diff --git a/assets/js/0e862883.de324c5c.js b/assets/js/0e862883.5dbae821.js similarity index 99% rename from assets/js/0e862883.de324c5c.js rename to assets/js/0e862883.5dbae821.js index 7353db195..27db92e56 100644 --- a/assets/js/0e862883.de324c5c.js +++ b/assets/js/0e862883.5dbae821.js @@ -1 +1 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[172],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>m});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var l=r.createContext({}),u=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=u(e.components);return r.createElement(l.Provider,{value:t},e.children)},p="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},f=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),p=u(n),f=a,m=p["".concat(l,".").concat(f)]||p[f]||d[f]||o;return n?r.createElement(m,i(i({ref:t},c),{},{components:n})):r.createElement(m,i({ref:t},c))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,i=new Array(o);i[0]=f;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[p]="string"==typeof e?e:a,i[1]=s;for(var u=2;u{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>u});var r=n(7462),a=(n(7294),n(3905));const o={},i="Testing an ISO",s={unversionedId:"user/contributing/testing-an-iso",id:"user/contributing/testing-an-iso",title:"Testing an ISO",description:"A handy checklist anyone can use for testing an ISO.",source:"@site/docs/user/contributing/testing-an-iso.md",sourceDirName:"user/contributing",slug:"/user/contributing/testing-an-iso",permalink:"/docs/user/contributing/testing-an-iso",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/contributing/testing-an-iso.md",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{},sidebar:"userSidebar",previous:{title:"Getting Involved",permalink:"/docs/user/contributing/getting-involved"},next:{title:"Editions",permalink:"/docs/user/editions/"}},l={},u=[{value:"For any release",id:"for-any-release",level:2},{value:"Laptops",id:"laptops",level:3},{value:"VMs",id:"vms",level:3},{value:"For the specific release",id:"for-the-specific-release",level:2}],c={toc:u},p="wrapper";function d(e){let{components:t,...n}=e;return(0,a.kt)(p,(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"testing-an-iso"},"Testing an ISO"),(0,a.kt)("p",null,"A handy checklist anyone can use for testing an ISO."),(0,a.kt)("p",null,"This is a list of some general things to check. It is not meant to be exhaustive, just enough to hit major points and hopefully uncover obvious problems. Testers are certainly not prohibited from doing more, at their discretion. Not all points will be testable by everyone (ex: docking / undocking). That is fine; this is just a reference."),(0,a.kt)("p",null,"When testing, try to keep different types of users in mind. For instance, would a general / new user be comfortable with the experience? Would a technical user be put off by a limitation?"),(0,a.kt)("h2",{id:"for-any-release"},"For any release"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"ISO can be written to a USB, used to boot a system and install"),(0,a.kt)("li",{parentName:"ul"},"Installer is easy to follow"),(0,a.kt)("li",{parentName:"ul"},"Installer detects location, time and time zone properly. Bonus points if the correct timezone is shown in the picker and you don't have to manually select one."),(0,a.kt)("li",{parentName:"ul"},"Start menu works, has search"),(0,a.kt)("li",{parentName:"ul"},"Can scan / print / use your peripherals"),(0,a.kt)("li",{parentName:"ul"},"Sound over speakers"),(0,a.kt)("li",{parentName:"ul"},"Bluetooth device connects, has high fidelity and headphone modes, you can hear sound"),(0,a.kt)("li",{parentName:"ul"},"Install your usual software and just make sure basic functionality works"),(0,a.kt)("li",{parentName:"ul"},"Plugging in a USB drive allows user to mount the drive and access files"),(0,a.kt)("li",{parentName:"ul"},"System can be put to sleep and woken, things still work after waking (display, keyboard, mouse, sound, network)"),(0,a.kt)("li",{parentName:"ul"},"Able to create and use samba shares via file manager (you must ",(0,a.kt)("a",{parentName:"li",href:"https://help.getsol.us/docs/user/software/networking/samba#samba-on-solus"},"enable smb after installation"),")"),(0,a.kt)("li",{parentName:"ul"},"Anything that's been flaky in your experience (LVM, for instance)")),(0,a.kt)("h3",{id:"laptops"},"Laptops"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Multi-monitor display behaves properly with docking and undocking.")),(0,a.kt)("h3",{id:"vms"},"VMs"),(0,a.kt)("p",null,"This functionality might be affected by the settings of the VM."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Copy and paste works from host to guest ",(0,a.kt)("em",{parentName:"li"},"before")," install, while booted into the live ISO"),(0,a.kt)("li",{parentName:"ul"},"Copy and paste works ",(0,a.kt)("em",{parentName:"li"},"after")," installation and rebooting the VM")),(0,a.kt)("h2",{id:"for-the-specific-release"},"For the specific release"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Any issues that have been recently fixed, or are known to be recently flaky."),(0,a.kt)("li",{parentName:"ul"},"Check the ISO task in the tracker for other potential areas of interest.")))}d.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[172],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>m});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var l=r.createContext({}),u=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=u(e.components);return r.createElement(l.Provider,{value:t},e.children)},p="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},f=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),p=u(n),f=a,m=p["".concat(l,".").concat(f)]||p[f]||d[f]||o;return n?r.createElement(m,i(i({ref:t},c),{},{components:n})):r.createElement(m,i({ref:t},c))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,i=new Array(o);i[0]=f;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[p]="string"==typeof e?e:a,i[1]=s;for(var u=2;u{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>u});var r=n(7462),a=(n(7294),n(3905));const o={},i="Testing an ISO",s={unversionedId:"user/contributing/testing-an-iso",id:"user/contributing/testing-an-iso",title:"Testing an ISO",description:"A handy checklist anyone can use for testing an ISO.",source:"@site/docs/user/contributing/testing-an-iso.md",sourceDirName:"user/contributing",slug:"/user/contributing/testing-an-iso",permalink:"/docs/user/contributing/testing-an-iso",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/contributing/testing-an-iso.md",tags:[],version:"current",lastUpdatedAt:1695222528,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{},sidebar:"userSidebar",previous:{title:"Getting Involved",permalink:"/docs/user/contributing/getting-involved"},next:{title:"Editions",permalink:"/docs/user/editions/"}},l={},u=[{value:"For any release",id:"for-any-release",level:2},{value:"Laptops",id:"laptops",level:3},{value:"VMs",id:"vms",level:3},{value:"For the specific release",id:"for-the-specific-release",level:2}],c={toc:u},p="wrapper";function d(e){let{components:t,...n}=e;return(0,a.kt)(p,(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"testing-an-iso"},"Testing an ISO"),(0,a.kt)("p",null,"A handy checklist anyone can use for testing an ISO."),(0,a.kt)("p",null,"This is a list of some general things to check. It is not meant to be exhaustive, just enough to hit major points and hopefully uncover obvious problems. Testers are certainly not prohibited from doing more, at their discretion. Not all points will be testable by everyone (ex: docking / undocking). That is fine; this is just a reference."),(0,a.kt)("p",null,"When testing, try to keep different types of users in mind. For instance, would a general / new user be comfortable with the experience? Would a technical user be put off by a limitation?"),(0,a.kt)("h2",{id:"for-any-release"},"For any release"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"ISO can be written to a USB, used to boot a system and install"),(0,a.kt)("li",{parentName:"ul"},"Installer is easy to follow"),(0,a.kt)("li",{parentName:"ul"},"Installer detects location, time and time zone properly. Bonus points if the correct timezone is shown in the picker and you don't have to manually select one."),(0,a.kt)("li",{parentName:"ul"},"Start menu works, has search"),(0,a.kt)("li",{parentName:"ul"},"Can scan / print / use your peripherals"),(0,a.kt)("li",{parentName:"ul"},"Sound over speakers"),(0,a.kt)("li",{parentName:"ul"},"Bluetooth device connects, has high fidelity and headphone modes, you can hear sound"),(0,a.kt)("li",{parentName:"ul"},"Install your usual software and just make sure basic functionality works"),(0,a.kt)("li",{parentName:"ul"},"Plugging in a USB drive allows user to mount the drive and access files"),(0,a.kt)("li",{parentName:"ul"},"System can be put to sleep and woken, things still work after waking (display, keyboard, mouse, sound, network)"),(0,a.kt)("li",{parentName:"ul"},"Able to create and use samba shares via file manager (you must ",(0,a.kt)("a",{parentName:"li",href:"https://help.getsol.us/docs/user/software/networking/samba#samba-on-solus"},"enable smb after installation"),")"),(0,a.kt)("li",{parentName:"ul"},"Anything that's been flaky in your experience (LVM, for instance)")),(0,a.kt)("h3",{id:"laptops"},"Laptops"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Multi-monitor display behaves properly with docking and undocking.")),(0,a.kt)("h3",{id:"vms"},"VMs"),(0,a.kt)("p",null,"This functionality might be affected by the settings of the VM."),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Copy and paste works from host to guest ",(0,a.kt)("em",{parentName:"li"},"before")," install, while booted into the live ISO"),(0,a.kt)("li",{parentName:"ul"},"Copy and paste works ",(0,a.kt)("em",{parentName:"li"},"after")," installation and rebooting the VM")),(0,a.kt)("h2",{id:"for-the-specific-release"},"For the specific release"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Any issues that have been recently fixed, or are known to be recently flaky."),(0,a.kt)("li",{parentName:"ul"},"Check the ISO task in the tracker for other potential areas of interest.")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/14488e92.232af388.js b/assets/js/14488e92.c88b7d89.js similarity index 99% rename from assets/js/14488e92.232af388.js rename to assets/js/14488e92.c88b7d89.js index 94b083511..ab027a5d8 100644 --- a/assets/js/14488e92.232af388.js +++ b/assets/js/14488e92.c88b7d89.js @@ -1 +1 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[4815],{3905:(t,e,a)=>{a.d(e,{Zo:()=>s,kt:()=>g});var n=a(7294);function l(t,e,a){return e in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}function r(t,e){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),a.push.apply(a,n)}return a}function i(t){for(var e=1;e=0||(l[a]=t[a]);return l}(t,e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(t,a)&&(l[a]=t[a])}return l}var o=n.createContext({}),c=function(t){var e=n.useContext(o),a=e;return t&&(a="function"==typeof t?t(e):i(i({},e),t)),a},s=function(t){var e=c(t.components);return n.createElement(o.Provider,{value:e},t.children)},p="mdxType",d={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},u=n.forwardRef((function(t,e){var a=t.components,l=t.mdxType,r=t.originalType,o=t.parentName,s=A(t,["components","mdxType","originalType","parentName"]),p=c(a),u=l,g=p["".concat(o,".").concat(u)]||p[u]||d[u]||r;return a?n.createElement(g,i(i({ref:e},s),{},{components:a})):n.createElement(g,i({ref:e},s))}));function g(t,e){var a=arguments,l=e&&e.mdxType;if("string"==typeof t||l){var r=a.length,i=new Array(r);i[0]=u;var A={};for(var o in e)hasOwnProperty.call(e,o)&&(A[o]=e[o]);A.originalType=t,A[p]="string"==typeof t?t:l,i[1]=A;for(var c=2;c{a.r(e),a.d(e,{assets:()=>o,contentTitle:()=>i,default:()=>d,frontMatter:()=>r,metadata:()=>A,toc:()=>c});var n=a(7462),l=(a(7294),a(3905));const r={title:"Default Applications",summary:"A guide to the default applications included with Solus."},i="Default Applications",A={unversionedId:"user/quick-start/default-applications",id:"user/quick-start/default-applications",title:"Default Applications",description:"Each version of Solus comes with a pre-installed collection of desktop applications that can help you perform common tasks.",source:"@site/docs/user/quick-start/default-applications.md",sourceDirName:"user/quick-start",slug:"/user/quick-start/default-applications",permalink:"/docs/user/quick-start/default-applications",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/quick-start/default-applications.md",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Default Applications",summary:"A guide to the default applications included with Solus."},sidebar:"userSidebar",previous:{title:"Boot Management",permalink:"/docs/user/quick-start/boot-management"},next:{title:"Preparing to Install",permalink:"/docs/user/quick-start/installation/"}},o={},c=[{value:"Nemo",id:"nemo",level:2},{value:"Caja",id:"caja",level:2},{value:"GNOME Files",id:"gnome-files",level:2},{value:"Dolphin",id:"dolphin",level:2},{value:"Calc",id:"calc",level:2},{value:"Draw",id:"draw",level:2},{value:"Impress",id:"impress",level:2},{value:"Math",id:"math",level:2},{value:"Writer",id:"writer",level:2},{value:"Spell-checking",id:"spell-checking",level:2},{value:"Finnish",id:"finnish",level:3},{value:"Rhythmbox",id:"rhythmbox",level:2},{value:"Elisa",id:"elisa",level:2},{value:"Celluloid",id:"celluloid",level:2},{value:"VLC",id:"vlc",level:2},{value:"Haruna",id:"haruna",level:2}],s={toc:c},p="wrapper";function d(t){let{components:e,...r}=t;return(0,l.kt)(p,(0,n.Z)({},s,r,{components:e,mdxType:"MDXLayout"}),(0,l.kt)("h1",{id:"default-applications"},"Default Applications"),(0,l.kt)("p",null,"Each version of Solus comes with a pre-installed collection of desktop applications that can help you perform common tasks."),(0,l.kt)("h1",{id:"web-browser"},"Web Browser"),(0,l.kt)("p",null,"Solus comes pre-installed with Firefox, a secure and trustworthy web browser provided by the non-profit organization ",(0,l.kt)("a",{parentName:"p",href:"https://www.mozilla.org-US/"},"Mozilla"),"."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"Firefox Screenshot",src:a(4133).Z,width:"1920",height:"1046"})),(0,l.kt)("h1",{id:"email-client"},"Email Client"),(0,l.kt)("p",null,"Solus comes pre-installed with the powerful ",(0,l.kt)("a",{parentName:"p",href:"https://www.mozilla.org-US/thunderbird/"},"Thunderbird")," email, newsgroup, and feeds client."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"Thunderbird Screenshot",src:a(649).Z,width:"982",height:"822"})),(0,l.kt)("h1",{id:"managing-your-files"},"Managing Your Files"),(0,l.kt)("p",null,"Each Linux desktop environment has its own graphical application for managing files:"),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Desktop"),(0,l.kt)("th",{parentName:"tr",align:null},"Application"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Budgie"),(0,l.kt)("td",{parentName:"tr",align:null},"Nemo")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"GNOME"),(0,l.kt)("td",{parentName:"tr",align:null},"GNOME Files (formerly Nautilus)")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"MATE"),(0,l.kt)("td",{parentName:"tr",align:null},"Caja")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Plasma"),(0,l.kt)("td",{parentName:"tr",align:null},"Dolphin")))),(0,l.kt)("h2",{id:"nemo"},"Nemo"),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"Nemo Screenshot",src:a(274).Z,width:"800",height:"586"})),(0,l.kt)("h2",{id:"caja"},"Caja"),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"Caja Screenshot",src:a(1253).Z,width:"912",height:"592"})),(0,l.kt)("h2",{id:"gnome-files"},"GNOME Files"),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"GNOME Files Screenshot",src:a(1055).Z,width:"886",height:"548"})),(0,l.kt)("h2",{id:"dolphin"},"Dolphin"),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"Dolphin Screenshot",src:a(3638).Z,width:"1022",height:"721"})),(0,l.kt)("h1",{id:"office-suite"},"Office Suite"),(0,l.kt)("p",null,"Solus comes pre-installed with ",(0,l.kt)("a",{parentName:"p",href:"https://libreoffice.org"},"LibreOffice"),", an office suite that is capable of replacing Microsoft",(0,l.kt)("sup",null,"TM")," Office for the most common tasks."),(0,l.kt)("p",null,"By default, Solus provides Writer (document editor), Calc (spreadsheet editor), and Impress (presentation editor). Other applications such as Math or Draw can be installed from the Software Center."),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"LibreOffice"),(0,l.kt)("th",{parentName:"tr",align:null},"Microsoft Office Equivalent"),(0,l.kt)("th",{parentName:"tr",align:null},"Apple Equivalent"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Writer"),(0,l.kt)("td",{parentName:"tr",align:null},"Word"),(0,l.kt)("td",{parentName:"tr",align:null},"Pages")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Calc"),(0,l.kt)("td",{parentName:"tr",align:null},"Excel"),(0,l.kt)("td",{parentName:"tr",align:null},"Numbers")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Impress"),(0,l.kt)("td",{parentName:"tr",align:null},"PowerPoint"),(0,l.kt)("td",{parentName:"tr",align:null},"Keynote")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Draw"),(0,l.kt)("td",{parentName:"tr",align:null},"Visio"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Math"),(0,l.kt)("td",{parentName:"tr",align:null}),(0,l.kt)("td",{parentName:"tr",align:null})))),(0,l.kt)("h2",{id:"calc"},"Calc"),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"LibreOffice Calc Screenshot",src:a(5353).Z,width:"1068",height:"607"})),(0,l.kt)("p",null,"Calc is a spreadsheet editor. You can view, create, and edit spreadsheets as well as leverage a comprehensive range of advanced functions. Calc supports a variety of common open formats and Microsoft",(0,l.kt)("sup",null,"TM")," Office compatible document formats such as (but not limited to): ",(0,l.kt)("inlineCode",{parentName:"p"},"xls"),", ",(0,l.kt)("inlineCode",{parentName:"p"},"xlsx"),", and ",(0,l.kt)("inlineCode",{parentName:"p"},"ods"),"."),(0,l.kt)("h2",{id:"draw"},"Draw"),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"LibreOffice Draw Screenshot",src:a(1955).Z,width:"1068",height:"637"})),(0,l.kt)("p",null,"Draw is a graphical editor that allows you to sketch diagrams, workflows and any kind of other simple to complex drawing you can imagine. You can install Draw from the Software Center by searching for the package ",(0,l.kt)("inlineCode",{parentName:"p"},"libreoffice-draw"),"."),(0,l.kt)("h2",{id:"impress"},"Impress"),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"LibreOffice Impress Screenshot",src:a(8017).Z,width:"1068",height:"605"})),(0,l.kt)("p",null,"Impress is a presentation viewer and editor. You can view, create, edit, and export presentations in common open formats or Microsoft",(0,l.kt)("sup",null,"TM")," Office compatible document formats such as (but not limited to): ",(0,l.kt)("inlineCode",{parentName:"p"},"ppt"),", ",(0,l.kt)("inlineCode",{parentName:"p"},"pptx"),", and ",(0,l.kt)("inlineCode",{parentName:"p"},"odp"),"."),(0,l.kt)("h2",{id:"math"},"Math"),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"LibreOffice Math Screenshot",src:a(6243).Z,width:"1068",height:"598"})),(0,l.kt)("p",null,"Math is a formula editor. Create your mathematical and scientific expressions and insert them with the correct formatting into your text documents, spreadsheets, presentations, or drawings. Math can be installed from the Software Center by searching for the package ",(0,l.kt)("inlineCode",{parentName:"p"},"libreoffice-math"),"."),(0,l.kt)("h2",{id:"writer"},"Writer"),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"LibreOffice Writer Screenshot",src:a(1304).Z,width:"1068",height:"748"})),(0,l.kt)("p",null,"Writer is a document editor. You can view, create, edit, and export documents in common open formats or Microsoft",(0,l.kt)("sup",null,"TM")," Office compatible document formats such as (but not limited to): ",(0,l.kt)("inlineCode",{parentName:"p"},"doc"),", ",(0,l.kt)("inlineCode",{parentName:"p"},"docx"),", and ",(0,l.kt)("inlineCode",{parentName:"p"},"odt"),"."),(0,l.kt)("h2",{id:"spell-checking"},"Spell-checking"),(0,l.kt)("p",null,"LibreOffice Writer users may want to install the package ",(0,l.kt)("inlineCode",{parentName:"p"},"libreoffice-common-dictionaries")," from Software Center to automatically enable spell-checking support."),(0,l.kt)("h3",{id:"finnish"},"Finnish"),(0,l.kt)("p",null,"Finnish language support is provided by installing ",(0,l.kt)("inlineCode",{parentName:"p"},"libreoffice-voikko"),". After installation of this package, there is further configuration required to properly leverage the Voikko spell-checking and Finnish dictionary support."),(0,l.kt)("ol",null,(0,l.kt)("li",{parentName:"ol"},"Open up LibreOffice Writer"),(0,l.kt)("li",{parentName:"ol"},"In the menubar, go to ",(0,l.kt)("inlineCode",{parentName:"li"},"Tools")," then ",(0,l.kt)("inlineCode",{parentName:"li"},"Options"),". This will open up the Options dialog."),(0,l.kt)("li",{parentName:"ol"},"Go to the Language Settings, listed on the left of Options."),(0,l.kt)("li",{parentName:"ol"},'Under Language Settings, click Writing Aids and ensure the "Spellchecker (Voikko)", "Grammar checker (Voikko)", and "Hyphenator (Voikko)" are under the "Available language modules" section.'),(0,l.kt)("li",{parentName:"ol"},'Under Language Settings, click Voikko and ensure "standard: suomi (perussanasto)" is selected under the "Vocabulary" section.')),(0,l.kt)("h1",{id:"music"},"Music"),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Desktop"),(0,l.kt)("th",{parentName:"tr",align:null},"Application"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Budgie"),(0,l.kt)("td",{parentName:"tr",align:null},"Rhythmbox")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"GNOME"),(0,l.kt)("td",{parentName:"tr",align:null},"Rhythmbox")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"MATE"),(0,l.kt)("td",{parentName:"tr",align:null},"Rhythmbox")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Plasma"),(0,l.kt)("td",{parentName:"tr",align:null},"Elisa")))),(0,l.kt)("h2",{id:"rhythmbox"},"Rhythmbox"),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"Rhythmbox Screenshot",src:a(8392).Z,width:"789",height:"606"})),(0,l.kt)("h2",{id:"elisa"},"Elisa"),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"Elisa Screenshot",src:a(2304).Z,width:"1020",height:"720"})),(0,l.kt)("h1",{id:"video"},"Video"),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Desktop"),(0,l.kt)("th",{parentName:"tr",align:null},"Application"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Budgie"),(0,l.kt)("td",{parentName:"tr",align:null},"Celluloid (formerly GNOME MPV)")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"GNOME"),(0,l.kt)("td",{parentName:"tr",align:null},"Celluloid (formerly GNOME MPV)")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"MATE"),(0,l.kt)("td",{parentName:"tr",align:null},"VLC")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Plasma"),(0,l.kt)("td",{parentName:"tr",align:null},"Haruna")))),(0,l.kt)("h2",{id:"celluloid"},"Celluloid"),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"Celluloid Screenshot",src:a(8646).Z,width:"651",height:"491"})),(0,l.kt)("h2",{id:"vlc"},"VLC"),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"VLC Screenshot",src:a(8735).Z,width:"643",height:"586"})),(0,l.kt)("h2",{id:"haruna"},"Haruna"),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"Haruna Screenshot",src:a(3289).Z,width:"1190",height:"749"})))}d.isMDXComponent=!0},1253:(t,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/caja-72b5fc9d93b7c41200d3efa912c76ef6.jpg"},8646:(t,e,a)=>{a.d(e,{Z:()=>n});const n="data:image/webp;base64,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"},3638:(t,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/dolphin-06132e0261dad073f7f27bbee6bcbfba.jpg"},2304:(t,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/elisa-63e84725c74e3606d527b80a49234bdf.jpg"},4133:(t,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/firefox-0510dce504768afbd216c0fd00abe580.jpg"},3289:(t,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/haruna-aee9cd480cd936456de187af2cb0ecfb.jpg"},5353:(t,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/libreoffice-calc-d000f05dad58cf8e0877111b52108ecb.jpg"},1955:(t,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/libreoffice-draw-46b341512a31da6fdf6505368197b96e.jpg"},8017:(t,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/libreoffice-impress-8851e5e8a47c676d011846d7a919f95d.jpg"},6243:(t,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/libreoffice-math-0fb2b8bfd4c3f8736d107cb81b546a13.jpg"},1304:(t,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/libreoffice-writer-aeca166c3f0379a027c3d34f7d2c5d2c.jpg"},1055:(t,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/nautilus-33ea265420bee017f2cdad24b84e912d.jpg"},274:(t,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/nemo-b369a1bfe8c00fd1e524e56bd0369e0c.jpg"},8392:(t,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/rhythmbox-eb6d0894497e065d9512c2c8454f25e6.jpg"},649:(t,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/thunderbird-95db449fb1a8d3241f691334bf0b2eb3.jpg"},8735:(t,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/vlc-272af3421ef6bedd1d37716eb7a5e3ec.jpg"}}]); \ No newline at end of file +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[4815],{3905:(t,e,a)=>{a.d(e,{Zo:()=>s,kt:()=>g});var n=a(7294);function l(t,e,a){return e in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}function r(t,e){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),a.push.apply(a,n)}return a}function i(t){for(var e=1;e=0||(l[a]=t[a]);return l}(t,e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(t,a)&&(l[a]=t[a])}return l}var o=n.createContext({}),c=function(t){var e=n.useContext(o),a=e;return t&&(a="function"==typeof t?t(e):i(i({},e),t)),a},s=function(t){var e=c(t.components);return n.createElement(o.Provider,{value:e},t.children)},p="mdxType",d={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},u=n.forwardRef((function(t,e){var a=t.components,l=t.mdxType,r=t.originalType,o=t.parentName,s=A(t,["components","mdxType","originalType","parentName"]),p=c(a),u=l,g=p["".concat(o,".").concat(u)]||p[u]||d[u]||r;return a?n.createElement(g,i(i({ref:e},s),{},{components:a})):n.createElement(g,i({ref:e},s))}));function g(t,e){var a=arguments,l=e&&e.mdxType;if("string"==typeof t||l){var r=a.length,i=new Array(r);i[0]=u;var A={};for(var o in e)hasOwnProperty.call(e,o)&&(A[o]=e[o]);A.originalType=t,A[p]="string"==typeof t?t:l,i[1]=A;for(var c=2;c{a.r(e),a.d(e,{assets:()=>o,contentTitle:()=>i,default:()=>d,frontMatter:()=>r,metadata:()=>A,toc:()=>c});var n=a(7462),l=(a(7294),a(3905));const r={title:"Default Applications",summary:"A guide to the default applications included with Solus."},i="Default Applications",A={unversionedId:"user/quick-start/default-applications",id:"user/quick-start/default-applications",title:"Default Applications",description:"Each version of Solus comes with a pre-installed collection of desktop applications that can help you perform common tasks.",source:"@site/docs/user/quick-start/default-applications.md",sourceDirName:"user/quick-start",slug:"/user/quick-start/default-applications",permalink:"/docs/user/quick-start/default-applications",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/quick-start/default-applications.md",tags:[],version:"current",lastUpdatedAt:1695222528,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Default Applications",summary:"A guide to the default applications included with Solus."},sidebar:"userSidebar",previous:{title:"Boot Management",permalink:"/docs/user/quick-start/boot-management"},next:{title:"Preparing to Install",permalink:"/docs/user/quick-start/installation/"}},o={},c=[{value:"Nemo",id:"nemo",level:2},{value:"Caja",id:"caja",level:2},{value:"GNOME Files",id:"gnome-files",level:2},{value:"Dolphin",id:"dolphin",level:2},{value:"Calc",id:"calc",level:2},{value:"Draw",id:"draw",level:2},{value:"Impress",id:"impress",level:2},{value:"Math",id:"math",level:2},{value:"Writer",id:"writer",level:2},{value:"Spell-checking",id:"spell-checking",level:2},{value:"Finnish",id:"finnish",level:3},{value:"Rhythmbox",id:"rhythmbox",level:2},{value:"Elisa",id:"elisa",level:2},{value:"Celluloid",id:"celluloid",level:2},{value:"VLC",id:"vlc",level:2},{value:"Haruna",id:"haruna",level:2}],s={toc:c},p="wrapper";function d(t){let{components:e,...r}=t;return(0,l.kt)(p,(0,n.Z)({},s,r,{components:e,mdxType:"MDXLayout"}),(0,l.kt)("h1",{id:"default-applications"},"Default Applications"),(0,l.kt)("p",null,"Each version of Solus comes with a pre-installed collection of desktop applications that can help you perform common tasks."),(0,l.kt)("h1",{id:"web-browser"},"Web Browser"),(0,l.kt)("p",null,"Solus comes pre-installed with Firefox, a secure and trustworthy web browser provided by the non-profit organization ",(0,l.kt)("a",{parentName:"p",href:"https://www.mozilla.org-US/"},"Mozilla"),"."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"Firefox Screenshot",src:a(4133).Z,width:"1920",height:"1046"})),(0,l.kt)("h1",{id:"email-client"},"Email Client"),(0,l.kt)("p",null,"Solus comes pre-installed with the powerful ",(0,l.kt)("a",{parentName:"p",href:"https://www.mozilla.org-US/thunderbird/"},"Thunderbird")," email, newsgroup, and feeds client."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"Thunderbird Screenshot",src:a(649).Z,width:"982",height:"822"})),(0,l.kt)("h1",{id:"managing-your-files"},"Managing Your Files"),(0,l.kt)("p",null,"Each Linux desktop environment has its own graphical application for managing files:"),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Desktop"),(0,l.kt)("th",{parentName:"tr",align:null},"Application"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Budgie"),(0,l.kt)("td",{parentName:"tr",align:null},"Nemo")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"GNOME"),(0,l.kt)("td",{parentName:"tr",align:null},"GNOME Files (formerly Nautilus)")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"MATE"),(0,l.kt)("td",{parentName:"tr",align:null},"Caja")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Plasma"),(0,l.kt)("td",{parentName:"tr",align:null},"Dolphin")))),(0,l.kt)("h2",{id:"nemo"},"Nemo"),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"Nemo Screenshot",src:a(274).Z,width:"800",height:"586"})),(0,l.kt)("h2",{id:"caja"},"Caja"),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"Caja Screenshot",src:a(1253).Z,width:"912",height:"592"})),(0,l.kt)("h2",{id:"gnome-files"},"GNOME Files"),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"GNOME Files Screenshot",src:a(1055).Z,width:"886",height:"548"})),(0,l.kt)("h2",{id:"dolphin"},"Dolphin"),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"Dolphin Screenshot",src:a(3638).Z,width:"1022",height:"721"})),(0,l.kt)("h1",{id:"office-suite"},"Office Suite"),(0,l.kt)("p",null,"Solus comes pre-installed with ",(0,l.kt)("a",{parentName:"p",href:"https://libreoffice.org"},"LibreOffice"),", an office suite that is capable of replacing Microsoft",(0,l.kt)("sup",null,"TM")," Office for the most common tasks."),(0,l.kt)("p",null,"By default, Solus provides Writer (document editor), Calc (spreadsheet editor), and Impress (presentation editor). Other applications such as Math or Draw can be installed from the Software Center."),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"LibreOffice"),(0,l.kt)("th",{parentName:"tr",align:null},"Microsoft Office Equivalent"),(0,l.kt)("th",{parentName:"tr",align:null},"Apple Equivalent"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Writer"),(0,l.kt)("td",{parentName:"tr",align:null},"Word"),(0,l.kt)("td",{parentName:"tr",align:null},"Pages")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Calc"),(0,l.kt)("td",{parentName:"tr",align:null},"Excel"),(0,l.kt)("td",{parentName:"tr",align:null},"Numbers")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Impress"),(0,l.kt)("td",{parentName:"tr",align:null},"PowerPoint"),(0,l.kt)("td",{parentName:"tr",align:null},"Keynote")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Draw"),(0,l.kt)("td",{parentName:"tr",align:null},"Visio"),(0,l.kt)("td",{parentName:"tr",align:null})),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Math"),(0,l.kt)("td",{parentName:"tr",align:null}),(0,l.kt)("td",{parentName:"tr",align:null})))),(0,l.kt)("h2",{id:"calc"},"Calc"),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"LibreOffice Calc Screenshot",src:a(5353).Z,width:"1068",height:"607"})),(0,l.kt)("p",null,"Calc is a spreadsheet editor. You can view, create, and edit spreadsheets as well as leverage a comprehensive range of advanced functions. Calc supports a variety of common open formats and Microsoft",(0,l.kt)("sup",null,"TM")," Office compatible document formats such as (but not limited to): ",(0,l.kt)("inlineCode",{parentName:"p"},"xls"),", ",(0,l.kt)("inlineCode",{parentName:"p"},"xlsx"),", and ",(0,l.kt)("inlineCode",{parentName:"p"},"ods"),"."),(0,l.kt)("h2",{id:"draw"},"Draw"),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"LibreOffice Draw Screenshot",src:a(1955).Z,width:"1068",height:"637"})),(0,l.kt)("p",null,"Draw is a graphical editor that allows you to sketch diagrams, workflows and any kind of other simple to complex drawing you can imagine. You can install Draw from the Software Center by searching for the package ",(0,l.kt)("inlineCode",{parentName:"p"},"libreoffice-draw"),"."),(0,l.kt)("h2",{id:"impress"},"Impress"),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"LibreOffice Impress Screenshot",src:a(8017).Z,width:"1068",height:"605"})),(0,l.kt)("p",null,"Impress is a presentation viewer and editor. You can view, create, edit, and export presentations in common open formats or Microsoft",(0,l.kt)("sup",null,"TM")," Office compatible document formats such as (but not limited to): ",(0,l.kt)("inlineCode",{parentName:"p"},"ppt"),", ",(0,l.kt)("inlineCode",{parentName:"p"},"pptx"),", and ",(0,l.kt)("inlineCode",{parentName:"p"},"odp"),"."),(0,l.kt)("h2",{id:"math"},"Math"),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"LibreOffice Math Screenshot",src:a(6243).Z,width:"1068",height:"598"})),(0,l.kt)("p",null,"Math is a formula editor. Create your mathematical and scientific expressions and insert them with the correct formatting into your text documents, spreadsheets, presentations, or drawings. Math can be installed from the Software Center by searching for the package ",(0,l.kt)("inlineCode",{parentName:"p"},"libreoffice-math"),"."),(0,l.kt)("h2",{id:"writer"},"Writer"),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"LibreOffice Writer Screenshot",src:a(1304).Z,width:"1068",height:"748"})),(0,l.kt)("p",null,"Writer is a document editor. You can view, create, edit, and export documents in common open formats or Microsoft",(0,l.kt)("sup",null,"TM")," Office compatible document formats such as (but not limited to): ",(0,l.kt)("inlineCode",{parentName:"p"},"doc"),", ",(0,l.kt)("inlineCode",{parentName:"p"},"docx"),", and ",(0,l.kt)("inlineCode",{parentName:"p"},"odt"),"."),(0,l.kt)("h2",{id:"spell-checking"},"Spell-checking"),(0,l.kt)("p",null,"LibreOffice Writer users may want to install the package ",(0,l.kt)("inlineCode",{parentName:"p"},"libreoffice-common-dictionaries")," from Software Center to automatically enable spell-checking support."),(0,l.kt)("h3",{id:"finnish"},"Finnish"),(0,l.kt)("p",null,"Finnish language support is provided by installing ",(0,l.kt)("inlineCode",{parentName:"p"},"libreoffice-voikko"),". After installation of this package, there is further configuration required to properly leverage the Voikko spell-checking and Finnish dictionary support."),(0,l.kt)("ol",null,(0,l.kt)("li",{parentName:"ol"},"Open up LibreOffice Writer"),(0,l.kt)("li",{parentName:"ol"},"In the menubar, go to ",(0,l.kt)("inlineCode",{parentName:"li"},"Tools")," then ",(0,l.kt)("inlineCode",{parentName:"li"},"Options"),". This will open up the Options dialog."),(0,l.kt)("li",{parentName:"ol"},"Go to the Language Settings, listed on the left of Options."),(0,l.kt)("li",{parentName:"ol"},'Under Language Settings, click Writing Aids and ensure the "Spellchecker (Voikko)", "Grammar checker (Voikko)", and "Hyphenator (Voikko)" are under the "Available language modules" section.'),(0,l.kt)("li",{parentName:"ol"},'Under Language Settings, click Voikko and ensure "standard: suomi (perussanasto)" is selected under the "Vocabulary" section.')),(0,l.kt)("h1",{id:"music"},"Music"),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Desktop"),(0,l.kt)("th",{parentName:"tr",align:null},"Application"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Budgie"),(0,l.kt)("td",{parentName:"tr",align:null},"Rhythmbox")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"GNOME"),(0,l.kt)("td",{parentName:"tr",align:null},"Rhythmbox")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"MATE"),(0,l.kt)("td",{parentName:"tr",align:null},"Rhythmbox")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Plasma"),(0,l.kt)("td",{parentName:"tr",align:null},"Elisa")))),(0,l.kt)("h2",{id:"rhythmbox"},"Rhythmbox"),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"Rhythmbox Screenshot",src:a(8392).Z,width:"789",height:"606"})),(0,l.kt)("h2",{id:"elisa"},"Elisa"),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"Elisa Screenshot",src:a(2304).Z,width:"1020",height:"720"})),(0,l.kt)("h1",{id:"video"},"Video"),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Desktop"),(0,l.kt)("th",{parentName:"tr",align:null},"Application"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Budgie"),(0,l.kt)("td",{parentName:"tr",align:null},"Celluloid (formerly GNOME MPV)")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"GNOME"),(0,l.kt)("td",{parentName:"tr",align:null},"Celluloid (formerly GNOME MPV)")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"MATE"),(0,l.kt)("td",{parentName:"tr",align:null},"VLC")),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Plasma"),(0,l.kt)("td",{parentName:"tr",align:null},"Haruna")))),(0,l.kt)("h2",{id:"celluloid"},"Celluloid"),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"Celluloid Screenshot",src:a(8646).Z,width:"651",height:"491"})),(0,l.kt)("h2",{id:"vlc"},"VLC"),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"VLC Screenshot",src:a(8735).Z,width:"643",height:"586"})),(0,l.kt)("h2",{id:"haruna"},"Haruna"),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"Haruna Screenshot",src:a(3289).Z,width:"1190",height:"749"})))}d.isMDXComponent=!0},1253:(t,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/caja-72b5fc9d93b7c41200d3efa912c76ef6.jpg"},8646:(t,e,a)=>{a.d(e,{Z:()=>n});const n="data:image/webp;base64,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"},3638:(t,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/dolphin-06132e0261dad073f7f27bbee6bcbfba.jpg"},2304:(t,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/elisa-63e84725c74e3606d527b80a49234bdf.jpg"},4133:(t,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/firefox-0510dce504768afbd216c0fd00abe580.jpg"},3289:(t,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/haruna-aee9cd480cd936456de187af2cb0ecfb.jpg"},5353:(t,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/libreoffice-calc-d000f05dad58cf8e0877111b52108ecb.jpg"},1955:(t,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/libreoffice-draw-46b341512a31da6fdf6505368197b96e.jpg"},8017:(t,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/libreoffice-impress-8851e5e8a47c676d011846d7a919f95d.jpg"},6243:(t,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/libreoffice-math-0fb2b8bfd4c3f8736d107cb81b546a13.jpg"},1304:(t,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/libreoffice-writer-aeca166c3f0379a027c3d34f7d2c5d2c.jpg"},1055:(t,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/nautilus-33ea265420bee017f2cdad24b84e912d.jpg"},274:(t,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/nemo-b369a1bfe8c00fd1e524e56bd0369e0c.jpg"},8392:(t,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/rhythmbox-eb6d0894497e065d9512c2c8454f25e6.jpg"},649:(t,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/thunderbird-95db449fb1a8d3241f691334bf0b2eb3.jpg"},8735:(t,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/vlc-272af3421ef6bedd1d37716eb7a5e3ec.jpg"}}]); \ No newline at end of file diff --git a/assets/js/1a698c37.76da1876.js b/assets/js/1a698c37.8915a5ac.js similarity index 98% rename from assets/js/1a698c37.76da1876.js rename to assets/js/1a698c37.8915a5ac.js index 77d59fa99..023a9b9b2 100644 --- a/assets/js/1a698c37.76da1876.js +++ b/assets/js/1a698c37.8915a5ac.js @@ -1 +1 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[6126],{8600:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>S,contentTitle:()=>M,default:()=>B,frontMatter:()=>I,metadata:()=>N,toc:()=>R});var n=i(7462),r=i(7294),s=i(3905),a=i(5855),o=i(6010),d=i(6062),l=i(9415),c=i(5851),m=i(6775),u=i(2734),p=i(8396),g=i(1233),f=i(6863),Z=i(3828),h=i(7400),k=i(4229),E=i(9217),x=i(4132);const b=[{name:"Budgie",url:"budgie",urlConfig:"budgie/configuration",urlTips:"budgie/tips-and-tricks",description:r.createElement(d.Z,{id:"edition.budgie.description"},"A feature-rich, luxurious desktop using the most modern technologies.")},{name:"Plasma",url:"plasma",urlConfig:"plasma/configuration",urlTips:"plasma/tips-and-tricks",description:r.createElement(d.Z,{id:"edition.plasma.description"},"A sophisticated desktop experience for the tinkerers. Simple by default, powerful when needed.")},{name:"GNOME",url:"gnome",urlConfig:"gnome/configuration",urlTips:"gnome/tips-and-tricks",description:r.createElement(d.Z,{id:"edition.gnome.description"},"A simple, streamlined desktop for more modern hardware.")},{name:"MATE",url:"mate",urlConfig:"mate/configuration",urlTips:"mate/tips-and-tricks",description:r.createElement(d.Z,{id:"edition.mate.description"},"A traditional desktop for advanced users and older hardware.")}],T=e=>{let{name:t,url:i,urlConfig:n,urlTips:s,description:a}=e;const b=(0,u.Z)(),T=(0,p.Z)(b.breakpoints.down("xl")),v=(0,x.Z)(`/img/${t}.jpg`);return r.createElement(h.Z,{xs:6},r.createElement(g.Z,{className:(0,o.Z)("card"),height:1},r.createElement(g.Z,{className:(0,o.Z)("card__image")},r.createElement(l.Z,{to:i},r.createElement(c.Z,{img:v,alt:(0,d.I)({message:"Screenshot of {name} edition",id:"edition.card.image",description:"Alt text for images of editions"})}))),r.createElement(g.Z,{className:"card__body"},r.createElement(m.Z,{as:"h3"},r.createElement("a",{href:t},t)),r.createElement("p",null,a)),r.createElement(g.Z,{className:"card__footer"},r.createElement(f.Z,{"aria-label":"contained card button group",fullWidth:!0,sx:{borderRadius:"10px"},variant:"contained"},r.createElement(Z.Z,{href:n,startIcon:T?void 0:r.createElement(k.Z,null),sx:{borderRadius:"10px",paddingInline:2}},r.createElement(d.Z,{id:"edition.card.configuration"},"Configuration")),r.createElement(Z.Z,{href:s,startIcon:T?void 0:r.createElement(E.Z,null),sx:{borderRadius:"10px",paddingInline:2}},r.createElement(d.Z,{id:"edition.card.tipsntricks"},"Tips & Tricks"))))))},v=()=>r.createElement(h.Z,{container:!0,columns:{xs:6,sm:6,md:6,lg:12},spacing:2},b.map((e=>r.createElement(T,(0,n.Z)({key:e.name},e)))));var A=i(6189),C=i(1265),_=i(8391);const w=(0,C.Z)({breakpoints:{values:{xs:0,sm:600,md:900,lg:1200,xl:1536,subfullhd:1800,fullhd:1920}},palette:{primary:{light:A.Z.A700,main:A.Z.A700,dark:A.Z.A100}}}),y=(0,_.Z)(w,{breakpoints:w.breakpoints.keys,factor:2}),I={},M="Editions",N={unversionedId:"user/editions/index",id:"user/editions/index",title:"Editions",description:"",source:"@site/docs/user/editions/index.mdx",sourceDirName:"user/editions",slug:"/user/editions/",permalink:"/docs/user/editions/",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/editions/index.mdx",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{},sidebar:"userSidebar",previous:{title:"Testing an ISO",permalink:"/docs/user/contributing/testing-an-iso"},next:{title:"Budgie",permalink:"/docs/user/editions/budgie/"}},S={},R=[],D={toc:R},U="wrapper";function B(e){let{components:t,...i}=e;return(0,s.kt)(U,(0,n.Z)({},D,i,{components:t,mdxType:"MDXLayout"}),(0,s.kt)("h1",{id:"editions"},"Editions"),(0,s.kt)(a.Z,{theme:y,mdxType:"ThemeProvider"},(0,s.kt)(v,{mdxType:"EditionCardsRow"})))}B.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[6126],{8600:(e,t,i)=>{i.r(t),i.d(t,{assets:()=>S,contentTitle:()=>M,default:()=>B,frontMatter:()=>I,metadata:()=>N,toc:()=>R});var n=i(7462),r=i(7294),s=i(3905),a=i(5855),o=i(6010),d=i(6062),l=i(9415),c=i(5851),m=i(6775),u=i(2734),p=i(8396),g=i(1233),f=i(6863),Z=i(3828),h=i(7400),k=i(4229),E=i(9217),x=i(4132);const b=[{name:"Budgie",url:"budgie",urlConfig:"budgie/configuration",urlTips:"budgie/tips-and-tricks",description:r.createElement(d.Z,{id:"edition.budgie.description"},"A feature-rich, luxurious desktop using the most modern technologies.")},{name:"Plasma",url:"plasma",urlConfig:"plasma/configuration",urlTips:"plasma/tips-and-tricks",description:r.createElement(d.Z,{id:"edition.plasma.description"},"A sophisticated desktop experience for the tinkerers. Simple by default, powerful when needed.")},{name:"GNOME",url:"gnome",urlConfig:"gnome/configuration",urlTips:"gnome/tips-and-tricks",description:r.createElement(d.Z,{id:"edition.gnome.description"},"A simple, streamlined desktop for more modern hardware.")},{name:"MATE",url:"mate",urlConfig:"mate/configuration",urlTips:"mate/tips-and-tricks",description:r.createElement(d.Z,{id:"edition.mate.description"},"A traditional desktop for advanced users and older hardware.")}],T=e=>{let{name:t,url:i,urlConfig:n,urlTips:s,description:a}=e;const b=(0,u.Z)(),T=(0,p.Z)(b.breakpoints.down("xl")),v=(0,x.Z)(`/img/${t}.jpg`);return r.createElement(h.Z,{xs:6},r.createElement(g.Z,{className:(0,o.Z)("card"),height:1},r.createElement(g.Z,{className:(0,o.Z)("card__image")},r.createElement(l.Z,{to:i},r.createElement(c.Z,{img:v,alt:(0,d.I)({message:"Screenshot of {name} edition",id:"edition.card.image",description:"Alt text for images of editions"})}))),r.createElement(g.Z,{className:"card__body"},r.createElement(m.Z,{as:"h3"},r.createElement("a",{href:t},t)),r.createElement("p",null,a)),r.createElement(g.Z,{className:"card__footer"},r.createElement(f.Z,{"aria-label":"contained card button group",fullWidth:!0,sx:{borderRadius:"10px"},variant:"contained"},r.createElement(Z.Z,{href:n,startIcon:T?void 0:r.createElement(k.Z,null),sx:{borderRadius:"10px",paddingInline:2}},r.createElement(d.Z,{id:"edition.card.configuration"},"Configuration")),r.createElement(Z.Z,{href:s,startIcon:T?void 0:r.createElement(E.Z,null),sx:{borderRadius:"10px",paddingInline:2}},r.createElement(d.Z,{id:"edition.card.tipsntricks"},"Tips & Tricks"))))))},v=()=>r.createElement(h.Z,{container:!0,columns:{xs:6,sm:6,md:6,lg:12},spacing:2},b.map((e=>r.createElement(T,(0,n.Z)({key:e.name},e)))));var A=i(6189),C=i(1265),_=i(8391);const w=(0,C.Z)({breakpoints:{values:{xs:0,sm:600,md:900,lg:1200,xl:1536,subfullhd:1800,fullhd:1920}},palette:{primary:{light:A.Z.A700,main:A.Z.A700,dark:A.Z.A100}}}),y=(0,_.Z)(w,{breakpoints:w.breakpoints.keys,factor:2}),I={},M="Editions",N={unversionedId:"user/editions/index",id:"user/editions/index",title:"Editions",description:"",source:"@site/docs/user/editions/index.mdx",sourceDirName:"user/editions",slug:"/user/editions/",permalink:"/docs/user/editions/",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/editions/index.mdx",tags:[],version:"current",lastUpdatedAt:1695222528,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{},sidebar:"userSidebar",previous:{title:"Testing an ISO",permalink:"/docs/user/contributing/testing-an-iso"},next:{title:"Budgie",permalink:"/docs/user/editions/budgie/"}},S={},R=[],D={toc:R},U="wrapper";function B(e){let{components:t,...i}=e;return(0,s.kt)(U,(0,n.Z)({},D,i,{components:t,mdxType:"MDXLayout"}),(0,s.kt)("h1",{id:"editions"},"Editions"),(0,s.kt)(a.Z,{theme:y,mdxType:"ThemeProvider"},(0,s.kt)(v,{mdxType:"EditionCardsRow"})))}B.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/1ae709a2.3f55e578.js b/assets/js/1ae709a2.a32b4de3.js similarity index 98% rename from assets/js/1ae709a2.3f55e578.js rename to assets/js/1ae709a2.a32b4de3.js index 0e89f06f2..e73c9a5b1 100644 --- a/assets/js/1ae709a2.3f55e578.js +++ b/assets/js/1ae709a2.a32b4de3.js @@ -1 +1 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[355],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>y});var a=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function n(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}return r}function s(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var i=a.createContext({}),c=function(e){var t=a.useContext(i),r=t;return e&&(r="function"==typeof e?e(t):s(s({},t),e)),r},u=function(e){var t=c(e.components);return a.createElement(i.Provider,{value:t},e.children)},p="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var r=e.components,o=e.mdxType,n=e.originalType,i=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),p=c(r),d=o,y=p["".concat(i,".").concat(d)]||p[d]||m[d]||n;return r?a.createElement(y,s(s({ref:t},u),{},{components:r})):a.createElement(y,s({ref:t},u))}));function y(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var n=r.length,s=new Array(n);s[0]=d;var l={};for(var i in t)hasOwnProperty.call(t,i)&&(l[i]=t[i]);l.originalType=e,l[p]="string"==typeof e?e:o,s[1]=l;for(var c=2;c{r.r(t),r.d(t,{assets:()=>i,contentTitle:()=>s,default:()=>m,frontMatter:()=>n,metadata:()=>l,toc:()=>c});var a=r(7462),o=(r(7294),r(3905));const n={title:"History and Software Rollback",summary:"History and Software Rollback"},s="History and Software Rollback",l={unversionedId:"user/package-management/history-and-rollback",id:"user/package-management/history-and-rollback",title:"History and Software Rollback",description:"Solus provides a history and rollback feature via its package manager, eopkg. This feature allows you to see when your repository was last updated, actions such as installation, removal, and upgrading of software.",source:"@site/docs/user/package-management/history-and-rollback.md",sourceDirName:"user/package-management",slug:"/user/package-management/history-and-rollback",permalink:"/docs/user/package-management/history-and-rollback",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/package-management/history-and-rollback.md",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"History and Software Rollback",summary:"History and Software Rollback"},sidebar:"userSidebar",previous:{title:"Basics to Package Management",permalink:"/docs/user/package-management/basics"},next:{title:"Repository Management",permalink:"/docs/user/package-management/repo-management"}},i={},c=[{value:"History",id:"history",level:2},{value:"Rollback",id:"rollback",level:2}],u={toc:c},p="wrapper";function m(e){let{components:t,...r}=e;return(0,o.kt)(p,(0,a.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"history-and-software-rollback"},"History and Software Rollback"),(0,o.kt)("p",null,"Solus provides a history and rollback feature via its package manager, eopkg. This feature allows you to see when your repository was last updated, actions such as installation, removal, and upgrading of software."),(0,o.kt)("p",null,"Our rollback feature allows you to essentially rewind your system's software back to a previous state, assuming you or our repository has the versions in question."),(0,o.kt)("h2",{id:"history"},"History"),(0,o.kt)("p",null,"You can see the history from eopkg by using:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg history\n")),(0,o.kt)("h2",{id:"rollback"},"Rollback"),(0,o.kt)("p",null,"To rollback your system, first use the above history command to check what the transaction / operation number was. Then, we use the following command:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg history -t number\n")),(0,o.kt)("p",null,"The number, in this case, is the operation before the one you want to change. So if the number was ",(0,o.kt)("inlineCode",{parentName:"p"},"100"),", then you would use ",(0,o.kt)("inlineCode",{parentName:"p"},"99"),"."))}m.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[355],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>y});var a=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function n(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}return r}function s(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var i=a.createContext({}),c=function(e){var t=a.useContext(i),r=t;return e&&(r="function"==typeof e?e(t):s(s({},t),e)),r},u=function(e){var t=c(e.components);return a.createElement(i.Provider,{value:t},e.children)},p="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var r=e.components,o=e.mdxType,n=e.originalType,i=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),p=c(r),d=o,y=p["".concat(i,".").concat(d)]||p[d]||m[d]||n;return r?a.createElement(y,s(s({ref:t},u),{},{components:r})):a.createElement(y,s({ref:t},u))}));function y(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var n=r.length,s=new Array(n);s[0]=d;var l={};for(var i in t)hasOwnProperty.call(t,i)&&(l[i]=t[i]);l.originalType=e,l[p]="string"==typeof e?e:o,s[1]=l;for(var c=2;c{r.r(t),r.d(t,{assets:()=>i,contentTitle:()=>s,default:()=>m,frontMatter:()=>n,metadata:()=>l,toc:()=>c});var a=r(7462),o=(r(7294),r(3905));const n={title:"History and Software Rollback",summary:"History and Software Rollback"},s="History and Software Rollback",l={unversionedId:"user/package-management/history-and-rollback",id:"user/package-management/history-and-rollback",title:"History and Software Rollback",description:"Solus provides a history and rollback feature via its package manager, eopkg. This feature allows you to see when your repository was last updated, actions such as installation, removal, and upgrading of software.",source:"@site/docs/user/package-management/history-and-rollback.md",sourceDirName:"user/package-management",slug:"/user/package-management/history-and-rollback",permalink:"/docs/user/package-management/history-and-rollback",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/package-management/history-and-rollback.md",tags:[],version:"current",lastUpdatedAt:1695222528,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"History and Software Rollback",summary:"History and Software Rollback"},sidebar:"userSidebar",previous:{title:"Basics to Package Management",permalink:"/docs/user/package-management/basics"},next:{title:"Repository Management",permalink:"/docs/user/package-management/repo-management"}},i={},c=[{value:"History",id:"history",level:2},{value:"Rollback",id:"rollback",level:2}],u={toc:c},p="wrapper";function m(e){let{components:t,...r}=e;return(0,o.kt)(p,(0,a.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"history-and-software-rollback"},"History and Software Rollback"),(0,o.kt)("p",null,"Solus provides a history and rollback feature via its package manager, eopkg. This feature allows you to see when your repository was last updated, actions such as installation, removal, and upgrading of software."),(0,o.kt)("p",null,"Our rollback feature allows you to essentially rewind your system's software back to a previous state, assuming you or our repository has the versions in question."),(0,o.kt)("h2",{id:"history"},"History"),(0,o.kt)("p",null,"You can see the history from eopkg by using:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg history\n")),(0,o.kt)("h2",{id:"rollback"},"Rollback"),(0,o.kt)("p",null,"To rollback your system, first use the above history command to check what the transaction / operation number was. Then, we use the following command:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg history -t number\n")),(0,o.kt)("p",null,"The number, in this case, is the operation before the one you want to change. So if the number was ",(0,o.kt)("inlineCode",{parentName:"p"},"100"),", then you would use ",(0,o.kt)("inlineCode",{parentName:"p"},"99"),"."))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/21944812.bd158eae.js b/assets/js/21944812.66093e96.js similarity index 99% rename from assets/js/21944812.bd158eae.js rename to assets/js/21944812.66093e96.js index 53bdc3c76..cedf31901 100644 --- a/assets/js/21944812.bd158eae.js +++ b/assets/js/21944812.66093e96.js @@ -1 +1 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[9873],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>f});var o=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function s(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var l=o.createContext({}),u=function(e){var t=o.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):s(s({},t),e)),n},p=function(e){var t=u(e.components);return o.createElement(l.Provider,{value:t},e.children)},d="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},m=o.forwardRef((function(e,t){var n=e.components,r=e.mdxType,i=e.originalType,l=e.parentName,p=a(e,["components","mdxType","originalType","parentName"]),d=u(n),m=r,f=d["".concat(l,".").concat(m)]||d[m]||c[m]||i;return n?o.createElement(f,s(s({ref:t},p),{},{components:n})):o.createElement(f,s({ref:t},p))}));function f(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var i=n.length,s=new Array(i);s[0]=m;var a={};for(var l in t)hasOwnProperty.call(t,l)&&(a[l]=t[l]);a.originalType=e,a[d]="string"==typeof e?e:r,s[1]=a;for(var u=2;u{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>c,frontMatter:()=>i,metadata:()=>a,toc:()=>u});var o=n(7462),r=(n(7294),n(3905));const i={title:"Desktops",summary:"Quick guides on switching between or installing additional Desktop Environments on Solus"},s="Desktop Environments",a={unversionedId:"user/software/desktops/index",id:"user/software/desktops/index",title:"Desktops",description:"Solus offers a multitude of desktop environments, ranging from the feature-rich and modern Budgie to the traditional MATE experience. It is recommended to use the ISO for a specific desktop environment but it is possible to install them afterwards if you wish to do try one out.",source:"@site/docs/user/software/desktops/index.md",sourceDirName:"user/software/desktops",slug:"/user/software/desktops/",permalink:"/docs/user/software/desktops/",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/desktops/index.md",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Desktops",summary:"Quick guides on switching between or installing additional Desktop Environments on Solus"},sidebar:"userSidebar",previous:{title:"Command Line",permalink:"/docs/user/software/command-line/"},next:{title:"Development",permalink:"/docs/user/software/development/"}},l={},u=[{value:"Budgie",id:"budgie",level:2},{value:"Gnome Shell",id:"gnome-shell",level:2},{value:"MATE",id:"mate",level:2},{value:"i3",id:"i3",level:2}],p={toc:u},d="wrapper";function c(e){let{components:t,...n}=e;return(0,r.kt)(d,(0,o.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"desktop-environments"},"Desktop Environments"),(0,r.kt)("p",null,"Solus offers a ",(0,r.kt)("a",{parentName:"p",href:"https://getsol.us/solus/experiences/"},"multitude of desktop environments"),", ranging from the feature-rich and modern Budgie to the traditional MATE experience. It is recommended to use the ISO for a specific desktop environment but it is possible to install them afterwards if you wish to do try one out."),(0,r.kt)("p",null,"WARNING: Do NOT attempt to install ANY other desktop environments next to KDE Plasma Desktop. This scenario is NOT supported and you will be told so in no uncertain terms if asking for support."),(0,r.kt)("h2",{id:"budgie"},"Budgie"),(0,r.kt)("p",null,"The flagship desktop environment / experience of Solus is Budgie. If you have installed either our MATE or GNOME editions, you can try out and install Budgie by running the following command:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"# Do NOT attempt to do this if you are running the KDE Plasma Desktop version of Solus!\nsudo eopkg install -c desktop.budgie\n")),(0,r.kt)("h2",{id:"gnome-shell"},"Gnome Shell"),(0,r.kt)("p",null,"Solus offers a GNOME Shell experience that ships out-of-the-box with a variety of extensions. If you have installed either our Budgie or MATE editions, you can try out and install GNOME Shell by running the following commands:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"# Do NOT attempt to do this if you are running the KDE Plasma Desktop version of Solus!\nsudo eopkg rm lightdm\nsudo eopkg install gdm gnome-shell gnome-desktop-branding-fortitude\n")),(0,r.kt)("h2",{id:"mate"},"MATE"),(0,r.kt)("p",null,"Solus offers the MATE desktop environment / experience, tailored to advanced users and older hardware, as well as shipping with our modern menu called ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/getsolus/brisk-menu"},"Brisk Menu"),". If you have installed either our Budgie or GNOME editions, you can try out and install MATE by running the following command:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"# Do NOT attempt to do this if you are running the KDE Plasma Desktop version of Solus!\nsudo eopkg install -c desktop.mate\n")),(0,r.kt)("h2",{id:"i3"},"i3"),(0,r.kt)("p",null,"Solus offers i3 as a tiling window manager. Users wanting to try i3 can install it by running the following command:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"# Do NOT attempt to do this if you are running the KDE Plasma Desktop version of Solus!\nsudo eopkg install i3\n")),(0,r.kt)("p",null,"If you want to use i3 with support for GNOME Settings Daemon and other GNOME functionality, follow the instructions for installation of GNOME Shell, then choose GNOME+i3 at the login screen to use it."),(0,r.kt)("p",null,"For more information about tiling window managers, click ",(0,r.kt)("a",{parentName:"p",href:"https:/en.wikipedia.org/wiki/Tiling_window_manager"},"here"),"."))}c.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[9873],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>f});var o=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function s(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var l=o.createContext({}),u=function(e){var t=o.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):s(s({},t),e)),n},p=function(e){var t=u(e.components);return o.createElement(l.Provider,{value:t},e.children)},d="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},m=o.forwardRef((function(e,t){var n=e.components,r=e.mdxType,i=e.originalType,l=e.parentName,p=a(e,["components","mdxType","originalType","parentName"]),d=u(n),m=r,f=d["".concat(l,".").concat(m)]||d[m]||c[m]||i;return n?o.createElement(f,s(s({ref:t},p),{},{components:n})):o.createElement(f,s({ref:t},p))}));function f(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var i=n.length,s=new Array(i);s[0]=m;var a={};for(var l in t)hasOwnProperty.call(t,l)&&(a[l]=t[l]);a.originalType=e,a[d]="string"==typeof e?e:r,s[1]=a;for(var u=2;u{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>c,frontMatter:()=>i,metadata:()=>a,toc:()=>u});var o=n(7462),r=(n(7294),n(3905));const i={title:"Desktops",summary:"Quick guides on switching between or installing additional Desktop Environments on Solus"},s="Desktop Environments",a={unversionedId:"user/software/desktops/index",id:"user/software/desktops/index",title:"Desktops",description:"Solus offers a multitude of desktop environments, ranging from the feature-rich and modern Budgie to the traditional MATE experience. It is recommended to use the ISO for a specific desktop environment but it is possible to install them afterwards if you wish to do try one out.",source:"@site/docs/user/software/desktops/index.md",sourceDirName:"user/software/desktops",slug:"/user/software/desktops/",permalink:"/docs/user/software/desktops/",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/desktops/index.md",tags:[],version:"current",lastUpdatedAt:1695222528,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Desktops",summary:"Quick guides on switching between or installing additional Desktop Environments on Solus"},sidebar:"userSidebar",previous:{title:"Command Line",permalink:"/docs/user/software/command-line/"},next:{title:"Development",permalink:"/docs/user/software/development/"}},l={},u=[{value:"Budgie",id:"budgie",level:2},{value:"Gnome Shell",id:"gnome-shell",level:2},{value:"MATE",id:"mate",level:2},{value:"i3",id:"i3",level:2}],p={toc:u},d="wrapper";function c(e){let{components:t,...n}=e;return(0,r.kt)(d,(0,o.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"desktop-environments"},"Desktop Environments"),(0,r.kt)("p",null,"Solus offers a ",(0,r.kt)("a",{parentName:"p",href:"https://getsol.us/solus/experiences/"},"multitude of desktop environments"),", ranging from the feature-rich and modern Budgie to the traditional MATE experience. It is recommended to use the ISO for a specific desktop environment but it is possible to install them afterwards if you wish to do try one out."),(0,r.kt)("p",null,"WARNING: Do NOT attempt to install ANY other desktop environments next to KDE Plasma Desktop. This scenario is NOT supported and you will be told so in no uncertain terms if asking for support."),(0,r.kt)("h2",{id:"budgie"},"Budgie"),(0,r.kt)("p",null,"The flagship desktop environment / experience of Solus is Budgie. If you have installed either our MATE or GNOME editions, you can try out and install Budgie by running the following command:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"# Do NOT attempt to do this if you are running the KDE Plasma Desktop version of Solus!\nsudo eopkg install -c desktop.budgie\n")),(0,r.kt)("h2",{id:"gnome-shell"},"Gnome Shell"),(0,r.kt)("p",null,"Solus offers a GNOME Shell experience that ships out-of-the-box with a variety of extensions. If you have installed either our Budgie or MATE editions, you can try out and install GNOME Shell by running the following commands:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"# Do NOT attempt to do this if you are running the KDE Plasma Desktop version of Solus!\nsudo eopkg rm lightdm\nsudo eopkg install gdm gnome-shell gnome-desktop-branding-fortitude\n")),(0,r.kt)("h2",{id:"mate"},"MATE"),(0,r.kt)("p",null,"Solus offers the MATE desktop environment / experience, tailored to advanced users and older hardware, as well as shipping with our modern menu called ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/getsolus/brisk-menu"},"Brisk Menu"),". If you have installed either our Budgie or GNOME editions, you can try out and install MATE by running the following command:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"# Do NOT attempt to do this if you are running the KDE Plasma Desktop version of Solus!\nsudo eopkg install -c desktop.mate\n")),(0,r.kt)("h2",{id:"i3"},"i3"),(0,r.kt)("p",null,"Solus offers i3 as a tiling window manager. Users wanting to try i3 can install it by running the following command:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"# Do NOT attempt to do this if you are running the KDE Plasma Desktop version of Solus!\nsudo eopkg install i3\n")),(0,r.kt)("p",null,"If you want to use i3 with support for GNOME Settings Daemon and other GNOME functionality, follow the instructions for installation of GNOME Shell, then choose GNOME+i3 at the login screen to use it."),(0,r.kt)("p",null,"For more information about tiling window managers, click ",(0,r.kt)("a",{parentName:"p",href:"https:/en.wikipedia.org/wiki/Tiling_window_manager"},"here"),"."))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/257b9082.b3b62835.js b/assets/js/257b9082.2d6d903d.js similarity index 98% rename from assets/js/257b9082.b3b62835.js rename to assets/js/257b9082.2d6d903d.js index 323031529..5bef61bd1 100644 --- a/assets/js/257b9082.b3b62835.js +++ b/assets/js/257b9082.2d6d903d.js @@ -1 +1 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[3192],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>f});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=r.createContext({}),c=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},p=function(e){var t=c(e.components);return r.createElement(s.Provider,{value:t},e.children)},d="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),d=c(n),m=o,f=d["".concat(s,".").concat(m)]||d[m]||u[m]||a;return n?r.createElement(f,i(i({ref:t},p),{},{components:n})):r.createElement(f,i({ref:t},p))}));function f(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[d]="string"==typeof e?e:o,i[1]=l;for(var c=2;c{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>u,frontMatter:()=>a,metadata:()=>l,toc:()=>c});var r=n(7462),o=(n(7294),n(3905));const a={},i="Containers",l={unversionedId:"user/software/development/containers",id:"user/software/development/containers",title:"Containers",description:"Containers are a popular method to run and configure applications in a confined environment without directly installing the application and all it's dependencies. Solus provides the following container technologies:",source:"@site/docs/user/software/development/containers.md",sourceDirName:"user/software/development",slug:"/user/software/development/containers",permalink:"/docs/user/software/development/containers",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/development/containers.md",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{},sidebar:"userSidebar",previous:{title:"Android",permalink:"/docs/user/software/development/android"},next:{title:"Java",permalink:"/docs/user/software/development/java"}},s={},c=[{value:"Docker",id:"docker",level:2},{value:"Podman",id:"podman",level:2}],p={toc:c},d="wrapper";function u(e){let{components:t,...n}=e;return(0,o.kt)(d,(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"containers"},"Containers"),(0,o.kt)("p",null,"Containers are a popular method to run and configure applications in a confined environment without directly installing the application and all it's dependencies. Solus provides the following container technologies: "),(0,o.kt)("h2",{id:"docker"},"Docker"),(0,o.kt)("p",null,"Docker is a container engine developed by Docker Inc. Solus provides the command line utility ",(0,o.kt)("inlineCode",{parentName:"p"},"docker")," to run and manage docker containers."),(0,o.kt)("p",null,"A wide variety of applications are available through the official container registry ",(0,o.kt)("a",{parentName:"p",href:"https://hub.docker.com/search?q="},"Docker Hub")),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Install the docker engine by running ",(0,o.kt)("inlineCode",{parentName:"li"},"sudo eopkg it docker")," (you may also want to install ",(0,o.kt)("inlineCode",{parentName:"li"},"docker-compose"),")"),(0,o.kt)("li",{parentName:"ul"},"Test your installation with ",(0,o.kt)("inlineCode",{parentName:"li"},"sudo docker run hello-world")),(0,o.kt)("li",{parentName:"ul"},"Optional: For sudo-less docker, run ",(0,o.kt)("inlineCode",{parentName:"li"},"sudo usermod -aG docker $USER"),". You must restart for this change to take effect"),(0,o.kt)("li",{parentName:"ul"},"Optional: Allow the docker daemon to start automatically at system startup ",(0,o.kt)("inlineCode",{parentName:"li"},"sudo systemctl enable docker")),(0,o.kt)("li",{parentName:"ul"},"Refer to the official ",(0,o.kt)("a",{parentName:"li",href:"https://docs.docker.com/"},"Docker Docs")," for further topics")),(0,o.kt)("h2",{id:"podman"},"Podman"),(0,o.kt)("p",null,"Podman is a container manager by Red Hat. Podman's main advantage is the capability of running containers without root permissions, thus limiting the attack surface of the host system. Assuming an attacker will be able to escape a compromised container, they won't have full control of the machine."),(0,o.kt)("p",null,"Podman's command line interface is 100% compatible with Docker, to the point it's possible to replace the ",(0,o.kt)("inlineCode",{parentName:"p"},"docker")," command with ",(0,o.kt)("inlineCode",{parentName:"p"},"podman")," without any subsequent errors."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Install Podman by running ",(0,o.kt)("inlineCode",{parentName:"li"},"sudo eopkg it podman")),(0,o.kt)("li",{parentName:"ul"},"Optionally, add ",(0,o.kt)("inlineCode",{parentName:"li"},"alias docker=podman")," to your initial shell script, should you want to replace Docker with Podman while retaining your typing habits"),(0,o.kt)("li",{parentName:"ul"},"Refer to the official ",(0,o.kt)("a",{parentName:"li",href:"https://podman.io/"},"Podman website")," for more documentation")))}u.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[3192],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>f});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=r.createContext({}),c=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},p=function(e){var t=c(e.components);return r.createElement(s.Provider,{value:t},e.children)},d="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),d=c(n),m=o,f=d["".concat(s,".").concat(m)]||d[m]||u[m]||a;return n?r.createElement(f,i(i({ref:t},p),{},{components:n})):r.createElement(f,i({ref:t},p))}));function f(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[d]="string"==typeof e?e:o,i[1]=l;for(var c=2;c{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>u,frontMatter:()=>a,metadata:()=>l,toc:()=>c});var r=n(7462),o=(n(7294),n(3905));const a={},i="Containers",l={unversionedId:"user/software/development/containers",id:"user/software/development/containers",title:"Containers",description:"Containers are a popular method to run and configure applications in a confined environment without directly installing the application and all it's dependencies. Solus provides the following container technologies:",source:"@site/docs/user/software/development/containers.md",sourceDirName:"user/software/development",slug:"/user/software/development/containers",permalink:"/docs/user/software/development/containers",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/development/containers.md",tags:[],version:"current",lastUpdatedAt:1695222528,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{},sidebar:"userSidebar",previous:{title:"Android",permalink:"/docs/user/software/development/android"},next:{title:"Java",permalink:"/docs/user/software/development/java"}},s={},c=[{value:"Docker",id:"docker",level:2},{value:"Podman",id:"podman",level:2}],p={toc:c},d="wrapper";function u(e){let{components:t,...n}=e;return(0,o.kt)(d,(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"containers"},"Containers"),(0,o.kt)("p",null,"Containers are a popular method to run and configure applications in a confined environment without directly installing the application and all it's dependencies. Solus provides the following container technologies: "),(0,o.kt)("h2",{id:"docker"},"Docker"),(0,o.kt)("p",null,"Docker is a container engine developed by Docker Inc. Solus provides the command line utility ",(0,o.kt)("inlineCode",{parentName:"p"},"docker")," to run and manage docker containers."),(0,o.kt)("p",null,"A wide variety of applications are available through the official container registry ",(0,o.kt)("a",{parentName:"p",href:"https://hub.docker.com/search?q="},"Docker Hub")),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Install the docker engine by running ",(0,o.kt)("inlineCode",{parentName:"li"},"sudo eopkg it docker")," (you may also want to install ",(0,o.kt)("inlineCode",{parentName:"li"},"docker-compose"),")"),(0,o.kt)("li",{parentName:"ul"},"Test your installation with ",(0,o.kt)("inlineCode",{parentName:"li"},"sudo docker run hello-world")),(0,o.kt)("li",{parentName:"ul"},"Optional: For sudo-less docker, run ",(0,o.kt)("inlineCode",{parentName:"li"},"sudo usermod -aG docker $USER"),". You must restart for this change to take effect"),(0,o.kt)("li",{parentName:"ul"},"Optional: Allow the docker daemon to start automatically at system startup ",(0,o.kt)("inlineCode",{parentName:"li"},"sudo systemctl enable docker")),(0,o.kt)("li",{parentName:"ul"},"Refer to the official ",(0,o.kt)("a",{parentName:"li",href:"https://docs.docker.com/"},"Docker Docs")," for further topics")),(0,o.kt)("h2",{id:"podman"},"Podman"),(0,o.kt)("p",null,"Podman is a container manager by Red Hat. Podman's main advantage is the capability of running containers without root permissions, thus limiting the attack surface of the host system. Assuming an attacker will be able to escape a compromised container, they won't have full control of the machine."),(0,o.kt)("p",null,"Podman's command line interface is 100% compatible with Docker, to the point it's possible to replace the ",(0,o.kt)("inlineCode",{parentName:"p"},"docker")," command with ",(0,o.kt)("inlineCode",{parentName:"p"},"podman")," without any subsequent errors."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Install Podman by running ",(0,o.kt)("inlineCode",{parentName:"li"},"sudo eopkg it podman")),(0,o.kt)("li",{parentName:"ul"},"Optionally, add ",(0,o.kt)("inlineCode",{parentName:"li"},"alias docker=podman")," to your initial shell script, should you want to replace Docker with Podman while retaining your typing habits"),(0,o.kt)("li",{parentName:"ul"},"Refer to the official ",(0,o.kt)("a",{parentName:"li",href:"https://podman.io/"},"Podman website")," for more documentation")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/2598a3a5.0dc5c588.js b/assets/js/2598a3a5.95cb9f93.js similarity index 99% rename from assets/js/2598a3a5.0dc5c588.js rename to assets/js/2598a3a5.95cb9f93.js index e5a1219ad..8a7b12baf 100644 --- a/assets/js/2598a3a5.0dc5c588.js +++ b/assets/js/2598a3a5.95cb9f93.js @@ -1 +1 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[5951],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>A});var o=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function r(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var l=o.createContext({}),c=function(e){var t=o.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):r(r({},t),e)),n},d=function(e){var t=c(e.components);return o.createElement(l.Provider,{value:t},e.children)},p="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},h=o.forwardRef((function(e,t){var n=e.components,a=e.mdxType,i=e.originalType,l=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),p=c(n),h=a,A=p["".concat(l,".").concat(h)]||p[h]||u[h]||i;return n?o.createElement(A,r(r({ref:t},d),{},{components:n})):o.createElement(A,r({ref:t},d))}));function A(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=n.length,r=new Array(i);r[0]=h;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[p]="string"==typeof e?e:a,r[1]=s;for(var c=2;c{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>r,default:()=>u,frontMatter:()=>i,metadata:()=>s,toc:()=>c});var o=n(7462),a=(n(7294),n(3905));const i={title:"Configuration",summary:"Help for configuring MATE Desktop on Solus"},r="Configuration",s={unversionedId:"user/editions/mate/configuration",id:"user/editions/mate/configuration",title:"Configuration",description:"Date and Time",source:"@site/docs/user/editions/mate/configuration.md",sourceDirName:"user/editions/mate",slug:"/user/editions/mate/configuration",permalink:"/docs/user/editions/mate/configuration",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/editions/mate/configuration.md",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Configuration",summary:"Help for configuring MATE Desktop on Solus"},sidebar:"userSidebar",previous:{title:"MATE",permalink:"/docs/user/editions/mate/"},next:{title:"Tips and Tricks",permalink:"/docs/user/editions/mate/tips-and-tricks"}},l={},c=[{value:"Date and Time",id:"date-and-time",level:2},{value:"Default Applications",id:"default-applications",level:2},{value:"Displays",id:"displays",level:2},{value:"Keyboard Layout",id:"keyboard-layout",level:2},{value:"IBus",id:"ibus",level:3},{value:"Mouse and Touchpad",id:"mouse-and-touchpad",level:2},{value:"Mouse",id:"mouse",level:3},{value:"Touchpad",id:"touchpad",level:3},{value:"Networking",id:"networking",level:2},{value:"Non-Hidden Network",id:"non-hidden-network",level:3},{value:"Hidden Network",id:"hidden-network",level:3},{value:"Sound and Sound Devices",id:"sound-and-sound-devices",level:2},{value:"Settings",id:"settings",level:3},{value:"Users",id:"users",level:2},{value:"Adding a User",id:"adding-a-user",level:3},{value:"Removing a User",id:"removing-a-user",level:3},{value:"Desktop Background",id:"desktop-background",level:2},{value:"Desktop Icons",id:"desktop-icons",level:2},{value:"Workspaces",id:"workspaces",level:2},{value:"Keyboard Shortcuts",id:"keyboard-shortcuts",level:3},{value:"Workspaces Configuration",id:"workspaces-configuration",level:3}],d={toc:c},p="wrapper";function u(e){let{components:t,...i}=e;return(0,a.kt)(p,(0,o.Z)({},d,i,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"configuration"},"Configuration"),(0,a.kt)("h1",{id:"system"},"System"),(0,a.kt)("h2",{id:"date-and-time"},"Date and Time"),(0,a.kt)("p",null,'Using MATE, there are a couple of different ways to change the date and time. You can right click on the time in the bottom panel and click on "Preferences".'),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE Date and Time Right-Click Menu",src:n(4205).Z,width:"195",height:"298"})),(0,a.kt)("p",null,"This opens the Clock Preferences window and allows you to show the date, seconds or use 24 hour time."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE Clock Preferences",src:n(7653).Z,width:"375",height:"367"})),(0,a.kt)("p",null,'To change the time, click on "Time Settings" at the bottom of this window.'),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE Time Settings",src:n(1410).Z,width:"459",height:"355"})),(0,a.kt)("p",null,'Once you have the correct time, you can click on "Set System Time".'),(0,a.kt)("p",null,'Alternatively, if you wish to change your timezone, open the Brisk Menu and then click on "Administration" followed by "Time and Date". Click on "Unlock" and input your user password so that you can alter the time zone.'),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE Timezone Settings",src:n(9206).Z,width:"496",height:"380"})),(0,a.kt)("h2",{id:"default-applications"},"Default Applications"),(0,a.kt)("p",null,'Using MATE, open the Brisk Menu and click on "Preferences" and then on "Preferred Applications".'),(0,a.kt)("p",null,"In this section you will need to click one of the five tabs at the top to find the category you wish to change. For most categories, you will need to have installed alternative applications before you can change the default settings. For instance, if you wish to change the default image viewer from Eye of MATE to GIMP then you must first install GIMP (available in the Software Center)."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE Preferred Applications",src:n(3340).Z,width:"399",height:"355"})),(0,a.kt)("p",null,'You can specify default applications for individual file types by right clicking on a file and then clicking on "Open with other Application...".'),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE File Context Menu",src:n(2077).Z,width:"302",height:"384"})),(0,a.kt)("p",null,'Next, select the application you wish to use and make sure "Remember this application for "your file type" files" is ticked. Finish by clicking "Open". In the future, all files with the same file type will open with the same application.'),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE Application Selection",src:n(8197).Z,width:"426",height:"501"})),(0,a.kt)("h2",{id:"displays"},"Displays"),(0,a.kt)("p",null,'With MATE, open the Brisk Menu and click on "Preferences" and then on "Displays".'),(0,a.kt)("p",null,'This opens the Monitor Preferences window and your display(s) will be represented by 1 or more colored boxes. Click on the individual display you wish to configure. You will now be able to select if you wish to set this monitor as the primary display, mirror all displays by turning on "Same image in all monitors", or turn it off. This window also gives you the ability to change the aspect ratio, rotate the display, and to change the resolution.'),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE Monitor Preferences",src:n(5067).Z,width:"556",height:"363"})),(0,a.kt)("p",null,"You can arrange your displays by dragging the colored boxes to your preferred positions, as shown below."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE Monitor Arrangement",src:n(5229).Z,width:"556",height:"363"})),(0,a.kt)("p",null,'Click "Apply" once you are happy with your changes. If you would like to apply the changes to all the user accounts on your system, click on "Apply system-wide". You will be shown a message asking if the display looks OK, if it does, click on "Keep This Configuration" within 30 seconds.'),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE Confirm Monitor Preferences",src:n(572).Z,width:"483",height:"146"})),(0,a.kt)("h2",{id:"keyboard-layout"},"Keyboard Layout"),(0,a.kt)("p",null,'To change your keyboard layout in MATE, open the Brisk Menu and click on "Preferences" and then on "Keyboard". This will open the Keyboard Preferences window, now click on the "Layouts" tab.'),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE Keyboard Preferences",src:n(1066).Z,width:"452",height:"527"})),(0,a.kt)("p",null,'To add a layout, click on the "+ Add..." button. The 2 tabs at the top of the chooser window give you the option to find your layout by country or by language. The preview gives you a graphical representation of each layout. Once you are happy with your selection, click on "+ Add".'),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE Choose Keyboard Layout",src:n(6721).Z,width:"800",height:"509"})),(0,a.kt)("p",null,'You can remove a keyboard layout by selecting one of the items in your layouts list and then clicking the "- Remove" button.'),(0,a.kt)("p",null,"If you wish to use multiple keyboard layouts, you can switch between them by left clicking on the keyboard layout icon shown in the system tray. The icon will automatically appear when you have 2 or more keyboard layouts selected. A right click allows you to open the keyboard preferences window and to see the graphical view of your current layout."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE Keyboard Indicator",src:n(9990).Z,width:"370",height:"141"})),(0,a.kt)("p",null,'To enable keyboard shortcuts for easy switching, re-open the Keyboard Preferences window and open the "Layouts" tab again. Now click on the "Options..." button. This will open a detailed options list, look for and click on "Switching to another layout". Select one or more of the available keyboard shortcuts and then finish by clicking "X Close".'),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE Keyboard Layout Shortcuts",src:n(9720).Z,width:"552",height:"425"})),(0,a.kt)("h3",{id:"ibus"},"IBus"),(0,a.kt)("p",null,'By default, IBus needs to be started in MATE before it can be used. Open the Brisk Menu, click on "Preferences" and then on "IBus Preferences". You will be asked if you wish to start the IBus daemon, click "Yes".'),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE IBus Starting Daemon",src:n(9608).Z,width:"419",height:"111"})),(0,a.kt)("p",null,'If you wish to have the IBus daemon start automatically every time you start Solus MATE, Open the Brisk Menu, click on "Preferences" and then on "Startup Applications". Under the Startup Programs tab, click on "+ Add".'),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE Startup Applications",src:n(1690).Z,width:"468",height:"379"})),(0,a.kt)("p",null,"In the Command box, you will need to write ",(0,a.kt)("inlineCode",{parentName:"p"},"ibus-daemon --xim"),'. If you wish, you can also fill in a Name and Comment but these are not compulsory. Once you are happy with your inputs, click the "+ Add" button. IBus will now run each time you boot your computer.'),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE Add IBus Startup Entry",src:n(8955).Z,width:"372",height:"177"})),(0,a.kt)("p",null,"If you need an additional IBus IME for your language see: ",(0,a.kt)("a",{parentName:"p",href:"/docs/user/software/localization/ibus/"},"IBus")),(0,a.kt)("p",null,"Finish by closing the IBus Preferences window. You can now switch between your layouts by using the keyboard shortcut ",(0,a.kt)("inlineCode",{parentName:"p"},"Super + Space"),"."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE IBus Keyboard Shortcut",src:n(7540).Z,width:"142",height:"101"})),(0,a.kt)("p",null,"Or by left clicking on the keyboard layout icon shown in the system tray and selecting the layout you wish to use."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE Bottom Panel IBus",src:n(1132).Z,width:"239",height:"207"})),(0,a.kt)("h2",{id:"mouse-and-touchpad"},"Mouse and Touchpad"),(0,a.kt)("p",null,'With MATE, open the Brisk Menu and click on "Preferences" and then on "Mouse". You can toggle between the mouse and touchpad settings using the tabs at the top of the Mouse Preferences window. Click "Close" once you have finished making changes.'),(0,a.kt)("h3",{id:"mouse"},"Mouse"),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE Mouse Settings",src:n(9667).Z,width:"502",height:"611"})),(0,a.kt)("p",null,"For mice, you can set:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Left-handed or right-handed. This will change your primary button."),(0,a.kt)("li",{parentName:"ul"},"Locate the pointer when the Control key is pressed."),(0,a.kt)("li",{parentName:"ul"},"Mouse speed and sensitivity."),(0,a.kt)("li",{parentName:"ul"},"Drag and Drop threshold. This is designed to prevent accidental dragging and dropping by setting the distance required to initiate a drag."),(0,a.kt)("li",{parentName:"ul"},"Double click timeout. The length of time between 2 mouse clicks for it to register as a double click.")),(0,a.kt)("h3",{id:"touchpad"},"Touchpad"),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE Touchpad Settings",src:n(2324).Z,width:"502",height:"605"})),(0,a.kt)("p",null,"For touchpads, you can set:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Enabling / disabling of the touchpad."),(0,a.kt)("li",{parentName:"ul"},"Enabling / disabling of the touchpad whilst typing."),(0,a.kt)("li",{parentName:"ul"},"Enabling / disabling of mouse clicks with the touchpad."),(0,a.kt)("li",{parentName:"ul"},"Two and three finger click emulation."),(0,a.kt)("li",{parentName:"ul"},"Various edge and two finger scrolling options."),(0,a.kt)("li",{parentName:"ul"},'Enabling / disabling "natural scrolling" (reversed scrolling direction).'),(0,a.kt)("li",{parentName:"ul"},"Touchpad speed and sensitivity.")),(0,a.kt)("h2",{id:"networking"},"Networking"),(0,a.kt)("p",null,'With MATE, you can manage your network settings by left or right clicking on the network icon in the bottom panel system tray. A left click will bring up any wireless or wired connections currently available whilst a right click allows you to disable networking, view your current connection information and to create new connections and networks by clicking "Edit Connections...".'),(0,a.kt)("h3",{id:"non-hidden-network"},"Non-Hidden Network"),(0,a.kt)("p",null,'To connect to a network, left click on the network icon in the system tray. This will show you a selection of the networks currently available and you may need to click on "More networks" to find the one you want.'),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE Networking Applet",src:n(5811).Z,width:"520",height:"475"})),(0,a.kt)("p",null,'You may now be prompted to authenticate with the network. Type in your password and then click "Connect".'),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE Network Authentication",src:n(1908).Z,width:"490",height:"254"})),(0,a.kt)("p",null,"If your password is correct, you will now be authenticated with the network."),(0,a.kt)("p",null,'Should you wish to disconnect from a network, left click on the network icon again and then click on "Disconnect" underneath the network you wish to leave.'),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE Disconnect from Network",src:n(6120).Z,width:"283",height:"169"})),(0,a.kt)("h3",{id:"hidden-network"},"Hidden Network"),(0,a.kt)("p",null,'To connect to a hidden network, left click on the network icon in the system tray and then on "Connect to Hidden Wi-Fi Network...". You will now be asked for the network name and type of security (if any).'),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE Hidden Network",src:n(225).Z,width:"490",height:"247"})),(0,a.kt)("p",null,"If the network is found and has a password, you will be prompted to authenticate with the network."),(0,a.kt)("h2",{id:"sound-and-sound-devices"},"Sound and Sound Devices"),(0,a.kt)("p",null,"To alter the volume in MATE, left click on the speaker icon in the bottom panel system tray and then drag the volume slider with your mouse."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE Volume Control",src:n(8146).Z,width:"71",height:"193"})),(0,a.kt)("h3",{id:"settings"},"Settings"),(0,a.kt)("p",null,'You can access sound settings, including individual application volume controls, and a simple speaker test by right clicking on the speaker icon in the bottom panel system tray and then clicking on "Sound Preferences". Alternatively, you can open the Brisk Menu and then click on "Preferences" followed by "Sound".'),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE Sound Applet",src:n(3815).Z,width:"219",height:"113"})),(0,a.kt)("p",null,"This will open the Sound Preferences window as shown below."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE Sound Preferences",src:n(751).Z,width:"550",height:"423"})),(0,a.kt)("h2",{id:"users"},"Users"),(0,a.kt)("p",null,'To add and remove users with MATE, open the Brisk Menu and click on "Administration" and then on "Users and Groups".'),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE Users and Groups",src:n(2617).Z,width:"652",height:"431"})),(0,a.kt)("h3",{id:"adding-a-user"},"Adding a User"),(0,a.kt)("p",null,'To add a user, click the "+ Add" button underneath the list of users. You will be asked to input your password before you can make changes.'),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE New User",src:n(5545).Z,width:"307",height:"540"})),(0,a.kt)("p",null,'Fill in the required items and then finish adding the new user by clicking "OK" in the bottom right corner.'),(0,a.kt)("h3",{id:"removing-a-user"},"Removing a User"),(0,a.kt)("p",null,'To remove a user, open the User Settings window and then click on the user you wish to remove. Now click on the "- Delete" button underneath the list of users.'),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE User List",src:n(3845).Z,width:"652",height:"431"})),(0,a.kt)("p",null,"Upon clicking to remove the user, you will be given the option to keep their files, delete their files, or cancel the removal of the user\u2019s account."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE Keep Files Prompt",src:n(2390).Z,width:"540",height:"203"})),(0,a.kt)("h1",{id:"user-interface"},"User Interface"),(0,a.kt)("h2",{id:"desktop-background"},"Desktop Background"),(0,a.kt)("p",null,'If you wish to change the MATE desktop background, simply right click anywhere on the desktop and select "Change Desktop Background".'),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE Background Right Click Menu",src:n(371).Z,width:"261",height:"254"})),(0,a.kt)("p",null,'Alternatively, open the Brisk Menu and click on "Preferences" and then on "Appearance". Click on the "Background" tab at the top if it isn\'t already selected.'),(0,a.kt)("p",null,'In this section, you can choose between Solus wallpapers, solid colors, gradients or using your own pictures by clicking "Add". After choosing, click "Close".'),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE Desktop Background Selection",src:n(6964).Z,width:"785",height:"536"})),(0,a.kt)("h2",{id:"desktop-icons"},"Desktop Icons"),(0,a.kt)("p",null,'MATE has desktop icons enabled by default. If you wish to disable or re-enable them, open the Brisk Menu, click on "Preferences" and then on "MATE Tweak". You can then toggle them on and off by clicking "Show Desktop Icons" under the Desktop section.'),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE Tweak Tool",src:n(8409).Z,width:"626",height:"599"})),(0,a.kt)("p",null,"You may now add things to your Desktop. This can be done by dragging an item onto the Desktop, right clicking an icon and selecting Copy to / Move to Desktop or by opening the Caja file manager and then moving the files you want to the Desktop folder (as shown in the image below)."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE Desktop Folder",src:n(7887).Z,width:"803",height:"581"})),(0,a.kt)("h2",{id:"workspaces"},"Workspaces"),(0,a.kt)("p",null,"In MATE, workspaces are enabled by default. You can move between workspaces by using the keyboard shortcuts ",(0,a.kt)("inlineCode",{parentName:"p"},"Ctrl + Alt + Left")," and ",(0,a.kt)("inlineCode",{parentName:"p"},"Ctrl + Alt + Right"),"."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE Workspace Switching",src:n(3433).Z,width:"242",height:"93"})),(0,a.kt)("p",null,'To send an application to a different workspace, right click on the applications titlebar and then use the "Move to Another Workspace" option or "Move to Workspace Right".'),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE Workspace Menu",src:n(6624).Z,width:"411",height:"385"})),(0,a.kt)("p",null,'One of the easiest ways to view and manage your workspaces is by using the Workspace Switcher. Right click inside the bottom panel and then click on "+ Add to Panel...".'),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE Open Panel Configuration",src:n(3084).Z,width:"177",height:"228"})),(0,a.kt)("p",null,'Towards the bottom of the list you will find the Workspace Switcher. Click on it and then finish by clicking "+ Add".'),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE Add Applet to Panel",src:n(7666).Z,width:"512",height:"351"})),(0,a.kt)("p",null,"You should now be able to see 4 slightly darker boxes to the left of your MATE system tray in the bottom panel. The workspace you are currently viewing will be highlighted in blue."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE Workspace Switcher",src:n(7967).Z,width:"265",height:"48"})),(0,a.kt)("p",null,"In addition to using keyboard shortcuts, you will now be able to switch workspaces by clicking on them in the bottom panel. You can also drag one workspace onto another in the bottom panel which will move the current active application to the new workspace."),(0,a.kt)("h3",{id:"keyboard-shortcuts"},"Keyboard Shortcuts"),(0,a.kt)("p",null,"MATE provides a variety of keyboard shortcuts for workspaces. By default, the keyboard shortcuts for switching directly to a certain workspace are disabled."),(0,a.kt)("p",null,'To enable these and to also view all other available shortcuts open the Brisk Menu and click on "Preferences" and then on "Keyboard Shortcuts". The workspace shortcuts are listed under Windows Management.'),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE Workspace Keyboard Shortcuts",src:n(3008).Z,width:"626",height:"408"})),(0,a.kt)("h3",{id:"workspaces-configuration"},"Workspaces Configuration"),(0,a.kt)("p",null,'By default, MATE provides you with 4 workspaces. If you would like to have more, less or change their names you must first add the Workspace Switcher to your bottom panel, as detailed above. You\'ll then be able to right click on the Workspace Switcher and select "Preferences".'),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE Open Switcher Preferences",src:n(5070).Z,width:"203",height:"228"})),(0,a.kt)("p",null,'Use the plus and minus icons to add or remove workspaces. You can rename workspaces by double clicking on the current names and typing in an alternative. Click "X Close" once you are happy with your changes.'),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE Workspace Switcher Preferences",src:n(3466).Z,width:"367",height:"409"})))}u.isMDXComponent=!0},7887:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/caja-desktop-folder-4165fea2b0afc876931a10dbeb707384.jpg"},371:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-background-right-click-0edaca8eb885eb54466e0a358d0f06ea.jpg"},6964:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-background-selection-fefc0656871c76fa23c620d99521a0ef.jpg"},1132:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-bottom-panel-ibus-left-click-016e725ce808036efb8bc77bd7fb47d8.jpg"},9990:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-bottom-panel-keyboard-22cf218bfdf946e6c10250af144d2166.jpg"},5811:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-bottom-panel-network-left-click-d3520a23fb573b5b52700f97306190a9.jpg"},3084:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-bottom-panel-right-click-83df358e1390b363d6ae99f7465d006f.jpg"},3815:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-bottom-panel-sound-right-click-696d602e3df72f0463e5984e82964a20.jpg"},7653:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-clock-preferences-29e68150fa5526f0fbaab28c6f0ad6c2.jpg"},5545:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-create-new-user-00e085b06fb8c6899a23f90d14b50a29.jpg"},8955:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-ibus-add-startup-4f4ef3cf4e94656d727ff93c4e299432.jpg"},7540:(e,t,n)=>{n.d(t,{Z:()=>o});const o="data:image/jpeg;base64,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"},9608:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-ibus-starting-daemon-84bcee7978b1d8eb7163cb0d9b964ec3.jpg"},2390:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-keep-files-prompt-2aa2cbdb6a94db223d708562c884d71a.jpg"},6721:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-keyboard-choose-layout-e0ca24f2aa125275817acb229a194923.jpg"},9720:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-keyboard-layout-shortcuts-62aefb0c48a9d92a34c277497866e85e.jpg"},1066:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-keyboard-preferences-f13098df57c42dc0259006b9ac386dde.jpg"},572:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-monitor-preferences-confirm-c9ddeb8ecc32eb0a88fc49b247bd2535.jpg"},5229:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-monitor-preferences-dragging-0fb78bb10ab52ce991b90df95a517622.jpg"},5067:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-monitor-preferences-db6d4f848b460b4278da5c95e62d4d9d.jpg"},9667:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-mouse-settings-d43911b0e7fdc6f3a196808da1e353a8.jpg"},3845:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-multiple-user-settings-112efa554f35300d772bb5ede0cc603c.jpg"},1908:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-network-authentication-13f522132661aa358181f94e002fcc9f.jpg"},6120:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-network-disconnect-eff4984eda8c49d3e42259381f0490b0.jpg"},225:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-network-hidden-38a73abbffc438c4c8dc66f70d38fe33.jpg"},2077:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-open-with-right-click-096ce2548d773af1ee45fceb5f2153e4.jpg"},8197:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-open-with-setting-86e0958d69c60f7b4253ac2989931023.jpg"},3340:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-preferred-applications-dcd4e02b67ec579d69171c22c1eb38d3.jpg"},2617:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-single-user-settings-a1253a12d1a7214129fe3ac5dd897e32.jpg"},751:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-sound-preferences-e6f0a451c79339dfbc290113f63e2894.jpg"},1690:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-startup-applications-e0d8dbd51c24a2987e3b83bc758d35fc.jpg"},4205:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-time-and-date-right-click-792aa50841ec26d8fcd4803ebb171839.jpg"},9206:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-time-and-date-settings-5fd258bf8a3cd09c075789ecb72370b4.jpg"},1410:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-time-and-date-c6cabc4c6ccfb4d51983c582ac985445.jpg"},2324:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-touchpad-settings-d9b3577e085d2ec9f5e357263f35ef90.jpg"},8409:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-tweak-desktop-30894d02f2a10654d0b8219947f974e6.jpg"},8146:(e,t,n)=>{n.d(t,{Z:()=>o});const o="data:image/jpeg;base64,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"},3008:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-workspace-keyboard-shortcuts-24395c1aa3f623b6b89284cffe6bd2e1.jpg"},7666:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-workspace-switch-add-to-panel-e57ec1f9a49d5dcf52f3126805d1d110.jpg"},3466:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-workspace-switcher-preferences-55630462d2aecfc0bd0f511b4ca5cd7c.jpg"},5070:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-workspace-switcher-right-click-0660da43481f40fe6fec7d39e0ec6f06.jpg"},7967:(e,t,n)=>{n.d(t,{Z:()=>o});const o="data:image/jpeg;base64,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"},3433:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-workspace-switching-a0f8cff6b00100314fd9f77994b5dcc9.jpg"},6624:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-workspace-titlebar-right-click-6dfec2d387d17d6ca06de2ed728ff521.jpg"}}]); \ No newline at end of file +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[5951],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>A});var o=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function r(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var l=o.createContext({}),c=function(e){var t=o.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):r(r({},t),e)),n},d=function(e){var t=c(e.components);return o.createElement(l.Provider,{value:t},e.children)},p="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},h=o.forwardRef((function(e,t){var n=e.components,a=e.mdxType,i=e.originalType,l=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),p=c(n),h=a,A=p["".concat(l,".").concat(h)]||p[h]||u[h]||i;return n?o.createElement(A,r(r({ref:t},d),{},{components:n})):o.createElement(A,r({ref:t},d))}));function A(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=n.length,r=new Array(i);r[0]=h;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[p]="string"==typeof e?e:a,r[1]=s;for(var c=2;c{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>r,default:()=>u,frontMatter:()=>i,metadata:()=>s,toc:()=>c});var o=n(7462),a=(n(7294),n(3905));const i={title:"Configuration",summary:"Help for configuring MATE Desktop on Solus"},r="Configuration",s={unversionedId:"user/editions/mate/configuration",id:"user/editions/mate/configuration",title:"Configuration",description:"Date and Time",source:"@site/docs/user/editions/mate/configuration.md",sourceDirName:"user/editions/mate",slug:"/user/editions/mate/configuration",permalink:"/docs/user/editions/mate/configuration",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/editions/mate/configuration.md",tags:[],version:"current",lastUpdatedAt:1695222528,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Configuration",summary:"Help for configuring MATE Desktop on Solus"},sidebar:"userSidebar",previous:{title:"MATE",permalink:"/docs/user/editions/mate/"},next:{title:"Tips and Tricks",permalink:"/docs/user/editions/mate/tips-and-tricks"}},l={},c=[{value:"Date and Time",id:"date-and-time",level:2},{value:"Default Applications",id:"default-applications",level:2},{value:"Displays",id:"displays",level:2},{value:"Keyboard Layout",id:"keyboard-layout",level:2},{value:"IBus",id:"ibus",level:3},{value:"Mouse and Touchpad",id:"mouse-and-touchpad",level:2},{value:"Mouse",id:"mouse",level:3},{value:"Touchpad",id:"touchpad",level:3},{value:"Networking",id:"networking",level:2},{value:"Non-Hidden Network",id:"non-hidden-network",level:3},{value:"Hidden Network",id:"hidden-network",level:3},{value:"Sound and Sound Devices",id:"sound-and-sound-devices",level:2},{value:"Settings",id:"settings",level:3},{value:"Users",id:"users",level:2},{value:"Adding a User",id:"adding-a-user",level:3},{value:"Removing a User",id:"removing-a-user",level:3},{value:"Desktop Background",id:"desktop-background",level:2},{value:"Desktop Icons",id:"desktop-icons",level:2},{value:"Workspaces",id:"workspaces",level:2},{value:"Keyboard Shortcuts",id:"keyboard-shortcuts",level:3},{value:"Workspaces Configuration",id:"workspaces-configuration",level:3}],d={toc:c},p="wrapper";function u(e){let{components:t,...i}=e;return(0,a.kt)(p,(0,o.Z)({},d,i,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"configuration"},"Configuration"),(0,a.kt)("h1",{id:"system"},"System"),(0,a.kt)("h2",{id:"date-and-time"},"Date and Time"),(0,a.kt)("p",null,'Using MATE, there are a couple of different ways to change the date and time. You can right click on the time in the bottom panel and click on "Preferences".'),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE Date and Time Right-Click Menu",src:n(4205).Z,width:"195",height:"298"})),(0,a.kt)("p",null,"This opens the Clock Preferences window and allows you to show the date, seconds or use 24 hour time."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE Clock Preferences",src:n(7653).Z,width:"375",height:"367"})),(0,a.kt)("p",null,'To change the time, click on "Time Settings" at the bottom of this window.'),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE Time Settings",src:n(1410).Z,width:"459",height:"355"})),(0,a.kt)("p",null,'Once you have the correct time, you can click on "Set System Time".'),(0,a.kt)("p",null,'Alternatively, if you wish to change your timezone, open the Brisk Menu and then click on "Administration" followed by "Time and Date". Click on "Unlock" and input your user password so that you can alter the time zone.'),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE Timezone Settings",src:n(9206).Z,width:"496",height:"380"})),(0,a.kt)("h2",{id:"default-applications"},"Default Applications"),(0,a.kt)("p",null,'Using MATE, open the Brisk Menu and click on "Preferences" and then on "Preferred Applications".'),(0,a.kt)("p",null,"In this section you will need to click one of the five tabs at the top to find the category you wish to change. For most categories, you will need to have installed alternative applications before you can change the default settings. For instance, if you wish to change the default image viewer from Eye of MATE to GIMP then you must first install GIMP (available in the Software Center)."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE Preferred Applications",src:n(3340).Z,width:"399",height:"355"})),(0,a.kt)("p",null,'You can specify default applications for individual file types by right clicking on a file and then clicking on "Open with other Application...".'),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE File Context Menu",src:n(2077).Z,width:"302",height:"384"})),(0,a.kt)("p",null,'Next, select the application you wish to use and make sure "Remember this application for "your file type" files" is ticked. Finish by clicking "Open". In the future, all files with the same file type will open with the same application.'),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE Application Selection",src:n(8197).Z,width:"426",height:"501"})),(0,a.kt)("h2",{id:"displays"},"Displays"),(0,a.kt)("p",null,'With MATE, open the Brisk Menu and click on "Preferences" and then on "Displays".'),(0,a.kt)("p",null,'This opens the Monitor Preferences window and your display(s) will be represented by 1 or more colored boxes. Click on the individual display you wish to configure. You will now be able to select if you wish to set this monitor as the primary display, mirror all displays by turning on "Same image in all monitors", or turn it off. This window also gives you the ability to change the aspect ratio, rotate the display, and to change the resolution.'),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE Monitor Preferences",src:n(5067).Z,width:"556",height:"363"})),(0,a.kt)("p",null,"You can arrange your displays by dragging the colored boxes to your preferred positions, as shown below."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE Monitor Arrangement",src:n(5229).Z,width:"556",height:"363"})),(0,a.kt)("p",null,'Click "Apply" once you are happy with your changes. If you would like to apply the changes to all the user accounts on your system, click on "Apply system-wide". You will be shown a message asking if the display looks OK, if it does, click on "Keep This Configuration" within 30 seconds.'),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE Confirm Monitor Preferences",src:n(572).Z,width:"483",height:"146"})),(0,a.kt)("h2",{id:"keyboard-layout"},"Keyboard Layout"),(0,a.kt)("p",null,'To change your keyboard layout in MATE, open the Brisk Menu and click on "Preferences" and then on "Keyboard". This will open the Keyboard Preferences window, now click on the "Layouts" tab.'),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE Keyboard Preferences",src:n(1066).Z,width:"452",height:"527"})),(0,a.kt)("p",null,'To add a layout, click on the "+ Add..." button. The 2 tabs at the top of the chooser window give you the option to find your layout by country or by language. The preview gives you a graphical representation of each layout. Once you are happy with your selection, click on "+ Add".'),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE Choose Keyboard Layout",src:n(6721).Z,width:"800",height:"509"})),(0,a.kt)("p",null,'You can remove a keyboard layout by selecting one of the items in your layouts list and then clicking the "- Remove" button.'),(0,a.kt)("p",null,"If you wish to use multiple keyboard layouts, you can switch between them by left clicking on the keyboard layout icon shown in the system tray. The icon will automatically appear when you have 2 or more keyboard layouts selected. A right click allows you to open the keyboard preferences window and to see the graphical view of your current layout."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE Keyboard Indicator",src:n(9990).Z,width:"370",height:"141"})),(0,a.kt)("p",null,'To enable keyboard shortcuts for easy switching, re-open the Keyboard Preferences window and open the "Layouts" tab again. Now click on the "Options..." button. This will open a detailed options list, look for and click on "Switching to another layout". Select one or more of the available keyboard shortcuts and then finish by clicking "X Close".'),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE Keyboard Layout Shortcuts",src:n(9720).Z,width:"552",height:"425"})),(0,a.kt)("h3",{id:"ibus"},"IBus"),(0,a.kt)("p",null,'By default, IBus needs to be started in MATE before it can be used. Open the Brisk Menu, click on "Preferences" and then on "IBus Preferences". You will be asked if you wish to start the IBus daemon, click "Yes".'),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE IBus Starting Daemon",src:n(9608).Z,width:"419",height:"111"})),(0,a.kt)("p",null,'If you wish to have the IBus daemon start automatically every time you start Solus MATE, Open the Brisk Menu, click on "Preferences" and then on "Startup Applications". Under the Startup Programs tab, click on "+ Add".'),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE Startup Applications",src:n(1690).Z,width:"468",height:"379"})),(0,a.kt)("p",null,"In the Command box, you will need to write ",(0,a.kt)("inlineCode",{parentName:"p"},"ibus-daemon --xim"),'. If you wish, you can also fill in a Name and Comment but these are not compulsory. Once you are happy with your inputs, click the "+ Add" button. IBus will now run each time you boot your computer.'),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE Add IBus Startup Entry",src:n(8955).Z,width:"372",height:"177"})),(0,a.kt)("p",null,"If you need an additional IBus IME for your language see: ",(0,a.kt)("a",{parentName:"p",href:"/docs/user/software/localization/ibus/"},"IBus")),(0,a.kt)("p",null,"Finish by closing the IBus Preferences window. You can now switch between your layouts by using the keyboard shortcut ",(0,a.kt)("inlineCode",{parentName:"p"},"Super + Space"),"."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE IBus Keyboard Shortcut",src:n(7540).Z,width:"142",height:"101"})),(0,a.kt)("p",null,"Or by left clicking on the keyboard layout icon shown in the system tray and selecting the layout you wish to use."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE Bottom Panel IBus",src:n(1132).Z,width:"239",height:"207"})),(0,a.kt)("h2",{id:"mouse-and-touchpad"},"Mouse and Touchpad"),(0,a.kt)("p",null,'With MATE, open the Brisk Menu and click on "Preferences" and then on "Mouse". You can toggle between the mouse and touchpad settings using the tabs at the top of the Mouse Preferences window. Click "Close" once you have finished making changes.'),(0,a.kt)("h3",{id:"mouse"},"Mouse"),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE Mouse Settings",src:n(9667).Z,width:"502",height:"611"})),(0,a.kt)("p",null,"For mice, you can set:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Left-handed or right-handed. This will change your primary button."),(0,a.kt)("li",{parentName:"ul"},"Locate the pointer when the Control key is pressed."),(0,a.kt)("li",{parentName:"ul"},"Mouse speed and sensitivity."),(0,a.kt)("li",{parentName:"ul"},"Drag and Drop threshold. This is designed to prevent accidental dragging and dropping by setting the distance required to initiate a drag."),(0,a.kt)("li",{parentName:"ul"},"Double click timeout. The length of time between 2 mouse clicks for it to register as a double click.")),(0,a.kt)("h3",{id:"touchpad"},"Touchpad"),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE Touchpad Settings",src:n(2324).Z,width:"502",height:"605"})),(0,a.kt)("p",null,"For touchpads, you can set:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Enabling / disabling of the touchpad."),(0,a.kt)("li",{parentName:"ul"},"Enabling / disabling of the touchpad whilst typing."),(0,a.kt)("li",{parentName:"ul"},"Enabling / disabling of mouse clicks with the touchpad."),(0,a.kt)("li",{parentName:"ul"},"Two and three finger click emulation."),(0,a.kt)("li",{parentName:"ul"},"Various edge and two finger scrolling options."),(0,a.kt)("li",{parentName:"ul"},'Enabling / disabling "natural scrolling" (reversed scrolling direction).'),(0,a.kt)("li",{parentName:"ul"},"Touchpad speed and sensitivity.")),(0,a.kt)("h2",{id:"networking"},"Networking"),(0,a.kt)("p",null,'With MATE, you can manage your network settings by left or right clicking on the network icon in the bottom panel system tray. A left click will bring up any wireless or wired connections currently available whilst a right click allows you to disable networking, view your current connection information and to create new connections and networks by clicking "Edit Connections...".'),(0,a.kt)("h3",{id:"non-hidden-network"},"Non-Hidden Network"),(0,a.kt)("p",null,'To connect to a network, left click on the network icon in the system tray. This will show you a selection of the networks currently available and you may need to click on "More networks" to find the one you want.'),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE Networking Applet",src:n(5811).Z,width:"520",height:"475"})),(0,a.kt)("p",null,'You may now be prompted to authenticate with the network. Type in your password and then click "Connect".'),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE Network Authentication",src:n(1908).Z,width:"490",height:"254"})),(0,a.kt)("p",null,"If your password is correct, you will now be authenticated with the network."),(0,a.kt)("p",null,'Should you wish to disconnect from a network, left click on the network icon again and then click on "Disconnect" underneath the network you wish to leave.'),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE Disconnect from Network",src:n(6120).Z,width:"283",height:"169"})),(0,a.kt)("h3",{id:"hidden-network"},"Hidden Network"),(0,a.kt)("p",null,'To connect to a hidden network, left click on the network icon in the system tray and then on "Connect to Hidden Wi-Fi Network...". You will now be asked for the network name and type of security (if any).'),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE Hidden Network",src:n(225).Z,width:"490",height:"247"})),(0,a.kt)("p",null,"If the network is found and has a password, you will be prompted to authenticate with the network."),(0,a.kt)("h2",{id:"sound-and-sound-devices"},"Sound and Sound Devices"),(0,a.kt)("p",null,"To alter the volume in MATE, left click on the speaker icon in the bottom panel system tray and then drag the volume slider with your mouse."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE Volume Control",src:n(8146).Z,width:"71",height:"193"})),(0,a.kt)("h3",{id:"settings"},"Settings"),(0,a.kt)("p",null,'You can access sound settings, including individual application volume controls, and a simple speaker test by right clicking on the speaker icon in the bottom panel system tray and then clicking on "Sound Preferences". Alternatively, you can open the Brisk Menu and then click on "Preferences" followed by "Sound".'),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE Sound Applet",src:n(3815).Z,width:"219",height:"113"})),(0,a.kt)("p",null,"This will open the Sound Preferences window as shown below."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE Sound Preferences",src:n(751).Z,width:"550",height:"423"})),(0,a.kt)("h2",{id:"users"},"Users"),(0,a.kt)("p",null,'To add and remove users with MATE, open the Brisk Menu and click on "Administration" and then on "Users and Groups".'),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE Users and Groups",src:n(2617).Z,width:"652",height:"431"})),(0,a.kt)("h3",{id:"adding-a-user"},"Adding a User"),(0,a.kt)("p",null,'To add a user, click the "+ Add" button underneath the list of users. You will be asked to input your password before you can make changes.'),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE New User",src:n(5545).Z,width:"307",height:"540"})),(0,a.kt)("p",null,'Fill in the required items and then finish adding the new user by clicking "OK" in the bottom right corner.'),(0,a.kt)("h3",{id:"removing-a-user"},"Removing a User"),(0,a.kt)("p",null,'To remove a user, open the User Settings window and then click on the user you wish to remove. Now click on the "- Delete" button underneath the list of users.'),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE User List",src:n(3845).Z,width:"652",height:"431"})),(0,a.kt)("p",null,"Upon clicking to remove the user, you will be given the option to keep their files, delete their files, or cancel the removal of the user\u2019s account."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE Keep Files Prompt",src:n(2390).Z,width:"540",height:"203"})),(0,a.kt)("h1",{id:"user-interface"},"User Interface"),(0,a.kt)("h2",{id:"desktop-background"},"Desktop Background"),(0,a.kt)("p",null,'If you wish to change the MATE desktop background, simply right click anywhere on the desktop and select "Change Desktop Background".'),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE Background Right Click Menu",src:n(371).Z,width:"261",height:"254"})),(0,a.kt)("p",null,'Alternatively, open the Brisk Menu and click on "Preferences" and then on "Appearance". Click on the "Background" tab at the top if it isn\'t already selected.'),(0,a.kt)("p",null,'In this section, you can choose between Solus wallpapers, solid colors, gradients or using your own pictures by clicking "Add". After choosing, click "Close".'),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE Desktop Background Selection",src:n(6964).Z,width:"785",height:"536"})),(0,a.kt)("h2",{id:"desktop-icons"},"Desktop Icons"),(0,a.kt)("p",null,'MATE has desktop icons enabled by default. If you wish to disable or re-enable them, open the Brisk Menu, click on "Preferences" and then on "MATE Tweak". You can then toggle them on and off by clicking "Show Desktop Icons" under the Desktop section.'),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE Tweak Tool",src:n(8409).Z,width:"626",height:"599"})),(0,a.kt)("p",null,"You may now add things to your Desktop. This can be done by dragging an item onto the Desktop, right clicking an icon and selecting Copy to / Move to Desktop or by opening the Caja file manager and then moving the files you want to the Desktop folder (as shown in the image below)."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE Desktop Folder",src:n(7887).Z,width:"803",height:"581"})),(0,a.kt)("h2",{id:"workspaces"},"Workspaces"),(0,a.kt)("p",null,"In MATE, workspaces are enabled by default. You can move between workspaces by using the keyboard shortcuts ",(0,a.kt)("inlineCode",{parentName:"p"},"Ctrl + Alt + Left")," and ",(0,a.kt)("inlineCode",{parentName:"p"},"Ctrl + Alt + Right"),"."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE Workspace Switching",src:n(3433).Z,width:"242",height:"93"})),(0,a.kt)("p",null,'To send an application to a different workspace, right click on the applications titlebar and then use the "Move to Another Workspace" option or "Move to Workspace Right".'),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE Workspace Menu",src:n(6624).Z,width:"411",height:"385"})),(0,a.kt)("p",null,'One of the easiest ways to view and manage your workspaces is by using the Workspace Switcher. Right click inside the bottom panel and then click on "+ Add to Panel...".'),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE Open Panel Configuration",src:n(3084).Z,width:"177",height:"228"})),(0,a.kt)("p",null,'Towards the bottom of the list you will find the Workspace Switcher. Click on it and then finish by clicking "+ Add".'),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE Add Applet to Panel",src:n(7666).Z,width:"512",height:"351"})),(0,a.kt)("p",null,"You should now be able to see 4 slightly darker boxes to the left of your MATE system tray in the bottom panel. The workspace you are currently viewing will be highlighted in blue."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE Workspace Switcher",src:n(7967).Z,width:"265",height:"48"})),(0,a.kt)("p",null,"In addition to using keyboard shortcuts, you will now be able to switch workspaces by clicking on them in the bottom panel. You can also drag one workspace onto another in the bottom panel which will move the current active application to the new workspace."),(0,a.kt)("h3",{id:"keyboard-shortcuts"},"Keyboard Shortcuts"),(0,a.kt)("p",null,"MATE provides a variety of keyboard shortcuts for workspaces. By default, the keyboard shortcuts for switching directly to a certain workspace are disabled."),(0,a.kt)("p",null,'To enable these and to also view all other available shortcuts open the Brisk Menu and click on "Preferences" and then on "Keyboard Shortcuts". The workspace shortcuts are listed under Windows Management.'),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE Workspace Keyboard Shortcuts",src:n(3008).Z,width:"626",height:"408"})),(0,a.kt)("h3",{id:"workspaces-configuration"},"Workspaces Configuration"),(0,a.kt)("p",null,'By default, MATE provides you with 4 workspaces. If you would like to have more, less or change their names you must first add the Workspace Switcher to your bottom panel, as detailed above. You\'ll then be able to right click on the Workspace Switcher and select "Preferences".'),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE Open Switcher Preferences",src:n(5070).Z,width:"203",height:"228"})),(0,a.kt)("p",null,'Use the plus and minus icons to add or remove workspaces. You can rename workspaces by double clicking on the current names and typing in an alternative. Click "X Close" once you are happy with your changes.'),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MATE Workspace Switcher Preferences",src:n(3466).Z,width:"367",height:"409"})))}u.isMDXComponent=!0},7887:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/caja-desktop-folder-4165fea2b0afc876931a10dbeb707384.jpg"},371:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-background-right-click-0edaca8eb885eb54466e0a358d0f06ea.jpg"},6964:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-background-selection-fefc0656871c76fa23c620d99521a0ef.jpg"},1132:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-bottom-panel-ibus-left-click-016e725ce808036efb8bc77bd7fb47d8.jpg"},9990:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-bottom-panel-keyboard-22cf218bfdf946e6c10250af144d2166.jpg"},5811:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-bottom-panel-network-left-click-d3520a23fb573b5b52700f97306190a9.jpg"},3084:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-bottom-panel-right-click-83df358e1390b363d6ae99f7465d006f.jpg"},3815:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-bottom-panel-sound-right-click-696d602e3df72f0463e5984e82964a20.jpg"},7653:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-clock-preferences-29e68150fa5526f0fbaab28c6f0ad6c2.jpg"},5545:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-create-new-user-00e085b06fb8c6899a23f90d14b50a29.jpg"},8955:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-ibus-add-startup-4f4ef3cf4e94656d727ff93c4e299432.jpg"},7540:(e,t,n)=>{n.d(t,{Z:()=>o});const o="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAIBAQEBAQIBAQECAgICAgQDAgICAgUEBAMEBgUGBgYFBgYGBwkIBgcJBwYGCAsICQoKCgoKBggLDAsKDAkKCgr/2wBDAQICAgICAgUDAwUKBwYHCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgr/wAARCABlAI4DAREAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD67+MHxXi8TvLGsnB7GvzKhC0UfoEYRppu543rDWM0TCVl59e1YYqDmrnJUSZj6XqdhaXgRpeDxzXnxU07HMrKVjorbVtORxunz75rdRlKNiJKKZm+I9V04OJFnHX1rhlBwncxUvfsV7bXtNKjfOM45rRKR07WHNrunDJ80YPsKicJGnMiG812w8khZgD2yOtDhpsU5eY3SdVsribc9xhQfzpcktkiG77G6ms6aq5FwPl6VsqLRvGKtqzU0nVjqi+RYxyTug5WGMsfyFOMJ7FqSSOq+D2m6N8QfHkXgzUZ7mFnUsUjgzKQCMhVJGT1/wDriu2GFquOi3NqbjBc9z70+H+uaJoPge1sNKsGkjhh2wtM4SRnXjaygfKeD6j601hq1Km1y6nDXnCvXu52R5r8TvHmr2dxc6xqdrEJopQRZIAFdPlyNynBIHIOBycV8zOnjIYlznofU4WOC+rqnTldHceB/jFDregf2dqrpBLb2Ilvba0dGCyFVwisfUkjkc4r36dWdWg4PseHi8JTp1lUW7djxvxn4b8NeLvGF4/iXxjd2ltOrXGILwpIskakxqHH3QWxnaBk4Oa8epg4w1n1Pchjpwgo0lfoW/FHib4ceD/C0d5/puqXKqkSXU87SSMcjCrg7jx3JP4UUeSC0MpKtWm+Z6HQfDjUpJtP+1SaetszrxE775Nvbd1AP0Jr1aPM1dnhYtp1LI+FvGWrtp9xIXYYyc8161NXiXKopRPoDwR+w78IviB4D8PeJrzxB4yN3q+hWN/dx6feWiRQ+fEHJHmQ/dBzxlmAx1r9GwXCGW4nBU6s5TvKKb1W7Sf8p8rXzfE060oJKybXXv6kr/8ABND4Mt/pH9q/EYNsL7Bqul5zuxt/1WM4+brjHfPFavgXJ2/jn98f/kTlea4lu9l+P+ZaH/BN/wCEETFF1v4hMAzqG/tTTcEKMg/6nox4HfPUAc1UeB8oj9uf3x/+RB5riG72X4/5kc//AATV+DV6BHNrPxDUM8YLf2ppvy7hkk/uTwvQ9+fl3Dms58BZNN3c5/fH/wCRM3mVdu9l+P8AmVV/4Jj/AAXSHeNY+JOfK37Dq2l7s7tuz/VYzj5uuMd88ULgLJkrc8/vj/8AIl/2riF0X4/5kjf8EyPgurMg1/4jMA0ihhqumchRkEZh6N0HfP3go5o/1CyZ/bn98f8A5Er+18T2X4/5gP8AgmP8FZHCtrvxFUM8YZjqum4AYZYnEPROjd8/dDDmj/UPJ7W55/fH/wCRB5vimrWX4/5lvw1/wTG+BV/q1rpFz4p+INmZ9pIl1Gw4HmbSMpbsN3Q/Rh7gTU4GyilRlJTnon1j/wDIjhm2JWll+P8Amd+P+CQP7Oo/5qT8QD9dUsf/AJDrxf8AVrL/AOaX3r/I3/tfE2tZfj/mXvD/APwSk+B3hXU4da8O/Fn4i2d5BIHhurfWLNXQ+xFpTjw3gItNSlp5r/IHm2Ias4r8f8z0/Q/2V/DekFJLz4jeKdUkh2mCfVprOaWIgDlX+zBs8Z612RynDx2k/wAP8jCWNqSVuVL0v/mbUnwN0KSNoj4o1oB87issAJJ7/wCq6055Vh6is5P8P8jKOJnF3/z/AMzn/FH7IfgTxdE8OqeMfEgEihSY7m26f8CgNedU4Wy+rK8pS+9f/Ino0M8xeHjaMY/c/wDMi0r9jn4e6FFdJo3i7xJbNdxqryRXVvuUrjDDMGC2RnJzVw4Zy+Gzl96/yHVz3GVrcyjp5P8AzMbWf2A/hfrciTXXxD8Yo0aBAYr60GVxjnNsc/175rKtwrl1f4pS+9f/ACJrR4jxtBWjGP3P/M80/a2+AfhH4CeBvD/jHw/4s8Q3k664unRW1/eWxibzIZpN5AiTLr5QAOcYLcHgj5/OuG8Fl2GjVoyk25JatWtZvol2PVyzO8Tja0qdSKStfS990u77i/BG7WbS3ubmVrh5F3NJNKZTnPT+6PoAK8qMFGO50TTqSPgz4rateRq8+8kV3UZWdrGc1yo/Rj9mCYT/AAW8FSll3P8ADrQWI8wkjNs3UdB9ep5z0FfuGWf8iyh/gj/6Sj4bFa4mfq/zPQri4gtIHurqZI4o0LySSMAqKBkkk9AB3rtMD80f2nv+Cvfxp+PviXUfhn/wTnv9M0Hwnp1zJZ6n8btc01b0X8yErImi2b4jnRWBU3c2YmIbYjABz8xnnFGDyd+yS56nZdPV9PTc/T+B/C3OuMYrEyfscNf42ruVt+SOl/NtpebaaPCNC/ZB8W/tM+IHX4m/GT4rfEzUgRJdX3if4j6hFbWu4/wxW0sMEKZziNU7HAODX5LxJ4rVMioKti68aSl8MYxTlL0Tu35vRK6u1c/a63hf4bcM4RTzCMqj6c05czflGDiv0XVnqfhb/glZ8cvhYia3+zF+2R45+HOrQgNDBpnjzUr7TncHjzrW+86Kdf8AZZPyr4zL/pGXrpToznDzUE//ACVpfiz4DNsi8NMVFxw2HrUX0cZKX3xnKV/RSXqev/Av/go9+0x+zP8AEvRf2dv+CqPg/S7S38QXosPBfxy8NQeVour3JYrHbahHkrp91JjKnIjfOAEwSf37hDj7h/jOhfBztUSvKEtJLzXddLrQ/Ic6yR5VV/d1PaU3tKzT9JRez9HJdpPU+9IpY54xLE4ZWGQR3r7Y8IbpQX/hYOjkqufLkwShzjzbfoegHTg8njHQ1liP92n6P8hr4kesV8obhQAUAFABQAUAFAHzr/wUtk8v4NeG9um/a3bxzarHDgn5vsl3zwD/AIV4HEcefAxX95fkz2ck/wB7l/hf5o5P4XyvFpaR2mjrbp5Iw0kuWb8q+FrU6iSPpabhKTSPiX4ueFra30uXzAC2wk8dK2oSc2mZ4mMldH3z+zArJ8EvBMYLbV+HmhBQWG3/AI9j0HXPTOeOmOhr91yz/kWUP8Ef/SUfB4j/AHifq/zPkL/guz+0b4hsvCHg79hP4e69cafffFmS6uPG1/YzFJrXwvaBPtUSsvMbXUssVsG/uGYEc1xcQ5qsnyueIXxbR9Xt92/yPsPDzhV8Y8VUcvl/D1lUa6Qjv6X0in0bTPkfR5NI8OaPa+H9AsILOxsrdILS0t0CxwxqAqooHQAADFfgVTEVK1Rzm7t6t+Z/oBhsvoYShGhRiowikkloklokvJH3Z+yl4e0rQvgrok+mhGfULcXl3MoGZJJOTnHUqMJ9EFfyHx3mOKzPjPEus3anLkiu0Y6aervL1Z/N/G+Lr4niKuqj+B8qXZR0/Hf5nrmnKAoqMujsfB1mUPjB8Evhv+0Z8Jte+CPxc8ORar4d8Sac9nqdnKOSrdHQ/wAEiMFdHHKuqsOQK/R+HcfjMpx1LGYWXLUg7p/5909muq0PHxdOFam4TV0zzD/gkN8cPiOnhrxt+w/8fPEkureOPgX4k/4R6bWLonztX0h41m0u/fPO6W1ZQckktESSSc1/fGQZvSz7JqGPpqyqRTt2ezXyaa+R+a4qg8PXlTfQ+y9Jb/i4GkLu6pIcebjP72D+Hv8AXt0/ir0sR/u8/R/kYL4ker18qbhQB86ftSf8FNPgf+yX8VoPg7488B+NtW1e50qPUIj4b0u2uIzE7SKB+8uY23Dy2J+XGMc0sO/rMqij9h2f3J/qvmXVg6MISl9rVfJtfoS/AT/gpL8Hv2hNO8W6p4Z+GvjzSYvB2gSavqJ8QaNbwefCgYlIdlw4Z8KeG2j3rXE03hcFPFSfuxaTS31Ten3d+xnQf1jG08LH4p7Ppulr/wCBLp3ND4Kf8FDPgX8efgB4t/aK8F6V4gi0rwXHcSa1pd/aW6X4WKDziURJ2QhlyFJcZKkHGKMZSlgqEK09YydlbvzKNne210/RrroLCyWLxTw8dJKz17O9n17NeqPSPgP8Z/C/7Q3wj0P4z+C7C/tdL1+1M9nBqkSJcIodkw6xu6g5U9GPGKvE4eeFq+znvaL0/vJSX4PUzoV4YiHPHa7X/gLaf4o66sDY+e/+CkniJPDHwW0LU2sWuG/4TK3SKNQPvG1uiDk8Accn0rxc9aWDi3/MvyZ6mU3eJdu36o4DwJ49i1nRIZ2l3YQdF47fnXw2IrpvQ+mwtNJu58hfH6drOKd0cENkjFa5dSfJqb4mpGpqfdH7MB3/AAV8FS7fvfDvQefKx/y7H+Lv9O3X+Kv3LLdMuo/4Y/kj89xOmJn6v8z8p/8Agrr4zuF/4LKtperTFVtPgXptnpKE8bZNRvLiQgepK8n/AGAO1eDx1llXF8I1sXTV/YVKbl5Rlzwv/wCBOC+Z+4fR5x2Gw3HcsPUdpVqM4x82nCbX/gMZP5Hmza/j+P8AWvwH2h/b/sD3r9mP9vKz+CnhKTwP488NXuq6ba+ZLpb6V5f2iJmJYwlZGRWUsWYMWBUsRyMbfy7izw8jxBmqx2Eqxp1JWU+a/K7ac14qTTSSTSTvbo73/KeN/DfEZ1iZY/LpJVGvei9FJpaNPo3trpfW61Phr4qf8F9/+CiWufECfxJ8P/Fmh+E9GE+bPw1a+HbW7iWIH5VkmuI3ldyMbmVkBOSqoOB/oxw19DLwcyzI6dDGwq4mu4rmrOrKF21q4wg1BR/lUlNpbylufwbiuMs5qYhuLUF/LZP729b99j9LP+CPP/BWix/4KJaLq/w/+Ivhay8P/EfwzbLd39lpbP8AY9TsWcJ9qt1kZni2OyJJGzNgyRsHbeVj/lTxu8Ba3hBmFHE4KtKtgK7cYSlbnhNK/JNpKLuryjJKN7STiuW8vpcmz1ZtTlGorVI722a7r9TY+HWoJ4U/4LyePdN0FtsPiD4IeH7/AFxU4DXcN7dW8Rb1IhwB7V934RTqS4SUZbKpJL00f5tniZ2ksZp2R+hWkh/+E90kgPt2vnCjbnzYMZPXPXGOOuegr9LxH+7z9H+R5C3R6tXypuFAH5yftseIvjb4V/4K7+Dtc/Z38AWPifxbF4CA03RdSvEghnBW9EhZ3kjA2oWYZcZI79K0yd1F9eUVo2r+S5aWv32XzHmipuhhOZ23t5vmlofQnhvx9+2V45/Zw+K7ftc/AvRfBUlt4RvBoa6Pq0V0LtWtLjzS3l3E23bhMZ253Hr25s3hhllM3CV5a3XlZWe3V3+43yqVb+2KSa928dfPm2+4+D/2c7m5/Z4/Zyn1eed08PfG/wCEPiSzlLt8ketae935XsN0BCgd2Y16Wa+/Tq4J7r2FaHo3BVEv/S35WRw5dpjKWLXScqUvSUVKD+cvdXldn6G/8EwP+TCfhr/2BZP/AEolrfOP99/7cp/+m4nLln+7P/HU/wDS5HvVeWegfMn/AAVW1GLTfgN4cnngSRW8eWqlZGIH/Hne+n0r57iV2wMf8S/Jnr5L/vUv8L/NHg/w58Y2Y08JbokaBMhVlLDn681+d16kYs+opSavc8A+PMiXVnNMJSRg/wBa+lwaSpoylfl1Pvj9lwp/wpPwSAy5/wCFc6DkByTj7M2MjoB7jk856Cv2TLv+RdR/wx/JHwmK/wB5n6v8z8wP+DlD4LeIPAH7QPwm/bc0OFxp17pr+CtfvAvy2k6zPeaeze0jSXaEnAGFB+8K+04U/s3FY2plmYq+HxcJUZ+XN8LT6NSSs+jd+hrl+aY/I8wo5lgZctajJTi/NdH3TWjXVXXU+TvD/wAWdE1u2X7ReJa3OP3lvO+3n/ZJ+8K/n/jvwb404Mx81DDzxGGu+WrTi5K3TnUbuEu99L/C2f6C8B+MfBPGuXwlPEQw+Jt71KpJRd+vI5WU49ra2+JIzfiJ8bdF8I6JPJp97Fdag0ZFrbxOHw56FsdFHXnr2rTw68HuK+NM4pLEYedDCJp1Kk4uHurdQ5knKT2Vk0t5eceI3jBwnwVk9V4fEwr4tpqnThJT95rSU+VtRit3dpy2j5fIesaIW3MVzk85r/SqEYwioxVktEf5pSlKUnJ7s+zP+Dd/wx4nH/BRuLxBo139n03SPBGq3PiORpdiGzIijUMTwR58kDY/2M/w1/Mf0tMRg6fhbGjVV6lTEUlTXXmSm21/24pK/nbqfR8LRm8zbWyi7/h+p+iP/BL6/l/a2/bf+Nv7fWno8nhnxJr1t4b8AXDcpPo+kRtbm7iP/PO4uDLIM8gqelfjXBOTTyLhqhhaitO3NL/FLVr5XUfkdWYV1iMVKS26fI/SPSgv/CwdHO1c+XJglDkfvbfv0A9up4x0NfTYj/d5+j/I4l8SPWK+UNwoA+Ov2uf2Kf2wfH/7ZWj/ALV/7L/xD8E6JdaP4aTTrdvEks7SLJ+/WQ+WtrKhUpNgEnOc8DAp4GU8I8QntVa+5KH6x6dCsX7PE0qMesL/AH3b/JnZfCn4R/8ABQ3WPBnjzwb+1X8W/AeuQa94TudP8Or4fhki+z3csbpvmP2SI7MMOm4+1GNp4fEZdUpQTVR2s3tazvf526dwwdSrh8ypVpP3I6tdbpxat8lLr1R574k/4Ji/EDxb/wAE2tA/ZL1fxF4cXxt4Z1OS/wBL1aO6nNgsj3Uzspk8kShWhmYH9394DggZrbMKqxOOo4ilpyxUXfquVJrr1Sa9OhlgI/V6VenU1VR3VujVrPpro15Jv0Poj9jj4MeKP2ef2ZvCPwY8aX9hdapoGnNBeT6XK727sZXfKNIiMRhh1Uc5rXH4iGKxHtIbcsFr/djGL/FaGGDoTw9FwlvzSf8A4FJtfgz02uM6j5H/AOCzGpf2V+zN4cuBLsJ+IVoqttz/AMuV8f6V89xL/wAi9f4l+TPRyx8uIfp+qPj74WeLbhtLH7zPydR+FflmJm+fU+hVVowvisn2rRpGyC205r7PDSUbHXU1R9/fswb1+CPglCX2j4d6FgFxtz9mOcDqD0yTweMdDX7Ll3/Iuo/4Y/kj4HFf7zP1f5j/ANqb9mn4XftffAXxJ+zz8Y9E+3aD4ksDb3SIwWSFwQ0c0TEHZLHIqyI2DhkBweldhgfzxftj/sefH3/gnV48l+Hv7RWkXOoeFGuTF4W+KFnaM1jqEOf3cd0Vz9luccFX4YglSwG4/uPB/iRQdGODzeXLJaKp0a6c3Z/3tn1s9X5+IwbvzU/uPKp7XT9WtRfaXeQ3MLjKTW8odGHsRwa/XqGIoYmkqlGalF9U0196OBpxdmc7rGk2sUqpc3ltbCRwoku7lIYxk4yzyEKo9WYgAckiuXM82y7JsHLFYyooQj33fkkruT7Rim29kVTpzqy5Yq7Psj9gv4JfE744fCXUv2bP2SrPUtM8OePJo0+Mvxua0ktzqVgm5f7B0NJVDNEQzia7KgMzuuCixiT+NuNMZi/ETi2lmuPi4YXC3WGouzd21zVqlrrnlZcsU2oRS15uY+nw8oYDCOjS1lL4pf8Atq8vPr6H7e/sn/s5eDP2avhNpHw58F6FBp9jplhFa2dpAPlhiRQqrzyTxyTkk5JJJzWhzM9M0oj/AIWBpC7hkxycebg/62D+Hv8AXt+NZYj/AHafo/yYL4kesV8obhQAUAFABQAUAFAHx/8A8FqrSO9/Zh8MwyzrGP8AhY1mQzZ/58b/AKYrwuIY82BX+Jfkzuy/+M/T/I+LvhXbPHpzKoJAXgkV+YYum3PQ9zm0KfxJcpYSxseCvrX1FOT5kepXTjK5+gH7Od1HpfwO8EXlxbTtG/w80QK8Fi8hytuoIygJJ/eKQuOBuPrj9oy3XLqP+GP5I+AxX+9VPV/md42vWKMyGC9yrSKcabORlBk4ITkHsejHhcmu2xgYnjrwv8PfifoNx4S8ceFDqdhfIsFzaX+iSSRSrIudrq8ZUrj72eF6Ng8UWC58QfFv/g36/wCCafxF1ebxNo3wMu9AuJ181/8AhG21PTkAL7cCCBljU552hAQOenNaUqtag705OL8nb8huz3G/Cf8A4IBf8E8fhdrya/8A8KO/tW8gkfFx4ijv9UGY+SQlyXj/AN0hfmP3cmpqTqVZc05Nvzd/zDbY+0Ph38Ofhx8N7OHTvDnh+eIRLFFFt0mZVQFflA+TCqAMHsvQ4PFRYR1Q8R6f5fm/Z7/Hlh8f2VcZwW29Nmc57dcc4xzTsBZ8O3BvvHOnTwQXIigd4pGltzGu/wA2HGN4BPQ4I+U889KxxH+7T9H+Q18R61XyhuFABQAUAFABQAUAfJH/AAWVhjn/AGafDccgJP8AwsK02Y9fsV9/9evGz3XBr1/Rndl/8Z+n6o+SvhboyHS8KvO0HkV+b4mPvnt20OQ+LkflWEnGNoIr36K7ns4hJo/VH9k7RtHm/ZZ+Gk0mlWzM/wAP9GLM0Ckkmxh5ziv0HC168cLBKb2XV9j4LEpfWJ+r/M9A/sLRP+gNa/8AgOv+Fb/WMR/O/vZjZB/YWif9Aa1/8B1/wo+sYj+d/ewsg/sLRP8AoDWv/gOv+FH1jEfzv72FkH9haJ/0BrX/AMB1/wAKPrGI/nf3sLIP7C0T/oDWv/gOv+FH1jEfzv72FkH9haJ/0BrX/wAB1/wo+sYj+d/ewshY9G0eJ1li0m2VlIKssCgg+o4pOvXas5P72FkWayGFABQAUAFABQAUAfKH/BYNBJ+zr4YU/wDRQ7T/ANIb6vGzx2wa9V+TO3Afx/l/kfOXwc0EyaP5pTrGOR+FfntdKcz6Hkcoo8a+N2oRpDMU+6Qc5Havdo/Cj061uXQ/V79kZg/7KHwwcd/h5op/8kYa+3wv+7Q9F+R8JiP94n6v8z0OtzEKACgAoA+efF/7Wb/D74i/Fzwb4p1XX3bQ7W1fwsuk+CL3UIrQvpqysXmtLWRFzKd375uB6LWFSVSWT1alN2qKVRJuyVlGDjq/d0bd/XXSx00oQWZUYVF7kowbS1bbqVFLRe9qlFK3bTW5B4n/AG0td+Evwc8IeMvE+meHdYuLz4f2eu619u8WpYajdZgVpja2UdtJ5pzk5Ywx5IUMO3q4ulShnFbDxVoxqcqt7zScrJvayXm7uzsnY87AurXy6jVbvKa66JtJPfu79FZdbXNrxp+194s8N694nbR/gmL/AMO+D9Q0yHWtdm8SpA7RXkVvIGht/JZpJE+0DKMyKVXIkJO0YUaLnUhGo+Xmqukuvvcyin0928lfquiZUqyeH9rTV/3Xtrbe6udtddbQdt03o7aN2Pin+1b4w8FXni2/8HfB621vQvBF/aWGv6ldeJvscxup0gkKwQ/ZpBIkaXERZmdDkkKrYJrPCwVeVLnfLGpUVOL3+2oOTWllzXS1bbWtlqa4hujGfLrKFN1GttFGUkr66tRvtZJrd6Gv4x/aY/4RLS/iHqX/AAhX2j/hAtY0+x2f2ls+3faobSTfnyz5W37VjHzZ2ZyN2AUI+3jQe3tKvs/T34w5vP4r202tfqFV+zdT+7SdX1sqj5f/ACnv57aa6vwv8beJ/Efxe+JPhfWNT86w0DV9Ph0iDyUXyI5dOgmcblUM2ZHZssSRnAwMClSSlgFUe/tKkflFQsvldhVfLiowWzpxl83Oqm/uivLT1O/qRhQAUAFAHyl/wV+AP7PPhcN/0UO0/wDSG+rw+IHbBL/EvyZ24D+N8v8AI8a+BltCPDibsZMfU/hX59N3kz6ihB8p8qfGXV1urWYR5YnOPxr3aCbibTm5Xsfrv+x5u/4ZH+Fm4YP/AArnQ8j/ALcIa+5w3+7Q9F+R8Vif94n6v8z0atzEKACgAoA5GL4MeF4dV8a6wt/f+b47jiTV1MqbYRHai2Hk/J8vyDJ3bvm9uKzq0o1cDLCP4ZObfe81GL8toq2nfc1pVZUsZDEr4oKKXb3ZSkr/ADk767WOH8SfsSeANf0R/Dlp8RfGGk2V14HtvCurw6Vf2yHUrG3jkSEys9uzLIolkOYjGrbsOrL8tdVWvKtiKlWaXv1FUa6KatquvRKzbWm19TChFYenRjDekuVPryuzafTdbpKS6NHQ6v8AszeA9a0HxZ4eutW1dYfGM9jLqbRzxBomtYYIo/KJjIUFbdC24NklsYyAEq0lOEv5avtV/i5ozt6XivO19epEKMYUfZrb2Xsf+3bTV/8AF7712203v5d+0b+z/wCP/HPjDxBoPw38M+NLO18WX2mz6ve2uvaVHoNxLEYVe5uIpD9uWRIolXZCNkpjTcOpowMlSrU3P4adVTSeu0ozfLbrJp2UtIybkrMvGL2mHmo6ylSlT00eqmoqV9LLmu3HVx93pY734j/sgeCviV4i1zW9Q+IXi7TrXxHPZ3OtaLpGpQxWl1c2ojWKZgYWkztijUpv8tgoJQkZqcNN4aUGteSaqRvspXi36puOt72u3HldmnXXt4OL0vB021u4vm+5rne1r7Surp914X+HOieEvF/iTxpp11dvdeKbu3uNQjndTHG0NuluojAUEApGCcluSeg4qYPkoeyW3NKXzla/y91WCS56qqPdRUfkpSkvneb+Vvnv0hhQAUAFAHyv/wAFc7G7vv2ePDgtI9xi8fWrv7L9ivRn8yK+d4mfLl8X/eX5M7cAr1n6f5Hz/wDBbW/s+hBHbkIP6V+a1a9nofV0H7p80+MdKa8tW+XryCBX1dGXLpcavfU6fR/2/wD9vXwF4U03wR4H+OZstL0bT4bHTLUeGdMk8mCJBHGm6S2ZmwqgZYknHJJr1oZjiYRUVLReS/yPPq5fhpTcnHV+b/zLWn/8FHv+ClFyMv8AtFvwef8AikNI/wDkSm82xUX8X4L/ACMVl2Gb+H8X/macf/BQf/gpGxH/ABkLJjH/AEKOkf8AyJULNsW/tfgv8jeOVYV/Z/F/5l1P29f+CkkkXmJ+0DJ0/wChS0n/AORKbzbFW+L8F/kS8rwv8v4v/MbP+3h/wUqeDdb/ALQ0gbt/xSOkc/8AkpXPVznHR1U/wX+RMssw6V+X8X/mWNI/bR/4KkatGXtvj1cNj08H6R/8iVKzrGuN+f8ABf5DWXYNr4fxf+Yt1+2n/wAFQ7BHkvvj7NGF7N4Q0n/5ErSGc4ySu5fgv8hQy3DVFdQ/F/5mPJ/wUH/4KUoxT/hoiTI6/wDFI6R/8iVM86xnSf4L/Iv+ysLb4fxf+Zlal/wUX/4Kc2VwuP2jnMZODnwfo/8A8h1ms9xt9Z/gv8jN5Zh07OP4s9h+GP7XH/BQXxH4aN7P8e2v7qSMtHv8MaWgj47hLYZ9eM5xWVXiDGwV+f8ABf5GtHK8JUnZx/F/5nV+Hv2nP24brS5RefG5pblUJQN4e01HJ3YI2/Zh05HTPQ08NxFiaujnf5L/ACNMTk2HhK8Y2Xq/8zl/GP7aX7e3hyOJ5/i35SrciKedNC01k2lgPMwbYldoyT2rWrnOPivdn+C/yCjlGEqSty/i/wDMoeH/ANv79ujVPCmmeN08b3s1hql2YLaL+ydLWUndtViBaHKsQewwATnFcdDP8yU37Spf5R/yOqrkGD+GCs/n/mbXh39q/wD4KHeKb+ddL+Kspifm3j/sHS8ptJDAMbUBs8EZ962/1gxsp2U/wX+RzyybCQjrH8X/AJnZ3H7Rn7XXgu0a/wDHXx8vvIFsXM6+FtOxG/o221rrpZzi+W8p/gv8jzMRhKEPhh+L/wAzwj4qftN/tE/HS3h8I/FP4j/2rpFtfreWtqmlWsAEqo6K+6GJHPyyONpOPm6ZAx8xm+d4vEw9lOV0nfZL8kaUcPSpvmirGt8PtV+w2TRBsEDHJ4r5Sddymd0ZtLQ8p1BFmsGMgzgZr7tScZo64t2KNlpVrKmWTr7V1rVjSudJ4S8MabdzhGQAH/ZrjrVJRZCspbHo+kfD/QRAN8AYjuVrCFSTZ20Ka1ua8PgjRNmPIHT+7WqnI2dNJOwW/grR47hAsQxkcFaylN8rRhKPuM+ovgR8G/Bo8MG++wIXK5+aMHsDXfhUlQcjhpzcGeXftFeBdGTUZIbeFI1JJwsY4rjqylUW5pCcqkuVaI8HuvBWipcMvkA89xXLzPlO2MVsZWteCdFmiIaBef8AZrknOUXoZVacbXPX/wBmrT9Js9Jltk0qFzCREGkXIweCcetL2kqiszOiranpfib4GWvhLTZvFfhvxTd2xaWzlmt9u4OJmdpEDbvlBwoGOm33rGm/ZJyXc9hVI1vclHoaXj34GeFPFVlfajqKI0ptP3CtACkLnaN4AIJP1PWn9bqybZz8kaTVu54t4W+DOj+IfBfh7RH1Oa3gi8X6nNcCAHMyxLBF5YJOUU+ax45A4HrXLCtP212elJpSbt0Po34PfBnwS2qrbwWLRRWttuSJXYjA7cniu6MU6qbPKxNSUKF1u3Yz/wBpC0trDwVevY2sSLDDI8gZMmTGTtznAHHoa9CtJxoXR5FR+z0PiK/toZ7uS9KBWZidqjgc18TiK051Gc1tSXS7ya3LCFiAc5596wg77mKm07H/2Q=="},9608:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-ibus-starting-daemon-84bcee7978b1d8eb7163cb0d9b964ec3.jpg"},2390:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-keep-files-prompt-2aa2cbdb6a94db223d708562c884d71a.jpg"},6721:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-keyboard-choose-layout-e0ca24f2aa125275817acb229a194923.jpg"},9720:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-keyboard-layout-shortcuts-62aefb0c48a9d92a34c277497866e85e.jpg"},1066:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-keyboard-preferences-f13098df57c42dc0259006b9ac386dde.jpg"},572:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-monitor-preferences-confirm-c9ddeb8ecc32eb0a88fc49b247bd2535.jpg"},5229:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-monitor-preferences-dragging-0fb78bb10ab52ce991b90df95a517622.jpg"},5067:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-monitor-preferences-db6d4f848b460b4278da5c95e62d4d9d.jpg"},9667:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-mouse-settings-d43911b0e7fdc6f3a196808da1e353a8.jpg"},3845:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-multiple-user-settings-112efa554f35300d772bb5ede0cc603c.jpg"},1908:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-network-authentication-13f522132661aa358181f94e002fcc9f.jpg"},6120:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-network-disconnect-eff4984eda8c49d3e42259381f0490b0.jpg"},225:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-network-hidden-38a73abbffc438c4c8dc66f70d38fe33.jpg"},2077:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-open-with-right-click-096ce2548d773af1ee45fceb5f2153e4.jpg"},8197:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-open-with-setting-86e0958d69c60f7b4253ac2989931023.jpg"},3340:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-preferred-applications-dcd4e02b67ec579d69171c22c1eb38d3.jpg"},2617:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-single-user-settings-a1253a12d1a7214129fe3ac5dd897e32.jpg"},751:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-sound-preferences-e6f0a451c79339dfbc290113f63e2894.jpg"},1690:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-startup-applications-e0d8dbd51c24a2987e3b83bc758d35fc.jpg"},4205:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-time-and-date-right-click-792aa50841ec26d8fcd4803ebb171839.jpg"},9206:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-time-and-date-settings-5fd258bf8a3cd09c075789ecb72370b4.jpg"},1410:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-time-and-date-c6cabc4c6ccfb4d51983c582ac985445.jpg"},2324:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-touchpad-settings-d9b3577e085d2ec9f5e357263f35ef90.jpg"},8409:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-tweak-desktop-30894d02f2a10654d0b8219947f974e6.jpg"},8146:(e,t,n)=>{n.d(t,{Z:()=>o});const o="data:image/jpeg;base64,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"},3008:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-workspace-keyboard-shortcuts-24395c1aa3f623b6b89284cffe6bd2e1.jpg"},7666:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-workspace-switch-add-to-panel-e57ec1f9a49d5dcf52f3126805d1d110.jpg"},3466:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-workspace-switcher-preferences-55630462d2aecfc0bd0f511b4ca5cd7c.jpg"},5070:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-workspace-switcher-right-click-0660da43481f40fe6fec7d39e0ec6f06.jpg"},7967:(e,t,n)=>{n.d(t,{Z:()=>o});const o="data:image/jpeg;base64,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"},3433:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-workspace-switching-a0f8cff6b00100314fd9f77994b5dcc9.jpg"},6624:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/mate-workspace-titlebar-right-click-6dfec2d387d17d6ca06de2ed728ff521.jpg"}}]); \ No newline at end of file diff --git a/assets/js/2609550e.9f5041e2.js b/assets/js/2609550e.a33e5523.js similarity index 99% rename from assets/js/2609550e.9f5041e2.js rename to assets/js/2609550e.a33e5523.js index 19d10ff77..8ce07f42b 100644 --- a/assets/js/2609550e.9f5041e2.js +++ b/assets/js/2609550e.a33e5523.js @@ -1 +1 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[3206],{3905:(e,a,t)=>{t.d(a,{Zo:()=>u,kt:()=>h});var n=t(7294);function s(e,a,t){return a in e?Object.defineProperty(e,a,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[a]=t,e}function o(e,a){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),t.push.apply(t,n)}return t}function i(e){for(var a=1;a=0||(s[t]=e[t]);return s}(e,a);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(s[t]=e[t])}return s}var l=n.createContext({}),m=function(e){var a=n.useContext(l),t=a;return e&&(t="function"==typeof e?e(a):i(i({},a),e)),t},u=function(e){var a=m(e.components);return n.createElement(l.Provider,{value:a},e.children)},d="mdxType",c={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},p=n.forwardRef((function(e,a){var t=e.components,s=e.mdxType,o=e.originalType,l=e.parentName,u=r(e,["components","mdxType","originalType","parentName"]),d=m(t),p=s,h=d["".concat(l,".").concat(p)]||d[p]||c[p]||o;return t?n.createElement(h,i(i({ref:a},u),{},{components:t})):n.createElement(h,i({ref:a},u))}));function h(e,a){var t=arguments,s=a&&a.mdxType;if("string"==typeof e||s){var o=t.length,i=new Array(o);i[0]=p;var r={};for(var l in a)hasOwnProperty.call(a,l)&&(r[l]=a[l]);r.originalType=e,r[d]="string"==typeof e?e:s,i[1]=r;for(var m=2;m{t.r(a),t.d(a,{assets:()=>l,contentTitle:()=>i,default:()=>c,frontMatter:()=>o,metadata:()=>r,toc:()=>m});var n=t(7462),s=(t(7294),t(3905));const o={title:"Samba File Sharing",summary:"A quick start guide to Samba on Solus"},i="Samba file sharing",r={unversionedId:"user/software/networking/samba",id:"user/software/networking/samba",title:"Samba File Sharing",description:"Samba is the standard Windows interoperability suite of programs for Linux and Unix. Among other things, it allows Linux, macOS and Windows users to share files via the Server Message Block (SMB) protocol.",source:"@site/docs/user/software/networking/samba.md",sourceDirName:"user/software/networking",slug:"/user/software/networking/samba",permalink:"/docs/user/software/networking/samba",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/networking/samba.md",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Samba File Sharing",summary:"A quick start guide to Samba on Solus"},sidebar:"userSidebar",previous:{title:"Networking",permalink:"/docs/category/networking"},next:{title:"TigerVNC",permalink:"/docs/user/software/networking/tigervnc"}},l={},m=[{value:"Samba on Solus",id:"samba-on-solus",level:2},{value:"How to start/stop Samba",id:"how-to-startstop-samba",level:3},{value:"Enabling Windows 7+ network discovery support",id:"enabling-windows-7-network-discovery-support",level:3},{value:"Accessing Samba via IPv6",id:"accessing-samba-via-ipv6",level:3},{value:"A brief introduction to the Samba usershare functionality",id:"a-brief-introduction-to-the-samba-usershare-functionality",level:2},{value:"GUI - configuring shares via file manager plugins",id:"gui---configuring-shares-via-file-manager-plugins",level:3},{value:"CLI - using the net usershare command",id:"cli---using-the-net-usershare-command",level:3},{value:"Managing Samba authentication for named users",id:"managing-samba-authentication-for-named-users",level:2},{value:"Debugging Samba authentication issues",id:"debugging-samba-authentication-issues",level:3},{value:"Adding custom configuration parameters via /etc/samba/smb.conf",id:"adding-custom-configuration-parameters-via-etcsambasmbconf",level:2},{value:"Example -- anonymous, read-write share outside of $HOME",id:"example----anonymous-read-write-share-outside-of-home",level:3},{value:"Links to the official Samba documentation",id:"links-to-the-official-samba-documentation",level:3},{value:"Full manual control of Samba (recommended only for experienced Samba admins)",id:"full-manual-control-of-samba-recommended-only-for-experienced-samba-admins",level:2}],u={toc:m},d="wrapper";function c(e){let{components:a,...t}=e;return(0,s.kt)(d,(0,n.Z)({},u,t,{components:a,mdxType:"MDXLayout"}),(0,s.kt)("h1",{id:"samba-file-sharing"},"Samba file sharing"),(0,s.kt)("p",null,"Samba is the standard Windows interoperability suite of programs for Linux and Unix. Among other things, it allows Linux, macOS and Windows users to share files via the Server Message Block (SMB) protocol."),(0,s.kt)("h2",{id:"samba-on-solus"},"Samba on Solus"),(0,s.kt)("p",null,"To enable convenient file-sharing on Solus, we maintain a Solus-specific Samba configuration that out-of-the-box:"),(0,s.kt)("ul",null,(0,s.kt)("li",{parentName:"ul"},"Supports Samba usershare functionality"),(0,s.kt)("li",{parentName:"ul"},"Enables sharing of ",(0,s.kt)("em",{parentName:"li"},"$HOME")," folders (manual user account activation needed)"),(0,s.kt)("li",{parentName:"ul"},"Is set up as a standalone server using the SMB2.0.2 protocol and up (>= Windows Vista/Server 2008)"),(0,s.kt)("li",{parentName:"ul"},"Advertises itself via ",(0,s.kt)("em",{parentName:"li"},"Avahi")," aka ",(0,s.kt)("em",{parentName:"li"},"Apple Bonjour")," / ",(0,s.kt)("em",{parentName:"li"},"mDNS")," / ",(0,s.kt)("em",{parentName:"li"},"zeroconf")," for macOS compatibility"),(0,s.kt)("li",{parentName:"ul"},"Advertises itself via ",(0,s.kt)("em",{parentName:"li"},"wsdd")," aka ",(0,s.kt)("em",{parentName:"li"},"Web Services Discovery Daemon")," for Windows 7+ compatibility"),(0,s.kt)("li",{parentName:"ul"},"Disables sharing of printers via Samba (use IPP via CUPS instead)"),(0,s.kt)("li",{parentName:"ul"},"Allows access only from IPv4 and IPv6 private and link-local (non-internet-routable) addresses")),(0,s.kt)("p",null,"As of Samba 4.7.x, Solus disables the old, deprecated and insecure original SMB1/CIFS protocol by default."),(0,s.kt)("p",null,"For more information on this choice, please read ",(0,s.kt)("a",{parentName:"p",href:"https://blogs.technet.microsoft.com/filecab/2016/09/16/stop-using-smb1/"},"this post regarding SMB1"),"."),(0,s.kt)("p",null,"As of Samba 4.11.x, the SMB1/CIFS protocol is officially deprecated upstream."),(0,s.kt)("h3",{id:"how-to-startstop-samba"},"How to start/stop Samba"),(0,s.kt)("p",null,"Please note that Samba does NOT run on system boot by default. It needs to be manually started/configured to start automatically:"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-bash"},"# Start Samba manually\nsudo systemctl start smb\n\n# Configure Samba to start automatically on each boot and immediately start the service\nsudo systemctl enable --now smb\n\n# Check whether Samba is running\nsudo systemctl status smb\n\n# Restart Samba manually\nsudo systemctl restart smb\n\n# Stop Samba manually\nsudo systemctl stop smb\n\n# Configure Samba to not start automatically on each boot and immediately stop the service\nsudo systemctl disable --now smb\n")),(0,s.kt)("h3",{id:"enabling-windows-7-network-discovery-support"},"Enabling Windows 7+ network discovery support"),(0,s.kt)("p",null,"The Web Services Discovery protocol is used by Windows 7+ clients to discover shares on other computers. Solus now includes the ",(0,s.kt)("em",{parentName:"p"},"wsdd")," service which provides support for the Web Services Discovery protocol."),(0,s.kt)("p",null,"When restarting wsdd, it may be necessary to also restart Samba."),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-bash"},"# Start wsdd manually (depends on the smb service)\nsudo systemctl start wsdd\n\n# Configure wsdd to start automatically on each boot and immediately start the service\nsudo systemctl enable --now wsdd\n\n# Check whether wsdd is running\nsudo systemctl status wsdd\n\n# Restart wsdd and Samba\nsudo systemctl restart wsdd smb\n\n# Stop wsdd manually\nsudo systemctl stop wsdd\n\n# Configure wsdd to not start automatically on each boot and immediately stop the service\nsudo systemctl disable --now wsdd\n")),(0,s.kt)("p",null,"For more details on managing services on Solus with ",(0,s.kt)("em",{parentName:"p"},"systemctl"),", see ",(0,s.kt)("inlineCode",{parentName:"p"},"man systemctl")," which is part of the systemd system and service manager."),(0,s.kt)("h3",{id:"accessing-samba-via-ipv6"},"Accessing Samba via IPv6"),(0,s.kt)("p",null,"In order to access a running Solus Samba server instance via IPv6, first verify that all relevant hosts (including the Samba host) are configured with an IPv6 link-local address."),(0,s.kt)("p",null,"This can be verified in a terminal:"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre"},"$ ip addr\n\n2: enp2s0: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000\n link/ether 14:da:e9:10:f9:c7 brd ff:ff:ff:ff:ff:ff\n inet 192.168.147.233/24 brd 192.168.147.255 scope global dynamic noprefixroute enp2s0\n valid_lft 5066sec preferred_lft 5066sec\n inet6 fe80::d555:a50f:1aea:c944/64 scope link noprefixroute\n valid_lft forever preferred_lft forever\n")),(0,s.kt)("p",null,"In the above example, the name of the relevant network device is ",(0,s.kt)("inlineCode",{parentName:"p"},"enp2s0"),". Note how the line starting with ",(0,s.kt)("inlineCode",{parentName:"p"},"inet6")," contains an IPv6 address which begins with fe80:: and contains ",(0,s.kt)("inlineCode",{parentName:"p"},"scope link"),"."),(0,s.kt)("p",null,"Ensure that Samba has been started on the host and then query the running local Samba instance with the following command, using the IPv6 address and interface as show by the output of ",(0,s.kt)("inlineCode",{parentName:"p"},"ip addr"),":"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre"},"$ smbclient -N -L //fe80::d555:a50f:1aea:c944%enp2s0\n")),(0,s.kt)("p",null,"The output might look something like this:"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre"},"Unable to initialize messaging context\nAnonymous login successful\n\n Sharename Type Comment\n --------- ---- -------\n eopkgs Disk\n IPC$ IPC IPC Service (Samba server (version: 4.10.11, protocol: SMB3_11))\n Public Disk\nfe80::d555:a50f:1aea:c944%enp2s0 is an IPv6 address -- no workgroup available\n")),(0,s.kt)("p",null,"Make sure to change the IPv6 address and interface name (",(0,s.kt)("inlineCode",{parentName:"p"},"fe80::d555:a50f:1aea:c944")," and ",(0,s.kt)("inlineCode",{parentName:"p"},"enp2s0")," respectively in the above example) to the real address and interface name of the Samba host in question."),(0,s.kt)("h2",{id:"a-brief-introduction-to-the-samba-usershare-functionality"},"A brief introduction to the Samba usershare functionality"),(0,s.kt)("p",null,"In order to support user-managed (as opposed to system-managed) shares, Samba provides the so-called ",(0,s.kt)("em",{parentName:"p"},"usershare")," functionality, where users can define network shares without touching the traditional Samba configuration file."),(0,s.kt)("h3",{id:"gui---configuring-shares-via-file-manager-plugins"},"GUI - configuring shares via file manager plugins"),(0,s.kt)("p",null,"The default Solus configuration was written with the ",(0,s.kt)("inlineCode",{parentName:"p"},"nautilus-share")," (Budgie/GNOME), ",(0,s.kt)("inlineCode",{parentName:"p"},"kdenetwork-filesharing")," (KDE) and ",(0,s.kt)("inlineCode",{parentName:"p"},"caja-share")," (MATE) file manager plugins in mind. These plugins allow the user to share folders in an easy and convenient way."),(0,s.kt)("p",null,"All the user needs to do is to install either the ",(0,s.kt)("inlineCode",{parentName:"p"},"caja-extensions")," package (which includes the ",(0,s.kt)("inlineCode",{parentName:"p"},"caja-share")," plugin), the ",(0,s.kt)("inlineCode",{parentName:"p"},"kdenetwork-filesharing")," package or the ",(0,s.kt)("inlineCode",{parentName:"p"},"nautilus-share")," package from the Software Center and enable the relevant Samba services."),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-bash"},"# Budgie/GNOME\nsudo eopkg install nautilus-share\n\n# KDE\nsudo eopkg install kdenetwork-filesharing\n\n# MATE\nsudo eopkg install caja-extensions\n")),(0,s.kt)("p",null,"In order to load the newly installed file manager plugin, the user will need to log out of the current desktop session and log back in to a new desktop session, at which point the plugin in question will be ready for use. To enable shares from any drive and folder on your System you will need add the following parameter to /etc/samba/smb.conf:"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre"},"usershare owner only = false\n")),(0,s.kt)("p",null,"Afterwards simply right-clicking a folder and clicking ",(0,s.kt)("em",{parentName:"p"},"properties")," will now show an option to share it, as well as whether to allow Read/Write permissions to your users or guest access."),(0,s.kt)("h3",{id:"cli---using-the-net-usershare-command"},"CLI - using the net usershare command"),(0,s.kt)("p",null,"Excerpt from the ",(0,s.kt)("inlineCode",{parentName:"p"},"man smb.conf")," manual page:"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre"},"net usershare add sharename path [comment] [acl] [guest_ok=[y|n]]\n To create or modify (overwrite) a user defined share.\n\nnet usershare delete sharename\n To delete a user defined share.\n\nnet usershare list wildcard-sharename\n To list user defined shares.\n\nnet usershare info wildcard-sharename\n To print information about user defined shares.\n")),(0,s.kt)("h2",{id:"managing-samba-authentication-for-named-users"},"Managing Samba authentication for named users"),(0,s.kt)("p",null,"Should the user ",(0,s.kt)("inlineCode",{parentName:"p"},"some_user")," wish to access e.g. the ",(0,s.kt)("em",{parentName:"p"},"$HOME")," directory via Samba, it is necessary to enable the ",(0,s.kt)("inlineCode",{parentName:"p"},"some_user")," Samba account."),(0,s.kt)("p",null,"Note that the ",(0,s.kt)("inlineCode",{parentName:"p"},"some_user")," Samba account is separate from the ",(0,s.kt)("inlineCode",{parentName:"p"},"some_user")," Linux user account, but they share the same ",(0,s.kt)("em",{parentName:"p"},"$HOME")," directory."),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-bash"},"# Add the some_user account to the Samba login db\nsudo smbpasswd -a some_user\n\n# Enable the some_user account in the Samba login db\nsudo smbpasswd -e some_user\n\n# Try to log in to a running Samba instance as some_user and list shares\nsmbclient -U some_user -L localhost\n\n# Disable the some_user account in the Samba login db\nsudo smbpasswd -d some_user\n\n# Remove the some_user account from the Samba login db\nsudo smbpasswd -x some_user\n")),(0,s.kt)("p",null,"See ",(0,s.kt)("inlineCode",{parentName:"p"},"man smbpasswd")," for more details."),(0,s.kt)("h3",{id:"debugging-samba-authentication-issues"},"Debugging Samba authentication issues"),(0,s.kt)("p",null,"To help debug authentication issues, the Solus Samba configuration is by default set up with relatively verbose logging when it comes to authentication and protocol negotiation."),(0,s.kt)("p",null,"The Samba log files live in the ",(0,s.kt)("inlineCode",{parentName:"p"},"/var/log/samba/")," directory."),(0,s.kt)("h2",{id:"adding-custom-configuration-parameters-via-etcsambasmbconf"},"Adding custom configuration parameters via ",(0,s.kt)("inlineCode",{parentName:"h2"},"/etc/samba/smb.conf")),(0,s.kt)("p",null,(0,s.kt)("strong",{parentName:"p"},"CAUTION:")," ",(0,s.kt)("em",{parentName:"p"},"From this point on, it is assumed that the user is familiar with the Samba documentation, including ",(0,s.kt)("inlineCode",{parentName:"em"},"man smb.conf"),", and that the user has a basic understanding of Linux filesystem permissions.")),(0,s.kt)("p",null,"The default Solus-managed configuration (which lives in ",(0,s.kt)("inlineCode",{parentName:"p"},"/usr/share/defaults/samba/smb.conf")," and will be overwritten on each Samba package update) is written such that it will attempt to include any configuration parameters present in ",(0,s.kt)("inlineCode",{parentName:"p"},"/etc/samba/smb.conf"),"."),(0,s.kt)("p",null,"Hence, any persistent user-managed parameters should be added to ",(0,s.kt)("inlineCode",{parentName:"p"},"/etc/samba/smb.conf")," which will ",(0,s.kt)("em",{parentName:"p"},"never")," be overwritten by the system package manager."),(0,s.kt)("p",null,"In addition, the Solus-controlled Samba configuration is written such that it is possible to override its default parameters simply by assigning a new value to the parameter in question in ",(0,s.kt)("inlineCode",{parentName:"p"},"/etc/samba/smb.conf"),". From a technical perspective, any parameters added without a ",(0,s.kt)("inlineCode",{parentName:"p"},"[shared resource]")," header will considered part of the ",(0,s.kt)("inlineCode",{parentName:"p"},"[global]")," configuration section."),(0,s.kt)("p",null,"This way, simply deleting or renaming ",(0,s.kt)("inlineCode",{parentName:"p"},"/etc/samba/smb.conf")," and restarting Samba with ",(0,s.kt)("inlineCode",{parentName:"p"},"sudo systemctl restart smb")," will reset the configuration to the known working default Solus configuration."),(0,s.kt)("h3",{id:"example----anonymous-read-write-share-outside-of-home"},"Example -- anonymous, read-write share outside of ",(0,s.kt)("em",{parentName:"h3"},"$HOME")),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-ini"},"# Contents of /etc/samba/smb.conf:\n#\n# If /etc/samba/smb.conf exists, it is automatically loaded by the Solus-\n# controlled default config residing in /usr/share/defaults/samba/smb.conf\n#\n# The following configuration creates a \"//servername/someshare\" share where\n# anonymous users have read and write access.\n#\n# ';' also denotes a comment (typically used for configuration parameters)\n#\n[someshare]\npath = /mnt/someshare\n# allow anonymous access\nguest ok = Yes\n# ONLY allow anonymous access (don't allow both guest and system user access)\n;guest only = Yes\n# allow write access\nread only = No\n# This is an example of how to limit access to the share to known IPs\n;hosts deny = ALL\n;hosts allow = 127.0.0.1 192.168.1.0/24\n# share config end\n")),(0,s.kt)("p",null,"In the above example, it is assumed that the user has chosen a suitable method for making ",(0,s.kt)("inlineCode",{parentName:"p"},"/mnt/someshare")," writeable by guest users."),(0,s.kt)("p",null,"After adding a ",(0,s.kt)("inlineCode",{parentName:"p"},"[someshare]")," section like in the above example, run ",(0,s.kt)("inlineCode",{parentName:"p"},"sudo testparm")," to check that the newly included share does not contain syntax errors. Check out ",(0,s.kt)("inlineCode",{parentName:"p"},"man testparm")," for more information about the ",(0,s.kt)("em",{parentName:"p"},"testparm")," utility."),(0,s.kt)("p",null,"If ",(0,s.kt)("em",{parentName:"p"},"testparm")," didn't spot any problems, restart Samba with ",(0,s.kt)("inlineCode",{parentName:"p"},"sudo systemctl restart smb"),", which will activate the new configuration."),(0,s.kt)("h3",{id:"links-to-the-official-samba-documentation"},"Links to the official Samba documentation"),(0,s.kt)("p",null,"Apart from the aforementioned ",(0,s.kt)("inlineCode",{parentName:"p"},"man smb.conf"),", wiki.samba.org is your friend, specifically:"),(0,s.kt)("ul",null,(0,s.kt)("li",{parentName:"ul"},(0,s.kt)("a",{parentName:"li",href:"https://wiki.samba.org/index.php/Setting_up_a_Share_Using_POSIX_ACLs"},"https://wiki.samba.org/index.php/Setting_up_a_Share_Using_POSIX_ACLs")),(0,s.kt)("li",{parentName:"ul"},(0,s.kt)("a",{parentName:"li",href:"https://wiki.samba.org/index.php/Setting_up_Samba_as_a_Standalone_Server"},"https://wiki.samba.org/index.php/Setting_up_Samba_as_a_Standalone_Server"))),(0,s.kt)("p",null,"The default Solus Samba configuration is patterned on the above."),(0,s.kt)("h2",{id:"full-manual-control-of-samba-recommended-only-for-experienced-samba-admins"},"Full manual control of Samba (recommended only for experienced Samba admins)"),(0,s.kt)("p",null,"Full manual control of Samba can be achieved by completely bypassing the default Solus Samba configuration."),(0,s.kt)("p",null,"In the ",(0,s.kt)("em",{parentName:"p"},"smbd")," manual page (",(0,s.kt)("inlineCode",{parentName:"p"},"man 8 smbd"),"), it is shown how the compiled-in default config file can be overridden by specifying the ",(0,s.kt)("inlineCode",{parentName:"p"},"--configfile=")," flag during startup."),(0,s.kt)("p",null,"To use the traditional ",(0,s.kt)("inlineCode",{parentName:"p"},"/etc/samba/smb.conf")," configuration file exclusively (thus bypassing the Solus configuration), edit the ",(0,s.kt)("inlineCode",{parentName:"p"},"/etc/sysconfig/samba")," file to look like so:"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-bash"},'## Path: Network/Samba\n## Description: Samba process options\n## Type: string\n## Default: ""\n## ServiceRestart: samba\nSAMBAOPTIONS=""\n## Type: string\n## Default: ""\n## ServiceRestart: smb\nSMBDOPTIONS="--configfile=/etc/samba/smb.conf"\n## Type: string\n## Default: ""\n## ServiceRestart: nmb\nNMBDOPTIONS="--configfile=/etc/samba/smb.conf"\n## Type: string\n## Default: ""\n## ServiceRestart: winbind\nWINBINDOPTIONS=""\n')))}c.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[3206],{3905:(e,a,t)=>{t.d(a,{Zo:()=>u,kt:()=>h});var n=t(7294);function s(e,a,t){return a in e?Object.defineProperty(e,a,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[a]=t,e}function o(e,a){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),t.push.apply(t,n)}return t}function i(e){for(var a=1;a=0||(s[t]=e[t]);return s}(e,a);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(s[t]=e[t])}return s}var l=n.createContext({}),m=function(e){var a=n.useContext(l),t=a;return e&&(t="function"==typeof e?e(a):i(i({},a),e)),t},u=function(e){var a=m(e.components);return n.createElement(l.Provider,{value:a},e.children)},d="mdxType",c={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},p=n.forwardRef((function(e,a){var t=e.components,s=e.mdxType,o=e.originalType,l=e.parentName,u=r(e,["components","mdxType","originalType","parentName"]),d=m(t),p=s,h=d["".concat(l,".").concat(p)]||d[p]||c[p]||o;return t?n.createElement(h,i(i({ref:a},u),{},{components:t})):n.createElement(h,i({ref:a},u))}));function h(e,a){var t=arguments,s=a&&a.mdxType;if("string"==typeof e||s){var o=t.length,i=new Array(o);i[0]=p;var r={};for(var l in a)hasOwnProperty.call(a,l)&&(r[l]=a[l]);r.originalType=e,r[d]="string"==typeof e?e:s,i[1]=r;for(var m=2;m{t.r(a),t.d(a,{assets:()=>l,contentTitle:()=>i,default:()=>c,frontMatter:()=>o,metadata:()=>r,toc:()=>m});var n=t(7462),s=(t(7294),t(3905));const o={title:"Samba File Sharing",summary:"A quick start guide to Samba on Solus"},i="Samba file sharing",r={unversionedId:"user/software/networking/samba",id:"user/software/networking/samba",title:"Samba File Sharing",description:"Samba is the standard Windows interoperability suite of programs for Linux and Unix. Among other things, it allows Linux, macOS and Windows users to share files via the Server Message Block (SMB) protocol.",source:"@site/docs/user/software/networking/samba.md",sourceDirName:"user/software/networking",slug:"/user/software/networking/samba",permalink:"/docs/user/software/networking/samba",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/networking/samba.md",tags:[],version:"current",lastUpdatedAt:1695222528,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Samba File Sharing",summary:"A quick start guide to Samba on Solus"},sidebar:"userSidebar",previous:{title:"Networking",permalink:"/docs/category/networking"},next:{title:"TigerVNC",permalink:"/docs/user/software/networking/tigervnc"}},l={},m=[{value:"Samba on Solus",id:"samba-on-solus",level:2},{value:"How to start/stop Samba",id:"how-to-startstop-samba",level:3},{value:"Enabling Windows 7+ network discovery support",id:"enabling-windows-7-network-discovery-support",level:3},{value:"Accessing Samba via IPv6",id:"accessing-samba-via-ipv6",level:3},{value:"A brief introduction to the Samba usershare functionality",id:"a-brief-introduction-to-the-samba-usershare-functionality",level:2},{value:"GUI - configuring shares via file manager plugins",id:"gui---configuring-shares-via-file-manager-plugins",level:3},{value:"CLI - using the net usershare command",id:"cli---using-the-net-usershare-command",level:3},{value:"Managing Samba authentication for named users",id:"managing-samba-authentication-for-named-users",level:2},{value:"Debugging Samba authentication issues",id:"debugging-samba-authentication-issues",level:3},{value:"Adding custom configuration parameters via /etc/samba/smb.conf",id:"adding-custom-configuration-parameters-via-etcsambasmbconf",level:2},{value:"Example -- anonymous, read-write share outside of $HOME",id:"example----anonymous-read-write-share-outside-of-home",level:3},{value:"Links to the official Samba documentation",id:"links-to-the-official-samba-documentation",level:3},{value:"Full manual control of Samba (recommended only for experienced Samba admins)",id:"full-manual-control-of-samba-recommended-only-for-experienced-samba-admins",level:2}],u={toc:m},d="wrapper";function c(e){let{components:a,...t}=e;return(0,s.kt)(d,(0,n.Z)({},u,t,{components:a,mdxType:"MDXLayout"}),(0,s.kt)("h1",{id:"samba-file-sharing"},"Samba file sharing"),(0,s.kt)("p",null,"Samba is the standard Windows interoperability suite of programs for Linux and Unix. Among other things, it allows Linux, macOS and Windows users to share files via the Server Message Block (SMB) protocol."),(0,s.kt)("h2",{id:"samba-on-solus"},"Samba on Solus"),(0,s.kt)("p",null,"To enable convenient file-sharing on Solus, we maintain a Solus-specific Samba configuration that out-of-the-box:"),(0,s.kt)("ul",null,(0,s.kt)("li",{parentName:"ul"},"Supports Samba usershare functionality"),(0,s.kt)("li",{parentName:"ul"},"Enables sharing of ",(0,s.kt)("em",{parentName:"li"},"$HOME")," folders (manual user account activation needed)"),(0,s.kt)("li",{parentName:"ul"},"Is set up as a standalone server using the SMB2.0.2 protocol and up (>= Windows Vista/Server 2008)"),(0,s.kt)("li",{parentName:"ul"},"Advertises itself via ",(0,s.kt)("em",{parentName:"li"},"Avahi")," aka ",(0,s.kt)("em",{parentName:"li"},"Apple Bonjour")," / ",(0,s.kt)("em",{parentName:"li"},"mDNS")," / ",(0,s.kt)("em",{parentName:"li"},"zeroconf")," for macOS compatibility"),(0,s.kt)("li",{parentName:"ul"},"Advertises itself via ",(0,s.kt)("em",{parentName:"li"},"wsdd")," aka ",(0,s.kt)("em",{parentName:"li"},"Web Services Discovery Daemon")," for Windows 7+ compatibility"),(0,s.kt)("li",{parentName:"ul"},"Disables sharing of printers via Samba (use IPP via CUPS instead)"),(0,s.kt)("li",{parentName:"ul"},"Allows access only from IPv4 and IPv6 private and link-local (non-internet-routable) addresses")),(0,s.kt)("p",null,"As of Samba 4.7.x, Solus disables the old, deprecated and insecure original SMB1/CIFS protocol by default."),(0,s.kt)("p",null,"For more information on this choice, please read ",(0,s.kt)("a",{parentName:"p",href:"https://blogs.technet.microsoft.com/filecab/2016/09/16/stop-using-smb1/"},"this post regarding SMB1"),"."),(0,s.kt)("p",null,"As of Samba 4.11.x, the SMB1/CIFS protocol is officially deprecated upstream."),(0,s.kt)("h3",{id:"how-to-startstop-samba"},"How to start/stop Samba"),(0,s.kt)("p",null,"Please note that Samba does NOT run on system boot by default. It needs to be manually started/configured to start automatically:"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-bash"},"# Start Samba manually\nsudo systemctl start smb\n\n# Configure Samba to start automatically on each boot and immediately start the service\nsudo systemctl enable --now smb\n\n# Check whether Samba is running\nsudo systemctl status smb\n\n# Restart Samba manually\nsudo systemctl restart smb\n\n# Stop Samba manually\nsudo systemctl stop smb\n\n# Configure Samba to not start automatically on each boot and immediately stop the service\nsudo systemctl disable --now smb\n")),(0,s.kt)("h3",{id:"enabling-windows-7-network-discovery-support"},"Enabling Windows 7+ network discovery support"),(0,s.kt)("p",null,"The Web Services Discovery protocol is used by Windows 7+ clients to discover shares on other computers. Solus now includes the ",(0,s.kt)("em",{parentName:"p"},"wsdd")," service which provides support for the Web Services Discovery protocol."),(0,s.kt)("p",null,"When restarting wsdd, it may be necessary to also restart Samba."),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-bash"},"# Start wsdd manually (depends on the smb service)\nsudo systemctl start wsdd\n\n# Configure wsdd to start automatically on each boot and immediately start the service\nsudo systemctl enable --now wsdd\n\n# Check whether wsdd is running\nsudo systemctl status wsdd\n\n# Restart wsdd and Samba\nsudo systemctl restart wsdd smb\n\n# Stop wsdd manually\nsudo systemctl stop wsdd\n\n# Configure wsdd to not start automatically on each boot and immediately stop the service\nsudo systemctl disable --now wsdd\n")),(0,s.kt)("p",null,"For more details on managing services on Solus with ",(0,s.kt)("em",{parentName:"p"},"systemctl"),", see ",(0,s.kt)("inlineCode",{parentName:"p"},"man systemctl")," which is part of the systemd system and service manager."),(0,s.kt)("h3",{id:"accessing-samba-via-ipv6"},"Accessing Samba via IPv6"),(0,s.kt)("p",null,"In order to access a running Solus Samba server instance via IPv6, first verify that all relevant hosts (including the Samba host) are configured with an IPv6 link-local address."),(0,s.kt)("p",null,"This can be verified in a terminal:"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre"},"$ ip addr\n\n2: enp2s0: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000\n link/ether 14:da:e9:10:f9:c7 brd ff:ff:ff:ff:ff:ff\n inet 192.168.147.233/24 brd 192.168.147.255 scope global dynamic noprefixroute enp2s0\n valid_lft 5066sec preferred_lft 5066sec\n inet6 fe80::d555:a50f:1aea:c944/64 scope link noprefixroute\n valid_lft forever preferred_lft forever\n")),(0,s.kt)("p",null,"In the above example, the name of the relevant network device is ",(0,s.kt)("inlineCode",{parentName:"p"},"enp2s0"),". Note how the line starting with ",(0,s.kt)("inlineCode",{parentName:"p"},"inet6")," contains an IPv6 address which begins with fe80:: and contains ",(0,s.kt)("inlineCode",{parentName:"p"},"scope link"),"."),(0,s.kt)("p",null,"Ensure that Samba has been started on the host and then query the running local Samba instance with the following command, using the IPv6 address and interface as show by the output of ",(0,s.kt)("inlineCode",{parentName:"p"},"ip addr"),":"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre"},"$ smbclient -N -L //fe80::d555:a50f:1aea:c944%enp2s0\n")),(0,s.kt)("p",null,"The output might look something like this:"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre"},"Unable to initialize messaging context\nAnonymous login successful\n\n Sharename Type Comment\n --------- ---- -------\n eopkgs Disk\n IPC$ IPC IPC Service (Samba server (version: 4.10.11, protocol: SMB3_11))\n Public Disk\nfe80::d555:a50f:1aea:c944%enp2s0 is an IPv6 address -- no workgroup available\n")),(0,s.kt)("p",null,"Make sure to change the IPv6 address and interface name (",(0,s.kt)("inlineCode",{parentName:"p"},"fe80::d555:a50f:1aea:c944")," and ",(0,s.kt)("inlineCode",{parentName:"p"},"enp2s0")," respectively in the above example) to the real address and interface name of the Samba host in question."),(0,s.kt)("h2",{id:"a-brief-introduction-to-the-samba-usershare-functionality"},"A brief introduction to the Samba usershare functionality"),(0,s.kt)("p",null,"In order to support user-managed (as opposed to system-managed) shares, Samba provides the so-called ",(0,s.kt)("em",{parentName:"p"},"usershare")," functionality, where users can define network shares without touching the traditional Samba configuration file."),(0,s.kt)("h3",{id:"gui---configuring-shares-via-file-manager-plugins"},"GUI - configuring shares via file manager plugins"),(0,s.kt)("p",null,"The default Solus configuration was written with the ",(0,s.kt)("inlineCode",{parentName:"p"},"nautilus-share")," (Budgie/GNOME), ",(0,s.kt)("inlineCode",{parentName:"p"},"kdenetwork-filesharing")," (KDE) and ",(0,s.kt)("inlineCode",{parentName:"p"},"caja-share")," (MATE) file manager plugins in mind. These plugins allow the user to share folders in an easy and convenient way."),(0,s.kt)("p",null,"All the user needs to do is to install either the ",(0,s.kt)("inlineCode",{parentName:"p"},"caja-extensions")," package (which includes the ",(0,s.kt)("inlineCode",{parentName:"p"},"caja-share")," plugin), the ",(0,s.kt)("inlineCode",{parentName:"p"},"kdenetwork-filesharing")," package or the ",(0,s.kt)("inlineCode",{parentName:"p"},"nautilus-share")," package from the Software Center and enable the relevant Samba services."),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-bash"},"# Budgie/GNOME\nsudo eopkg install nautilus-share\n\n# KDE\nsudo eopkg install kdenetwork-filesharing\n\n# MATE\nsudo eopkg install caja-extensions\n")),(0,s.kt)("p",null,"In order to load the newly installed file manager plugin, the user will need to log out of the current desktop session and log back in to a new desktop session, at which point the plugin in question will be ready for use. To enable shares from any drive and folder on your System you will need add the following parameter to /etc/samba/smb.conf:"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre"},"usershare owner only = false\n")),(0,s.kt)("p",null,"Afterwards simply right-clicking a folder and clicking ",(0,s.kt)("em",{parentName:"p"},"properties")," will now show an option to share it, as well as whether to allow Read/Write permissions to your users or guest access."),(0,s.kt)("h3",{id:"cli---using-the-net-usershare-command"},"CLI - using the net usershare command"),(0,s.kt)("p",null,"Excerpt from the ",(0,s.kt)("inlineCode",{parentName:"p"},"man smb.conf")," manual page:"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre"},"net usershare add sharename path [comment] [acl] [guest_ok=[y|n]]\n To create or modify (overwrite) a user defined share.\n\nnet usershare delete sharename\n To delete a user defined share.\n\nnet usershare list wildcard-sharename\n To list user defined shares.\n\nnet usershare info wildcard-sharename\n To print information about user defined shares.\n")),(0,s.kt)("h2",{id:"managing-samba-authentication-for-named-users"},"Managing Samba authentication for named users"),(0,s.kt)("p",null,"Should the user ",(0,s.kt)("inlineCode",{parentName:"p"},"some_user")," wish to access e.g. the ",(0,s.kt)("em",{parentName:"p"},"$HOME")," directory via Samba, it is necessary to enable the ",(0,s.kt)("inlineCode",{parentName:"p"},"some_user")," Samba account."),(0,s.kt)("p",null,"Note that the ",(0,s.kt)("inlineCode",{parentName:"p"},"some_user")," Samba account is separate from the ",(0,s.kt)("inlineCode",{parentName:"p"},"some_user")," Linux user account, but they share the same ",(0,s.kt)("em",{parentName:"p"},"$HOME")," directory."),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-bash"},"# Add the some_user account to the Samba login db\nsudo smbpasswd -a some_user\n\n# Enable the some_user account in the Samba login db\nsudo smbpasswd -e some_user\n\n# Try to log in to a running Samba instance as some_user and list shares\nsmbclient -U some_user -L localhost\n\n# Disable the some_user account in the Samba login db\nsudo smbpasswd -d some_user\n\n# Remove the some_user account from the Samba login db\nsudo smbpasswd -x some_user\n")),(0,s.kt)("p",null,"See ",(0,s.kt)("inlineCode",{parentName:"p"},"man smbpasswd")," for more details."),(0,s.kt)("h3",{id:"debugging-samba-authentication-issues"},"Debugging Samba authentication issues"),(0,s.kt)("p",null,"To help debug authentication issues, the Solus Samba configuration is by default set up with relatively verbose logging when it comes to authentication and protocol negotiation."),(0,s.kt)("p",null,"The Samba log files live in the ",(0,s.kt)("inlineCode",{parentName:"p"},"/var/log/samba/")," directory."),(0,s.kt)("h2",{id:"adding-custom-configuration-parameters-via-etcsambasmbconf"},"Adding custom configuration parameters via ",(0,s.kt)("inlineCode",{parentName:"h2"},"/etc/samba/smb.conf")),(0,s.kt)("p",null,(0,s.kt)("strong",{parentName:"p"},"CAUTION:")," ",(0,s.kt)("em",{parentName:"p"},"From this point on, it is assumed that the user is familiar with the Samba documentation, including ",(0,s.kt)("inlineCode",{parentName:"em"},"man smb.conf"),", and that the user has a basic understanding of Linux filesystem permissions.")),(0,s.kt)("p",null,"The default Solus-managed configuration (which lives in ",(0,s.kt)("inlineCode",{parentName:"p"},"/usr/share/defaults/samba/smb.conf")," and will be overwritten on each Samba package update) is written such that it will attempt to include any configuration parameters present in ",(0,s.kt)("inlineCode",{parentName:"p"},"/etc/samba/smb.conf"),"."),(0,s.kt)("p",null,"Hence, any persistent user-managed parameters should be added to ",(0,s.kt)("inlineCode",{parentName:"p"},"/etc/samba/smb.conf")," which will ",(0,s.kt)("em",{parentName:"p"},"never")," be overwritten by the system package manager."),(0,s.kt)("p",null,"In addition, the Solus-controlled Samba configuration is written such that it is possible to override its default parameters simply by assigning a new value to the parameter in question in ",(0,s.kt)("inlineCode",{parentName:"p"},"/etc/samba/smb.conf"),". From a technical perspective, any parameters added without a ",(0,s.kt)("inlineCode",{parentName:"p"},"[shared resource]")," header will considered part of the ",(0,s.kt)("inlineCode",{parentName:"p"},"[global]")," configuration section."),(0,s.kt)("p",null,"This way, simply deleting or renaming ",(0,s.kt)("inlineCode",{parentName:"p"},"/etc/samba/smb.conf")," and restarting Samba with ",(0,s.kt)("inlineCode",{parentName:"p"},"sudo systemctl restart smb")," will reset the configuration to the known working default Solus configuration."),(0,s.kt)("h3",{id:"example----anonymous-read-write-share-outside-of-home"},"Example -- anonymous, read-write share outside of ",(0,s.kt)("em",{parentName:"h3"},"$HOME")),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-ini"},"# Contents of /etc/samba/smb.conf:\n#\n# If /etc/samba/smb.conf exists, it is automatically loaded by the Solus-\n# controlled default config residing in /usr/share/defaults/samba/smb.conf\n#\n# The following configuration creates a \"//servername/someshare\" share where\n# anonymous users have read and write access.\n#\n# ';' also denotes a comment (typically used for configuration parameters)\n#\n[someshare]\npath = /mnt/someshare\n# allow anonymous access\nguest ok = Yes\n# ONLY allow anonymous access (don't allow both guest and system user access)\n;guest only = Yes\n# allow write access\nread only = No\n# This is an example of how to limit access to the share to known IPs\n;hosts deny = ALL\n;hosts allow = 127.0.0.1 192.168.1.0/24\n# share config end\n")),(0,s.kt)("p",null,"In the above example, it is assumed that the user has chosen a suitable method for making ",(0,s.kt)("inlineCode",{parentName:"p"},"/mnt/someshare")," writeable by guest users."),(0,s.kt)("p",null,"After adding a ",(0,s.kt)("inlineCode",{parentName:"p"},"[someshare]")," section like in the above example, run ",(0,s.kt)("inlineCode",{parentName:"p"},"sudo testparm")," to check that the newly included share does not contain syntax errors. Check out ",(0,s.kt)("inlineCode",{parentName:"p"},"man testparm")," for more information about the ",(0,s.kt)("em",{parentName:"p"},"testparm")," utility."),(0,s.kt)("p",null,"If ",(0,s.kt)("em",{parentName:"p"},"testparm")," didn't spot any problems, restart Samba with ",(0,s.kt)("inlineCode",{parentName:"p"},"sudo systemctl restart smb"),", which will activate the new configuration."),(0,s.kt)("h3",{id:"links-to-the-official-samba-documentation"},"Links to the official Samba documentation"),(0,s.kt)("p",null,"Apart from the aforementioned ",(0,s.kt)("inlineCode",{parentName:"p"},"man smb.conf"),", wiki.samba.org is your friend, specifically:"),(0,s.kt)("ul",null,(0,s.kt)("li",{parentName:"ul"},(0,s.kt)("a",{parentName:"li",href:"https://wiki.samba.org/index.php/Setting_up_a_Share_Using_POSIX_ACLs"},"https://wiki.samba.org/index.php/Setting_up_a_Share_Using_POSIX_ACLs")),(0,s.kt)("li",{parentName:"ul"},(0,s.kt)("a",{parentName:"li",href:"https://wiki.samba.org/index.php/Setting_up_Samba_as_a_Standalone_Server"},"https://wiki.samba.org/index.php/Setting_up_Samba_as_a_Standalone_Server"))),(0,s.kt)("p",null,"The default Solus Samba configuration is patterned on the above."),(0,s.kt)("h2",{id:"full-manual-control-of-samba-recommended-only-for-experienced-samba-admins"},"Full manual control of Samba (recommended only for experienced Samba admins)"),(0,s.kt)("p",null,"Full manual control of Samba can be achieved by completely bypassing the default Solus Samba configuration."),(0,s.kt)("p",null,"In the ",(0,s.kt)("em",{parentName:"p"},"smbd")," manual page (",(0,s.kt)("inlineCode",{parentName:"p"},"man 8 smbd"),"), it is shown how the compiled-in default config file can be overridden by specifying the ",(0,s.kt)("inlineCode",{parentName:"p"},"--configfile=")," flag during startup."),(0,s.kt)("p",null,"To use the traditional ",(0,s.kt)("inlineCode",{parentName:"p"},"/etc/samba/smb.conf")," configuration file exclusively (thus bypassing the Solus configuration), edit the ",(0,s.kt)("inlineCode",{parentName:"p"},"/etc/sysconfig/samba")," file to look like so:"),(0,s.kt)("pre",null,(0,s.kt)("code",{parentName:"pre",className:"language-bash"},'## Path: Network/Samba\n## Description: Samba process options\n## Type: string\n## Default: ""\n## ServiceRestart: samba\nSAMBAOPTIONS=""\n## Type: string\n## Default: ""\n## ServiceRestart: smb\nSMBDOPTIONS="--configfile=/etc/samba/smb.conf"\n## Type: string\n## Default: ""\n## ServiceRestart: nmb\nNMBDOPTIONS="--configfile=/etc/samba/smb.conf"\n## Type: string\n## Default: ""\n## ServiceRestart: winbind\nWINBINDOPTIONS=""\n')))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/2a37c7d8.0a574d35.js b/assets/js/2a37c7d8.0910234a.js similarity index 99% rename from assets/js/2a37c7d8.0a574d35.js rename to assets/js/2a37c7d8.0910234a.js index 940f9be39..2090619d9 100644 --- a/assets/js/2a37c7d8.0a574d35.js +++ b/assets/js/2a37c7d8.0910234a.js @@ -1 +1 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[9995],{3905:(t,e,n)=>{n.d(e,{Zo:()=>s,kt:()=>c});var a=n(7294);function r(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function l(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,a)}return n}function i(t){for(var e=1;e=0||(r[n]=t[n]);return r}(t,e);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(t);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(r[n]=t[n])}return r}var p=a.createContext({}),d=function(t){var e=a.useContext(p),n=e;return t&&(n="function"==typeof t?t(e):i(i({},e),t)),n},s=function(t){var e=d(t.components);return a.createElement(p.Provider,{value:e},t.children)},m="mdxType",u={inlineCode:"code",wrapper:function(t){var e=t.children;return a.createElement(a.Fragment,{},e)}},k=a.forwardRef((function(t,e){var n=t.components,r=t.mdxType,l=t.originalType,p=t.parentName,s=o(t,["components","mdxType","originalType","parentName"]),m=d(n),k=r,c=m["".concat(p,".").concat(k)]||m[k]||u[k]||l;return n?a.createElement(c,i(i({ref:e},s),{},{components:n})):a.createElement(c,i({ref:e},s))}));function c(t,e){var n=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var l=n.length,i=new Array(l);i[0]=k;var o={};for(var p in e)hasOwnProperty.call(e,p)&&(o[p]=e[p]);o.originalType=t,o[m]="string"==typeof t?t:r,i[1]=o;for(var d=2;d{n.r(e),n.d(e,{assets:()=>p,contentTitle:()=>i,default:()=>u,frontMatter:()=>l,metadata:()=>o,toc:()=>d});var a=n(7462),r=(n(7294),n(3905));const l={title:"Tips and Tricks",summary:"Helpful tips and tricks for using Plasma on Solus."},i="Tips and Tricks",o={unversionedId:"user/editions/plasma/tips-and-tricks",id:"user/editions/plasma/tips-and-tricks",title:"Tips and Tricks",description:"Keyboard Shortcuts",source:"@site/docs/user/editions/plasma/tips-and-tricks.md",sourceDirName:"user/editions/plasma",slug:"/user/editions/plasma/tips-and-tricks",permalink:"/docs/user/editions/plasma/tips-and-tricks",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/editions/plasma/tips-and-tricks.md",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Tips and Tricks",summary:"Helpful tips and tricks for using Plasma on Solus."},sidebar:"userSidebar",previous:{title:"Configuration",permalink:"/docs/user/editions/plasma/configuration"},next:{title:"Hardware",permalink:"/docs/user/hardware/"}},p={},d=[{value:"Keyboard Shortcuts",id:"keyboard-shortcuts",level:2},{value:"Using KRunner",id:"using-krunner",level:2},{value:"Dolphin",id:"dolphin",level:2},{value:"Context Menu",id:"context-menu",level:2}],s={toc:d},m="wrapper";function u(t){let{components:e,...l}=t;return(0,r.kt)(m,(0,a.Z)({},s,l,{components:e,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"tips-and-tricks"},"Tips and Tricks"),(0,r.kt)("h2",{id:"keyboard-shortcuts"},"Keyboard Shortcuts"),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"To see the complete list of keyboard shortcuts available on your system, open the ",(0,r.kt)("strong",{parentName:"p"},(0,r.kt)("a",{parentName:"strong",href:"/docs/user/editions/plasma/configuration#opening-system-settings"},"System Settings"))," screen, then go to ",(0,r.kt)("strong",{parentName:"p"},"Workspace")," > ",(0,r.kt)("strong",{parentName:"p"},"Shortcuts"),".")),(0,r.kt)("p",null,"The following table shows some of the keyboard shortcuts available in Solus Plasma."),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Keyboard Shortcut"),(0,r.kt)("th",{parentName:"tr",align:null},"Action"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"Alt")," + ",(0,r.kt)("inlineCode",{parentName:"td"},"F2")),(0,r.kt)("td",{parentName:"tr",align:null},"Opens KRunner")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"Alt")," + ",(0,r.kt)("inlineCode",{parentName:"td"},"Space")),(0,r.kt)("td",{parentName:"tr",align:null},"Opens KRunner")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"Alt")," + ",(0,r.kt)("inlineCode",{parentName:"td"},"F4")),(0,r.kt)("td",{parentName:"tr",align:null},"Closes the active window on the desktop")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"Alt")," + ",(0,r.kt)("inlineCode",{parentName:"td"},"Tab")),(0,r.kt)("td",{parentName:"tr",align:null},"Opens application switcher, switch to the next application on the list")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"Shift")," + ",(0,r.kt)("inlineCode",{parentName:"td"},"Alt")," + ",(0,r.kt)("inlineCode",{parentName:"td"},"Tab")),(0,r.kt)("td",{parentName:"tr",align:null},"Opens application switcher, switch to previous application on the list")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"Super")),(0,r.kt)("td",{parentName:"tr",align:null},"Opens the application menu")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"Super")," + ",(0,r.kt)("inlineCode",{parentName:"td"},"L")),(0,r.kt)("td",{parentName:"tr",align:null},"Locks the screen")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"Super")," + ",(0,r.kt)("inlineCode",{parentName:"td"},"D")),(0,r.kt)("td",{parentName:"tr",align:null},"Shows the desktop")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"Print")),(0,r.kt)("td",{parentName:"tr",align:null},"Opens the screenshot utility (Spectacle)")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"Super")," + ",(0,r.kt)("inlineCode",{parentName:"td"},"Print")),(0,r.kt)("td",{parentName:"tr",align:null},"Captures the active window")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"Super")," + ",(0,r.kt)("inlineCode",{parentName:"td"},"Shift")," + ",(0,r.kt)("inlineCode",{parentName:"td"},"Print")),(0,r.kt)("td",{parentName:"tr",align:null},"Captures a rectangular region of the screen")))),(0,r.kt)("h2",{id:"using-krunner"},"Using KRunner"),(0,r.kt)("p",null,"KRunner is a system-wide desktop search and launcher app available on Solus Plasma. KRunner allows you to perform a variety of actions such as launching apps, executing commands, search files and open open system settings."),(0,r.kt)("p",null,"Open KRunner by pressing ",(0,r.kt)("inlineCode",{parentName:"p"},"Alt")," + ",(0,r.kt)("inlineCode",{parentName:"p"},"F2")," or ",(0,r.kt)("inlineCode",{parentName:"p"},"Alt")," + ",(0,r.kt)("inlineCode",{parentName:"p"},"Space"),"."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"KRunner interface",src:n(1242).Z,width:"723",height:"161"})),(0,r.kt)("p",null,"The following table outlines the actions you can perform using KRunner."),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Action"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Open an application"),(0,r.kt)("td",{parentName:"tr",align:null},"Enter the name of the application, then select the application from the list.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Run a command"),(0,r.kt)("td",{parentName:"tr",align:null},"Enter the command you want to run and press ",(0,r.kt)("inlineCode",{parentName:"td"},"Enter"),".")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"See the man pages of a command"),(0,r.kt)("td",{parentName:"tr",align:null},"Add ",(0,r.kt)("inlineCode",{parentName:"td"},"#")," before a command name and press enter (Example, ",(0,r.kt)("inlineCode",{parentName:"td"},"#wget"),").")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Terminate a program"),(0,r.kt)("td",{parentName:"tr",align:null},"Enter ",(0,r.kt)("inlineCode",{parentName:"td"},"kill [application name]")," and press ",(0,r.kt)("inlineCode",{parentName:"td"},"Enter")," (Example: ",(0,r.kt)("inlineCode",{parentName:"td"},"kill firefox"),")")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Do math operations"),(0,r.kt)("td",{parentName:"tr",align:null},"Enter ",(0,r.kt)("inlineCode",{parentName:"td"},"=")," followed by the calculation you want to perform (Examples: ",(0,r.kt)("inlineCode",{parentName:"td"},"=2*2"),", ",(0,r.kt)("inlineCode",{parentName:"td"},"=5!"),", ",(0,r.kt)("inlineCode",{parentName:"td"},"=sin(20)"),").")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Unit conversions"),(0,r.kt)("td",{parentName:"tr",align:null},"Enter ",(0,r.kt)("inlineCode",{parentName:"td"},"[measurement] to [destination unit]")," (Examples: ",(0,r.kt)("inlineCode",{parentName:"td"},"200 mi to km"),").")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Currency conversions"),(0,r.kt)("td",{parentName:"tr",align:null},"Enter ",(0,r.kt)("inlineCode",{parentName:"td"},"[amount] to [destination currency]"),". You can use the ISO code or the name of the currencies to do the conversion (Examples: ",(0,r.kt)("inlineCode",{parentName:"td"},"200 CAD to NOK"),", ",(0,r.kt)("inlineCode",{parentName:"td"},"50 koruna to yen"),").")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Check the time of other countries or time zones"),(0,r.kt)("td",{parentName:"tr",align:null},"Enter ",(0,r.kt)("inlineCode",{parentName:"td"},"time [country]")," or ",(0,r.kt)("inlineCode",{parentName:"td"},"time [time zone]")," (Examples: ",(0,r.kt)("inlineCode",{parentName:"td"},"time finland"),", ",(0,r.kt)("inlineCode",{parentName:"td"},"time gmt-1"),").")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Open files and folders"),(0,r.kt)("td",{parentName:"tr",align:null},"Enter the name of a file or folder, then select an entry from the list.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Switch between windows"),(0,r.kt)("td",{parentName:"tr",align:null},"Enter the name of an open window and select an entry from the ",(0,r.kt)("strong",{parentName:"td"},"Windows")," list.")))),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("ul",{parentName:"admonition"},(0,r.kt)("li",{parentName:"ul"},"To see a list of the currencies KRunner supports, see ",(0,r.kt)("a",{parentName:"li",href:"https://www.ecb.europa.eu/stats/policy_and_exchange_rates/euro_reference_exchange_rates/html/index.en.html"},"https://www.ecb.europa.eu/stats/policy_and_exchange_rates/euro_reference_exchange_rates/html/index.en.html"),"."),(0,r.kt)("li",{parentName:"ul"},"Unit and currency conversions do not require the ",(0,r.kt)("inlineCode",{parentName:"li"},"=")," symbol."))),(0,r.kt)("h2",{id:"dolphin"},"Dolphin"),(0,r.kt)("p",null,"Dolphin is the file manager included by default in Solus Plasma. Dolphin has multiple features, including tabs, split views, integrated terminal, and support for various file formats and protocols."),(0,r.kt)("p",null,"The following table describes some of the keyboard shortcuts you can use in Dolphin."),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Action"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Create a new folder"),(0,r.kt)("td",{parentName:"tr",align:null},"Press ",(0,r.kt)("inlineCode",{parentName:"td"},"F10")," to create a new folder.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Enabling dual-pane mode"),(0,r.kt)("td",{parentName:"tr",align:null},"Press ",(0,r.kt)("inlineCode",{parentName:"td"},"F3")," to enable dual-pane mode.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Open multiple tabs"),(0,r.kt)("td",{parentName:"tr",align:null},"Press ",(0,r.kt)("inlineCode",{parentName:"td"},"Ctrl")," + ",(0,r.kt)("inlineCode",{parentName:"td"},"T")," to open multiple Dolphin tabs.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Open a terminal window in the current location"),(0,r.kt)("td",{parentName:"tr",align:null},"Press ",(0,r.kt)("inlineCode",{parentName:"td"},"Alt")," + ",(0,r.kt)("inlineCode",{parentName:"td"},"Shift")," + ",(0,r.kt)("inlineCode",{parentName:"td"},"F4")," to open a terminal window in the location you have open.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Show/hide hidden files"),(0,r.kt)("td",{parentName:"tr",align:null},"Press ",(0,r.kt)("inlineCode",{parentName:"td"},"Ctrl")," + ",(0,r.kt)("inlineCode",{parentName:"td"},"H")," to show/hide hidden files.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Show/hide the side panel"),(0,r.kt)("td",{parentName:"tr",align:null},"Press ",(0,r.kt)("inlineCode",{parentName:"td"},"F9")," to show/hide the ",(0,r.kt)("strong",{parentName:"td"},"Places")," side panel.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Switch between the view modes"),(0,r.kt)("td",{parentName:"tr",align:null},"Press ",(0,r.kt)("inlineCode",{parentName:"td"},"Ctrl")," + ",(0,r.kt)("inlineCode",{parentName:"td"},"1")," to display icons in ",(0,r.kt)("em",{parentName:"td"},"icons")," view, press ",(0,r.kt)("inlineCode",{parentName:"td"},"Ctrl")," + ",(0,r.kt)("inlineCode",{parentName:"td"},"2")," to display icons in ",(0,r.kt)("em",{parentName:"td"},"compact")," view, or press ",(0,r.kt)("inlineCode",{parentName:"td"},"Ctrl")," + ",(0,r.kt)("inlineCode",{parentName:"td"},"3")," to display icons in ",(0,r.kt)("em",{parentName:"td"},"details")," view;")))),(0,r.kt)("h2",{id:"context-menu"},"Context Menu"),(0,r.kt)("p",null,"The ",(0,r.kt)("em",{parentName:"p"},"Plasma")," desktop provides a variety of context menus. Context menus display options, settings, and actions applicable to the current context or element you select."),(0,r.kt)("p",null,"The following table describes some of the context menus available in Plasma."),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Context menu"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Bottom panel settings"),(0,r.kt)("td",{parentName:"tr",align:null},"Right-click on an empty space of the bottom panel to open the bottom panel context menu.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Widget settings"),(0,r.kt)("td",{parentName:"tr",align:null},"Right-click on any widget in the bottom panel to open the widget context menu.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Desktop settings"),(0,r.kt)("td",{parentName:"tr",align:null},"Right-click anywhere on the desktop to open the desktop context menu.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"File"),(0,r.kt)("td",{parentName:"tr",align:null},"Right-click a file to open the file context menu.")))))}u.isMDXComponent=!0},1242:(t,e,n)=>{n.d(e,{Z:()=>a});const a=n.p+"assets/images/krunner-03789ddf72481240bd795c70e63e2ab0.png"}}]); \ No newline at end of file +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[9995],{3905:(t,e,n)=>{n.d(e,{Zo:()=>s,kt:()=>c});var a=n(7294);function r(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function l(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);e&&(a=a.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,a)}return n}function i(t){for(var e=1;e=0||(r[n]=t[n]);return r}(t,e);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(t);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(r[n]=t[n])}return r}var p=a.createContext({}),d=function(t){var e=a.useContext(p),n=e;return t&&(n="function"==typeof t?t(e):i(i({},e),t)),n},s=function(t){var e=d(t.components);return a.createElement(p.Provider,{value:e},t.children)},m="mdxType",u={inlineCode:"code",wrapper:function(t){var e=t.children;return a.createElement(a.Fragment,{},e)}},k=a.forwardRef((function(t,e){var n=t.components,r=t.mdxType,l=t.originalType,p=t.parentName,s=o(t,["components","mdxType","originalType","parentName"]),m=d(n),k=r,c=m["".concat(p,".").concat(k)]||m[k]||u[k]||l;return n?a.createElement(c,i(i({ref:e},s),{},{components:n})):a.createElement(c,i({ref:e},s))}));function c(t,e){var n=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var l=n.length,i=new Array(l);i[0]=k;var o={};for(var p in e)hasOwnProperty.call(e,p)&&(o[p]=e[p]);o.originalType=t,o[m]="string"==typeof t?t:r,i[1]=o;for(var d=2;d{n.r(e),n.d(e,{assets:()=>p,contentTitle:()=>i,default:()=>u,frontMatter:()=>l,metadata:()=>o,toc:()=>d});var a=n(7462),r=(n(7294),n(3905));const l={title:"Tips and Tricks",summary:"Helpful tips and tricks for using Plasma on Solus."},i="Tips and Tricks",o={unversionedId:"user/editions/plasma/tips-and-tricks",id:"user/editions/plasma/tips-and-tricks",title:"Tips and Tricks",description:"Keyboard Shortcuts",source:"@site/docs/user/editions/plasma/tips-and-tricks.md",sourceDirName:"user/editions/plasma",slug:"/user/editions/plasma/tips-and-tricks",permalink:"/docs/user/editions/plasma/tips-and-tricks",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/editions/plasma/tips-and-tricks.md",tags:[],version:"current",lastUpdatedAt:1695222528,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Tips and Tricks",summary:"Helpful tips and tricks for using Plasma on Solus."},sidebar:"userSidebar",previous:{title:"Configuration",permalink:"/docs/user/editions/plasma/configuration"},next:{title:"Hardware",permalink:"/docs/user/hardware/"}},p={},d=[{value:"Keyboard Shortcuts",id:"keyboard-shortcuts",level:2},{value:"Using KRunner",id:"using-krunner",level:2},{value:"Dolphin",id:"dolphin",level:2},{value:"Context Menu",id:"context-menu",level:2}],s={toc:d},m="wrapper";function u(t){let{components:e,...l}=t;return(0,r.kt)(m,(0,a.Z)({},s,l,{components:e,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"tips-and-tricks"},"Tips and Tricks"),(0,r.kt)("h2",{id:"keyboard-shortcuts"},"Keyboard Shortcuts"),(0,r.kt)("admonition",{type:"tip"},(0,r.kt)("p",{parentName:"admonition"},"To see the complete list of keyboard shortcuts available on your system, open the ",(0,r.kt)("strong",{parentName:"p"},(0,r.kt)("a",{parentName:"strong",href:"/docs/user/editions/plasma/configuration#opening-system-settings"},"System Settings"))," screen, then go to ",(0,r.kt)("strong",{parentName:"p"},"Workspace")," > ",(0,r.kt)("strong",{parentName:"p"},"Shortcuts"),".")),(0,r.kt)("p",null,"The following table shows some of the keyboard shortcuts available in Solus Plasma."),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Keyboard Shortcut"),(0,r.kt)("th",{parentName:"tr",align:null},"Action"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"Alt")," + ",(0,r.kt)("inlineCode",{parentName:"td"},"F2")),(0,r.kt)("td",{parentName:"tr",align:null},"Opens KRunner")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"Alt")," + ",(0,r.kt)("inlineCode",{parentName:"td"},"Space")),(0,r.kt)("td",{parentName:"tr",align:null},"Opens KRunner")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"Alt")," + ",(0,r.kt)("inlineCode",{parentName:"td"},"F4")),(0,r.kt)("td",{parentName:"tr",align:null},"Closes the active window on the desktop")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"Alt")," + ",(0,r.kt)("inlineCode",{parentName:"td"},"Tab")),(0,r.kt)("td",{parentName:"tr",align:null},"Opens application switcher, switch to the next application on the list")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"Shift")," + ",(0,r.kt)("inlineCode",{parentName:"td"},"Alt")," + ",(0,r.kt)("inlineCode",{parentName:"td"},"Tab")),(0,r.kt)("td",{parentName:"tr",align:null},"Opens application switcher, switch to previous application on the list")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"Super")),(0,r.kt)("td",{parentName:"tr",align:null},"Opens the application menu")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"Super")," + ",(0,r.kt)("inlineCode",{parentName:"td"},"L")),(0,r.kt)("td",{parentName:"tr",align:null},"Locks the screen")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"Super")," + ",(0,r.kt)("inlineCode",{parentName:"td"},"D")),(0,r.kt)("td",{parentName:"tr",align:null},"Shows the desktop")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"Print")),(0,r.kt)("td",{parentName:"tr",align:null},"Opens the screenshot utility (Spectacle)")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"Super")," + ",(0,r.kt)("inlineCode",{parentName:"td"},"Print")),(0,r.kt)("td",{parentName:"tr",align:null},"Captures the active window")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"Super")," + ",(0,r.kt)("inlineCode",{parentName:"td"},"Shift")," + ",(0,r.kt)("inlineCode",{parentName:"td"},"Print")),(0,r.kt)("td",{parentName:"tr",align:null},"Captures a rectangular region of the screen")))),(0,r.kt)("h2",{id:"using-krunner"},"Using KRunner"),(0,r.kt)("p",null,"KRunner is a system-wide desktop search and launcher app available on Solus Plasma. KRunner allows you to perform a variety of actions such as launching apps, executing commands, search files and open open system settings."),(0,r.kt)("p",null,"Open KRunner by pressing ",(0,r.kt)("inlineCode",{parentName:"p"},"Alt")," + ",(0,r.kt)("inlineCode",{parentName:"p"},"F2")," or ",(0,r.kt)("inlineCode",{parentName:"p"},"Alt")," + ",(0,r.kt)("inlineCode",{parentName:"p"},"Space"),"."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"KRunner interface",src:n(1242).Z,width:"723",height:"161"})),(0,r.kt)("p",null,"The following table outlines the actions you can perform using KRunner."),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Action"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Open an application"),(0,r.kt)("td",{parentName:"tr",align:null},"Enter the name of the application, then select the application from the list.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Run a command"),(0,r.kt)("td",{parentName:"tr",align:null},"Enter the command you want to run and press ",(0,r.kt)("inlineCode",{parentName:"td"},"Enter"),".")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"See the man pages of a command"),(0,r.kt)("td",{parentName:"tr",align:null},"Add ",(0,r.kt)("inlineCode",{parentName:"td"},"#")," before a command name and press enter (Example, ",(0,r.kt)("inlineCode",{parentName:"td"},"#wget"),").")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Terminate a program"),(0,r.kt)("td",{parentName:"tr",align:null},"Enter ",(0,r.kt)("inlineCode",{parentName:"td"},"kill [application name]")," and press ",(0,r.kt)("inlineCode",{parentName:"td"},"Enter")," (Example: ",(0,r.kt)("inlineCode",{parentName:"td"},"kill firefox"),")")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Do math operations"),(0,r.kt)("td",{parentName:"tr",align:null},"Enter ",(0,r.kt)("inlineCode",{parentName:"td"},"=")," followed by the calculation you want to perform (Examples: ",(0,r.kt)("inlineCode",{parentName:"td"},"=2*2"),", ",(0,r.kt)("inlineCode",{parentName:"td"},"=5!"),", ",(0,r.kt)("inlineCode",{parentName:"td"},"=sin(20)"),").")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Unit conversions"),(0,r.kt)("td",{parentName:"tr",align:null},"Enter ",(0,r.kt)("inlineCode",{parentName:"td"},"[measurement] to [destination unit]")," (Examples: ",(0,r.kt)("inlineCode",{parentName:"td"},"200 mi to km"),").")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Currency conversions"),(0,r.kt)("td",{parentName:"tr",align:null},"Enter ",(0,r.kt)("inlineCode",{parentName:"td"},"[amount] to [destination currency]"),". You can use the ISO code or the name of the currencies to do the conversion (Examples: ",(0,r.kt)("inlineCode",{parentName:"td"},"200 CAD to NOK"),", ",(0,r.kt)("inlineCode",{parentName:"td"},"50 koruna to yen"),").")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Check the time of other countries or time zones"),(0,r.kt)("td",{parentName:"tr",align:null},"Enter ",(0,r.kt)("inlineCode",{parentName:"td"},"time [country]")," or ",(0,r.kt)("inlineCode",{parentName:"td"},"time [time zone]")," (Examples: ",(0,r.kt)("inlineCode",{parentName:"td"},"time finland"),", ",(0,r.kt)("inlineCode",{parentName:"td"},"time gmt-1"),").")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Open files and folders"),(0,r.kt)("td",{parentName:"tr",align:null},"Enter the name of a file or folder, then select an entry from the list.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Switch between windows"),(0,r.kt)("td",{parentName:"tr",align:null},"Enter the name of an open window and select an entry from the ",(0,r.kt)("strong",{parentName:"td"},"Windows")," list.")))),(0,r.kt)("admonition",{type:"info"},(0,r.kt)("ul",{parentName:"admonition"},(0,r.kt)("li",{parentName:"ul"},"To see a list of the currencies KRunner supports, see ",(0,r.kt)("a",{parentName:"li",href:"https://www.ecb.europa.eu/stats/policy_and_exchange_rates/euro_reference_exchange_rates/html/index.en.html"},"https://www.ecb.europa.eu/stats/policy_and_exchange_rates/euro_reference_exchange_rates/html/index.en.html"),"."),(0,r.kt)("li",{parentName:"ul"},"Unit and currency conversions do not require the ",(0,r.kt)("inlineCode",{parentName:"li"},"=")," symbol."))),(0,r.kt)("h2",{id:"dolphin"},"Dolphin"),(0,r.kt)("p",null,"Dolphin is the file manager included by default in Solus Plasma. Dolphin has multiple features, including tabs, split views, integrated terminal, and support for various file formats and protocols."),(0,r.kt)("p",null,"The following table describes some of the keyboard shortcuts you can use in Dolphin."),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Action"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Create a new folder"),(0,r.kt)("td",{parentName:"tr",align:null},"Press ",(0,r.kt)("inlineCode",{parentName:"td"},"F10")," to create a new folder.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Enabling dual-pane mode"),(0,r.kt)("td",{parentName:"tr",align:null},"Press ",(0,r.kt)("inlineCode",{parentName:"td"},"F3")," to enable dual-pane mode.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Open multiple tabs"),(0,r.kt)("td",{parentName:"tr",align:null},"Press ",(0,r.kt)("inlineCode",{parentName:"td"},"Ctrl")," + ",(0,r.kt)("inlineCode",{parentName:"td"},"T")," to open multiple Dolphin tabs.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Open a terminal window in the current location"),(0,r.kt)("td",{parentName:"tr",align:null},"Press ",(0,r.kt)("inlineCode",{parentName:"td"},"Alt")," + ",(0,r.kt)("inlineCode",{parentName:"td"},"Shift")," + ",(0,r.kt)("inlineCode",{parentName:"td"},"F4")," to open a terminal window in the location you have open.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Show/hide hidden files"),(0,r.kt)("td",{parentName:"tr",align:null},"Press ",(0,r.kt)("inlineCode",{parentName:"td"},"Ctrl")," + ",(0,r.kt)("inlineCode",{parentName:"td"},"H")," to show/hide hidden files.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Show/hide the side panel"),(0,r.kt)("td",{parentName:"tr",align:null},"Press ",(0,r.kt)("inlineCode",{parentName:"td"},"F9")," to show/hide the ",(0,r.kt)("strong",{parentName:"td"},"Places")," side panel.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Switch between the view modes"),(0,r.kt)("td",{parentName:"tr",align:null},"Press ",(0,r.kt)("inlineCode",{parentName:"td"},"Ctrl")," + ",(0,r.kt)("inlineCode",{parentName:"td"},"1")," to display icons in ",(0,r.kt)("em",{parentName:"td"},"icons")," view, press ",(0,r.kt)("inlineCode",{parentName:"td"},"Ctrl")," + ",(0,r.kt)("inlineCode",{parentName:"td"},"2")," to display icons in ",(0,r.kt)("em",{parentName:"td"},"compact")," view, or press ",(0,r.kt)("inlineCode",{parentName:"td"},"Ctrl")," + ",(0,r.kt)("inlineCode",{parentName:"td"},"3")," to display icons in ",(0,r.kt)("em",{parentName:"td"},"details")," view;")))),(0,r.kt)("h2",{id:"context-menu"},"Context Menu"),(0,r.kt)("p",null,"The ",(0,r.kt)("em",{parentName:"p"},"Plasma")," desktop provides a variety of context menus. Context menus display options, settings, and actions applicable to the current context or element you select."),(0,r.kt)("p",null,"The following table describes some of the context menus available in Plasma."),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Context menu"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Bottom panel settings"),(0,r.kt)("td",{parentName:"tr",align:null},"Right-click on an empty space of the bottom panel to open the bottom panel context menu.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Widget settings"),(0,r.kt)("td",{parentName:"tr",align:null},"Right-click on any widget in the bottom panel to open the widget context menu.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Desktop settings"),(0,r.kt)("td",{parentName:"tr",align:null},"Right-click anywhere on the desktop to open the desktop context menu.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"File"),(0,r.kt)("td",{parentName:"tr",align:null},"Right-click a file to open the file context menu.")))))}u.isMDXComponent=!0},1242:(t,e,n)=>{n.d(e,{Z:()=>a});const a=n.p+"assets/images/krunner-03789ddf72481240bd795c70e63e2ab0.png"}}]); \ No newline at end of file diff --git a/assets/js/2b4abe09.8fee6b10.js b/assets/js/2b4abe09.9fa70df7.js similarity index 98% rename from assets/js/2b4abe09.8fee6b10.js rename to assets/js/2b4abe09.9fa70df7.js index cdbf39003..2ccc1d37d 100644 --- a/assets/js/2b4abe09.8fee6b10.js +++ b/assets/js/2b4abe09.9fa70df7.js @@ -1 +1 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[2413],{3905:(e,t,o)=>{o.d(t,{Zo:()=>p,kt:()=>m});var n=o(7294);function a(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function r(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,n)}return o}function s(e){for(var t=1;t=0||(a[o]=e[o]);return a}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(a[o]=e[o])}return a}var l=n.createContext({}),u=function(e){var t=n.useContext(l),o=t;return e&&(o="function"==typeof e?e(t):s(s({},t),e)),o},p=function(e){var t=u(e.components);return n.createElement(l.Provider,{value:t},e.children)},d="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},h=n.forwardRef((function(e,t){var o=e.components,a=e.mdxType,r=e.originalType,l=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),d=u(o),h=a,m=d["".concat(l,".").concat(h)]||d[h]||c[h]||r;return o?n.createElement(m,s(s({ref:t},p),{},{components:o})):n.createElement(m,s({ref:t},p))}));function m(e,t){var o=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var r=o.length,s=new Array(r);s[0]=h;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i[d]="string"==typeof e?e:a,s[1]=i;for(var u=2;u{o.r(t),o.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>c,frontMatter:()=>r,metadata:()=>i,toc:()=>u});var n=o(7462),a=(o(7294),o(3905));const r={title:"Troubleshooting",summary:"Basic troubleshooting for some of the most common Solus problems."},s="Troubleshooting Common Issues",i={unversionedId:"user/troubleshooting/index",id:"user/troubleshooting/index",title:"Troubleshooting",description:"This guide provides some basic troubleshooting instructions for when you have an issue in Solus. Before reporting bugs, it is important to validate your Solus installation doesn't suffer from missing files or disk corruption. Also ensuring the system is fully up to date as the bug may have already been fixed.",source:"@site/docs/user/troubleshooting/index.md",sourceDirName:"user/troubleshooting",slug:"/user/troubleshooting/",permalink:"/docs/user/troubleshooting/",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/troubleshooting/index.md",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Troubleshooting",summary:"Basic troubleshooting for some of the most common Solus problems."},sidebar:"userSidebar",previous:{title:"Open Broadcaster Software (OBS)",permalink:"/docs/user/software/web/obs"},next:{title:"Boot Rescue",permalink:"/docs/user/troubleshooting/boot-rescue"}},l={},u=[{value:"Issues with Software Center or eopkg",id:"issues-with-software-center-or-eopkg",level:2},{value:"Can't install updates",id:"cant-install-updates",level:3},{value:"eopkg check shows broken packages",id:"eopkg-check-shows-broken-packages",level:3},{value:"Updated system and having issues",id:"updated-system-and-having-issues",level:2},{value:"Boot into previous kernel",id:"boot-into-previous-kernel",level:3},{value:"Reverting updates",id:"reverting-updates",level:3},{value:"Boot Failure",id:"boot-failure",level:2},{value:"Display manager won't start",id:"display-manager-wont-start",level:3},{value:"No Solus boot loader",id:"no-solus-boot-loader",level:3},{value:"Long boot time",id:"long-boot-time",level:2},{value:"Timeout on partition mount (90s)",id:"timeout-on-partition-mount-90s",level:3}],p={toc:u},d="wrapper";function c(e){let{components:t,...o}=e;return(0,a.kt)(d,(0,n.Z)({},p,o,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"troubleshooting-common-issues"},"Troubleshooting Common Issues"),(0,a.kt)("p",null,"This guide provides some basic troubleshooting instructions for when you have an issue in Solus. Before reporting bugs, it is important to validate your Solus installation doesn't suffer from missing files or disk corruption. Also ensuring the system is fully up to date as the bug may have already been fixed."),(0,a.kt)("p",null,"First of all performa a full system update ",(0,a.kt)("inlineCode",{parentName:"p"},"sudo eopkg up")," (or via the Software Center). Then validate that packages are installed correctly and aren't missing files: (run this once, it will take some time and may not show much output)"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg check | grep Broken | awk '{print $4}' | xargs sudo eopkg it --reinstall\n")),(0,a.kt)("p",null,"Then reboot the system to make sure the issue still persists on a clean system."),(0,a.kt)("h2",{id:"issues-with-software-center-or-eopkg"},"Issues with Software Center or eopkg"),(0,a.kt)("h3",{id:"cant-install-updates"},"Can't install updates"),(0,a.kt)("p",null,"If eopkg is interrupted, the database may become corrupted. When updating you will see a message similar to:"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"30973, 'BDB0087 DB_RUNRECOVERY: Fatal error, run database recovery - BDB0061 PANIC: Invalid argument'")),(0,a.kt)("p",null,"To run database recovery, run ",(0,a.kt)("inlineCode",{parentName:"p"},"sudo eopkg rdb")," in the terminal and then updates should function correctly."),(0,a.kt)("h3",{id:"eopkg-check-shows-broken-packages"},"eopkg check shows broken packages"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"eopkg check")," checks the sha256sums of files on disk versus what was originally installed by the original .eopkg file. In some cases (for example .pyc files), these files will be modified in the normal operation of Solus. If after reinstalling a package it remains broken, then it's likely nothing to worry about (there are no exceptions made in ",(0,a.kt)("inlineCode",{parentName:"p"},"eopkg check")," for files that are expected to change from use). When reinstalling broken packages, (per above) it only needs to be run once."),(0,a.kt)("h2",{id:"updated-system-and-having-issues"},"Updated system and having issues"),(0,a.kt)("h3",{id:"boot-into-previous-kernel"},"Boot into previous kernel"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"clr-boot-manager")," by default retains the latest installed kernel, plus the currently running kernel. This means that when you receive a kernel update, there are two kernels to boot into. Sometimes there are regressions that occur in the kernel, so you are able to boot into the previous kernel if the update has caused any hardware issues (for example failing to suspend when it worked previously). When booting via EFI, the boot menu can be shown by hitting space (repeatedly) during boot."),(0,a.kt)("h3",{id:"reverting-updates"},"Reverting updates"),(0,a.kt)("p",null,"If booting into the previous kernel doesn't solve the issue, there may be an issue with the package updates. It is possible to ",(0,a.kt)("a",{parentName:"p",href:"/docs/user/package-management/history-and-rollback"},"revert the updates")," (this would also confirm that the issue is in the selected updates)."),(0,a.kt)("h2",{id:"boot-failure"},"Boot Failure"),(0,a.kt)("p",null,"If Solus partially boots, you can generally get to a TTY using ",(0,a.kt)("inlineCode",{parentName:"p"},"Ctrl+Alt+F2")," to login and be able to run commands just like using a terminal. This enables you to run some commands to identify or resolve the issue."),(0,a.kt)("h3",{id:"display-manager-wont-start"},"Display manager won't start"),(0,a.kt)("p",null,"A common cause of not being able to boot is due to installing the nvidia drivers, but not booting into the latest kernel (the only kernel which has the drivers installed). Also ensure you have the correct driver version installed for your kernel. You can check if you have booted into the latest kernel by comparing the installed package with the booted kernel (instructions for both kernels)"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"eopkg info linux-lts | head -n2; uname -a\n")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"eopkg info linux-current | head -n2; uname -a\n")),(0,a.kt)("p",null,"If the kernel version and release don't match from lines 2 and 3 of the output, then you aren't booting into the latest kernel and this is the likely cause of X not loading (particularly if you just installed the drivers). A couple of common reasons are:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},"On a grub machine, a common cause for not booting the latest kernel is due to Solus not being the boot loader on the MBR. Make sure you are booting via the Solus boot loader (if possible), or update grub on the distro that own the boot loader, see ",(0,a.kt)("a",{parentName:"p",href:"/docs/user/troubleshooting/installation#legacybios-installation"},"Legacy/BIOS installation"),".")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},"Another possibility is that the ",(0,a.kt)("inlineCode",{parentName:"p"},"ESP")," has run out of space so the kernel cannot be copied over to it. You can debug why this isn't happening via ",(0,a.kt)("inlineCode",{parentName:"p"},"sudo CBM_DEBUG=1 clr-boot-manager update"),". This will output all information on the process, where it may be failing, or that it is working correctly."))),(0,a.kt)("p",null,"If these two steps fail, you can't revert the installation of the drivers via ",(0,a.kt)("a",{parentName:"p",href:"/docs/user/package-management/history-and-rollback"},"History and Rollback")),(0,a.kt)("h3",{id:"no-solus-boot-loader"},"No Solus boot loader"),(0,a.kt)("p",null,"If the Solus boot loader is not functioning (this has been known to be broken by the odd update of a certain OS), the boot loader can be recreated via ",(0,a.kt)("a",{parentName:"p",href:"/docs/user/troubleshooting/boot-rescue"},"Boot Rescue")),(0,a.kt)("h2",{id:"long-boot-time"},"Long boot time"),(0,a.kt)("p",null,"There are a number of factors that can contribute to a long boot time. The boot up messages can be viewed to look for any timeouts by looking at the timestamped journal."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo journalctl -b\n")),(0,a.kt)("p",null,"Notable commands to check the boot time are: ",(0,a.kt)("inlineCode",{parentName:"p"},"systemd-analyze")," (note that the firmware time is prior to Solus boot, so outside of our control) and ",(0,a.kt)("inlineCode",{parentName:"p"},"systemd-analyze critical-chain"),"."),(0,a.kt)("h3",{id:"timeout-on-partition-mount-90s"},"Timeout on partition mount (90s)"),(0,a.kt)("p",null,"If information about a device changes (UUID or mount path ",(0,a.kt)("inlineCode",{parentName:"p"},"/dev/sda"),"), this can cause systemd to time out for 90 seconds creating a long boot process. Most frequently this happens with the swap file which can be shared across distros. Most of the devices mounted on boot will appear in ",(0,a.kt)("inlineCode",{parentName:"p"},"/etc/fstab")," or be a parameter in a file where configuring resume ",(0,a.kt)("inlineCode",{parentName:"p"},"cat /etc/kernel/cmdline.d/*"),"."),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"cat /proc/cmdline")," will show what parameters the kernel has booted with."),(0,a.kt)("p",null,"If the devices don't match up with what's listed in ",(0,a.kt)("inlineCode",{parentName:"p"},"ls /dev/disk/*/*")," then it will cause a 90s timeout while it waits to see if it can be found. To fix this, you will need to remove the reference to the UUID or device path that no longer exists, or correct it to the new UUID label."))}c.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[2413],{3905:(e,t,o)=>{o.d(t,{Zo:()=>p,kt:()=>m});var n=o(7294);function a(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function r(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,n)}return o}function s(e){for(var t=1;t=0||(a[o]=e[o]);return a}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(a[o]=e[o])}return a}var l=n.createContext({}),u=function(e){var t=n.useContext(l),o=t;return e&&(o="function"==typeof e?e(t):s(s({},t),e)),o},p=function(e){var t=u(e.components);return n.createElement(l.Provider,{value:t},e.children)},d="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},h=n.forwardRef((function(e,t){var o=e.components,a=e.mdxType,r=e.originalType,l=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),d=u(o),h=a,m=d["".concat(l,".").concat(h)]||d[h]||c[h]||r;return o?n.createElement(m,s(s({ref:t},p),{},{components:o})):n.createElement(m,s({ref:t},p))}));function m(e,t){var o=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var r=o.length,s=new Array(r);s[0]=h;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i[d]="string"==typeof e?e:a,s[1]=i;for(var u=2;u{o.r(t),o.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>c,frontMatter:()=>r,metadata:()=>i,toc:()=>u});var n=o(7462),a=(o(7294),o(3905));const r={title:"Troubleshooting",summary:"Basic troubleshooting for some of the most common Solus problems."},s="Troubleshooting Common Issues",i={unversionedId:"user/troubleshooting/index",id:"user/troubleshooting/index",title:"Troubleshooting",description:"This guide provides some basic troubleshooting instructions for when you have an issue in Solus. Before reporting bugs, it is important to validate your Solus installation doesn't suffer from missing files or disk corruption. Also ensuring the system is fully up to date as the bug may have already been fixed.",source:"@site/docs/user/troubleshooting/index.md",sourceDirName:"user/troubleshooting",slug:"/user/troubleshooting/",permalink:"/docs/user/troubleshooting/",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/troubleshooting/index.md",tags:[],version:"current",lastUpdatedAt:1695222528,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Troubleshooting",summary:"Basic troubleshooting for some of the most common Solus problems."},sidebar:"userSidebar",previous:{title:"Open Broadcaster Software (OBS)",permalink:"/docs/user/software/web/obs"},next:{title:"Boot Rescue",permalink:"/docs/user/troubleshooting/boot-rescue"}},l={},u=[{value:"Issues with Software Center or eopkg",id:"issues-with-software-center-or-eopkg",level:2},{value:"Can't install updates",id:"cant-install-updates",level:3},{value:"eopkg check shows broken packages",id:"eopkg-check-shows-broken-packages",level:3},{value:"Updated system and having issues",id:"updated-system-and-having-issues",level:2},{value:"Boot into previous kernel",id:"boot-into-previous-kernel",level:3},{value:"Reverting updates",id:"reverting-updates",level:3},{value:"Boot Failure",id:"boot-failure",level:2},{value:"Display manager won't start",id:"display-manager-wont-start",level:3},{value:"No Solus boot loader",id:"no-solus-boot-loader",level:3},{value:"Long boot time",id:"long-boot-time",level:2},{value:"Timeout on partition mount (90s)",id:"timeout-on-partition-mount-90s",level:3}],p={toc:u},d="wrapper";function c(e){let{components:t,...o}=e;return(0,a.kt)(d,(0,n.Z)({},p,o,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"troubleshooting-common-issues"},"Troubleshooting Common Issues"),(0,a.kt)("p",null,"This guide provides some basic troubleshooting instructions for when you have an issue in Solus. Before reporting bugs, it is important to validate your Solus installation doesn't suffer from missing files or disk corruption. Also ensuring the system is fully up to date as the bug may have already been fixed."),(0,a.kt)("p",null,"First of all performa a full system update ",(0,a.kt)("inlineCode",{parentName:"p"},"sudo eopkg up")," (or via the Software Center). Then validate that packages are installed correctly and aren't missing files: (run this once, it will take some time and may not show much output)"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg check | grep Broken | awk '{print $4}' | xargs sudo eopkg it --reinstall\n")),(0,a.kt)("p",null,"Then reboot the system to make sure the issue still persists on a clean system."),(0,a.kt)("h2",{id:"issues-with-software-center-or-eopkg"},"Issues with Software Center or eopkg"),(0,a.kt)("h3",{id:"cant-install-updates"},"Can't install updates"),(0,a.kt)("p",null,"If eopkg is interrupted, the database may become corrupted. When updating you will see a message similar to:"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"30973, 'BDB0087 DB_RUNRECOVERY: Fatal error, run database recovery - BDB0061 PANIC: Invalid argument'")),(0,a.kt)("p",null,"To run database recovery, run ",(0,a.kt)("inlineCode",{parentName:"p"},"sudo eopkg rdb")," in the terminal and then updates should function correctly."),(0,a.kt)("h3",{id:"eopkg-check-shows-broken-packages"},"eopkg check shows broken packages"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"eopkg check")," checks the sha256sums of files on disk versus what was originally installed by the original .eopkg file. In some cases (for example .pyc files), these files will be modified in the normal operation of Solus. If after reinstalling a package it remains broken, then it's likely nothing to worry about (there are no exceptions made in ",(0,a.kt)("inlineCode",{parentName:"p"},"eopkg check")," for files that are expected to change from use). When reinstalling broken packages, (per above) it only needs to be run once."),(0,a.kt)("h2",{id:"updated-system-and-having-issues"},"Updated system and having issues"),(0,a.kt)("h3",{id:"boot-into-previous-kernel"},"Boot into previous kernel"),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"clr-boot-manager")," by default retains the latest installed kernel, plus the currently running kernel. This means that when you receive a kernel update, there are two kernels to boot into. Sometimes there are regressions that occur in the kernel, so you are able to boot into the previous kernel if the update has caused any hardware issues (for example failing to suspend when it worked previously). When booting via EFI, the boot menu can be shown by hitting space (repeatedly) during boot."),(0,a.kt)("h3",{id:"reverting-updates"},"Reverting updates"),(0,a.kt)("p",null,"If booting into the previous kernel doesn't solve the issue, there may be an issue with the package updates. It is possible to ",(0,a.kt)("a",{parentName:"p",href:"/docs/user/package-management/history-and-rollback"},"revert the updates")," (this would also confirm that the issue is in the selected updates)."),(0,a.kt)("h2",{id:"boot-failure"},"Boot Failure"),(0,a.kt)("p",null,"If Solus partially boots, you can generally get to a TTY using ",(0,a.kt)("inlineCode",{parentName:"p"},"Ctrl+Alt+F2")," to login and be able to run commands just like using a terminal. This enables you to run some commands to identify or resolve the issue."),(0,a.kt)("h3",{id:"display-manager-wont-start"},"Display manager won't start"),(0,a.kt)("p",null,"A common cause of not being able to boot is due to installing the nvidia drivers, but not booting into the latest kernel (the only kernel which has the drivers installed). Also ensure you have the correct driver version installed for your kernel. You can check if you have booted into the latest kernel by comparing the installed package with the booted kernel (instructions for both kernels)"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"eopkg info linux-lts | head -n2; uname -a\n")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"eopkg info linux-current | head -n2; uname -a\n")),(0,a.kt)("p",null,"If the kernel version and release don't match from lines 2 and 3 of the output, then you aren't booting into the latest kernel and this is the likely cause of X not loading (particularly if you just installed the drivers). A couple of common reasons are:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},"On a grub machine, a common cause for not booting the latest kernel is due to Solus not being the boot loader on the MBR. Make sure you are booting via the Solus boot loader (if possible), or update grub on the distro that own the boot loader, see ",(0,a.kt)("a",{parentName:"p",href:"/docs/user/troubleshooting/installation#legacybios-installation"},"Legacy/BIOS installation"),".")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},"Another possibility is that the ",(0,a.kt)("inlineCode",{parentName:"p"},"ESP")," has run out of space so the kernel cannot be copied over to it. You can debug why this isn't happening via ",(0,a.kt)("inlineCode",{parentName:"p"},"sudo CBM_DEBUG=1 clr-boot-manager update"),". This will output all information on the process, where it may be failing, or that it is working correctly."))),(0,a.kt)("p",null,"If these two steps fail, you can't revert the installation of the drivers via ",(0,a.kt)("a",{parentName:"p",href:"/docs/user/package-management/history-and-rollback"},"History and Rollback")),(0,a.kt)("h3",{id:"no-solus-boot-loader"},"No Solus boot loader"),(0,a.kt)("p",null,"If the Solus boot loader is not functioning (this has been known to be broken by the odd update of a certain OS), the boot loader can be recreated via ",(0,a.kt)("a",{parentName:"p",href:"/docs/user/troubleshooting/boot-rescue"},"Boot Rescue")),(0,a.kt)("h2",{id:"long-boot-time"},"Long boot time"),(0,a.kt)("p",null,"There are a number of factors that can contribute to a long boot time. The boot up messages can be viewed to look for any timeouts by looking at the timestamped journal."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo journalctl -b\n")),(0,a.kt)("p",null,"Notable commands to check the boot time are: ",(0,a.kt)("inlineCode",{parentName:"p"},"systemd-analyze")," (note that the firmware time is prior to Solus boot, so outside of our control) and ",(0,a.kt)("inlineCode",{parentName:"p"},"systemd-analyze critical-chain"),"."),(0,a.kt)("h3",{id:"timeout-on-partition-mount-90s"},"Timeout on partition mount (90s)"),(0,a.kt)("p",null,"If information about a device changes (UUID or mount path ",(0,a.kt)("inlineCode",{parentName:"p"},"/dev/sda"),"), this can cause systemd to time out for 90 seconds creating a long boot process. Most frequently this happens with the swap file which can be shared across distros. Most of the devices mounted on boot will appear in ",(0,a.kt)("inlineCode",{parentName:"p"},"/etc/fstab")," or be a parameter in a file where configuring resume ",(0,a.kt)("inlineCode",{parentName:"p"},"cat /etc/kernel/cmdline.d/*"),"."),(0,a.kt)("p",null,(0,a.kt)("inlineCode",{parentName:"p"},"cat /proc/cmdline")," will show what parameters the kernel has booted with."),(0,a.kt)("p",null,"If the devices don't match up with what's listed in ",(0,a.kt)("inlineCode",{parentName:"p"},"ls /dev/disk/*/*")," then it will cause a 90s timeout while it waits to see if it can be found. To fix this, you will need to remove the reference to the UUID or device path that no longer exists, or correct it to the new UUID label."))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/2b61a93c.4da1e849.js b/assets/js/2b61a93c.42b300e7.js similarity index 98% rename from assets/js/2b61a93c.4da1e849.js rename to assets/js/2b61a93c.42b300e7.js index 9e6ec0305..9d875a293 100644 --- a/assets/js/2b61a93c.4da1e849.js +++ b/assets/js/2b61a93c.42b300e7.js @@ -1 +1 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[9897],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var p=n.createContext({}),l=function(e){var t=n.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},u=function(e){var t=l(e.components);return n.createElement(p.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,i=e.originalType,p=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),c=l(r),m=o,f=c["".concat(p,".").concat(m)]||c[m]||d[m]||i;return r?n.createElement(f,a(a({ref:t},u),{},{components:r})):n.createElement(f,a({ref:t},u))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=r.length,a=new Array(i);a[0]=m;var s={};for(var p in t)hasOwnProperty.call(t,p)&&(s[p]=t[p]);s.originalType=e,s[c]="string"==typeof e?e:o,a[1]=s;for(var l=2;l{r.r(t),r.d(t,{assets:()=>p,contentTitle:()=>a,default:()=>d,frontMatter:()=>i,metadata:()=>s,toc:()=>l});var n=r(7462),o=(r(7294),r(3905));const i={title:"MATE",summary:"A quick introduction to the MATE Edition of Solus"},a="MATE Desktop",s={unversionedId:"user/editions/mate/index",id:"user/editions/mate/index",title:"MATE",description:"MATE Desktop is provided by the MATE Edition of Solus. They describe it as:",source:"@site/docs/user/editions/mate/index.md",sourceDirName:"user/editions/mate",slug:"/user/editions/mate/",permalink:"/docs/user/editions/mate/",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/editions/mate/index.md",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"MATE",summary:"A quick introduction to the MATE Edition of Solus"},sidebar:"userSidebar",previous:{title:"Tips and Tricks",permalink:"/docs/user/editions/gnome/tips-and-tricks"},next:{title:"Configuration",permalink:"/docs/user/editions/mate/configuration"}},p={},l=[],u={toc:l},c="wrapper";function d(e){let{components:t,...r}=e;return(0,o.kt)(c,(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"mate-desktop"},"MATE Desktop"),(0,o.kt)("p",null,"MATE Desktop is provided by the MATE Edition of Solus. They describe it as:"),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"The MATE Desktop Environment is the continuation of GNOME 2. It provides an intuitive and attractive desktop environment using traditional metaphors for Linux and other Unix-like operating\xa0systems.")),(0,o.kt)("p",null,"Here are some links related to this project that you may find helpful:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://mate-desktop.org/"},"Homepage")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://mate-desktop.org/blog/"},"News")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://mate-desktop.org/community/"},"Support"))),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"configuration"},"Go to MATE Configuration")),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"tips-and-tricks"},"Go to MATE Tips and Tricks")))}d.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[9897],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var p=n.createContext({}),l=function(e){var t=n.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},u=function(e){var t=l(e.components);return n.createElement(p.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,i=e.originalType,p=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),c=l(r),m=o,f=c["".concat(p,".").concat(m)]||c[m]||d[m]||i;return r?n.createElement(f,a(a({ref:t},u),{},{components:r})):n.createElement(f,a({ref:t},u))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=r.length,a=new Array(i);a[0]=m;var s={};for(var p in t)hasOwnProperty.call(t,p)&&(s[p]=t[p]);s.originalType=e,s[c]="string"==typeof e?e:o,a[1]=s;for(var l=2;l{r.r(t),r.d(t,{assets:()=>p,contentTitle:()=>a,default:()=>d,frontMatter:()=>i,metadata:()=>s,toc:()=>l});var n=r(7462),o=(r(7294),r(3905));const i={title:"MATE",summary:"A quick introduction to the MATE Edition of Solus"},a="MATE Desktop",s={unversionedId:"user/editions/mate/index",id:"user/editions/mate/index",title:"MATE",description:"MATE Desktop is provided by the MATE Edition of Solus. They describe it as:",source:"@site/docs/user/editions/mate/index.md",sourceDirName:"user/editions/mate",slug:"/user/editions/mate/",permalink:"/docs/user/editions/mate/",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/editions/mate/index.md",tags:[],version:"current",lastUpdatedAt:1695222528,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"MATE",summary:"A quick introduction to the MATE Edition of Solus"},sidebar:"userSidebar",previous:{title:"Tips and Tricks",permalink:"/docs/user/editions/gnome/tips-and-tricks"},next:{title:"Configuration",permalink:"/docs/user/editions/mate/configuration"}},p={},l=[],u={toc:l},c="wrapper";function d(e){let{components:t,...r}=e;return(0,o.kt)(c,(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"mate-desktop"},"MATE Desktop"),(0,o.kt)("p",null,"MATE Desktop is provided by the MATE Edition of Solus. They describe it as:"),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"The MATE Desktop Environment is the continuation of GNOME 2. It provides an intuitive and attractive desktop environment using traditional metaphors for Linux and other Unix-like operating\xa0systems.")),(0,o.kt)("p",null,"Here are some links related to this project that you may find helpful:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://mate-desktop.org/"},"Homepage")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://mate-desktop.org/blog/"},"News")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://mate-desktop.org/community/"},"Support"))),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"configuration"},"Go to MATE Configuration")),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"tips-and-tricks"},"Go to MATE Tips and Tricks")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/2c3e84bd.a048d2ce.js b/assets/js/2c3e84bd.e3bd251d.js similarity index 97% rename from assets/js/2c3e84bd.a048d2ce.js rename to assets/js/2c3e84bd.e3bd251d.js index 361f54858..52072e79b 100644 --- a/assets/js/2c3e84bd.a048d2ce.js +++ b/assets/js/2c3e84bd.e3bd251d.js @@ -1 +1 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[8157],{3905:(t,e,n)=>{n.d(e,{Zo:()=>p,kt:()=>y});var r=n(7294);function i(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function a(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function o(t){for(var e=1;e=0||(i[n]=t[n]);return i}(t,e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(i[n]=t[n])}return i}var l=r.createContext({}),u=function(t){var e=r.useContext(l),n=e;return t&&(n="function"==typeof t?t(e):o(o({},e),t)),n},p=function(t){var e=u(t.components);return r.createElement(l.Provider,{value:e},t.children)},c="mdxType",d={inlineCode:"code",wrapper:function(t){var e=t.children;return r.createElement(r.Fragment,{},e)}},m=r.forwardRef((function(t,e){var n=t.components,i=t.mdxType,a=t.originalType,l=t.parentName,p=s(t,["components","mdxType","originalType","parentName"]),c=u(n),m=i,y=c["".concat(l,".").concat(m)]||c[m]||d[m]||a;return n?r.createElement(y,o(o({ref:e},p),{},{components:n})):r.createElement(y,o({ref:e},p))}));function y(t,e){var n=arguments,i=e&&e.mdxType;if("string"==typeof t||i){var a=n.length,o=new Array(a);o[0]=m;var s={};for(var l in e)hasOwnProperty.call(e,l)&&(s[l]=e[l]);s.originalType=t,s[c]="string"==typeof t?t:i,o[1]=s;for(var u=2;u{n.r(e),n.d(e,{assets:()=>l,contentTitle:()=>o,default:()=>d,frontMatter:()=>a,metadata:()=>s,toc:()=>u});var r=n(7462),i=(n(7294),n(3905));const a={title:"Disk Partitioning",summary:"Overview of the partitioning that the installer can perform"},o="Disk Partitioning",s={unversionedId:"user/quick-start/installation/disks",id:"user/quick-start/installation/disks",title:"Disk Partitioning",description:"Solus provides multiple ways you can install onto your system.",source:"@site/docs/user/quick-start/installation/disks.md",sourceDirName:"user/quick-start/installation",slug:"/user/quick-start/installation/disks",permalink:"/docs/user/quick-start/installation/disks",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/quick-start/installation/disks.md",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Disk Partitioning",summary:"Overview of the partitioning that the installer can perform"},sidebar:"userSidebar",previous:{title:"Preparing to Install",permalink:"/docs/user/quick-start/installation/"},next:{title:"Booting with Secure Boot Enabled",permalink:"/docs/user/quick-start/installation/secure-boot"}},l={},u=[{value:"UEFI",id:"uefi",level:2}],p={toc:u},c="wrapper";function d(t){let{components:e,...n}=t;return(0,i.kt)(c,(0,r.Z)({},p,n,{components:e,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"disk-partitioning"},"Disk Partitioning"),(0,i.kt)("p",null,"Solus provides multiple ways you can install onto your system."),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("strong",{parentName:"li"},"Whole Drive"),(0,i.kt)("br",{parentName:"li"}),"Solus can take up the entire drive, using traditonal root partitions, or with LVM-managed root partitions."),(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("strong",{parentName:"li"},"Multi-boot"),(0,i.kt)("br",{parentName:"li"}),"You can install Solus next to your existing operating system, such as Windows. ",(0,i.kt)("em",{parentName:"li"},"If you have multiple operating systems installed, we will choose the largest option.")),(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("strong",{parentName:"li"},"Manual Partitioning"),(0,i.kt)("br",{parentName:"li"}),"You can manually configure your system. This is only recommend for advanced users which may desire to have a dedicated ",(0,i.kt)("inlineCode",{parentName:"li"},"/home")," partition. Note that if you manually configure your system, you will need to restart the Installer for those changes to apply appropriately.\n",(0,i.kt)("strong",{parentName:"li"},"Note:")," Legacy (BIOS) must use MBR partition table while Unified EFI (UEFI) must use GPT partition table.")),(0,i.kt)("p",null,"Alongside these options, we also provide the ability to use full-disk encryption. For the obvious reason of it being full-disk, this assumes you are installing Solus onto the entire drive."),(0,i.kt)("h2",{id:"uefi"},"UEFI"),(0,i.kt)("p",null,"If you are using a system with UEFI, you may need to create a EFI System Partition, also referred to as an ESP. This is not necessary if you are enabling Solus to install onto the entire disk."),(0,i.kt)("p",null,"To create an EFI System Partition, open up GParted and create a FAT32 partition that is 512MB in size. Next, right-click on the partition and click Manage Flags. On the Manage Flags section, enable the ",(0,i.kt)("inlineCode",{parentName:"p"},"boot")," and ",(0,i.kt)("inlineCode",{parentName:"p"},"esp")," flags."),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Notes:")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},'Your system must be booted using Unified EFI (UEFI) mode, as opposed to a "legacy (BIOS) mode".'),(0,i.kt)("li",{parentName:"ul"},"Your disk is required to be GPT formatted."),(0,i.kt)("li",{parentName:"ul"},"If you cannot see your SSD drive, set the SATA configuration to AHCI.")))}d.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[8157],{3905:(t,e,n)=>{n.d(e,{Zo:()=>p,kt:()=>y});var r=n(7294);function i(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function a(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function o(t){for(var e=1;e=0||(i[n]=t[n]);return i}(t,e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(t);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(t,n)&&(i[n]=t[n])}return i}var l=r.createContext({}),u=function(t){var e=r.useContext(l),n=e;return t&&(n="function"==typeof t?t(e):o(o({},e),t)),n},p=function(t){var e=u(t.components);return r.createElement(l.Provider,{value:e},t.children)},c="mdxType",d={inlineCode:"code",wrapper:function(t){var e=t.children;return r.createElement(r.Fragment,{},e)}},m=r.forwardRef((function(t,e){var n=t.components,i=t.mdxType,a=t.originalType,l=t.parentName,p=s(t,["components","mdxType","originalType","parentName"]),c=u(n),m=i,y=c["".concat(l,".").concat(m)]||c[m]||d[m]||a;return n?r.createElement(y,o(o({ref:e},p),{},{components:n})):r.createElement(y,o({ref:e},p))}));function y(t,e){var n=arguments,i=e&&e.mdxType;if("string"==typeof t||i){var a=n.length,o=new Array(a);o[0]=m;var s={};for(var l in e)hasOwnProperty.call(e,l)&&(s[l]=e[l]);s.originalType=t,s[c]="string"==typeof t?t:i,o[1]=s;for(var u=2;u{n.r(e),n.d(e,{assets:()=>l,contentTitle:()=>o,default:()=>d,frontMatter:()=>a,metadata:()=>s,toc:()=>u});var r=n(7462),i=(n(7294),n(3905));const a={title:"Disk Partitioning",summary:"Overview of the partitioning that the installer can perform"},o="Disk Partitioning",s={unversionedId:"user/quick-start/installation/disks",id:"user/quick-start/installation/disks",title:"Disk Partitioning",description:"Solus provides multiple ways you can install onto your system.",source:"@site/docs/user/quick-start/installation/disks.md",sourceDirName:"user/quick-start/installation",slug:"/user/quick-start/installation/disks",permalink:"/docs/user/quick-start/installation/disks",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/quick-start/installation/disks.md",tags:[],version:"current",lastUpdatedAt:1695222528,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Disk Partitioning",summary:"Overview of the partitioning that the installer can perform"},sidebar:"userSidebar",previous:{title:"Preparing to Install",permalink:"/docs/user/quick-start/installation/"},next:{title:"Booting with Secure Boot Enabled",permalink:"/docs/user/quick-start/installation/secure-boot"}},l={},u=[{value:"UEFI",id:"uefi",level:2}],p={toc:u},c="wrapper";function d(t){let{components:e,...n}=t;return(0,i.kt)(c,(0,r.Z)({},p,n,{components:e,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"disk-partitioning"},"Disk Partitioning"),(0,i.kt)("p",null,"Solus provides multiple ways you can install onto your system."),(0,i.kt)("ol",null,(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("strong",{parentName:"li"},"Whole Drive"),(0,i.kt)("br",{parentName:"li"}),"Solus can take up the entire drive, using traditonal root partitions, or with LVM-managed root partitions."),(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("strong",{parentName:"li"},"Multi-boot"),(0,i.kt)("br",{parentName:"li"}),"You can install Solus next to your existing operating system, such as Windows. ",(0,i.kt)("em",{parentName:"li"},"If you have multiple operating systems installed, we will choose the largest option.")),(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("strong",{parentName:"li"},"Manual Partitioning"),(0,i.kt)("br",{parentName:"li"}),"You can manually configure your system. This is only recommend for advanced users which may desire to have a dedicated ",(0,i.kt)("inlineCode",{parentName:"li"},"/home")," partition. Note that if you manually configure your system, you will need to restart the Installer for those changes to apply appropriately.\n",(0,i.kt)("strong",{parentName:"li"},"Note:")," Legacy (BIOS) must use MBR partition table while Unified EFI (UEFI) must use GPT partition table.")),(0,i.kt)("p",null,"Alongside these options, we also provide the ability to use full-disk encryption. For the obvious reason of it being full-disk, this assumes you are installing Solus onto the entire drive."),(0,i.kt)("h2",{id:"uefi"},"UEFI"),(0,i.kt)("p",null,"If you are using a system with UEFI, you may need to create a EFI System Partition, also referred to as an ESP. This is not necessary if you are enabling Solus to install onto the entire disk."),(0,i.kt)("p",null,"To create an EFI System Partition, open up GParted and create a FAT32 partition that is 512MB in size. Next, right-click on the partition and click Manage Flags. On the Manage Flags section, enable the ",(0,i.kt)("inlineCode",{parentName:"p"},"boot")," and ",(0,i.kt)("inlineCode",{parentName:"p"},"esp")," flags."),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"Notes:")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},'Your system must be booted using Unified EFI (UEFI) mode, as opposed to a "legacy (BIOS) mode".'),(0,i.kt)("li",{parentName:"ul"},"Your disk is required to be GPT formatted."),(0,i.kt)("li",{parentName:"ul"},"If you cannot see your SSD drive, set the SATA configuration to AHCI.")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/38920c38.84cc1aa6.js b/assets/js/38920c38.38e7e25e.js similarity index 99% rename from assets/js/38920c38.84cc1aa6.js rename to assets/js/38920c38.38e7e25e.js index e96fb0d75..623b92f18 100644 --- a/assets/js/38920c38.84cc1aa6.js +++ b/assets/js/38920c38.38e7e25e.js @@ -1 +1 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[5481],{3905:(e,r,t)=>{t.d(r,{Zo:()=>u,kt:()=>m});var n=t(7294);function a(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function l(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r&&(n=n.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,n)}return t}function o(e){for(var r=1;r=0||(a[t]=e[t]);return a}(e,r);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(a[t]=e[t])}return a}var s=n.createContext({}),p=function(e){var r=n.useContext(s),t=r;return e&&(t="function"==typeof e?e(r):o(o({},r),e)),t},u=function(e){var r=p(e.components);return n.createElement(s.Provider,{value:r},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var r=e.children;return n.createElement(n.Fragment,{},r)}},h=n.forwardRef((function(e,r){var t=e.components,a=e.mdxType,l=e.originalType,s=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),c=p(t),h=a,m=c["".concat(s,".").concat(h)]||c[h]||d[h]||l;return t?n.createElement(m,o(o({ref:r},u),{},{components:t})):n.createElement(m,o({ref:r},u))}));function m(e,r){var t=arguments,a=r&&r.mdxType;if("string"==typeof e||a){var l=t.length,o=new Array(l);o[0]=h;var i={};for(var s in r)hasOwnProperty.call(r,s)&&(i[s]=r[s]);i.originalType=e,i[c]="string"==typeof e?e:a,o[1]=i;for(var p=2;p{t.r(r),t.d(r,{assets:()=>s,contentTitle:()=>o,default:()=>d,frontMatter:()=>l,metadata:()=>i,toc:()=>p});var n=t(7462),a=(t(7294),t(3905));const l={title:"Printers and Scanners",summary:"Guide to using printers and scanners on Solus"},o="Printers and Scanners",i={unversionedId:"user/hardware/peripherals/printers-and-scanners",id:"user/hardware/peripherals/printers-and-scanners",title:"Printers and Scanners",description:"Drivers",source:"@site/docs/user/hardware/peripherals/printers-and-scanners.md",sourceDirName:"user/hardware/peripherals",slug:"/user/hardware/peripherals/printers-and-scanners",permalink:"/docs/user/hardware/peripherals/printers-and-scanners",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/hardware/peripherals/printers-and-scanners.md",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Printers and Scanners",summary:"Guide to using printers and scanners on Solus"},sidebar:"userSidebar",previous:{title:"MIDI Keyboards",permalink:"/docs/user/hardware/peripherals/midi-keyboard"},next:{title:"Package Management",permalink:"/docs/category/package-management"}},s={},p=[{value:"Drivers",id:"drivers",level:2},{value:"Brother",id:"brother",level:3},{value:"Compatibility",id:"compatibility",level:2},{value:"Brother",id:"brother-1",level:3},{value:"Brother",id:"brother-2",level:2},{value:"Network Scanner",id:"network-scanner",level:3}],u={toc:p},c="wrapper";function d(e){let{components:r,...t}=e;return(0,a.kt)(c,(0,n.Z)({},u,t,{components:r,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"printers-and-scanners"},"Printers and Scanners"),(0,a.kt)("h1",{id:"printers"},"Printers"),(0,a.kt)("h2",{id:"drivers"},"Drivers"),(0,a.kt)("p",null,"Many printers will work out-of the box on Solus. If yours doesn't, you should try installing additional drivers."),(0,a.kt)("table",null,(0,a.kt)("thead",{parentName:"table"},(0,a.kt)("tr",{parentName:"thead"},(0,a.kt)("th",{parentName:"tr",align:null},"Brand"),(0,a.kt)("th",{parentName:"tr",align:null},"Driver Package(s)"))),(0,a.kt)("tbody",{parentName:"table"},(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Canon"),(0,a.kt)("td",{parentName:"tr",align:null},"canon-ufriilt-common")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Dymo"),(0,a.kt)("td",{parentName:"tr",align:null},"dymo-cups-driver")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Epson"),(0,a.kt)("td",{parentName:"tr",align:null},"epson-inkjet-printer-escpr")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"HP"),(0,a.kt)("td",{parentName:"tr",align:null},"hplip")))),(0,a.kt)("h3",{id:"brother"},"Brother"),(0,a.kt)("p",null,"The Solus repositories include ",(0,a.kt)("inlineCode",{parentName:"p"},"brlaser"),", an open-source driver for many Brother monochrome laser printers and multi-function devices. Compatible models are listed ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/Owl-Maintain/brlaser#supported-printers"},"here")),(0,a.kt)("p",null,"Other Brother drivers are distributed by Brother for a single printer only. Because of this, you will need to install the package for your specific printer."),(0,a.kt)("p",null,"For example, ",(0,a.kt)("inlineCode",{parentName:"p"},"brother-mfc1910w")," provides drivers for the MFC-1910w."),(0,a.kt)("h2",{id:"compatibility"},"Compatibility"),(0,a.kt)("p",null,"The following printers have been tested and/or suggested to function correctly by our users."),(0,a.kt)("p",null,"This list should not suggest that ",(0,a.kt)("em",{parentName:"p"},"only")," such devices listed below are compatible with Solus, as there may be devices not listed below that are in fact compatible."),(0,a.kt)("h3",{id:"brother-1"},"Brother"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Brother DCP-135C"),(0,a.kt)("li",{parentName:"ul"},"Brother DCP-1510"),(0,a.kt)("li",{parentName:"ul"},"Brother DCP-1512"),(0,a.kt)("li",{parentName:"ul"},"Brother DCP-1610W"),(0,a.kt)("li",{parentName:"ul"},"Brother DCP-7010"),(0,a.kt)("li",{parentName:"ul"},"Brother DCP-7060D"),(0,a.kt)("li",{parentName:"ul"},"Brother DCP-L2520DW"),(0,a.kt)("li",{parentName:"ul"},"Brother HL-1210W"),(0,a.kt)("li",{parentName:"ul"},"Brother HL-1212W"),(0,a.kt)("li",{parentName:"ul"},"Brother HL-2220"),(0,a.kt)("li",{parentName:"ul"},"Brother HL-L2315DW"),(0,a.kt)("li",{parentName:"ul"},"Brother HL-L2320D"),(0,a.kt)("li",{parentName:"ul"},"Brother HL-L2360D"),(0,a.kt)("li",{parentName:"ul"},"Brother HL-L2375DW"),(0,a.kt)("li",{parentName:"ul"},"Brother MFC-1910W"),(0,a.kt)("li",{parentName:"ul"},"Brother MFC-440CN"),(0,a.kt)("li",{parentName:"ul"},"Brother MFC-9130CW"),(0,a.kt)("li",{parentName:"ul"},"Brother MFC-9330CDW"),(0,a.kt)("li",{parentName:"ul"},"Brother MFC-J220"),(0,a.kt)("li",{parentName:"ul"},"Brother MFC-J480DW"),(0,a.kt)("li",{parentName:"ul"},"Brother MFC-L2700DW"),(0,a.kt)("li",{parentName:"ul"},"Brother MFC-L2703DW"),(0,a.kt)("li",{parentName:"ul"},"Brother MFC-L2740DW")),(0,a.kt)("p",null,"Should your printer not be on this list, and the generic ",(0,a.kt)("inlineCode",{parentName:"p"},"brlaser")," driver does not work, you can request your printer here for inclusion ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/getsolus/packages/issues/212"},"here")),(0,a.kt)("h1",{id:"scanners"},"Scanners"),(0,a.kt)("h2",{id:"brother-2"},"Brother"),(0,a.kt)("p",null,"You can connect your Brother scanner via USB or LAN to be able to scan. To get newer Brother scanners to work you will have to install the package ",(0,a.kt)("inlineCode",{parentName:"p"},"brscan4")),(0,a.kt)("h3",{id:"network-scanner"},"Network Scanner"),(0,a.kt)("p",null,"If your scanner is networks, you need to tell ",(0,a.kt)("inlineCode",{parentName:"p"},"saned")," the IP of your printer. It's advised to give your printer always the same IP inside your Network (ie. Static IP Address). Run the following command to accomplish this:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"brsaneconfig4 -a name=SCANNER model=$MODEL ip=$IPOFYOURSCANNER\n")))}d.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[5481],{3905:(e,r,t)=>{t.d(r,{Zo:()=>u,kt:()=>m});var n=t(7294);function a(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function l(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r&&(n=n.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,n)}return t}function o(e){for(var r=1;r=0||(a[t]=e[t]);return a}(e,r);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(a[t]=e[t])}return a}var s=n.createContext({}),p=function(e){var r=n.useContext(s),t=r;return e&&(t="function"==typeof e?e(r):o(o({},r),e)),t},u=function(e){var r=p(e.components);return n.createElement(s.Provider,{value:r},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var r=e.children;return n.createElement(n.Fragment,{},r)}},h=n.forwardRef((function(e,r){var t=e.components,a=e.mdxType,l=e.originalType,s=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),c=p(t),h=a,m=c["".concat(s,".").concat(h)]||c[h]||d[h]||l;return t?n.createElement(m,o(o({ref:r},u),{},{components:t})):n.createElement(m,o({ref:r},u))}));function m(e,r){var t=arguments,a=r&&r.mdxType;if("string"==typeof e||a){var l=t.length,o=new Array(l);o[0]=h;var i={};for(var s in r)hasOwnProperty.call(r,s)&&(i[s]=r[s]);i.originalType=e,i[c]="string"==typeof e?e:a,o[1]=i;for(var p=2;p{t.r(r),t.d(r,{assets:()=>s,contentTitle:()=>o,default:()=>d,frontMatter:()=>l,metadata:()=>i,toc:()=>p});var n=t(7462),a=(t(7294),t(3905));const l={title:"Printers and Scanners",summary:"Guide to using printers and scanners on Solus"},o="Printers and Scanners",i={unversionedId:"user/hardware/peripherals/printers-and-scanners",id:"user/hardware/peripherals/printers-and-scanners",title:"Printers and Scanners",description:"Drivers",source:"@site/docs/user/hardware/peripherals/printers-and-scanners.md",sourceDirName:"user/hardware/peripherals",slug:"/user/hardware/peripherals/printers-and-scanners",permalink:"/docs/user/hardware/peripherals/printers-and-scanners",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/hardware/peripherals/printers-and-scanners.md",tags:[],version:"current",lastUpdatedAt:1695222528,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Printers and Scanners",summary:"Guide to using printers and scanners on Solus"},sidebar:"userSidebar",previous:{title:"MIDI Keyboards",permalink:"/docs/user/hardware/peripherals/midi-keyboard"},next:{title:"Package Management",permalink:"/docs/category/package-management"}},s={},p=[{value:"Drivers",id:"drivers",level:2},{value:"Brother",id:"brother",level:3},{value:"Compatibility",id:"compatibility",level:2},{value:"Brother",id:"brother-1",level:3},{value:"Brother",id:"brother-2",level:2},{value:"Network Scanner",id:"network-scanner",level:3}],u={toc:p},c="wrapper";function d(e){let{components:r,...t}=e;return(0,a.kt)(c,(0,n.Z)({},u,t,{components:r,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"printers-and-scanners"},"Printers and Scanners"),(0,a.kt)("h1",{id:"printers"},"Printers"),(0,a.kt)("h2",{id:"drivers"},"Drivers"),(0,a.kt)("p",null,"Many printers will work out-of the box on Solus. If yours doesn't, you should try installing additional drivers."),(0,a.kt)("table",null,(0,a.kt)("thead",{parentName:"table"},(0,a.kt)("tr",{parentName:"thead"},(0,a.kt)("th",{parentName:"tr",align:null},"Brand"),(0,a.kt)("th",{parentName:"tr",align:null},"Driver Package(s)"))),(0,a.kt)("tbody",{parentName:"table"},(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Canon"),(0,a.kt)("td",{parentName:"tr",align:null},"canon-ufriilt-common")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Dymo"),(0,a.kt)("td",{parentName:"tr",align:null},"dymo-cups-driver")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Epson"),(0,a.kt)("td",{parentName:"tr",align:null},"epson-inkjet-printer-escpr")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"HP"),(0,a.kt)("td",{parentName:"tr",align:null},"hplip")))),(0,a.kt)("h3",{id:"brother"},"Brother"),(0,a.kt)("p",null,"The Solus repositories include ",(0,a.kt)("inlineCode",{parentName:"p"},"brlaser"),", an open-source driver for many Brother monochrome laser printers and multi-function devices. Compatible models are listed ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/Owl-Maintain/brlaser#supported-printers"},"here")),(0,a.kt)("p",null,"Other Brother drivers are distributed by Brother for a single printer only. Because of this, you will need to install the package for your specific printer."),(0,a.kt)("p",null,"For example, ",(0,a.kt)("inlineCode",{parentName:"p"},"brother-mfc1910w")," provides drivers for the MFC-1910w."),(0,a.kt)("h2",{id:"compatibility"},"Compatibility"),(0,a.kt)("p",null,"The following printers have been tested and/or suggested to function correctly by our users."),(0,a.kt)("p",null,"This list should not suggest that ",(0,a.kt)("em",{parentName:"p"},"only")," such devices listed below are compatible with Solus, as there may be devices not listed below that are in fact compatible."),(0,a.kt)("h3",{id:"brother-1"},"Brother"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Brother DCP-135C"),(0,a.kt)("li",{parentName:"ul"},"Brother DCP-1510"),(0,a.kt)("li",{parentName:"ul"},"Brother DCP-1512"),(0,a.kt)("li",{parentName:"ul"},"Brother DCP-1610W"),(0,a.kt)("li",{parentName:"ul"},"Brother DCP-7010"),(0,a.kt)("li",{parentName:"ul"},"Brother DCP-7060D"),(0,a.kt)("li",{parentName:"ul"},"Brother DCP-L2520DW"),(0,a.kt)("li",{parentName:"ul"},"Brother HL-1210W"),(0,a.kt)("li",{parentName:"ul"},"Brother HL-1212W"),(0,a.kt)("li",{parentName:"ul"},"Brother HL-2220"),(0,a.kt)("li",{parentName:"ul"},"Brother HL-L2315DW"),(0,a.kt)("li",{parentName:"ul"},"Brother HL-L2320D"),(0,a.kt)("li",{parentName:"ul"},"Brother HL-L2360D"),(0,a.kt)("li",{parentName:"ul"},"Brother HL-L2375DW"),(0,a.kt)("li",{parentName:"ul"},"Brother MFC-1910W"),(0,a.kt)("li",{parentName:"ul"},"Brother MFC-440CN"),(0,a.kt)("li",{parentName:"ul"},"Brother MFC-9130CW"),(0,a.kt)("li",{parentName:"ul"},"Brother MFC-9330CDW"),(0,a.kt)("li",{parentName:"ul"},"Brother MFC-J220"),(0,a.kt)("li",{parentName:"ul"},"Brother MFC-J480DW"),(0,a.kt)("li",{parentName:"ul"},"Brother MFC-L2700DW"),(0,a.kt)("li",{parentName:"ul"},"Brother MFC-L2703DW"),(0,a.kt)("li",{parentName:"ul"},"Brother MFC-L2740DW")),(0,a.kt)("p",null,"Should your printer not be on this list, and the generic ",(0,a.kt)("inlineCode",{parentName:"p"},"brlaser")," driver does not work, you can request your printer here for inclusion ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/getsolus/packages/issues/212"},"here")),(0,a.kt)("h1",{id:"scanners"},"Scanners"),(0,a.kt)("h2",{id:"brother-2"},"Brother"),(0,a.kt)("p",null,"You can connect your Brother scanner via USB or LAN to be able to scan. To get newer Brother scanners to work you will have to install the package ",(0,a.kt)("inlineCode",{parentName:"p"},"brscan4")),(0,a.kt)("h3",{id:"network-scanner"},"Network Scanner"),(0,a.kt)("p",null,"If your scanner is networks, you need to tell ",(0,a.kt)("inlineCode",{parentName:"p"},"saned")," the IP of your printer. It's advised to give your printer always the same IP inside your Network (ie. Static IP Address). Run the following command to accomplish this:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"brsaneconfig4 -a name=SCANNER model=$MODEL ip=$IPOFYOURSCANNER\n")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/3a2d2d08.10ae7eaf.js b/assets/js/3a2d2d08.10ae7eaf.js deleted file mode 100644 index accde7926..000000000 --- a/assets/js/3a2d2d08.10ae7eaf.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[5705],{3905:(e,t,o)=>{o.d(t,{Zo:()=>u,kt:()=>g});var r=o(7294);function a(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function n(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,r)}return o}function i(e){for(var t=1;t=0||(a[o]=e[o]);return a}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(a[o]=e[o])}return a}var p=r.createContext({}),s=function(e){var t=r.useContext(p),o=t;return e&&(o="function"==typeof e?e(t):i(i({},t),e)),o},u=function(e){var t=s(e.components);return r.createElement(p.Provider,{value:t},e.children)},c="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var o=e.components,a=e.mdxType,n=e.originalType,p=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),c=s(o),d=a,g=c["".concat(p,".").concat(d)]||c[d]||m[d]||n;return o?r.createElement(g,i(i({ref:t},u),{},{components:o})):r.createElement(g,i({ref:t},u))}));function g(e,t){var o=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var n=o.length,i=new Array(n);i[0]=d;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l[c]="string"==typeof e?e:a,i[1]=l;for(var s=2;s{o.r(t),o.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>m,frontMatter:()=>n,metadata:()=>l,toc:()=>s});var r=o(7462),a=(o(7294),o(3905));const n={title:"Diff to Pull Request",summary:"How to make your Phabricator diff a GitHub Pull Request"},i="Open Diffs",l={unversionedId:"packaging/procedures/diff-to-pull-request",id:"packaging/procedures/diff-to-pull-request",title:"Diff to Pull Request",description:"All but a few open package diffs on Phabricator were merged before the migration to GitHub. But what about the ones that weren't merged? Luckily, it should be a pretty straightforward process to turn your changes into a Pull Request on GitHub.",source:"@site/docs/packaging/procedures/diff-to-pull-request.md",sourceDirName:"packaging/procedures",slug:"/packaging/procedures/diff-to-pull-request",permalink:"/docs/packaging/procedures/diff-to-pull-request",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/procedures/diff-to-pull-request.md",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Diff to Pull Request",summary:"How to make your Phabricator diff a GitHub Pull Request"},sidebar:"packagingSidebar",previous:{title:"Procedures",permalink:"/docs/category/procedures"},next:{title:"Maintainership",permalink:"/docs/packaging/procedures/maintainership"}},p={},s=[{value:"Setup",id:"setup",level:2},{value:"Moving Your Commit",id:"moving-your-commit",level:2},{value:"Creating a Pull Request",id:"creating-a-pull-request",level:2}],u={toc:s},c="wrapper";function m(e){let{components:t,...o}=e;return(0,a.kt)(c,(0,r.Z)({},u,o,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"open-diffs"},"Open Diffs"),(0,a.kt)("p",null,"All but a few open package diffs on Phabricator were merged before the migration to GitHub. But what about the ones that weren't merged? Luckily, it should be a pretty straightforward process to turn your changes into a Pull Request on GitHub."),(0,a.kt)("p",null,"This article will use our ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/solus-packages/bottom"},"Bottom")," package as an example."),(0,a.kt)("p",null,"To make the process even easier, we recommend installing ",(0,a.kt)("inlineCode",{parentName:"p"},"github-cli")," (",(0,a.kt)("inlineCode",{parentName:"p"},"sudo eopkg it github-cli"),") to make working with GitHub a breeze."),(0,a.kt)("h2",{id:"setup"},"Setup"),(0,a.kt)("p",null,"It would be a good idea to change the name of the directory to avoid a naming conflict when you fork and clone the new repository."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"cd ~/solus-builds # Change this to wherever your package packaging directory is\nmv bottom bottom-old\n")),(0,a.kt)("p",null,"The first step will be to fork the new GitHub repo. You can do this via GitHub's website, or via the command line. We'll use the command line here to help streamline the process."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"gh repo fork --clone solus-packages/bottom\n")),(0,a.kt)("p",null,"This will create a fork of the Solus package under your user, in my case ",(0,a.kt)("inlineCode",{parentName:"p"},"EbonJaeger/bottom"),". The command will also create a remote called ",(0,a.kt)("inlineCode",{parentName:"p"},"upstream")," pointing to the repository in the ",(0,a.kt)("inlineCode",{parentName:"p"},"solus-packages")," organization to make updating your copy easier, and the ",(0,a.kt)("inlineCode",{parentName:"p"},"--clone")," option clones the fork to your disk."),(0,a.kt)("h2",{id:"moving-your-commit"},"Moving Your Commit"),(0,a.kt)("p",null,"Now to move your committed changes from the old repo to the new. Let's create a new branch in the newly cloned repository to work in. While not strictly necessary, it's a good practice to get in the habit of doing."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"cd bottom\ngit switch -c example-package-bump\n")),(0,a.kt)("p",null,"Next, extract your commit from your old copy of the repository using ",(0,a.kt)("inlineCode",{parentName:"p"},"git format-patch"),". Replace ",(0,a.kt)("inlineCode",{parentName:"p"},"bottom-old")," below with the directory of your old repo."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"git --git-dir=../bottom-old/.git format-patch -k -1 --stdout HEAD | git am -3 -k\n")),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},(0,a.kt)("strong",{parentName:"p"},"Breakdown:")," This will take the latest commit from the repository passed to the ",(0,a.kt)("inlineCode",{parentName:"p"},"--git-dir")," option as a patch, send it to ",(0,a.kt)("em",{parentName:"p"},"stdout"),", and is applied to the current repository by piping it to ",(0,a.kt)("inlineCode",{parentName:"p"},"git am"),", falling back to a three-way-merge if for some reason there is a merge conflict when applying the patch.")),(0,a.kt)("p",null,"Once this is complete, you can verify the operation with ",(0,a.kt)("inlineCode",{parentName:"p"},"git status")," and ",(0,a.kt)("inlineCode",{parentName:"p"},"git log")," to see that the commit was applied."),(0,a.kt)("p",null,"Push the commit to your fork on GitHub with ",(0,a.kt)("inlineCode",{parentName:"p"},"git push"),"."),(0,a.kt)("h2",{id:"creating-a-pull-request"},"Creating a Pull Request"),(0,a.kt)("p",null,"You can now open a Pull Request as normal. This can be done from the website or from the command line:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"gh pr create --repo solus-packages/bottom\n")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/3fdfc7ff.3b617f7e.js b/assets/js/3fdfc7ff.413b93a6.js similarity index 99% rename from assets/js/3fdfc7ff.3b617f7e.js rename to assets/js/3fdfc7ff.413b93a6.js index ee4ee909e..aaa524086 100644 --- a/assets/js/3fdfc7ff.3b617f7e.js +++ b/assets/js/3fdfc7ff.413b93a6.js @@ -1 +1 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[4608],{3905:(e,a,t)=>{t.d(a,{Zo:()=>p,kt:()=>d});var n=t(7294);function r(e,a,t){return a in e?Object.defineProperty(e,a,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[a]=t,e}function o(e,a){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),t.push.apply(t,n)}return t}function s(e){for(var a=1;a=0||(r[t]=e[t]);return r}(e,a);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var i=n.createContext({}),c=function(e){var a=n.useContext(i),t=a;return e&&(t="function"==typeof e?e(a):s(s({},a),e)),t},p=function(e){var a=c(e.components);return n.createElement(i.Provider,{value:a},e.children)},u="mdxType",m={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},g=n.forwardRef((function(e,a){var t=e.components,r=e.mdxType,o=e.originalType,i=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),u=c(t),g=r,d=u["".concat(i,".").concat(g)]||u[g]||m[g]||o;return t?n.createElement(d,s(s({ref:a},p),{},{components:t})):n.createElement(d,s({ref:a},p))}));function d(e,a){var t=arguments,r=a&&a.mdxType;if("string"==typeof e||r){var o=t.length,s=new Array(o);s[0]=g;var l={};for(var i in a)hasOwnProperty.call(a,i)&&(l[i]=a[i]);l.originalType=e,l[u]="string"==typeof e?e:r,s[1]=l;for(var c=2;c{t.r(a),t.d(a,{assets:()=>i,contentTitle:()=>s,default:()=>m,frontMatter:()=>o,metadata:()=>l,toc:()=>c});var n=t(7462),r=(t(7294),t(3905));const o={title:"Basics to Package Management",summary:"Basics to Package Management"},s="Basics to Package Management",l={unversionedId:"user/package-management/basics",id:"user/package-management/basics",title:"Basics to Package Management",description:"Solus uses the eopkg package management system to deliver software to the end-user.",source:"@site/docs/user/package-management/basics.md",sourceDirName:"user/package-management",slug:"/user/package-management/basics",permalink:"/docs/user/package-management/basics",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/package-management/basics.md",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Basics to Package Management",summary:"Basics to Package Management"},sidebar:"userSidebar",previous:{title:"Package Management",permalink:"/docs/category/package-management"},next:{title:"History and Software Rollback",permalink:"/docs/user/package-management/history-and-rollback"}},i={},c=[{value:"Installing Software",id:"installing-software",level:2},{value:"Reinstalling Software",id:"reinstalling-software",level:2},{value:"Uninstalling Software",id:"uninstalling-software",level:2},{value:"Get Information on Software",id:"get-information-on-software",level:2},{value:"Updating",id:"updating",level:2},{value:"Searching",id:"searching",level:2},{value:"Base Development Tools",id:"base-development-tools",level:2}],p={toc:c},u="wrapper";function m(e){let{components:a,...t}=e;return(0,r.kt)(u,(0,n.Z)({},p,t,{components:a,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"basics-to-package-management"},"Basics to Package Management"),(0,r.kt)("p",null,"Solus uses the eopkg package management system to deliver software to the end-user.",(0,r.kt)("br",{parentName:"p"}),"\n","Below are some basic commands for using eopkg."),(0,r.kt)("h2",{id:"installing-software"},"Installing Software"),(0,r.kt)("p",null,"You can install one or more packages by using:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg install packagename\n")),(0,r.kt)("p",null,"For example:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg install gnome-documents gnome-music\n")),(0,r.kt)("h2",{id:"reinstalling-software"},"Reinstalling Software"),(0,r.kt)("p",null,"You can reinstall one or more packages by using:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg install --reinstall packagename\n")),(0,r.kt)("p",null,"For example:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg install --reinstall gnome-documents gnome-music\n")),(0,r.kt)("h2",{id:"uninstalling-software"},"Uninstalling Software"),(0,r.kt)("p",null,"You can uninstall one or more packages by using:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"sudo eopkg remove packagename\n")),(0,r.kt)("p",null,"For example:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg remove gnome-documents gnome-music\n")),(0,r.kt)("h2",{id:"get-information-on-software"},"Get Information on Software"),(0,r.kt)("p",null,"You can get information on software, such as its description, version, installation size, and more, by using"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg info packagename\n")),(0,r.kt)("p",null,"For example:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg info gnome-documents\n")),(0,r.kt)("h2",{id:"updating"},"Updating"),(0,r.kt)("p",null,"You can update your system by using:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg upgrade\n")),(0,r.kt)("p",null,"If you want to ",(0,r.kt)("strong",{parentName:"p"},"only")," update a specific piece of software on your system, you can specify is like below:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg upgrade firefox\n")),(0,r.kt)("h2",{id:"searching"},"Searching"),(0,r.kt)("p",null,"You can search the software selection Solus provides by using:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg search term\n")),(0,r.kt)("p",null,"For example:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg search documents\n")),(0,r.kt)("p",null,"Notice that you don't need to search for a specific software name, although you can do that. We search summaries and software names by default."),(0,r.kt)("h2",{id:"base-development-tools"},"Base Development Tools"),(0,r.kt)("p",null,"If you are wanting to compile software under Solus, we recommend installing our system.devel component by running the following:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg install -c system.devel\n")),(0,r.kt)("p",null,"This will provide items such as clang, gcc, make, a multitude of devel sub-packages, and more. Our system.devel is similar to packages on other operating systems, such as Debian's build-essentials."))}m.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[4608],{3905:(e,a,t)=>{t.d(a,{Zo:()=>p,kt:()=>d});var n=t(7294);function r(e,a,t){return a in e?Object.defineProperty(e,a,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[a]=t,e}function o(e,a){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),t.push.apply(t,n)}return t}function s(e){for(var a=1;a=0||(r[t]=e[t]);return r}(e,a);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var i=n.createContext({}),c=function(e){var a=n.useContext(i),t=a;return e&&(t="function"==typeof e?e(a):s(s({},a),e)),t},p=function(e){var a=c(e.components);return n.createElement(i.Provider,{value:a},e.children)},u="mdxType",m={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},g=n.forwardRef((function(e,a){var t=e.components,r=e.mdxType,o=e.originalType,i=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),u=c(t),g=r,d=u["".concat(i,".").concat(g)]||u[g]||m[g]||o;return t?n.createElement(d,s(s({ref:a},p),{},{components:t})):n.createElement(d,s({ref:a},p))}));function d(e,a){var t=arguments,r=a&&a.mdxType;if("string"==typeof e||r){var o=t.length,s=new Array(o);s[0]=g;var l={};for(var i in a)hasOwnProperty.call(a,i)&&(l[i]=a[i]);l.originalType=e,l[u]="string"==typeof e?e:r,s[1]=l;for(var c=2;c{t.r(a),t.d(a,{assets:()=>i,contentTitle:()=>s,default:()=>m,frontMatter:()=>o,metadata:()=>l,toc:()=>c});var n=t(7462),r=(t(7294),t(3905));const o={title:"Basics to Package Management",summary:"Basics to Package Management"},s="Basics to Package Management",l={unversionedId:"user/package-management/basics",id:"user/package-management/basics",title:"Basics to Package Management",description:"Solus uses the eopkg package management system to deliver software to the end-user.",source:"@site/docs/user/package-management/basics.md",sourceDirName:"user/package-management",slug:"/user/package-management/basics",permalink:"/docs/user/package-management/basics",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/package-management/basics.md",tags:[],version:"current",lastUpdatedAt:1695222528,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Basics to Package Management",summary:"Basics to Package Management"},sidebar:"userSidebar",previous:{title:"Package Management",permalink:"/docs/category/package-management"},next:{title:"History and Software Rollback",permalink:"/docs/user/package-management/history-and-rollback"}},i={},c=[{value:"Installing Software",id:"installing-software",level:2},{value:"Reinstalling Software",id:"reinstalling-software",level:2},{value:"Uninstalling Software",id:"uninstalling-software",level:2},{value:"Get Information on Software",id:"get-information-on-software",level:2},{value:"Updating",id:"updating",level:2},{value:"Searching",id:"searching",level:2},{value:"Base Development Tools",id:"base-development-tools",level:2}],p={toc:c},u="wrapper";function m(e){let{components:a,...t}=e;return(0,r.kt)(u,(0,n.Z)({},p,t,{components:a,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"basics-to-package-management"},"Basics to Package Management"),(0,r.kt)("p",null,"Solus uses the eopkg package management system to deliver software to the end-user.",(0,r.kt)("br",{parentName:"p"}),"\n","Below are some basic commands for using eopkg."),(0,r.kt)("h2",{id:"installing-software"},"Installing Software"),(0,r.kt)("p",null,"You can install one or more packages by using:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg install packagename\n")),(0,r.kt)("p",null,"For example:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg install gnome-documents gnome-music\n")),(0,r.kt)("h2",{id:"reinstalling-software"},"Reinstalling Software"),(0,r.kt)("p",null,"You can reinstall one or more packages by using:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg install --reinstall packagename\n")),(0,r.kt)("p",null,"For example:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg install --reinstall gnome-documents gnome-music\n")),(0,r.kt)("h2",{id:"uninstalling-software"},"Uninstalling Software"),(0,r.kt)("p",null,"You can uninstall one or more packages by using:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre"},"sudo eopkg remove packagename\n")),(0,r.kt)("p",null,"For example:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg remove gnome-documents gnome-music\n")),(0,r.kt)("h2",{id:"get-information-on-software"},"Get Information on Software"),(0,r.kt)("p",null,"You can get information on software, such as its description, version, installation size, and more, by using"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg info packagename\n")),(0,r.kt)("p",null,"For example:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg info gnome-documents\n")),(0,r.kt)("h2",{id:"updating"},"Updating"),(0,r.kt)("p",null,"You can update your system by using:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg upgrade\n")),(0,r.kt)("p",null,"If you want to ",(0,r.kt)("strong",{parentName:"p"},"only")," update a specific piece of software on your system, you can specify is like below:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg upgrade firefox\n")),(0,r.kt)("h2",{id:"searching"},"Searching"),(0,r.kt)("p",null,"You can search the software selection Solus provides by using:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg search term\n")),(0,r.kt)("p",null,"For example:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg search documents\n")),(0,r.kt)("p",null,"Notice that you don't need to search for a specific software name, although you can do that. We search summaries and software names by default."),(0,r.kt)("h2",{id:"base-development-tools"},"Base Development Tools"),(0,r.kt)("p",null,"If you are wanting to compile software under Solus, we recommend installing our system.devel component by running the following:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg install -c system.devel\n")),(0,r.kt)("p",null,"This will provide items such as clang, gcc, make, a multitude of devel sub-packages, and more. Our system.devel is similar to packages on other operating systems, such as Debian's build-essentials."))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/3ff05326.8a629749.js b/assets/js/3ff05326.b216cff8.js similarity index 99% rename from assets/js/3ff05326.8a629749.js rename to assets/js/3ff05326.b216cff8.js index 02c1d3f30..8c95afa31 100644 --- a/assets/js/3ff05326.8a629749.js +++ b/assets/js/3ff05326.b216cff8.js @@ -1 +1 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[2775],{3905:(t,e,a)=>{a.d(e,{Zo:()=>s,kt:()=>g});var n=a(7294);function r(t,e,a){return e in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}function l(t,e){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),a.push.apply(a,n)}return a}function i(t){for(var e=1;e=0||(r[a]=t[a]);return r}(t,e);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(t);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(t,a)&&(r[a]=t[a])}return r}var p=n.createContext({}),d=function(t){var e=n.useContext(p),a=e;return t&&(a="function"==typeof t?t(e):i(i({},e),t)),a},s=function(t){var e=d(t.components);return n.createElement(p.Provider,{value:e},t.children)},m="mdxType",k={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},u=n.forwardRef((function(t,e){var a=t.components,r=t.mdxType,l=t.originalType,p=t.parentName,s=o(t,["components","mdxType","originalType","parentName"]),m=d(a),u=r,g=m["".concat(p,".").concat(u)]||m[u]||k[u]||l;return a?n.createElement(g,i(i({ref:e},s),{},{components:a})):n.createElement(g,i({ref:e},s))}));function g(t,e){var a=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var l=a.length,i=new Array(l);i[0]=u;var o={};for(var p in e)hasOwnProperty.call(e,p)&&(o[p]=e[p]);o.originalType=t,o[m]="string"==typeof t?t:r,i[1]=o;for(var d=2;d{a.r(e),a.d(e,{assets:()=>p,contentTitle:()=>i,default:()=>k,frontMatter:()=>l,metadata:()=>o,toc:()=>d});var n=a(7462),r=(a(7294),a(3905));const l={title:"Package YAML",summary:"Learning the package.yml packaging format"},i="package.yml",o={unversionedId:"packaging/package.yml",id:"packaging/package.yml",title:"Package YAML",description:'Each package is generated from a single build file named package.yml. This file is sometimes also called a "recipe" since it provides steps for building a package. It provides all of the required metadata for the package manager, plus the packaging steps involved to produce a package. This file follows the YAML specification.',source:"@site/docs/packaging/package.yml.md",sourceDirName:"packaging",slug:"/packaging/package.yml",permalink:"/docs/packaging/package.yml",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/package.yml.md",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Package YAML",summary:"Learning the package.yml packaging format"},sidebar:"packagingSidebar",previous:{title:"Git Basics",permalink:"/docs/packaging/git-basics"},next:{title:"Packaging Practices",permalink:"/docs/packaging/packaging-practices"}},p={},d=[{value:"Format",id:"format",level:2},{value:"Keys",id:"keys",level:2},{value:"Mandatory Keys",id:"mandatory-keys",level:3},{value:"Optional, supported keys",id:"optional-supported-keys",level:3},{value:"Packaging Step Keys, optional",id:"packaging-step-keys-optional",level:3},{value:"Optimize values",id:"optimize-values",level:2},{value:"Macros",id:"macros",level:2},{value:"Usage",id:"usage",level:3},{value:"Actionable Macros",id:"actionable-macros",level:3},{value:"Haskell Actionable Macros",id:"haskell-actionable-macros",level:3},{value:"Ninja Actionable Macros",id:"ninja-actionable-macros",level:3},{value:"Perl Actionable Macros",id:"perl-actionable-macros",level:3},{value:"Python Actionable Macros",id:"python-actionable-macros",level:3},{value:"Ruby Actionable Macros",id:"ruby-actionable-macros",level:3},{value:"Qt Actionable Macros",id:"qt-actionable-macros",level:3},{value:"Waf Actionable Macros",id:"waf-actionable-macros",level:3},{value:"Variable Macros",id:"variable-macros",level:3},{value:"Variables",id:"variables",level:2},{value:"Types",id:"types",level:2},{value:"string",id:"string",level:3},{value:"string(s)",id:"strings",level:3},{value:"integer",id:"integer",level:3},{value:"list",id:"list",level:3},{value:"dict",id:"dict",level:3},{value:"dict(s)",id:"dicts",level:3},{value:"Packaging Practices",id:"packaging-practices",level:2}],s={toc:d},m="wrapper";function k(t){let{components:e,...a}=t;return(0,r.kt)(m,(0,n.Z)({},s,a,{components:e,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"packageyml"},(0,r.kt)("inlineCode",{parentName:"h1"},"package.yml")),(0,r.kt)("p",null,"Each package is generated from a single build file named ",(0,r.kt)("inlineCode",{parentName:"p"},"package.yml"),'. This file is sometimes also called a "recipe" since it provides steps for building a package. It provides all of the required metadata for the package manager, plus the packaging steps involved to produce a package. This file follows the YAML specification.'),(0,r.kt)("h2",{id:"format"},"Format"),(0,r.kt)("p",null,"All ",(0,r.kt)("inlineCode",{parentName:"p"},"package.yml")," files ",(0,r.kt)("strong",{parentName:"p"},"must")," be valid YAML."),(0,r.kt)("p",null,"The file is organised into a key\u2192value hierarchy. The ",(0,r.kt)("inlineCode",{parentName:"p"},"ypkg")," tool parses a ",(0,r.kt)("inlineCode",{parentName:"p"},"package.yml")," file to build the corresponding package in a declarative manner. As such, most of the keys are simple strings, lists or nested key\u2192value pairs. A special case consists in the packaging steps, which are scripts."),(0,r.kt)("p",null,"An example file follows:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"name : nano\nversion : 2.9.5\nrelease : 96\nsource :\n - https://www.nano-editor.org/dist/v2.9/nano-2.9.5.tar.xz: 7b8d181cb57f42fa86a380bb9ad46abab859b60383607f731b65a9077f4b4e19\nhomepage : https://www.nano-editor.org\nlicense : GPL-3.0-or-later\nsummary : Small, friendly text editor inspired by Pico\ncomponent : system.devel\ndescription: |\n GNU nano is an easy-to-use text editor originally designed as a replacement for Pico, the ncurses-based editor from the non-free mailer package Pine (itself now available under the Apache License as Alpine).\nsetup : |\n %patch -p1 -i $pkgfiles/0001-Use-a-stateless-configuration.patch\n %reconfigure --enable-utf8 --docdir=/usr/share/doc/nano\nbuild : |\n %make\ninstall : |\n %make_install\n install -D -m 00644 $pkgfiles/nanorc $installdir/usr/share/defaults/nano/nanorc\n install -D -m 00644 $pkgfiles/git.nanorc $installdir/usr/share/nano/git.nanorc\n # https://github.com/scopatz/nanorc\n for rcFile in $pkgfiles/nanorc-extras/*.nanorc; do\n install -m 00644 $rcFile $installdir/usr/share/nano\n done\n")),(0,r.kt)("h2",{id:"keys"},"Keys"),(0,r.kt)("p",null,"Not all fields in ",(0,r.kt)("inlineCode",{parentName:"p"},"package.yml")," are mandatory, but a small selection are. Below is the complete list of the available fields."),(0,r.kt)("h3",{id:"mandatory-keys"},"Mandatory Keys"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Key Name"),(0,r.kt)("th",{parentName:"tr",align:null},"Type"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"name")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"string")),(0,r.kt)("td",{parentName:"tr",align:null},"The name of the package. This is also used as the base of all sub-package names. Unless unavoidable, this should match the upstream name.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"version")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"string")),(0,r.kt)("td",{parentName:"tr",align:null},"The version of the currently packaged software. This is taken from the tarball in most cases.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"release")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"integer")),(0,r.kt)("td",{parentName:"tr",align:null},"Specifies the current release number. Updates in the package number are based on this ",(0,r.kt)("inlineCode",{parentName:"td"},"release")," number, ",(0,r.kt)("em",{parentName:"td"},"not")," the ",(0,r.kt)("inlineCode",{parentName:"td"},"version")," number. As such, to release an update to users, this number must be incremented by one.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"license")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"string(s)")),(0,r.kt)("td",{parentName:"tr",align:null},"Valid upstream license(s). Try to ensure these use ",(0,r.kt)("a",{parentName:"td",href:"https://spdx.org/licenses/"},"SPDX identifiers"),".")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"homepage")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"string")),(0,r.kt)("td",{parentName:"tr",align:null},"Provides a link to the package's homepage, used in the Software Center.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"source")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"dict(s)")),(0,r.kt)("td",{parentName:"tr",align:null},"Upstream source URL (i.e. tarball), with the valid ",(0,r.kt)("inlineCode",{parentName:"td"},"sha256sum"),' as a value. Alternatively, the git repository URL prefixed with "git',"|",'" and a git tag or commit hash as a value.')),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"component")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"string")),(0,r.kt)("td",{parentName:"tr",align:null},"Component / group of packages this package belongs to. Check available components via ",(0,r.kt)("inlineCode",{parentName:"td"},"eopkg lc"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"summary")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"string")),(0,r.kt)("td",{parentName:"tr",align:null},"Brief package summary, or display name.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"description")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"string")),(0,r.kt)("td",{parentName:"tr",align:null},"More extensive description of the software, usually taken from the vendor website.")))),(0,r.kt)("h3",{id:"optional-supported-keys"},"Optional, supported keys"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Key Name"),(0,r.kt)("th",{parentName:"tr",align:null},"Type"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"clang")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"bool")),(0,r.kt)("td",{parentName:"tr",align:null},"Set to ",(0,r.kt)("inlineCode",{parentName:"td"},"yes")," if this package benefits from being built with Clang.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"extract")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"bool")),(0,r.kt)("td",{parentName:"tr",align:null},"Set to ",(0,r.kt)("inlineCode",{parentName:"td"},"no")," to disable automatic source extraction.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"autodep")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"bool")),(0,r.kt)("td",{parentName:"tr",align:null},"Set to ",(0,r.kt)("inlineCode",{parentName:"td"},"no")," to disable automatic binary dependency resolution at build time.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"emul32")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"bool")),(0,r.kt)("td",{parentName:"tr",align:null},"Set to ",(0,r.kt)("inlineCode",{parentName:"td"},"yes")," to enable an ",(0,r.kt)("inlineCode",{parentName:"td"},"-m32")," build (32-bit libs).")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"libsplit")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"bool")),(0,r.kt)("td",{parentName:"tr",align:null},"Set to ",(0,r.kt)("inlineCode",{parentName:"td"},"no")," to disable splitting of libraries into ",(0,r.kt)("inlineCode",{parentName:"td"},"devel")," sub-packages.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"conflicts")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"string(s)")),(0,r.kt)("td",{parentName:"tr",align:null},"Specify packages that cannot be installed together with this one.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"optimize")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"list")),(0,r.kt)("td",{parentName:"tr",align:null},"Specify preset keys to modify compiler and linker flags during build. You can learn more ",(0,r.kt)("a",{parentName:"td",href:"/docs/packaging/package.yml#optimize-values"},"here"),".")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"builddeps")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"list")),(0,r.kt)("td",{parentName:"tr",align:null},"Specify build dependencies for the package. You can learn more ",(0,r.kt)("a",{parentName:"td",href:"/docs/packaging/packaging-practices#build-dependencies"},"here"),".")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"rundeps")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"dict(s)")),(0,r.kt)("td",{parentName:"tr",align:null},"Specify further runtime dependencies for the packages. You can learn more ",(0,r.kt)("a",{parentName:"td",href:"/docs/packaging/packaging-practices#runtime-dependencies"},"here"),".")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"replaces")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"dict(s)")),(0,r.kt)("td",{parentName:"tr",align:null},"Replace one package with another, used when renaming or deprecating packages for clean upgrade paths.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"patterns")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"dict(s)")),(0,r.kt)("td",{parentName:"tr",align:null},"Allows fine grained control over file placement within the package or sub-packages. Useful for packages that are development only (i.e. ",(0,r.kt)("inlineCode",{parentName:"td"},"/usr/bin")," files).")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"environment")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"unicode")),(0,r.kt)("td",{parentName:"tr",align:null},"Specify code that will be exported to all packaging steps of the build (i.e. exporting variables for the entire build).")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"networking")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"bool")),(0,r.kt)("td",{parentName:"tr",align:null},"Set to ",(0,r.kt)("inlineCode",{parentName:"td"},"yes")," to enable networking within solbuild.")))),(0,r.kt)("h3",{id:"packaging-step-keys-optional"},"Packaging Step Keys, optional"),(0,r.kt)("p",null,"The packaging steps are all considered optional, however the absence of the ",(0,r.kt)("inlineCode",{parentName:"p"},"install")," step will result in no package generated. Each of these keys contains content that will be placed within a script and executed within a controlled environment to perform the package build. For all intents and purposes, they are Bash scripts with a predefined environment."),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Step Name"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"setup")),(0,r.kt)("td",{parentName:"tr",align:null},"Performed after the source extraction. This is the correct place to perform any ",(0,r.kt)("inlineCode",{parentName:"td"},"configure")," routine, or to ",(0,r.kt)("inlineCode",{parentName:"td"},"patch")," the sources.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"build")),(0,r.kt)("td",{parentName:"tr",align:null},"Use this step to run the build portion, i.e. ",(0,r.kt)("inlineCode",{parentName:"td"},"make"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"install")),(0,r.kt)("td",{parentName:"tr",align:null},"This is where you should install the files into the final packaging directory, i.e. ",(0,r.kt)("inlineCode",{parentName:"td"},"make install"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"check")),(0,r.kt)("td",{parentName:"tr",align:null},"This is where tests / checking should occur, i.e. ",(0,r.kt)("inlineCode",{parentName:"td"},"make check"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"profile")),(0,r.kt)("td",{parentName:"tr",align:null},"This is where profiling tests should be specified. ",(0,r.kt)("inlineCode",{parentName:"td"},"ypkg")," will handle setting flags to generate profiling data and using that data for an optimized build.")))),(0,r.kt)("h2",{id:"optimize-values"},"Optimize values"),(0,r.kt)("p",null,"One or more optimize values can be specified in a list with the optimize key in the ",(0,r.kt)("inlineCode",{parentName:"p"},"package.yml")," file. Several values can override or conflict with each other and should be used only where they provide a performance benefit, or fix a bug in the package or build."),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Optimize Value"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"speed")),(0,r.kt)("td",{parentName:"tr",align:null},"Optimise the package for performance ",(0,r.kt)("inlineCode",{parentName:"td"},"-O3")," plus other flags.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"size")),(0,r.kt)("td",{parentName:"tr",align:null},"Optimize the package build to minimize size ",(0,r.kt)("inlineCode",{parentName:"td"},"-Os"),". Not supported with clang.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"no-bind-now")),(0,r.kt)("td",{parentName:"tr",align:null},"Configure the package to disable certain flags, where RELRO is unsupported.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"no-symbolic")),(0,r.kt)("td",{parentName:"tr",align:null},"Disable ",(0,r.kt)("inlineCode",{parentName:"td"},"-Wl,-Bsymbolic-functions")," linker flag.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"unroll-loops")),(0,r.kt)("td",{parentName:"tr",align:null},"Enable ",(0,r.kt)("inlineCode",{parentName:"td"},"-funroll-loops"),". Use this sparingly, only when it provides proven benefit.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"runpath")),(0,r.kt)("td",{parentName:"tr",align:null},"Enable ",(0,r.kt)("inlineCode",{parentName:"td"},"-Wl,--enable-new-dtags")," to make linker use RUNPATH's instead of RPATH's.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"avx256")),(0,r.kt)("td",{parentName:"tr",align:null},"Disables ",(0,r.kt)("inlineCode",{parentName:"td"},"-mprefer-vector-width=128")," in avx2 builds.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"thin-lto")),(0,r.kt)("td",{parentName:"tr",align:null},"Enable Thin Link Time Optimization ",(0,r.kt)("inlineCode",{parentName:"td"},"-flto=thin")," with a supported linker.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"lto")),(0,r.kt)("td",{parentName:"tr",align:null},"Enable Link Time Optimization ",(0,r.kt)("inlineCode",{parentName:"td"},"-flto"),".")))),(0,r.kt)("h2",{id:"macros"},"Macros"),(0,r.kt)("p",null,"To further assist in packaging, a number of macros are available. These are simply shorthand ways to perform a normal build operation. They also ensure that the resulting package is consistent. These macros are only available in our packaging steps, as they are substituted within the script before execution."),(0,r.kt)("h3",{id:"usage"},"Usage"),(0,r.kt)("p",null,"Macros are prefixed with ",(0,r.kt)("inlineCode",{parentName:"p"},"%"),", and are substituted before your script is executed. Macros ending with ",(0,r.kt)("inlineCode",{parentName:"p"},"%")," are used to provide directory names or build values, to the script."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"# Run the configure macro with the given arguments\n%configure --disable-static\n")),(0,r.kt)("h3",{id:"actionable-macros"},"Actionable Macros"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Macro"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%autogen")),(0,r.kt)("td",{parentName:"tr",align:null},"Runs autogen with our ",(0,r.kt)("inlineCode",{parentName:"td"},"%CONFOPTS%")," to create a configure script then proceeds to run ",(0,r.kt)("inlineCode",{parentName:"td"},"%configure"),".")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%cmake")),(0,r.kt)("td",{parentName:"tr",align:null},"Configure cmake project with the distribution specific options, such as prefix and release type.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%cmake_ninja")),(0,r.kt)("td",{parentName:"tr",align:null},"Configure cmake project with ninja so it can be used with ",(0,r.kt)("inlineCode",{parentName:"td"},"%ninja_build"),", ",(0,r.kt)("inlineCode",{parentName:"td"},"%ninja_install")," and ",(0,r.kt)("inlineCode",{parentName:"td"},"%ninja_check")," macros.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%configure")),(0,r.kt)("td",{parentName:"tr",align:null},"Runs ",(0,r.kt)("inlineCode",{parentName:"td"},"./configure")," with our ",(0,r.kt)("inlineCode",{parentName:"td"},"%CONFOPTS%")," variable macro.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%make")),(0,r.kt)("td",{parentName:"tr",align:null},"Runs the ",(0,r.kt)("inlineCode",{parentName:"td"},"make")," command with the job count specified in ",(0,r.kt)("inlineCode",{parentName:"td"},"eopkg.conf"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%make_install")),(0,r.kt)("td",{parentName:"tr",align:null},"Perform a ",(0,r.kt)("inlineCode",{parentName:"td"},"make install"),", using the ",(0,r.kt)("inlineCode",{parentName:"td"},"DESTDIR")," variant. Should work for the vast majority of packages.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%patch")),(0,r.kt)("td",{parentName:"tr",align:null},"Sane patch macro to run in batch mode and not contaminate source tree on failure")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%apply_patches")),(0,r.kt)("td",{parentName:"tr",align:null},"Applies all patches listed in the ",(0,r.kt)("inlineCode",{parentName:"td"},"series")," file in ",(0,r.kt)("inlineCode",{parentName:"td"},"./files")," folder.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%reconfigure")),(0,r.kt)("td",{parentName:"tr",align:null},"Updates build scripts such as ",(0,r.kt)("inlineCode",{parentName:"td"},"./configure")," and proceeds to run ",(0,r.kt)("inlineCode",{parentName:"td"},"%configure"),".")))),(0,r.kt)("h3",{id:"haskell-actionable-macros"},"Haskell Actionable Macros"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Macro"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%cabal_configure")),(0,r.kt)("td",{parentName:"tr",align:null},"Runs cabal configure with prefix, libdir, etc. and ensures the necessary package.conf.d is copied to the correct location.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%cabal_build")),(0,r.kt)("td",{parentName:"tr",align:null},"Runs cabal build with ",(0,r.kt)("inlineCode",{parentName:"td"},"%JOBS%"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%cabal_install")),(0,r.kt)("td",{parentName:"tr",align:null},"Runs cabal copy to ",(0,r.kt)("inlineCode",{parentName:"td"},"$installdir"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%cabal_register")),(0,r.kt)("td",{parentName:"tr",align:null},"Runs cabal register to generate a pkg-config for package and version, then installs the conf file.")))),(0,r.kt)("h3",{id:"ninja-actionable-macros"},"Ninja Actionable Macros"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Macro"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%meson_configure")),(0,r.kt)("td",{parentName:"tr",align:null},"Runs meson with our CFLAGS and appropriate flags such as libdir.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%ninja_build")),(0,r.kt)("td",{parentName:"tr",align:null},"Runs ninja and passes our ",(0,r.kt)("inlineCode",{parentName:"td"},"%JOBS%")," variable. This macro obsoletes ",(0,r.kt)("em",{parentName:"td"},"%meson_build"),".")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%ninja_install")),(0,r.kt)("td",{parentName:"tr",align:null},"Runs meson install and passed the appropriate ",(0,r.kt)("inlineCode",{parentName:"td"},"DESTDIR")," and ",(0,r.kt)("inlineCode",{parentName:"td"},"%JOBS%")," variable. This macro obsoletes ",(0,r.kt)("em",{parentName:"td"},"%meson_install"),".")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%ninja_check")),(0,r.kt)("td",{parentName:"tr",align:null},"Runs ninja test and passes our ",(0,r.kt)("inlineCode",{parentName:"td"},"%JOBS%")," variable. This macro obsoletes ",(0,r.kt)("em",{parentName:"td"},"%meson_check"),".")))),(0,r.kt)("h3",{id:"perl-actionable-macros"},"Perl Actionable Macros"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Macro"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%perl_setup")),(0,r.kt)("td",{parentName:"tr",align:null},"Runs Perl setup scripts Build.pl or Makefile.pl with the appropriate variable flags.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%perl_build")),(0,r.kt)("td",{parentName:"tr",align:null},"Runs Perl build scripts or attempts ",(0,r.kt)("inlineCode",{parentName:"td"},"%make"),".")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%perl_install")),(0,r.kt)("td",{parentName:"tr",align:null},"Runs Perl install scripts or attempts ",(0,r.kt)("inlineCode",{parentName:"td"},"%make_install"),".")))),(0,r.kt)("h3",{id:"python-actionable-macros"},"Python Actionable Macros"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Macro"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%python_setup")),(0,r.kt)("td",{parentName:"tr",align:null},"Runs the build portion of a setup.py using python2.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%python_install")),(0,r.kt)("td",{parentName:"tr",align:null},"Runs the install portion of a setup.py, to the appropriate root, using python2.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%python_test")),(0,r.kt)("td",{parentName:"tr",align:null},"Without argument, runs the test portion of setup.py. With a ",(0,r.kt)("inlineCode",{parentName:"td"},".py"),' script, execute the script with python2. With something else execute the command "as it is". (',(0,r.kt)("a",{parentName:"td",href:"https://github.com/getsolus/ypkg/pull/1"},"More info"),")")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%python_compile")),(0,r.kt)("td",{parentName:"tr",align:null},"Compiles ",(0,r.kt)("inlineCode",{parentName:"td"},"*.py")," files using python2. This is only useful where the build doesn't compile them already (indicated by availability of ",(0,r.kt)("inlineCode",{parentName:"td"},"*.pyc")," files).")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%python3_setup")),(0,r.kt)("td",{parentName:"tr",align:null},"Runs the build portion of a setup.py using python3.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%python3_install")),(0,r.kt)("td",{parentName:"tr",align:null},"Runs the install portion of a setup.py, to the appropriate root, using python3.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%python3_test")),(0,r.kt)("td",{parentName:"tr",align:null},"Without argument, runs the test portion of setup.py. With a ",(0,r.kt)("inlineCode",{parentName:"td"},".py"),' script, execute the script with python3. With something else execute the command "as it is". (',(0,r.kt)("a",{parentName:"td",href:"https://github.com/getsolus/ypkg/pull/1"},"More info"),")")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%python3_compile")),(0,r.kt)("td",{parentName:"tr",align:null},"Compiles ",(0,r.kt)("inlineCode",{parentName:"td"},"*.py")," files using python3. This is only useful where the build doesn't compile them already (indicated by availability of ",(0,r.kt)("inlineCode",{parentName:"td"},"*.pyc")," files).")))),(0,r.kt)("h3",{id:"ruby-actionable-macros"},"Ruby Actionable Macros"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Macro"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%gem_build")),(0,r.kt)("td",{parentName:"tr",align:null},"Runs gem build.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%gem_install")),(0,r.kt)("td",{parentName:"tr",align:null},"Runs gem install with the appropriate parameters.")))),(0,r.kt)("h3",{id:"qt-actionable-macros"},"Qt Actionable Macros"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Macro"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%qmake")),(0,r.kt)("td",{parentName:"tr",align:null},"Runs qmake for Qt5 with the appropriate make flags.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%qmake4")),(0,r.kt)("td",{parentName:"tr",align:null},"Runs qmake for Qt4, as well as adding the necessary MOC, RCC, and UIC flags since those Qt4 executables end in -qt4.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%qml_cache")),(0,r.kt)("td",{parentName:"tr",align:null},"Compiles ",(0,r.kt)("inlineCode",{parentName:"td"},"*.qml")," files into ",(0,r.kt)("inlineCode",{parentName:"td"},"*.qmlc")," so they are compiled ahead of time.")))),(0,r.kt)("h3",{id:"waf-actionable-macros"},"Waf Actionable Macros"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Macro"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%waf_configure")),(0,r.kt)("td",{parentName:"tr",align:null},"Runs waf configure with prefix.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%waf_build")),(0,r.kt)("td",{parentName:"tr",align:null},"Runs waf and passes our ",(0,r.kt)("inlineCode",{parentName:"td"},"%JOBS%")," variable.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%waf_install")),(0,r.kt)("td",{parentName:"tr",align:null},"Runs waf install and passed the appropriate ",(0,r.kt)("inlineCode",{parentName:"td"},"destdir")," and ",(0,r.kt)("inlineCode",{parentName:"td"},"%JOBS%")," variable")))),(0,r.kt)("h3",{id:"variable-macros"},"Variable Macros"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Macro"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%ARCH%")),(0,r.kt)("td",{parentName:"tr",align:null},"Indicates the current build architecture.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%CC%")),(0,r.kt)("td",{parentName:"tr",align:null},"C compiler")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%CFLAGS%")),(0,r.kt)("td",{parentName:"tr",align:null},"cflags as set in ",(0,r.kt)("inlineCode",{parentName:"td"},"eopkg.conf"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%CONFOPTS%")),(0,r.kt)("td",{parentName:"tr",align:null},"Flags / options for configuration, such as ",(0,r.kt)("inlineCode",{parentName:"td"},"--prefix=%PREFIX%"),". ",(0,r.kt)("a",{parentName:"td",href:"https://github.com/getsolus/ypkg/blob/master/ypkg2/rc.yml#L353-L356"},"Full List."))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%CXX%")),(0,r.kt)("td",{parentName:"tr",align:null},"C++ compiler")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%CXXFLAGS%")),(0,r.kt)("td",{parentName:"tr",align:null},"cxxflags as set in ",(0,r.kt)("inlineCode",{parentName:"td"},"eopkg.conf"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%JOBS%")),(0,r.kt)("td",{parentName:"tr",align:null},"jobs, as set in ",(0,r.kt)("inlineCode",{parentName:"td"},"eopkg.conf"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%LDFLAGS%")),(0,r.kt)("td",{parentName:"tr",align:null},"ldflags as set in ",(0,r.kt)("inlineCode",{parentName:"td"},"eopkg.conf"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%LIBSUFFIX%")),(0,r.kt)("td",{parentName:"tr",align:null},"Library suffix (either 32 for 32-bit or 64 for 64-bit)")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%PREFIX%")),(0,r.kt)("td",{parentName:"tr",align:null},"Hard-coded prefix ",(0,r.kt)("inlineCode",{parentName:"td"},"/usr"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%YJOBS%")),(0,r.kt)("td",{parentName:"tr",align:null},"Job count without ",(0,r.kt)("inlineCode",{parentName:"td"},"-j")," as set in ",(0,r.kt)("inlineCode",{parentName:"td"},"eopkg.conf"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%installroot%")),(0,r.kt)("td",{parentName:"tr",align:null},"Hard-coded install directory")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%libdir%")),(0,r.kt)("td",{parentName:"tr",align:null},"The distribution\u2019s default library directory, i.e. ",(0,r.kt)("inlineCode",{parentName:"td"},"/usr/lib64")," (Alters for ",(0,r.kt)("inlineCode",{parentName:"td"},"emul32"),")")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%version%")),(0,r.kt)("td",{parentName:"tr",align:null},"Version of the package, as specified in the version key.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%workdir%")),(0,r.kt)("td",{parentName:"tr",align:null},"Hard-coded work directory (source tree)")))),(0,r.kt)("h2",{id:"variables"},"Variables"),(0,r.kt)("p",null,"A set of variables are exported in our build stages. These are used to provide context and structure to the scripts."),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Variable"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"$CFLAGS")),(0,r.kt)("td",{parentName:"tr",align:null},"cflags as set in ",(0,r.kt)("inlineCode",{parentName:"td"},"eopkg.conf"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"$CXXFLAGS")),(0,r.kt)("td",{parentName:"tr",align:null},"cxxflags as set in ",(0,r.kt)("inlineCode",{parentName:"td"},"eopkg.conf"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"$LDFLAGS")),(0,r.kt)("td",{parentName:"tr",align:null},"ldflags as set in ",(0,r.kt)("inlineCode",{parentName:"td"},"eopkg.conf"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"$CC")),(0,r.kt)("td",{parentName:"tr",align:null},"C compiler")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"$CXX")),(0,r.kt)("td",{parentName:"tr",align:null},"C++ compiler")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"$EMUL32BUILD")),(0,r.kt)("td",{parentName:"tr",align:null},"Set only when compiling in ",(0,r.kt)("inlineCode",{parentName:"td"},"emul32")," mode")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"$installdir")),(0,r.kt)("td",{parentName:"tr",align:null},"The install directory, i.e. where files are installed to for packaging")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"$pkgfiles")),(0,r.kt)("td",{parentName:"tr",align:null},"Refers to the ",(0,r.kt)("inlineCode",{parentName:"td"},"./files")," directory relative to the ",(0,r.kt)("inlineCode",{parentName:"td"},"package.yml")," file")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"$sources")),(0,r.kt)("td",{parentName:"tr",align:null},"Refers to the directory where your source files are stored e.g. ",(0,r.kt)("inlineCode",{parentName:"td"},"$sources/nano.tar.gz"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"$workdir")),(0,r.kt)("td",{parentName:"tr",align:null},"The work, or source, directory of the package build")))),(0,r.kt)("h2",{id:"types"},"Types"),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"package.yml")," file uses native YAML types, however it follows syntactic conventions and may accept multiple value types for a given key."),(0,r.kt)("h3",{id:"string"},"string"),(0,r.kt)("p",null,"This is simply text, which does not need to be quoted."),(0,r.kt)("h3",{id:"strings"},"string(s)"),(0,r.kt)("p",null,"Indicates that it is possible to use a ",(0,r.kt)("inlineCode",{parentName:"p"},"list")," of strings, or one single ",(0,r.kt)("inlineCode",{parentName:"p"},"string"),"."),(0,r.kt)("h3",{id:"integer"},"integer"),(0,r.kt)("p",null,"Whole, positive number, used in the ",(0,r.kt)("inlineCode",{parentName:"p"},"release")," field."),(0,r.kt)("h3",{id:"list"},"list"),(0,r.kt)("p",null,"A YAML list (or array) can be expressed in multiple ways. A short array-notation would look like this:"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"[one, two, three]")),(0,r.kt)("p",null,"They can also be expressed like this:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"- First Value\n- Second Value\n- Third Value\n")),(0,r.kt)("h3",{id:"dict"},"dict"),(0,r.kt)("p",null,"Known as an associative array, this is key to value mapping. These are separated by a colon (",(0,r.kt)("inlineCode",{parentName:"p"},":"),"), the token on the left is taken to be a key, and the token on the right is the value."),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"SomeKey: Some Value")),(0,r.kt)("p",null,"Note that each ",(0,r.kt)("inlineCode",{parentName:"p"},"ypkg key")," in the YAML file is actually a dict."),(0,r.kt)("h3",{id:"dicts"},"dict(s)"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"dict(s)")," consists of a list of ",(0,r.kt)("inlineCode",{parentName:"p"},"dict"),"s and some assumptions. We primarily make use of this to express advanced information within the package. These permit you to provide no key, and a value only.\nIn this instance, the key is implicitly assumed to be the package name (e.g. ",(0,r.kt)("inlineCode",{parentName:"p"},"nano"),"):"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"- some value")),(0,r.kt)("p",null,"An explicit key, usually a sub-package name:"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"- somekey: somevalue")),(0,r.kt)("p",null,"A mix of both:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"- somevalue\n- somekey: another value\n")),(0,r.kt)("p",null,"The values may also be expressed in list form, still using the same default key logic:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"- [one, two, three]\n- somekey: [one, two, three]\n- key:\n - value one\n - value two\n - value three\n")),(0,r.kt)("h2",{id:"packaging-practices"},"Packaging Practices"),(0,r.kt)("p",null,"The concepts in this document merely expose the syntax of a ",(0,r.kt)("inlineCode",{parentName:"p"},"package.yml")," file. Solus adheres to strict packaging practices and conventions which packagers must follow. They are explained in the ",(0,r.kt)("a",{parentName:"p",href:"/docs/packaging/packaging-practices"},"Packaging Practices")," article."))}k.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[2775],{3905:(t,e,a)=>{a.d(e,{Zo:()=>s,kt:()=>g});var n=a(7294);function r(t,e,a){return e in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}function l(t,e){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),a.push.apply(a,n)}return a}function i(t){for(var e=1;e=0||(r[a]=t[a]);return r}(t,e);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(t);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(t,a)&&(r[a]=t[a])}return r}var p=n.createContext({}),d=function(t){var e=n.useContext(p),a=e;return t&&(a="function"==typeof t?t(e):i(i({},e),t)),a},s=function(t){var e=d(t.components);return n.createElement(p.Provider,{value:e},t.children)},m="mdxType",k={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},u=n.forwardRef((function(t,e){var a=t.components,r=t.mdxType,l=t.originalType,p=t.parentName,s=o(t,["components","mdxType","originalType","parentName"]),m=d(a),u=r,g=m["".concat(p,".").concat(u)]||m[u]||k[u]||l;return a?n.createElement(g,i(i({ref:e},s),{},{components:a})):n.createElement(g,i({ref:e},s))}));function g(t,e){var a=arguments,r=e&&e.mdxType;if("string"==typeof t||r){var l=a.length,i=new Array(l);i[0]=u;var o={};for(var p in e)hasOwnProperty.call(e,p)&&(o[p]=e[p]);o.originalType=t,o[m]="string"==typeof t?t:r,i[1]=o;for(var d=2;d{a.r(e),a.d(e,{assets:()=>p,contentTitle:()=>i,default:()=>k,frontMatter:()=>l,metadata:()=>o,toc:()=>d});var n=a(7462),r=(a(7294),a(3905));const l={title:"Package YAML",summary:"Learning the package.yml packaging format"},i="package.yml",o={unversionedId:"packaging/package.yml",id:"packaging/package.yml",title:"Package YAML",description:'Each package is generated from a single build file named package.yml. This file is sometimes also called a "recipe" since it provides steps for building a package. It provides all of the required metadata for the package manager, plus the packaging steps involved to produce a package. This file follows the YAML specification.',source:"@site/docs/packaging/package.yml.md",sourceDirName:"packaging",slug:"/packaging/package.yml",permalink:"/docs/packaging/package.yml",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/package.yml.md",tags:[],version:"current",lastUpdatedAt:1695222528,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Package YAML",summary:"Learning the package.yml packaging format"},sidebar:"packagingSidebar",previous:{title:"Git Basics",permalink:"/docs/packaging/git-basics"},next:{title:"Packaging Practices",permalink:"/docs/packaging/packaging-practices"}},p={},d=[{value:"Format",id:"format",level:2},{value:"Keys",id:"keys",level:2},{value:"Mandatory Keys",id:"mandatory-keys",level:3},{value:"Optional, supported keys",id:"optional-supported-keys",level:3},{value:"Packaging Step Keys, optional",id:"packaging-step-keys-optional",level:3},{value:"Optimize values",id:"optimize-values",level:2},{value:"Macros",id:"macros",level:2},{value:"Usage",id:"usage",level:3},{value:"Actionable Macros",id:"actionable-macros",level:3},{value:"Haskell Actionable Macros",id:"haskell-actionable-macros",level:3},{value:"Ninja Actionable Macros",id:"ninja-actionable-macros",level:3},{value:"Perl Actionable Macros",id:"perl-actionable-macros",level:3},{value:"Python Actionable Macros",id:"python-actionable-macros",level:3},{value:"Ruby Actionable Macros",id:"ruby-actionable-macros",level:3},{value:"Qt Actionable Macros",id:"qt-actionable-macros",level:3},{value:"Waf Actionable Macros",id:"waf-actionable-macros",level:3},{value:"Variable Macros",id:"variable-macros",level:3},{value:"Variables",id:"variables",level:2},{value:"Types",id:"types",level:2},{value:"string",id:"string",level:3},{value:"string(s)",id:"strings",level:3},{value:"integer",id:"integer",level:3},{value:"list",id:"list",level:3},{value:"dict",id:"dict",level:3},{value:"dict(s)",id:"dicts",level:3},{value:"Packaging Practices",id:"packaging-practices",level:2}],s={toc:d},m="wrapper";function k(t){let{components:e,...a}=t;return(0,r.kt)(m,(0,n.Z)({},s,a,{components:e,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"packageyml"},(0,r.kt)("inlineCode",{parentName:"h1"},"package.yml")),(0,r.kt)("p",null,"Each package is generated from a single build file named ",(0,r.kt)("inlineCode",{parentName:"p"},"package.yml"),'. This file is sometimes also called a "recipe" since it provides steps for building a package. It provides all of the required metadata for the package manager, plus the packaging steps involved to produce a package. This file follows the YAML specification.'),(0,r.kt)("h2",{id:"format"},"Format"),(0,r.kt)("p",null,"All ",(0,r.kt)("inlineCode",{parentName:"p"},"package.yml")," files ",(0,r.kt)("strong",{parentName:"p"},"must")," be valid YAML."),(0,r.kt)("p",null,"The file is organised into a key\u2192value hierarchy. The ",(0,r.kt)("inlineCode",{parentName:"p"},"ypkg")," tool parses a ",(0,r.kt)("inlineCode",{parentName:"p"},"package.yml")," file to build the corresponding package in a declarative manner. As such, most of the keys are simple strings, lists or nested key\u2192value pairs. A special case consists in the packaging steps, which are scripts."),(0,r.kt)("p",null,"An example file follows:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"name : nano\nversion : 2.9.5\nrelease : 96\nsource :\n - https://www.nano-editor.org/dist/v2.9/nano-2.9.5.tar.xz: 7b8d181cb57f42fa86a380bb9ad46abab859b60383607f731b65a9077f4b4e19\nhomepage : https://www.nano-editor.org\nlicense : GPL-3.0-or-later\nsummary : Small, friendly text editor inspired by Pico\ncomponent : system.devel\ndescription: |\n GNU nano is an easy-to-use text editor originally designed as a replacement for Pico, the ncurses-based editor from the non-free mailer package Pine (itself now available under the Apache License as Alpine).\nsetup : |\n %patch -p1 -i $pkgfiles/0001-Use-a-stateless-configuration.patch\n %reconfigure --enable-utf8 --docdir=/usr/share/doc/nano\nbuild : |\n %make\ninstall : |\n %make_install\n install -D -m 00644 $pkgfiles/nanorc $installdir/usr/share/defaults/nano/nanorc\n install -D -m 00644 $pkgfiles/git.nanorc $installdir/usr/share/nano/git.nanorc\n # https://github.com/scopatz/nanorc\n for rcFile in $pkgfiles/nanorc-extras/*.nanorc; do\n install -m 00644 $rcFile $installdir/usr/share/nano\n done\n")),(0,r.kt)("h2",{id:"keys"},"Keys"),(0,r.kt)("p",null,"Not all fields in ",(0,r.kt)("inlineCode",{parentName:"p"},"package.yml")," are mandatory, but a small selection are. Below is the complete list of the available fields."),(0,r.kt)("h3",{id:"mandatory-keys"},"Mandatory Keys"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Key Name"),(0,r.kt)("th",{parentName:"tr",align:null},"Type"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"name")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"string")),(0,r.kt)("td",{parentName:"tr",align:null},"The name of the package. This is also used as the base of all sub-package names. Unless unavoidable, this should match the upstream name.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"version")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"string")),(0,r.kt)("td",{parentName:"tr",align:null},"The version of the currently packaged software. This is taken from the tarball in most cases.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"release")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"integer")),(0,r.kt)("td",{parentName:"tr",align:null},"Specifies the current release number. Updates in the package number are based on this ",(0,r.kt)("inlineCode",{parentName:"td"},"release")," number, ",(0,r.kt)("em",{parentName:"td"},"not")," the ",(0,r.kt)("inlineCode",{parentName:"td"},"version")," number. As such, to release an update to users, this number must be incremented by one.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"license")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"string(s)")),(0,r.kt)("td",{parentName:"tr",align:null},"Valid upstream license(s). Try to ensure these use ",(0,r.kt)("a",{parentName:"td",href:"https://spdx.org/licenses/"},"SPDX identifiers"),".")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"homepage")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"string")),(0,r.kt)("td",{parentName:"tr",align:null},"Provides a link to the package's homepage, used in the Software Center.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"source")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"dict(s)")),(0,r.kt)("td",{parentName:"tr",align:null},"Upstream source URL (i.e. tarball), with the valid ",(0,r.kt)("inlineCode",{parentName:"td"},"sha256sum"),' as a value. Alternatively, the git repository URL prefixed with "git',"|",'" and a git tag or commit hash as a value.')),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"component")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"string")),(0,r.kt)("td",{parentName:"tr",align:null},"Component / group of packages this package belongs to. Check available components via ",(0,r.kt)("inlineCode",{parentName:"td"},"eopkg lc"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"summary")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"string")),(0,r.kt)("td",{parentName:"tr",align:null},"Brief package summary, or display name.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"description")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"string")),(0,r.kt)("td",{parentName:"tr",align:null},"More extensive description of the software, usually taken from the vendor website.")))),(0,r.kt)("h3",{id:"optional-supported-keys"},"Optional, supported keys"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Key Name"),(0,r.kt)("th",{parentName:"tr",align:null},"Type"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"clang")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"bool")),(0,r.kt)("td",{parentName:"tr",align:null},"Set to ",(0,r.kt)("inlineCode",{parentName:"td"},"yes")," if this package benefits from being built with Clang.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"extract")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"bool")),(0,r.kt)("td",{parentName:"tr",align:null},"Set to ",(0,r.kt)("inlineCode",{parentName:"td"},"no")," to disable automatic source extraction.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"autodep")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"bool")),(0,r.kt)("td",{parentName:"tr",align:null},"Set to ",(0,r.kt)("inlineCode",{parentName:"td"},"no")," to disable automatic binary dependency resolution at build time.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"emul32")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"bool")),(0,r.kt)("td",{parentName:"tr",align:null},"Set to ",(0,r.kt)("inlineCode",{parentName:"td"},"yes")," to enable an ",(0,r.kt)("inlineCode",{parentName:"td"},"-m32")," build (32-bit libs).")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"libsplit")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"bool")),(0,r.kt)("td",{parentName:"tr",align:null},"Set to ",(0,r.kt)("inlineCode",{parentName:"td"},"no")," to disable splitting of libraries into ",(0,r.kt)("inlineCode",{parentName:"td"},"devel")," sub-packages.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"conflicts")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"string(s)")),(0,r.kt)("td",{parentName:"tr",align:null},"Specify packages that cannot be installed together with this one.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"optimize")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"list")),(0,r.kt)("td",{parentName:"tr",align:null},"Specify preset keys to modify compiler and linker flags during build. You can learn more ",(0,r.kt)("a",{parentName:"td",href:"/docs/packaging/package.yml#optimize-values"},"here"),".")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"builddeps")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"list")),(0,r.kt)("td",{parentName:"tr",align:null},"Specify build dependencies for the package. You can learn more ",(0,r.kt)("a",{parentName:"td",href:"/docs/packaging/packaging-practices#build-dependencies"},"here"),".")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"rundeps")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"dict(s)")),(0,r.kt)("td",{parentName:"tr",align:null},"Specify further runtime dependencies for the packages. You can learn more ",(0,r.kt)("a",{parentName:"td",href:"/docs/packaging/packaging-practices#runtime-dependencies"},"here"),".")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"replaces")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"dict(s)")),(0,r.kt)("td",{parentName:"tr",align:null},"Replace one package with another, used when renaming or deprecating packages for clean upgrade paths.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"patterns")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"dict(s)")),(0,r.kt)("td",{parentName:"tr",align:null},"Allows fine grained control over file placement within the package or sub-packages. Useful for packages that are development only (i.e. ",(0,r.kt)("inlineCode",{parentName:"td"},"/usr/bin")," files).")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"environment")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"unicode")),(0,r.kt)("td",{parentName:"tr",align:null},"Specify code that will be exported to all packaging steps of the build (i.e. exporting variables for the entire build).")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"networking")),(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("inlineCode",{parentName:"td"},"bool")),(0,r.kt)("td",{parentName:"tr",align:null},"Set to ",(0,r.kt)("inlineCode",{parentName:"td"},"yes")," to enable networking within solbuild.")))),(0,r.kt)("h3",{id:"packaging-step-keys-optional"},"Packaging Step Keys, optional"),(0,r.kt)("p",null,"The packaging steps are all considered optional, however the absence of the ",(0,r.kt)("inlineCode",{parentName:"p"},"install")," step will result in no package generated. Each of these keys contains content that will be placed within a script and executed within a controlled environment to perform the package build. For all intents and purposes, they are Bash scripts with a predefined environment."),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Step Name"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"setup")),(0,r.kt)("td",{parentName:"tr",align:null},"Performed after the source extraction. This is the correct place to perform any ",(0,r.kt)("inlineCode",{parentName:"td"},"configure")," routine, or to ",(0,r.kt)("inlineCode",{parentName:"td"},"patch")," the sources.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"build")),(0,r.kt)("td",{parentName:"tr",align:null},"Use this step to run the build portion, i.e. ",(0,r.kt)("inlineCode",{parentName:"td"},"make"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"install")),(0,r.kt)("td",{parentName:"tr",align:null},"This is where you should install the files into the final packaging directory, i.e. ",(0,r.kt)("inlineCode",{parentName:"td"},"make install"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"check")),(0,r.kt)("td",{parentName:"tr",align:null},"This is where tests / checking should occur, i.e. ",(0,r.kt)("inlineCode",{parentName:"td"},"make check"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"profile")),(0,r.kt)("td",{parentName:"tr",align:null},"This is where profiling tests should be specified. ",(0,r.kt)("inlineCode",{parentName:"td"},"ypkg")," will handle setting flags to generate profiling data and using that data for an optimized build.")))),(0,r.kt)("h2",{id:"optimize-values"},"Optimize values"),(0,r.kt)("p",null,"One or more optimize values can be specified in a list with the optimize key in the ",(0,r.kt)("inlineCode",{parentName:"p"},"package.yml")," file. Several values can override or conflict with each other and should be used only where they provide a performance benefit, or fix a bug in the package or build."),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Optimize Value"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"speed")),(0,r.kt)("td",{parentName:"tr",align:null},"Optimise the package for performance ",(0,r.kt)("inlineCode",{parentName:"td"},"-O3")," plus other flags.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"size")),(0,r.kt)("td",{parentName:"tr",align:null},"Optimize the package build to minimize size ",(0,r.kt)("inlineCode",{parentName:"td"},"-Os"),". Not supported with clang.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"no-bind-now")),(0,r.kt)("td",{parentName:"tr",align:null},"Configure the package to disable certain flags, where RELRO is unsupported.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"no-symbolic")),(0,r.kt)("td",{parentName:"tr",align:null},"Disable ",(0,r.kt)("inlineCode",{parentName:"td"},"-Wl,-Bsymbolic-functions")," linker flag.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"unroll-loops")),(0,r.kt)("td",{parentName:"tr",align:null},"Enable ",(0,r.kt)("inlineCode",{parentName:"td"},"-funroll-loops"),". Use this sparingly, only when it provides proven benefit.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"runpath")),(0,r.kt)("td",{parentName:"tr",align:null},"Enable ",(0,r.kt)("inlineCode",{parentName:"td"},"-Wl,--enable-new-dtags")," to make linker use RUNPATH's instead of RPATH's.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"avx256")),(0,r.kt)("td",{parentName:"tr",align:null},"Disables ",(0,r.kt)("inlineCode",{parentName:"td"},"-mprefer-vector-width=128")," in avx2 builds.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"thin-lto")),(0,r.kt)("td",{parentName:"tr",align:null},"Enable Thin Link Time Optimization ",(0,r.kt)("inlineCode",{parentName:"td"},"-flto=thin")," with a supported linker.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"lto")),(0,r.kt)("td",{parentName:"tr",align:null},"Enable Link Time Optimization ",(0,r.kt)("inlineCode",{parentName:"td"},"-flto"),".")))),(0,r.kt)("h2",{id:"macros"},"Macros"),(0,r.kt)("p",null,"To further assist in packaging, a number of macros are available. These are simply shorthand ways to perform a normal build operation. They also ensure that the resulting package is consistent. These macros are only available in our packaging steps, as they are substituted within the script before execution."),(0,r.kt)("h3",{id:"usage"},"Usage"),(0,r.kt)("p",null,"Macros are prefixed with ",(0,r.kt)("inlineCode",{parentName:"p"},"%"),", and are substituted before your script is executed. Macros ending with ",(0,r.kt)("inlineCode",{parentName:"p"},"%")," are used to provide directory names or build values, to the script."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"# Run the configure macro with the given arguments\n%configure --disable-static\n")),(0,r.kt)("h3",{id:"actionable-macros"},"Actionable Macros"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Macro"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%autogen")),(0,r.kt)("td",{parentName:"tr",align:null},"Runs autogen with our ",(0,r.kt)("inlineCode",{parentName:"td"},"%CONFOPTS%")," to create a configure script then proceeds to run ",(0,r.kt)("inlineCode",{parentName:"td"},"%configure"),".")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%cmake")),(0,r.kt)("td",{parentName:"tr",align:null},"Configure cmake project with the distribution specific options, such as prefix and release type.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%cmake_ninja")),(0,r.kt)("td",{parentName:"tr",align:null},"Configure cmake project with ninja so it can be used with ",(0,r.kt)("inlineCode",{parentName:"td"},"%ninja_build"),", ",(0,r.kt)("inlineCode",{parentName:"td"},"%ninja_install")," and ",(0,r.kt)("inlineCode",{parentName:"td"},"%ninja_check")," macros.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%configure")),(0,r.kt)("td",{parentName:"tr",align:null},"Runs ",(0,r.kt)("inlineCode",{parentName:"td"},"./configure")," with our ",(0,r.kt)("inlineCode",{parentName:"td"},"%CONFOPTS%")," variable macro.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%make")),(0,r.kt)("td",{parentName:"tr",align:null},"Runs the ",(0,r.kt)("inlineCode",{parentName:"td"},"make")," command with the job count specified in ",(0,r.kt)("inlineCode",{parentName:"td"},"eopkg.conf"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%make_install")),(0,r.kt)("td",{parentName:"tr",align:null},"Perform a ",(0,r.kt)("inlineCode",{parentName:"td"},"make install"),", using the ",(0,r.kt)("inlineCode",{parentName:"td"},"DESTDIR")," variant. Should work for the vast majority of packages.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%patch")),(0,r.kt)("td",{parentName:"tr",align:null},"Sane patch macro to run in batch mode and not contaminate source tree on failure")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%apply_patches")),(0,r.kt)("td",{parentName:"tr",align:null},"Applies all patches listed in the ",(0,r.kt)("inlineCode",{parentName:"td"},"series")," file in ",(0,r.kt)("inlineCode",{parentName:"td"},"./files")," folder.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%reconfigure")),(0,r.kt)("td",{parentName:"tr",align:null},"Updates build scripts such as ",(0,r.kt)("inlineCode",{parentName:"td"},"./configure")," and proceeds to run ",(0,r.kt)("inlineCode",{parentName:"td"},"%configure"),".")))),(0,r.kt)("h3",{id:"haskell-actionable-macros"},"Haskell Actionable Macros"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Macro"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%cabal_configure")),(0,r.kt)("td",{parentName:"tr",align:null},"Runs cabal configure with prefix, libdir, etc. and ensures the necessary package.conf.d is copied to the correct location.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%cabal_build")),(0,r.kt)("td",{parentName:"tr",align:null},"Runs cabal build with ",(0,r.kt)("inlineCode",{parentName:"td"},"%JOBS%"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%cabal_install")),(0,r.kt)("td",{parentName:"tr",align:null},"Runs cabal copy to ",(0,r.kt)("inlineCode",{parentName:"td"},"$installdir"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%cabal_register")),(0,r.kt)("td",{parentName:"tr",align:null},"Runs cabal register to generate a pkg-config for package and version, then installs the conf file.")))),(0,r.kt)("h3",{id:"ninja-actionable-macros"},"Ninja Actionable Macros"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Macro"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%meson_configure")),(0,r.kt)("td",{parentName:"tr",align:null},"Runs meson with our CFLAGS and appropriate flags such as libdir.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%ninja_build")),(0,r.kt)("td",{parentName:"tr",align:null},"Runs ninja and passes our ",(0,r.kt)("inlineCode",{parentName:"td"},"%JOBS%")," variable. This macro obsoletes ",(0,r.kt)("em",{parentName:"td"},"%meson_build"),".")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%ninja_install")),(0,r.kt)("td",{parentName:"tr",align:null},"Runs meson install and passed the appropriate ",(0,r.kt)("inlineCode",{parentName:"td"},"DESTDIR")," and ",(0,r.kt)("inlineCode",{parentName:"td"},"%JOBS%")," variable. This macro obsoletes ",(0,r.kt)("em",{parentName:"td"},"%meson_install"),".")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%ninja_check")),(0,r.kt)("td",{parentName:"tr",align:null},"Runs ninja test and passes our ",(0,r.kt)("inlineCode",{parentName:"td"},"%JOBS%")," variable. This macro obsoletes ",(0,r.kt)("em",{parentName:"td"},"%meson_check"),".")))),(0,r.kt)("h3",{id:"perl-actionable-macros"},"Perl Actionable Macros"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Macro"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%perl_setup")),(0,r.kt)("td",{parentName:"tr",align:null},"Runs Perl setup scripts Build.pl or Makefile.pl with the appropriate variable flags.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%perl_build")),(0,r.kt)("td",{parentName:"tr",align:null},"Runs Perl build scripts or attempts ",(0,r.kt)("inlineCode",{parentName:"td"},"%make"),".")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%perl_install")),(0,r.kt)("td",{parentName:"tr",align:null},"Runs Perl install scripts or attempts ",(0,r.kt)("inlineCode",{parentName:"td"},"%make_install"),".")))),(0,r.kt)("h3",{id:"python-actionable-macros"},"Python Actionable Macros"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Macro"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%python_setup")),(0,r.kt)("td",{parentName:"tr",align:null},"Runs the build portion of a setup.py using python2.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%python_install")),(0,r.kt)("td",{parentName:"tr",align:null},"Runs the install portion of a setup.py, to the appropriate root, using python2.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%python_test")),(0,r.kt)("td",{parentName:"tr",align:null},"Without argument, runs the test portion of setup.py. With a ",(0,r.kt)("inlineCode",{parentName:"td"},".py"),' script, execute the script with python2. With something else execute the command "as it is". (',(0,r.kt)("a",{parentName:"td",href:"https://github.com/getsolus/ypkg/pull/1"},"More info"),")")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%python_compile")),(0,r.kt)("td",{parentName:"tr",align:null},"Compiles ",(0,r.kt)("inlineCode",{parentName:"td"},"*.py")," files using python2. This is only useful where the build doesn't compile them already (indicated by availability of ",(0,r.kt)("inlineCode",{parentName:"td"},"*.pyc")," files).")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%python3_setup")),(0,r.kt)("td",{parentName:"tr",align:null},"Runs the build portion of a setup.py using python3.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%python3_install")),(0,r.kt)("td",{parentName:"tr",align:null},"Runs the install portion of a setup.py, to the appropriate root, using python3.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%python3_test")),(0,r.kt)("td",{parentName:"tr",align:null},"Without argument, runs the test portion of setup.py. With a ",(0,r.kt)("inlineCode",{parentName:"td"},".py"),' script, execute the script with python3. With something else execute the command "as it is". (',(0,r.kt)("a",{parentName:"td",href:"https://github.com/getsolus/ypkg/pull/1"},"More info"),")")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%python3_compile")),(0,r.kt)("td",{parentName:"tr",align:null},"Compiles ",(0,r.kt)("inlineCode",{parentName:"td"},"*.py")," files using python3. This is only useful where the build doesn't compile them already (indicated by availability of ",(0,r.kt)("inlineCode",{parentName:"td"},"*.pyc")," files).")))),(0,r.kt)("h3",{id:"ruby-actionable-macros"},"Ruby Actionable Macros"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Macro"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%gem_build")),(0,r.kt)("td",{parentName:"tr",align:null},"Runs gem build.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%gem_install")),(0,r.kt)("td",{parentName:"tr",align:null},"Runs gem install with the appropriate parameters.")))),(0,r.kt)("h3",{id:"qt-actionable-macros"},"Qt Actionable Macros"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Macro"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%qmake")),(0,r.kt)("td",{parentName:"tr",align:null},"Runs qmake for Qt5 with the appropriate make flags.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%qmake4")),(0,r.kt)("td",{parentName:"tr",align:null},"Runs qmake for Qt4, as well as adding the necessary MOC, RCC, and UIC flags since those Qt4 executables end in -qt4.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%qml_cache")),(0,r.kt)("td",{parentName:"tr",align:null},"Compiles ",(0,r.kt)("inlineCode",{parentName:"td"},"*.qml")," files into ",(0,r.kt)("inlineCode",{parentName:"td"},"*.qmlc")," so they are compiled ahead of time.")))),(0,r.kt)("h3",{id:"waf-actionable-macros"},"Waf Actionable Macros"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Macro"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%waf_configure")),(0,r.kt)("td",{parentName:"tr",align:null},"Runs waf configure with prefix.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%waf_build")),(0,r.kt)("td",{parentName:"tr",align:null},"Runs waf and passes our ",(0,r.kt)("inlineCode",{parentName:"td"},"%JOBS%")," variable.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%waf_install")),(0,r.kt)("td",{parentName:"tr",align:null},"Runs waf install and passed the appropriate ",(0,r.kt)("inlineCode",{parentName:"td"},"destdir")," and ",(0,r.kt)("inlineCode",{parentName:"td"},"%JOBS%")," variable")))),(0,r.kt)("h3",{id:"variable-macros"},"Variable Macros"),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Macro"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%ARCH%")),(0,r.kt)("td",{parentName:"tr",align:null},"Indicates the current build architecture.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%CC%")),(0,r.kt)("td",{parentName:"tr",align:null},"C compiler")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%CFLAGS%")),(0,r.kt)("td",{parentName:"tr",align:null},"cflags as set in ",(0,r.kt)("inlineCode",{parentName:"td"},"eopkg.conf"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%CONFOPTS%")),(0,r.kt)("td",{parentName:"tr",align:null},"Flags / options for configuration, such as ",(0,r.kt)("inlineCode",{parentName:"td"},"--prefix=%PREFIX%"),". ",(0,r.kt)("a",{parentName:"td",href:"https://github.com/getsolus/ypkg/blob/master/ypkg2/rc.yml#L353-L356"},"Full List."))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%CXX%")),(0,r.kt)("td",{parentName:"tr",align:null},"C++ compiler")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%CXXFLAGS%")),(0,r.kt)("td",{parentName:"tr",align:null},"cxxflags as set in ",(0,r.kt)("inlineCode",{parentName:"td"},"eopkg.conf"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%JOBS%")),(0,r.kt)("td",{parentName:"tr",align:null},"jobs, as set in ",(0,r.kt)("inlineCode",{parentName:"td"},"eopkg.conf"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%LDFLAGS%")),(0,r.kt)("td",{parentName:"tr",align:null},"ldflags as set in ",(0,r.kt)("inlineCode",{parentName:"td"},"eopkg.conf"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%LIBSUFFIX%")),(0,r.kt)("td",{parentName:"tr",align:null},"Library suffix (either 32 for 32-bit or 64 for 64-bit)")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%PREFIX%")),(0,r.kt)("td",{parentName:"tr",align:null},"Hard-coded prefix ",(0,r.kt)("inlineCode",{parentName:"td"},"/usr"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%YJOBS%")),(0,r.kt)("td",{parentName:"tr",align:null},"Job count without ",(0,r.kt)("inlineCode",{parentName:"td"},"-j")," as set in ",(0,r.kt)("inlineCode",{parentName:"td"},"eopkg.conf"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%installroot%")),(0,r.kt)("td",{parentName:"tr",align:null},"Hard-coded install directory")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%libdir%")),(0,r.kt)("td",{parentName:"tr",align:null},"The distribution\u2019s default library directory, i.e. ",(0,r.kt)("inlineCode",{parentName:"td"},"/usr/lib64")," (Alters for ",(0,r.kt)("inlineCode",{parentName:"td"},"emul32"),")")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%version%")),(0,r.kt)("td",{parentName:"tr",align:null},"Version of the package, as specified in the version key.")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"%workdir%")),(0,r.kt)("td",{parentName:"tr",align:null},"Hard-coded work directory (source tree)")))),(0,r.kt)("h2",{id:"variables"},"Variables"),(0,r.kt)("p",null,"A set of variables are exported in our build stages. These are used to provide context and structure to the scripts."),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Variable"),(0,r.kt)("th",{parentName:"tr",align:null},"Description"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"$CFLAGS")),(0,r.kt)("td",{parentName:"tr",align:null},"cflags as set in ",(0,r.kt)("inlineCode",{parentName:"td"},"eopkg.conf"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"$CXXFLAGS")),(0,r.kt)("td",{parentName:"tr",align:null},"cxxflags as set in ",(0,r.kt)("inlineCode",{parentName:"td"},"eopkg.conf"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"$LDFLAGS")),(0,r.kt)("td",{parentName:"tr",align:null},"ldflags as set in ",(0,r.kt)("inlineCode",{parentName:"td"},"eopkg.conf"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"$CC")),(0,r.kt)("td",{parentName:"tr",align:null},"C compiler")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"$CXX")),(0,r.kt)("td",{parentName:"tr",align:null},"C++ compiler")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"$EMUL32BUILD")),(0,r.kt)("td",{parentName:"tr",align:null},"Set only when compiling in ",(0,r.kt)("inlineCode",{parentName:"td"},"emul32")," mode")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"$installdir")),(0,r.kt)("td",{parentName:"tr",align:null},"The install directory, i.e. where files are installed to for packaging")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"$pkgfiles")),(0,r.kt)("td",{parentName:"tr",align:null},"Refers to the ",(0,r.kt)("inlineCode",{parentName:"td"},"./files")," directory relative to the ",(0,r.kt)("inlineCode",{parentName:"td"},"package.yml")," file")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"$sources")),(0,r.kt)("td",{parentName:"tr",align:null},"Refers to the directory where your source files are stored e.g. ",(0,r.kt)("inlineCode",{parentName:"td"},"$sources/nano.tar.gz"))),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},(0,r.kt)("strong",{parentName:"td"},"$workdir")),(0,r.kt)("td",{parentName:"tr",align:null},"The work, or source, directory of the package build")))),(0,r.kt)("h2",{id:"types"},"Types"),(0,r.kt)("p",null,"The ",(0,r.kt)("inlineCode",{parentName:"p"},"package.yml")," file uses native YAML types, however it follows syntactic conventions and may accept multiple value types for a given key."),(0,r.kt)("h3",{id:"string"},"string"),(0,r.kt)("p",null,"This is simply text, which does not need to be quoted."),(0,r.kt)("h3",{id:"strings"},"string(s)"),(0,r.kt)("p",null,"Indicates that it is possible to use a ",(0,r.kt)("inlineCode",{parentName:"p"},"list")," of strings, or one single ",(0,r.kt)("inlineCode",{parentName:"p"},"string"),"."),(0,r.kt)("h3",{id:"integer"},"integer"),(0,r.kt)("p",null,"Whole, positive number, used in the ",(0,r.kt)("inlineCode",{parentName:"p"},"release")," field."),(0,r.kt)("h3",{id:"list"},"list"),(0,r.kt)("p",null,"A YAML list (or array) can be expressed in multiple ways. A short array-notation would look like this:"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"[one, two, three]")),(0,r.kt)("p",null,"They can also be expressed like this:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"- First Value\n- Second Value\n- Third Value\n")),(0,r.kt)("h3",{id:"dict"},"dict"),(0,r.kt)("p",null,"Known as an associative array, this is key to value mapping. These are separated by a colon (",(0,r.kt)("inlineCode",{parentName:"p"},":"),"), the token on the left is taken to be a key, and the token on the right is the value."),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"SomeKey: Some Value")),(0,r.kt)("p",null,"Note that each ",(0,r.kt)("inlineCode",{parentName:"p"},"ypkg key")," in the YAML file is actually a dict."),(0,r.kt)("h3",{id:"dicts"},"dict(s)"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"dict(s)")," consists of a list of ",(0,r.kt)("inlineCode",{parentName:"p"},"dict"),"s and some assumptions. We primarily make use of this to express advanced information within the package. These permit you to provide no key, and a value only.\nIn this instance, the key is implicitly assumed to be the package name (e.g. ",(0,r.kt)("inlineCode",{parentName:"p"},"nano"),"):"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"- some value")),(0,r.kt)("p",null,"An explicit key, usually a sub-package name:"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"- somekey: somevalue")),(0,r.kt)("p",null,"A mix of both:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"- somevalue\n- somekey: another value\n")),(0,r.kt)("p",null,"The values may also be expressed in list form, still using the same default key logic:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-yaml"},"- [one, two, three]\n- somekey: [one, two, three]\n- key:\n - value one\n - value two\n - value three\n")),(0,r.kt)("h2",{id:"packaging-practices"},"Packaging Practices"),(0,r.kt)("p",null,"The concepts in this document merely expose the syntax of a ",(0,r.kt)("inlineCode",{parentName:"p"},"package.yml")," file. Solus adheres to strict packaging practices and conventions which packagers must follow. They are explained in the ",(0,r.kt)("a",{parentName:"p",href:"/docs/packaging/packaging-practices"},"Packaging Practices")," article."))}k.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/41a4de91.47177ad2.js b/assets/js/41a4de91.a8d42878.js similarity index 99% rename from assets/js/41a4de91.47177ad2.js rename to assets/js/41a4de91.a8d42878.js index 00bc50f4a..376bc674a 100644 --- a/assets/js/41a4de91.47177ad2.js +++ b/assets/js/41a4de91.a8d42878.js @@ -1 +1 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[7682],{3905:(e,t,o)=>{o.d(t,{Zo:()=>u,kt:()=>c});var r=o(7294);function a(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function s(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,r)}return o}function n(e){for(var t=1;t=0||(a[o]=e[o]);return a}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(a[o]=e[o])}return a}var p=r.createContext({}),l=function(e){var t=r.useContext(p),o=t;return e&&(o="function"==typeof e?e(t):n(n({},t),e)),o},u=function(e){var t=l(e.components);return r.createElement(p.Provider,{value:t},e.children)},d="mdxType",g={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var o=e.components,a=e.mdxType,s=e.originalType,p=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),d=l(o),m=a,c=d["".concat(p,".").concat(m)]||d[m]||g[m]||s;return o?r.createElement(c,n(n({ref:t},u),{},{components:o})):r.createElement(c,n({ref:t},u))}));function c(e,t){var o=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var s=o.length,n=new Array(s);n[0]=m;var i={};for(var p in t)hasOwnProperty.call(t,p)&&(i[p]=t[p]);i.originalType=e,i[d]="string"==typeof e?e:a,n[1]=i;for(var l=2;l{o.r(t),o.d(t,{assets:()=>p,contentTitle:()=>n,default:()=>g,frontMatter:()=>s,metadata:()=>i,toc:()=>l});var r=o(7462),a=(o(7294),o(3905));const s={title:"Third Party",summary:"Quick Installation guide for all of the Third Party applications Solus can help you install"},n="Third Party",i={unversionedId:"user/software/third-party/index",id:"user/software/third-party/index",title:"Third Party",description:"The following applications are provided via our 3rd Party Repository to facilitate the installation and usage of them. These applications cannot be included in the primary repository due to licensing issues.",source:"@site/docs/user/software/third-party/index.md",sourceDirName:"user/software/third-party",slug:"/user/software/third-party/",permalink:"/docs/user/software/third-party/",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/third-party/index.md",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Third Party",summary:"Quick Installation guide for all of the Third Party applications Solus can help you install"},sidebar:"userSidebar",previous:{title:"Sound",permalink:"/docs/user/software/sound/"},next:{title:"Utilities",permalink:"/docs/category/utilities"}},p={},l=[{value:"Browsers",id:"browsers",level:2},{value:"Google Chrome",id:"google-chrome",level:3},{value:"Google Chrome (Beta)",id:"google-chrome-beta",level:3},{value:"Google Chrome (Dev/Unstable)",id:"google-chrome-devunstable",level:3},{value:"Communication",id:"communication",level:2},{value:"Franz",id:"franz",level:3},{value:"Skype for Linux",id:"skype-for-linux",level:3},{value:"Slack",id:"slack",level:3},{value:"Viber",id:"viber",level:3},{value:"Multimedia",id:"multimedia",level:2},{value:"Bitwig Studio",id:"bitwig-studio",level:3},{value:"OcenAudio",id:"ocenaudio",level:3},{value:"Plex Media Server",id:"plex-media-server",level:3},{value:"Sunvox",id:"sunvox",level:3},{value:"Spotify",id:"spotify",level:3},{value:"Network",id:"network",level:2},{value:"AnyDesk",id:"anydesk",level:3},{value:"Insync",id:"insync",level:3},{value:"Spideroak",id:"spideroak",level:3},{value:"Synology Cloud Station Drive",id:"synology-cloud-station-drive",level:3},{value:"TeamViewer",id:"teamviewer",level:3},{value:"Office",id:"office",level:2},{value:"Mendeley Desktop",id:"mendeley-desktop",level:3},{value:"Microsoft Core Fonts",id:"microsoft-core-fonts",level:3},{value:"Moneydance",id:"moneydance",level:3},{value:"PomoDoneApp",id:"pomodoneapp",level:3},{value:"Scrivener",id:"scrivener",level:3},{value:"Programming",id:"programming",level:2},{value:"Android Studio",id:"android-studio",level:3},{value:"CLion",id:"clion",level:3},{value:"Datagrip",id:"datagrip",level:3},{value:"Git Kraken",id:"git-kraken",level:3},{value:"IDEA",id:"idea",level:3},{value:"PHPStorm",id:"phpstorm",level:3},{value:"Pycharm",id:"pycharm",level:3},{value:"Rider",id:"rider",level:3},{value:"RubyMine",id:"rubymine",level:3},{value:"Sublime Text",id:"sublime-text",level:3},{value:"WebStorm",id:"webstorm",level:3},{value:"Security",id:"security",level:2},{value:"Enpass",id:"enpass",level:3},{value:"Other",id:"other",level:2},{value:"Google Earth",id:"google-earth",level:3}],u={toc:l},d="wrapper";function g(e){let{components:t,...o}=e;return(0,a.kt)(d,(0,r.Z)({},u,o,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"third-party"},"Third Party"),(0,a.kt)("p",null,"The following applications are provided via our 3rd Party Repository to facilitate the installation and usage of them. These applications cannot be included in the primary repository due to licensing issues."),(0,a.kt)("p",null,"Alongside the following commands, you may also find some of these applications via the Third Party section on our Software Center."),(0,a.kt)("p",null,"If these instructions fail to work please ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/getsolus/3rd-Party"},"file an issue"),". To upgrade once installed simply run the commands again. If there is a new version it will be installed."),(0,a.kt)("h2",{id:"browsers"},"Browsers"),(0,a.kt)("h3",{id:"google-chrome"},"Google Chrome"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/network/web/browser/google-chrome-stable/pspec.xml\nsudo eopkg it google-chrome-*.eopkg;sudo rm google-chrome-*.eopkg\n")),(0,a.kt)("h3",{id:"google-chrome-beta"},"Google Chrome (Beta)"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/network/web/browser/google-chrome-beta/pspec.xml\nsudo eopkg it google-chrome-*.eopkg;sudo rm google-chrome-*.eopkg\n")),(0,a.kt)("h3",{id:"google-chrome-devunstable"},"Google Chrome (Dev/Unstable)"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/network/web/browser/google-chrome-unstable/pspec.xml\nsudo eopkg it google-chrome-*.eopkg;sudo rm google-chrome-*.eopkg\n")),(0,a.kt)("h2",{id:"communication"},"Communication"),(0,a.kt)("h3",{id:"franz"},"Franz"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/network/im/franz/pspec.xml\nsudo eopkg it franz*.eopkg;sudo rm franz*.eopkg\n")),(0,a.kt)("h3",{id:"skype-for-linux"},"Skype for Linux"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/network/im/skype/pspec.xml\nsudo eopkg it skype*.eopkg;sudo rm *.eopkg\n")),(0,a.kt)("h3",{id:"slack"},"Slack"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/network/im/slack-desktop/pspec.xml\nsudo eopkg it slack-desktop*.eopkg;sudo rm slack-desktop*.eopkg\n")),(0,a.kt)("h3",{id:"viber"},"Viber"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/network/im/viber/pspec.xml\nsudo eopkg it viber*.eopkg;sudo rm *.eopkg\n")),(0,a.kt)("h2",{id:"multimedia"},"Multimedia"),(0,a.kt)("h3",{id:"bitwig-studio"},"Bitwig Studio"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/multimedia/music/bitwig-studio/pspec.xml\nsudo eopkg it bitwig-studio*.eopkg;sudo rm bitwig-studio*.eopkg\n")),(0,a.kt)("h3",{id:"ocenaudio"},"OcenAudio"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/multimedia/music/ocenaudio/pspec.xml\nsudo eopkg it ocenaudio*.eopkg;sudo rm ocenaudio*.eopkg\n")),(0,a.kt)("h3",{id:"plex-media-server"},"Plex Media Server"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/multimedia/video/plexmediaserver/pspec.xml\nsudo eopkg it plexmediaserver-*.eopkg;sudo rm plexmediaserver-*.eopkg\nsudo systemd-tmpfiles --create\nsudo systemctl start plexmediaserver.service\n")),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"Note:")," Optionally have it start on boot:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo systemctl enable plexmediaserver.service\n")),(0,a.kt)("h3",{id:"sunvox"},"Sunvox"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/multimedia/music/sunvox/pspec.xml\nsudo eopkg it sunvox*.eopkg;sudo rm sunvox*.eopkg\n")),(0,a.kt)("h3",{id:"spotify"},"Spotify"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/multimedia/music/spotify/pspec.xml\nsudo eopkg it spotify*.eopkg;sudo rm spotify*.eopkg\n")),(0,a.kt)("h2",{id:"network"},"Network"),(0,a.kt)("h3",{id:"anydesk"},"AnyDesk"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/network/util/anydesk/pspec.xml\nsudo eopkg it anydesk*.eopkg;sudo rm anydesk*.eopkg\n")),(0,a.kt)("h3",{id:"insync"},"Insync"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/network/download/insync/pspec.xml\nsudo eopkg it insync*.eopkg;sudo rm insync*.eopkg\n")),(0,a.kt)("h3",{id:"spideroak"},"Spideroak"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/network/download/spideroak/pspec.xml\nsudo eopkg it spideroak*.eopkg;sudo rm spideroak*.eopkg\n")),(0,a.kt)("h3",{id:"synology-cloud-station-drive"},"Synology Cloud Station Drive"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/network/download/synology-cloud-station-drive/pspec.xml\nsudo eopkg it synology-cloud-station-drive*.eopkg;sudo rm synology-cloud-station-drive*.eopkg\n")),(0,a.kt)("h3",{id:"teamviewer"},"TeamViewer"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/network/util/teamviewer/pspec.xml\nsudo eopkg it teamviewer*.eopkg;sudo rm teamviewer*.eopkg\nsudo systemctl start teamviewerd.service\n")),(0,a.kt)("h2",{id:"office"},"Office"),(0,a.kt)("h3",{id:"mendeley-desktop"},"Mendeley Desktop"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/office/mendeleydesktop/pspec.xml\nsudo eopkg it mendeleydesktop*.eopkg;sudo rm mendeleydesktop*.eopkg\n")),(0,a.kt)("h3",{id:"microsoft-core-fonts"},"Microsoft Core Fonts"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/desktop/font/mscorefonts/pspec.xml\nsudo eopkg it mscorefonts*.eopkg;sudo rm mscorefonts*.eopkg\n")),(0,a.kt)("h3",{id:"moneydance"},"Moneydance"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/office/moneydance/pspec.xml\nsudo eopkg it moneydance*.eopkg;sudo rm moneydance*.eopkg\n")),(0,a.kt)("h3",{id:"pomodoneapp"},"PomoDoneApp"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/office/pomodoneapp/pspec.xml\nsudo eopkg it pomodoneapp*.eopkg;sudo rm pomodoneapp*.eopkg\n")),(0,a.kt)("h3",{id:"scrivener"},"Scrivener"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/office/scrivener/pspec.xml\nsudo eopkg it scrivener*.eopkg;sudo rm scrivener*.eopkg\n")),(0,a.kt)("h2",{id:"programming"},"Programming"),(0,a.kt)("h3",{id:"android-studio"},"Android Studio"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/programming/android-studio/pspec.xml\nsudo eopkg it android-studio*.eopkg;sudo rm android-studio*.eopkg\n")),(0,a.kt)("h3",{id:"clion"},"CLion"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/programming/clion/pspec.xml\nsudo eopkg it clion*.eopkg;sudo rm clion*.eopkg\n")),(0,a.kt)("h3",{id:"datagrip"},"Datagrip"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/programming/datagrip/pspec.xml\nsudo eopkg it datagrip*.eopkg;sudo rm datagrip*.eopkg\n")),(0,a.kt)("h3",{id:"git-kraken"},"Git Kraken"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/programming/gitkraken/pspec.xml\nsudo eopkg it gitkraken*.eopkg;sudo rm gitkraken*.eopkg\n")),(0,a.kt)("h3",{id:"idea"},"IDEA"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/programming/idea/pspec.xml\nsudo eopkg it idea*.eopkg;sudo rm idea*.eopkg\n")),(0,a.kt)("h3",{id:"phpstorm"},"PHPStorm"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/programming/phpstorm/pspec.xml\nsudo eopkg it phpstorm*.eopkg;sudo rm phpstorm*.eopkg\n")),(0,a.kt)("h3",{id:"pycharm"},"Pycharm"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/programming/pycharm/pspec.xml\nsudo eopkg it pycharm*.eopkg;sudo rm pycharm*.eopkg\n")),(0,a.kt)("h3",{id:"rider"},"Rider"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/programming/rider/pspec.xml\nsudo eopkg it rider*.eopkg;sudo rm rider*.eopkg\n")),(0,a.kt)("h3",{id:"rubymine"},"RubyMine"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/programming/rubymine/pspec.xml\nsudo eopkg it rubymine*.eopkg;sudo rm rubymine*.eopkg\n")),(0,a.kt)("h3",{id:"sublime-text"},"Sublime Text"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/programming/sublime-text/pspec.xml\nsudo eopkg it sublime*.eopkg;sudo rm sublime*.eopkg\n")),(0,a.kt)("h3",{id:"webstorm"},"WebStorm"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/programming/webstorm/pspec.xml\nsudo eopkg it webstorm*.eopkg;sudo rm webstorm*.eopkg\n")),(0,a.kt)("h2",{id:"security"},"Security"),(0,a.kt)("h3",{id:"enpass"},"Enpass"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/security/enpass/pspec.xml\nsudo eopkg it enpass*.eopkg;sudo rm enpass*.eopkg\n")),(0,a.kt)("h2",{id:"other"},"Other"),(0,a.kt)("h3",{id:"google-earth"},"Google Earth"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/network/web/google-earth/pspec.xml\nsudo eopkg it google-earth*.eopkg;sudo rm google-earth*.eopkg\n")))}g.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[7682],{3905:(e,t,o)=>{o.d(t,{Zo:()=>u,kt:()=>c});var r=o(7294);function a(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function s(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,r)}return o}function n(e){for(var t=1;t=0||(a[o]=e[o]);return a}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(a[o]=e[o])}return a}var p=r.createContext({}),l=function(e){var t=r.useContext(p),o=t;return e&&(o="function"==typeof e?e(t):n(n({},t),e)),o},u=function(e){var t=l(e.components);return r.createElement(p.Provider,{value:t},e.children)},d="mdxType",g={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var o=e.components,a=e.mdxType,s=e.originalType,p=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),d=l(o),m=a,c=d["".concat(p,".").concat(m)]||d[m]||g[m]||s;return o?r.createElement(c,n(n({ref:t},u),{},{components:o})):r.createElement(c,n({ref:t},u))}));function c(e,t){var o=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var s=o.length,n=new Array(s);n[0]=m;var i={};for(var p in t)hasOwnProperty.call(t,p)&&(i[p]=t[p]);i.originalType=e,i[d]="string"==typeof e?e:a,n[1]=i;for(var l=2;l{o.r(t),o.d(t,{assets:()=>p,contentTitle:()=>n,default:()=>g,frontMatter:()=>s,metadata:()=>i,toc:()=>l});var r=o(7462),a=(o(7294),o(3905));const s={title:"Third Party",summary:"Quick Installation guide for all of the Third Party applications Solus can help you install"},n="Third Party",i={unversionedId:"user/software/third-party/index",id:"user/software/third-party/index",title:"Third Party",description:"The following applications are provided via our 3rd Party Repository to facilitate the installation and usage of them. These applications cannot be included in the primary repository due to licensing issues.",source:"@site/docs/user/software/third-party/index.md",sourceDirName:"user/software/third-party",slug:"/user/software/third-party/",permalink:"/docs/user/software/third-party/",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/third-party/index.md",tags:[],version:"current",lastUpdatedAt:1695222528,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Third Party",summary:"Quick Installation guide for all of the Third Party applications Solus can help you install"},sidebar:"userSidebar",previous:{title:"Sound",permalink:"/docs/user/software/sound/"},next:{title:"Utilities",permalink:"/docs/category/utilities"}},p={},l=[{value:"Browsers",id:"browsers",level:2},{value:"Google Chrome",id:"google-chrome",level:3},{value:"Google Chrome (Beta)",id:"google-chrome-beta",level:3},{value:"Google Chrome (Dev/Unstable)",id:"google-chrome-devunstable",level:3},{value:"Communication",id:"communication",level:2},{value:"Franz",id:"franz",level:3},{value:"Skype for Linux",id:"skype-for-linux",level:3},{value:"Slack",id:"slack",level:3},{value:"Viber",id:"viber",level:3},{value:"Multimedia",id:"multimedia",level:2},{value:"Bitwig Studio",id:"bitwig-studio",level:3},{value:"OcenAudio",id:"ocenaudio",level:3},{value:"Plex Media Server",id:"plex-media-server",level:3},{value:"Sunvox",id:"sunvox",level:3},{value:"Spotify",id:"spotify",level:3},{value:"Network",id:"network",level:2},{value:"AnyDesk",id:"anydesk",level:3},{value:"Insync",id:"insync",level:3},{value:"Spideroak",id:"spideroak",level:3},{value:"Synology Cloud Station Drive",id:"synology-cloud-station-drive",level:3},{value:"TeamViewer",id:"teamviewer",level:3},{value:"Office",id:"office",level:2},{value:"Mendeley Desktop",id:"mendeley-desktop",level:3},{value:"Microsoft Core Fonts",id:"microsoft-core-fonts",level:3},{value:"Moneydance",id:"moneydance",level:3},{value:"PomoDoneApp",id:"pomodoneapp",level:3},{value:"Scrivener",id:"scrivener",level:3},{value:"Programming",id:"programming",level:2},{value:"Android Studio",id:"android-studio",level:3},{value:"CLion",id:"clion",level:3},{value:"Datagrip",id:"datagrip",level:3},{value:"Git Kraken",id:"git-kraken",level:3},{value:"IDEA",id:"idea",level:3},{value:"PHPStorm",id:"phpstorm",level:3},{value:"Pycharm",id:"pycharm",level:3},{value:"Rider",id:"rider",level:3},{value:"RubyMine",id:"rubymine",level:3},{value:"Sublime Text",id:"sublime-text",level:3},{value:"WebStorm",id:"webstorm",level:3},{value:"Security",id:"security",level:2},{value:"Enpass",id:"enpass",level:3},{value:"Other",id:"other",level:2},{value:"Google Earth",id:"google-earth",level:3}],u={toc:l},d="wrapper";function g(e){let{components:t,...o}=e;return(0,a.kt)(d,(0,r.Z)({},u,o,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"third-party"},"Third Party"),(0,a.kt)("p",null,"The following applications are provided via our 3rd Party Repository to facilitate the installation and usage of them. These applications cannot be included in the primary repository due to licensing issues."),(0,a.kt)("p",null,"Alongside the following commands, you may also find some of these applications via the Third Party section on our Software Center."),(0,a.kt)("p",null,"If these instructions fail to work please ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/getsolus/3rd-Party"},"file an issue"),". To upgrade once installed simply run the commands again. If there is a new version it will be installed."),(0,a.kt)("h2",{id:"browsers"},"Browsers"),(0,a.kt)("h3",{id:"google-chrome"},"Google Chrome"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/network/web/browser/google-chrome-stable/pspec.xml\nsudo eopkg it google-chrome-*.eopkg;sudo rm google-chrome-*.eopkg\n")),(0,a.kt)("h3",{id:"google-chrome-beta"},"Google Chrome (Beta)"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/network/web/browser/google-chrome-beta/pspec.xml\nsudo eopkg it google-chrome-*.eopkg;sudo rm google-chrome-*.eopkg\n")),(0,a.kt)("h3",{id:"google-chrome-devunstable"},"Google Chrome (Dev/Unstable)"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/network/web/browser/google-chrome-unstable/pspec.xml\nsudo eopkg it google-chrome-*.eopkg;sudo rm google-chrome-*.eopkg\n")),(0,a.kt)("h2",{id:"communication"},"Communication"),(0,a.kt)("h3",{id:"franz"},"Franz"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/network/im/franz/pspec.xml\nsudo eopkg it franz*.eopkg;sudo rm franz*.eopkg\n")),(0,a.kt)("h3",{id:"skype-for-linux"},"Skype for Linux"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/network/im/skype/pspec.xml\nsudo eopkg it skype*.eopkg;sudo rm *.eopkg\n")),(0,a.kt)("h3",{id:"slack"},"Slack"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/network/im/slack-desktop/pspec.xml\nsudo eopkg it slack-desktop*.eopkg;sudo rm slack-desktop*.eopkg\n")),(0,a.kt)("h3",{id:"viber"},"Viber"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/network/im/viber/pspec.xml\nsudo eopkg it viber*.eopkg;sudo rm *.eopkg\n")),(0,a.kt)("h2",{id:"multimedia"},"Multimedia"),(0,a.kt)("h3",{id:"bitwig-studio"},"Bitwig Studio"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/multimedia/music/bitwig-studio/pspec.xml\nsudo eopkg it bitwig-studio*.eopkg;sudo rm bitwig-studio*.eopkg\n")),(0,a.kt)("h3",{id:"ocenaudio"},"OcenAudio"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/multimedia/music/ocenaudio/pspec.xml\nsudo eopkg it ocenaudio*.eopkg;sudo rm ocenaudio*.eopkg\n")),(0,a.kt)("h3",{id:"plex-media-server"},"Plex Media Server"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/multimedia/video/plexmediaserver/pspec.xml\nsudo eopkg it plexmediaserver-*.eopkg;sudo rm plexmediaserver-*.eopkg\nsudo systemd-tmpfiles --create\nsudo systemctl start plexmediaserver.service\n")),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"Note:")," Optionally have it start on boot:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo systemctl enable plexmediaserver.service\n")),(0,a.kt)("h3",{id:"sunvox"},"Sunvox"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/multimedia/music/sunvox/pspec.xml\nsudo eopkg it sunvox*.eopkg;sudo rm sunvox*.eopkg\n")),(0,a.kt)("h3",{id:"spotify"},"Spotify"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/multimedia/music/spotify/pspec.xml\nsudo eopkg it spotify*.eopkg;sudo rm spotify*.eopkg\n")),(0,a.kt)("h2",{id:"network"},"Network"),(0,a.kt)("h3",{id:"anydesk"},"AnyDesk"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/network/util/anydesk/pspec.xml\nsudo eopkg it anydesk*.eopkg;sudo rm anydesk*.eopkg\n")),(0,a.kt)("h3",{id:"insync"},"Insync"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/network/download/insync/pspec.xml\nsudo eopkg it insync*.eopkg;sudo rm insync*.eopkg\n")),(0,a.kt)("h3",{id:"spideroak"},"Spideroak"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/network/download/spideroak/pspec.xml\nsudo eopkg it spideroak*.eopkg;sudo rm spideroak*.eopkg\n")),(0,a.kt)("h3",{id:"synology-cloud-station-drive"},"Synology Cloud Station Drive"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/network/download/synology-cloud-station-drive/pspec.xml\nsudo eopkg it synology-cloud-station-drive*.eopkg;sudo rm synology-cloud-station-drive*.eopkg\n")),(0,a.kt)("h3",{id:"teamviewer"},"TeamViewer"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/network/util/teamviewer/pspec.xml\nsudo eopkg it teamviewer*.eopkg;sudo rm teamviewer*.eopkg\nsudo systemctl start teamviewerd.service\n")),(0,a.kt)("h2",{id:"office"},"Office"),(0,a.kt)("h3",{id:"mendeley-desktop"},"Mendeley Desktop"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/office/mendeleydesktop/pspec.xml\nsudo eopkg it mendeleydesktop*.eopkg;sudo rm mendeleydesktop*.eopkg\n")),(0,a.kt)("h3",{id:"microsoft-core-fonts"},"Microsoft Core Fonts"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/desktop/font/mscorefonts/pspec.xml\nsudo eopkg it mscorefonts*.eopkg;sudo rm mscorefonts*.eopkg\n")),(0,a.kt)("h3",{id:"moneydance"},"Moneydance"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/office/moneydance/pspec.xml\nsudo eopkg it moneydance*.eopkg;sudo rm moneydance*.eopkg\n")),(0,a.kt)("h3",{id:"pomodoneapp"},"PomoDoneApp"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/office/pomodoneapp/pspec.xml\nsudo eopkg it pomodoneapp*.eopkg;sudo rm pomodoneapp*.eopkg\n")),(0,a.kt)("h3",{id:"scrivener"},"Scrivener"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/office/scrivener/pspec.xml\nsudo eopkg it scrivener*.eopkg;sudo rm scrivener*.eopkg\n")),(0,a.kt)("h2",{id:"programming"},"Programming"),(0,a.kt)("h3",{id:"android-studio"},"Android Studio"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/programming/android-studio/pspec.xml\nsudo eopkg it android-studio*.eopkg;sudo rm android-studio*.eopkg\n")),(0,a.kt)("h3",{id:"clion"},"CLion"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/programming/clion/pspec.xml\nsudo eopkg it clion*.eopkg;sudo rm clion*.eopkg\n")),(0,a.kt)("h3",{id:"datagrip"},"Datagrip"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/programming/datagrip/pspec.xml\nsudo eopkg it datagrip*.eopkg;sudo rm datagrip*.eopkg\n")),(0,a.kt)("h3",{id:"git-kraken"},"Git Kraken"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/programming/gitkraken/pspec.xml\nsudo eopkg it gitkraken*.eopkg;sudo rm gitkraken*.eopkg\n")),(0,a.kt)("h3",{id:"idea"},"IDEA"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/programming/idea/pspec.xml\nsudo eopkg it idea*.eopkg;sudo rm idea*.eopkg\n")),(0,a.kt)("h3",{id:"phpstorm"},"PHPStorm"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/programming/phpstorm/pspec.xml\nsudo eopkg it phpstorm*.eopkg;sudo rm phpstorm*.eopkg\n")),(0,a.kt)("h3",{id:"pycharm"},"Pycharm"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/programming/pycharm/pspec.xml\nsudo eopkg it pycharm*.eopkg;sudo rm pycharm*.eopkg\n")),(0,a.kt)("h3",{id:"rider"},"Rider"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/programming/rider/pspec.xml\nsudo eopkg it rider*.eopkg;sudo rm rider*.eopkg\n")),(0,a.kt)("h3",{id:"rubymine"},"RubyMine"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/programming/rubymine/pspec.xml\nsudo eopkg it rubymine*.eopkg;sudo rm rubymine*.eopkg\n")),(0,a.kt)("h3",{id:"sublime-text"},"Sublime Text"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/programming/sublime-text/pspec.xml\nsudo eopkg it sublime*.eopkg;sudo rm sublime*.eopkg\n")),(0,a.kt)("h3",{id:"webstorm"},"WebStorm"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/programming/webstorm/pspec.xml\nsudo eopkg it webstorm*.eopkg;sudo rm webstorm*.eopkg\n")),(0,a.kt)("h2",{id:"security"},"Security"),(0,a.kt)("h3",{id:"enpass"},"Enpass"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/security/enpass/pspec.xml\nsudo eopkg it enpass*.eopkg;sudo rm enpass*.eopkg\n")),(0,a.kt)("h2",{id:"other"},"Other"),(0,a.kt)("h3",{id:"google-earth"},"Google Earth"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg bi --ignore-safety https://raw.githubusercontent.com/getsolus/3rd-party/master/network/web/google-earth/pspec.xml\nsudo eopkg it google-earth*.eopkg;sudo rm google-earth*.eopkg\n")))}g.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/45e9d313.995b7c40.js b/assets/js/45e9d313.822063af.js similarity index 98% rename from assets/js/45e9d313.995b7c40.js rename to assets/js/45e9d313.822063af.js index 8c3e8f483..f6f0bfc43 100644 --- a/assets/js/45e9d313.995b7c40.js +++ b/assets/js/45e9d313.822063af.js @@ -1 +1 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[6114],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>k});var r=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function i(e){for(var t=1;t=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var l=r.createContext({}),p=function(e){var t=r.useContext(l),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},u=function(e){var t=p(e.components);return r.createElement(l.Provider,{value:t},e.children)},c="mdxType",g={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var a=e.components,n=e.mdxType,o=e.originalType,l=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),c=p(a),d=n,k=c["".concat(l,".").concat(d)]||c[d]||g[d]||o;return a?r.createElement(k,i(i({ref:t},u),{},{components:a})):r.createElement(k,i({ref:t},u))}));function k(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var o=a.length,i=new Array(o);i[0]=d;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[c]="string"==typeof e?e:n,i[1]=s;for(var p=2;p{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>g,frontMatter:()=>o,metadata:()=>s,toc:()=>p});var r=a(7462),n=(a(7294),a(3905));const o={title:"Testing a Package",summary:"Testing a Package",sidebar_position:5},i="Testing a Package",s={unversionedId:"packaging/testing-a-package",id:"packaging/testing-a-package",title:"Testing a Package",description:"After building a package, it must be tested against the unstable repo before a pull request can be submitted. Each pull request requires you to explain how you tested the package to make sure things work as expected.",source:"@site/docs/packaging/testing-a-package.md",sourceDirName:"packaging",slug:"/packaging/testing-a-package",permalink:"/docs/packaging/testing-a-package",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/testing-a-package.md",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",sidebarPosition:5,frontMatter:{title:"Testing a Package",summary:"Testing a Package",sidebar_position:5},sidebar:"packagingSidebar",previous:{title:"Updating an Existing Package",permalink:"/docs/packaging/updating-an-existing-package"},next:{title:"Submitting a Pull Request for Review",permalink:"/docs/packaging/submitting-a-pull-request"}},l={},p=[{value:"Install the .eopkg Files",id:"install-the-eopkg-files",level:2},{value:"For Updated Packages: Return to the Repository Version",id:"for-updated-packages-return-to-the-repository-version",level:2},{value:"Remove the .eopkg Files",id:"remove-the-eopkg-files",level:2}],u={toc:p},c="wrapper";function g(e){let{components:t,...a}=e;return(0,n.kt)(c,(0,r.Z)({},u,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"testing-a-package"},"Testing a Package"),(0,n.kt)("p",null,"After building a package, it must be tested against the unstable repo before a pull request can be submitted. Each pull request requires you to explain how you tested the package to make sure things work as expected."),(0,n.kt)("p",null,"You will use the .eopkg file(s) created by the build process for testing."),(0,n.kt)("h2",{id:"install-the-eopkg-files"},"Install the ",(0,n.kt)("inlineCode",{parentName:"h2"},".eopkg")," Files"),(0,n.kt)("p",null,"To install your new package, run the following command in the directory where you built the package. Include ",(0,n.kt)("strong",{parentName:"p"},"all")," ",(0,n.kt)("inlineCode",{parentName:"p"},".eopkg")," files that were built."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg it *.eopkg\n")),(0,n.kt)("p",null,"Testing need not be very complicated. The goal is to ensure the package will reliably work for our users. Testing effort will depend on how complex the software is. At minimum, you want to ensure the application launches, and performs basic functionality as expected."),(0,n.kt)("p",null,"For example, if you were updating a text editor, you would want to make sure you can open, create and save files. If you know of issues the package has had in the past, it's a good idea to test that as well to make sure there are no regressions. There are plenty of historical pull requests to review if you want more detail."),(0,n.kt)("h2",{id:"for-updated-packages-return-to-the-repository-version"},"For Updated Packages: Return to the Repository Version"),(0,n.kt)("p",null,"It is a good idea to uninstall the package you built, and return to the repository version, once you are done testing. To do this, run the following command on the main application. For example, if you just built ",(0,n.kt)("inlineCode",{parentName:"p"},"tree"),":"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg it --reinstall tree\n")),(0,n.kt)("h2",{id:"remove-the-eopkg-files"},"Remove the ",(0,n.kt)("inlineCode",{parentName:"h2"},".eopkg")," Files"),(0,n.kt)("p",null,"Before you can submit your pull request, you need to remove the ",(0,n.kt)("inlineCode",{parentName:"p"},".eopkg")," files. All repository packages are built by a dedicated build server from the source files provided in your pull request."),(0,n.kt)("p",null,"To remove these files, run:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"go-task clean\n")))}g.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[6114],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>k});var r=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function i(e){for(var t=1;t=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var l=r.createContext({}),p=function(e){var t=r.useContext(l),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},u=function(e){var t=p(e.components);return r.createElement(l.Provider,{value:t},e.children)},c="mdxType",g={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var a=e.components,n=e.mdxType,o=e.originalType,l=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),c=p(a),d=n,k=c["".concat(l,".").concat(d)]||c[d]||g[d]||o;return a?r.createElement(k,i(i({ref:t},u),{},{components:a})):r.createElement(k,i({ref:t},u))}));function k(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var o=a.length,i=new Array(o);i[0]=d;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[c]="string"==typeof e?e:n,i[1]=s;for(var p=2;p{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>g,frontMatter:()=>o,metadata:()=>s,toc:()=>p});var r=a(7462),n=(a(7294),a(3905));const o={title:"Testing a Package",summary:"Testing a Package",sidebar_position:5},i="Testing a Package",s={unversionedId:"packaging/testing-a-package",id:"packaging/testing-a-package",title:"Testing a Package",description:"After building a package, it must be tested against the unstable repo before a pull request can be submitted. Each pull request requires you to explain how you tested the package to make sure things work as expected.",source:"@site/docs/packaging/testing-a-package.md",sourceDirName:"packaging",slug:"/packaging/testing-a-package",permalink:"/docs/packaging/testing-a-package",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/testing-a-package.md",tags:[],version:"current",lastUpdatedAt:1695222528,formattedLastUpdatedAt:"Sep 20, 2023",sidebarPosition:5,frontMatter:{title:"Testing a Package",summary:"Testing a Package",sidebar_position:5},sidebar:"packagingSidebar",previous:{title:"Updating an Existing Package",permalink:"/docs/packaging/updating-an-existing-package"},next:{title:"Submitting a Pull Request for Review",permalink:"/docs/packaging/submitting-a-pull-request"}},l={},p=[{value:"Install the .eopkg Files",id:"install-the-eopkg-files",level:2},{value:"For Updated Packages: Return to the Repository Version",id:"for-updated-packages-return-to-the-repository-version",level:2},{value:"Remove the .eopkg Files",id:"remove-the-eopkg-files",level:2}],u={toc:p},c="wrapper";function g(e){let{components:t,...a}=e;return(0,n.kt)(c,(0,r.Z)({},u,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"testing-a-package"},"Testing a Package"),(0,n.kt)("p",null,"After building a package, it must be tested against the unstable repo before a pull request can be submitted. Each pull request requires you to explain how you tested the package to make sure things work as expected."),(0,n.kt)("p",null,"You will use the .eopkg file(s) created by the build process for testing."),(0,n.kt)("h2",{id:"install-the-eopkg-files"},"Install the ",(0,n.kt)("inlineCode",{parentName:"h2"},".eopkg")," Files"),(0,n.kt)("p",null,"To install your new package, run the following command in the directory where you built the package. Include ",(0,n.kt)("strong",{parentName:"p"},"all")," ",(0,n.kt)("inlineCode",{parentName:"p"},".eopkg")," files that were built."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg it *.eopkg\n")),(0,n.kt)("p",null,"Testing need not be very complicated. The goal is to ensure the package will reliably work for our users. Testing effort will depend on how complex the software is. At minimum, you want to ensure the application launches, and performs basic functionality as expected."),(0,n.kt)("p",null,"For example, if you were updating a text editor, you would want to make sure you can open, create and save files. If you know of issues the package has had in the past, it's a good idea to test that as well to make sure there are no regressions. There are plenty of historical pull requests to review if you want more detail."),(0,n.kt)("h2",{id:"for-updated-packages-return-to-the-repository-version"},"For Updated Packages: Return to the Repository Version"),(0,n.kt)("p",null,"It is a good idea to uninstall the package you built, and return to the repository version, once you are done testing. To do this, run the following command on the main application. For example, if you just built ",(0,n.kt)("inlineCode",{parentName:"p"},"tree"),":"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg it --reinstall tree\n")),(0,n.kt)("h2",{id:"remove-the-eopkg-files"},"Remove the ",(0,n.kt)("inlineCode",{parentName:"h2"},".eopkg")," Files"),(0,n.kt)("p",null,"Before you can submit your pull request, you need to remove the ",(0,n.kt)("inlineCode",{parentName:"p"},".eopkg")," files. All repository packages are built by a dedicated build server from the source files provided in your pull request."),(0,n.kt)("p",null,"To remove these files, run:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"go-task clean\n")))}g.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/46a65d96.2ba878eb.js b/assets/js/46a65d96.e9f47525.js similarity index 99% rename from assets/js/46a65d96.2ba878eb.js rename to assets/js/46a65d96.e9f47525.js index c4a26fe3d..22b9deca5 100644 --- a/assets/js/46a65d96.2ba878eb.js +++ b/assets/js/46a65d96.e9f47525.js @@ -1 +1 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[8092],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>d});var r=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function p(e){for(var t=1;t=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var l=r.createContext({}),i=function(e){var t=r.useContext(l),a=t;return e&&(a="function"==typeof e?e(t):p(p({},t),e)),a},u=function(e){var t=i(e.components);return r.createElement(l.Provider,{value:t},e.children)},m="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},g=r.forwardRef((function(e,t){var a=e.components,n=e.mdxType,o=e.originalType,l=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),m=i(a),g=n,d=m["".concat(l,".").concat(g)]||m[g]||c[g]||o;return a?r.createElement(d,p(p({ref:t},u),{},{components:a})):r.createElement(d,p({ref:t},u))}));function d(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var o=a.length,p=new Array(o);p[0]=g;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[m]="string"==typeof e?e:n,p[1]=s;for(var i=2;i{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>p,default:()=>c,frontMatter:()=>o,metadata:()=>s,toc:()=>i});var r=a(7462),n=(a(7294),a(3905));const o={title:"Repository Management",summary:"Repository Management"},p="Repository Management",s={unversionedId:"user/package-management/repo-management",id:"user/package-management/repo-management",title:"Repository Management",description:"While Solus currently only provides two repositories, stable (shannon) and unstable, our package manager does support actively using multiple repositories on your system. This is useful if you are using a vendor-provided repository.",source:"@site/docs/user/package-management/repo-management.md",sourceDirName:"user/package-management",slug:"/user/package-management/repo-management",permalink:"/docs/user/package-management/repo-management",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/package-management/repo-management.md",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Repository Management",summary:"Repository Management"},sidebar:"userSidebar",previous:{title:"History and Software Rollback",permalink:"/docs/user/package-management/history-and-rollback"},next:{title:"Software",permalink:"/docs/category/software"}},l={},i=[{value:"Adding a Repository",id:"adding-a-repository",level:2},{value:"Removing a Repository",id:"removing-a-repository",level:2},{value:"Enabling a Repository",id:"enabling-a-repository",level:2},{value:"Disabling a Repository",id:"disabling-a-repository",level:2},{value:"Updating a Repository",id:"updating-a-repository",level:2},{value:"List repositories",id:"list-repositories",level:2}],u={toc:i},m="wrapper";function c(e){let{components:t,...a}=e;return(0,n.kt)(m,(0,r.Z)({},u,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"repository-management"},"Repository Management"),(0,n.kt)("p",null,"While Solus currently only provides two repositories, stable (shannon) and unstable, our package manager does support actively using multiple repositories on your system. This is useful if you are using a vendor-provided repository."),(0,n.kt)("h2",{id:"adding-a-repository"},"Adding a Repository"),(0,n.kt)("p",null,"You can add a repository by using:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg add-repo Name Url\n")),(0,n.kt)("p",null,"For example:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg add-repo Example https://example.com/repo/eopkg-index.xml.gz\n")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Note:")," This does not enable the repository."),(0,n.kt)("h2",{id:"removing-a-repository"},"Removing a Repository"),(0,n.kt)("p",null,"You can remove a repository by using:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg remove-repo Name\n")),(0,n.kt)("p",null,"For example:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg remove-repo Example\n")),(0,n.kt)("h2",{id:"enabling-a-repository"},"Enabling a Repository"),(0,n.kt)("p",null,"You can enable a repository for usage, by using:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg enable-repo Name\n")),(0,n.kt)("p",null,"For example:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg enable-repo Example\n")),(0,n.kt)("h2",{id:"disabling-a-repository"},"Disabling a Repository"),(0,n.kt)("p",null,"You can disable a repository by using:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg disable-repo Name\n")),(0,n.kt)("p",null,"For example:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg disable-repo Example\n")),(0,n.kt)("h2",{id:"updating-a-repository"},"Updating a Repository"),(0,n.kt)("p",null,"You can update the index of a repository by using:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg update-repo Name\n")),(0,n.kt)("p",null,"For example:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg update-repo Example\n")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Note:")," You can update all repository by ",(0,n.kt)("strong",{parentName:"p"},"not")," providing a name."),(0,n.kt)("h2",{id:"list-repositories"},"List repositories"),(0,n.kt)("p",null,"You can list all the repositories added on your system by using:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg list-repo\n")))}c.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[8092],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>d});var r=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function p(e){for(var t=1;t=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var l=r.createContext({}),i=function(e){var t=r.useContext(l),a=t;return e&&(a="function"==typeof e?e(t):p(p({},t),e)),a},u=function(e){var t=i(e.components);return r.createElement(l.Provider,{value:t},e.children)},m="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},g=r.forwardRef((function(e,t){var a=e.components,n=e.mdxType,o=e.originalType,l=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),m=i(a),g=n,d=m["".concat(l,".").concat(g)]||m[g]||c[g]||o;return a?r.createElement(d,p(p({ref:t},u),{},{components:a})):r.createElement(d,p({ref:t},u))}));function d(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var o=a.length,p=new Array(o);p[0]=g;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[m]="string"==typeof e?e:n,p[1]=s;for(var i=2;i{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>p,default:()=>c,frontMatter:()=>o,metadata:()=>s,toc:()=>i});var r=a(7462),n=(a(7294),a(3905));const o={title:"Repository Management",summary:"Repository Management"},p="Repository Management",s={unversionedId:"user/package-management/repo-management",id:"user/package-management/repo-management",title:"Repository Management",description:"While Solus currently only provides two repositories, stable (shannon) and unstable, our package manager does support actively using multiple repositories on your system. This is useful if you are using a vendor-provided repository.",source:"@site/docs/user/package-management/repo-management.md",sourceDirName:"user/package-management",slug:"/user/package-management/repo-management",permalink:"/docs/user/package-management/repo-management",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/package-management/repo-management.md",tags:[],version:"current",lastUpdatedAt:1695222528,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Repository Management",summary:"Repository Management"},sidebar:"userSidebar",previous:{title:"History and Software Rollback",permalink:"/docs/user/package-management/history-and-rollback"},next:{title:"Software",permalink:"/docs/category/software"}},l={},i=[{value:"Adding a Repository",id:"adding-a-repository",level:2},{value:"Removing a Repository",id:"removing-a-repository",level:2},{value:"Enabling a Repository",id:"enabling-a-repository",level:2},{value:"Disabling a Repository",id:"disabling-a-repository",level:2},{value:"Updating a Repository",id:"updating-a-repository",level:2},{value:"List repositories",id:"list-repositories",level:2}],u={toc:i},m="wrapper";function c(e){let{components:t,...a}=e;return(0,n.kt)(m,(0,r.Z)({},u,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"repository-management"},"Repository Management"),(0,n.kt)("p",null,"While Solus currently only provides two repositories, stable (shannon) and unstable, our package manager does support actively using multiple repositories on your system. This is useful if you are using a vendor-provided repository."),(0,n.kt)("h2",{id:"adding-a-repository"},"Adding a Repository"),(0,n.kt)("p",null,"You can add a repository by using:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg add-repo Name Url\n")),(0,n.kt)("p",null,"For example:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg add-repo Example https://example.com/repo/eopkg-index.xml.gz\n")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Note:")," This does not enable the repository."),(0,n.kt)("h2",{id:"removing-a-repository"},"Removing a Repository"),(0,n.kt)("p",null,"You can remove a repository by using:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg remove-repo Name\n")),(0,n.kt)("p",null,"For example:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg remove-repo Example\n")),(0,n.kt)("h2",{id:"enabling-a-repository"},"Enabling a Repository"),(0,n.kt)("p",null,"You can enable a repository for usage, by using:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg enable-repo Name\n")),(0,n.kt)("p",null,"For example:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg enable-repo Example\n")),(0,n.kt)("h2",{id:"disabling-a-repository"},"Disabling a Repository"),(0,n.kt)("p",null,"You can disable a repository by using:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg disable-repo Name\n")),(0,n.kt)("p",null,"For example:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg disable-repo Example\n")),(0,n.kt)("h2",{id:"updating-a-repository"},"Updating a Repository"),(0,n.kt)("p",null,"You can update the index of a repository by using:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg update-repo Name\n")),(0,n.kt)("p",null,"For example:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg update-repo Example\n")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Note:")," You can update all repository by ",(0,n.kt)("strong",{parentName:"p"},"not")," providing a name."),(0,n.kt)("h2",{id:"list-repositories"},"List repositories"),(0,n.kt)("p",null,"You can list all the repositories added on your system by using:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg list-repo\n")))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/49b71c16.6e583e3d.js b/assets/js/49b71c16.8e2a1e09.js similarity index 99% rename from assets/js/49b71c16.6e583e3d.js rename to assets/js/49b71c16.8e2a1e09.js index 75ef6750b..e78cfe616 100644 --- a/assets/js/49b71c16.6e583e3d.js +++ b/assets/js/49b71c16.8e2a1e09.js @@ -1 +1 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[3783],{3905:(e,a,t)=>{t.d(a,{Zo:()=>c,kt:()=>g});var n=t(7294);function i(e,a,t){return a in e?Object.defineProperty(e,a,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[a]=t,e}function l(e,a){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),t.push.apply(t,n)}return t}function p(e){for(var a=1;a=0||(i[t]=e[t]);return i}(e,a);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(i[t]=e[t])}return i}var o=n.createContext({}),s=function(e){var a=n.useContext(o),t=a;return e&&(t="function"==typeof e?e(a):p(p({},a),e)),t},c=function(e){var a=s(e.components);return n.createElement(o.Provider,{value:a},e.children)},d="mdxType",u={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},k=n.forwardRef((function(e,a){var t=e.components,i=e.mdxType,l=e.originalType,o=e.parentName,c=r(e,["components","mdxType","originalType","parentName"]),d=s(t),k=i,g=d["".concat(o,".").concat(k)]||d[k]||u[k]||l;return t?n.createElement(g,p(p({ref:a},c),{},{components:t})):n.createElement(g,p({ref:a},c))}));function g(e,a){var t=arguments,i=a&&a.mdxType;if("string"==typeof e||i){var l=t.length,p=new Array(l);p[0]=k;var r={};for(var o in a)hasOwnProperty.call(a,o)&&(r[o]=a[o]);r.originalType=e,r[d]="string"==typeof e?e:i,p[1]=r;for(var s=2;s{t.r(a),t.d(a,{assets:()=>o,contentTitle:()=>p,default:()=>u,frontMatter:()=>l,metadata:()=>r,toc:()=>s});var n=t(7462),i=(t(7294),t(3905));const l={title:"Packaging Practices",summary:"Learning the best packaging practices"},p="Packaging Practices",r={unversionedId:"packaging/packaging-practices",id:"packaging/packaging-practices",title:"Packaging Practices",description:"The primary goal of ypkg is ease of maintenance. In order to do so we ensure packages in the binary repository adhere to a strict set of conventions and practices.",source:"@site/docs/packaging/packaging-practices.md",sourceDirName:"packaging",slug:"/packaging/packaging-practices",permalink:"/docs/packaging/packaging-practices",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/packaging-practices.md",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Packaging Practices",summary:"Learning the best packaging practices"},sidebar:"packagingSidebar",previous:{title:"Package YAML",permalink:"/docs/packaging/package.yml"},next:{title:"Procedures",permalink:"/docs/category/procedures"}},o={},s=[{value:"Package naming",id:"package-naming",level:2},{value:"The devel subpackage",id:"the-devel-subpackage",level:3},{value:"The docs subpackage",id:"the-docs-subpackage",level:3},{value:"The 32bit subpackage",id:"the-32bit-subpackage",level:3},{value:"The utils subpackage",id:"the-utils-subpackage",level:3},{value:"Maintenance",id:"maintenance",level:2},{value:"Licenses",id:"licenses",level:2},{value:"Build dependencies",id:"build-dependencies",level:2},{value:"Background",id:"background",level:3},{value:"Finding what package provides a dependency (if any)",id:"finding-what-package-provides-a-dependency-if-any",level:3},{value:"Using pkgconfig dependencies",id:"using-pkgconfig-dependencies",level:3},{value:"Using explicitly named dependencies",id:"using-explicitly-named-dependencies",level:3},{value:"Runtime dependencies",id:"runtime-dependencies",level:2},{value:"Patching / extra files",id:"patching--extra-files",level:2},{value:"Applying a patch",id:"applying-a-patch",level:3},{value:"Handling multiple patches",id:"handling-multiple-patches",level:4},{value:"Installing extra files",id:"installing-extra-files",level:2},{value:"Patterns",id:"patterns",level:2},{value:"Replace / rename",id:"replace--rename",level:2}],c={toc:s},d="wrapper";function u(e){let{components:a,...t}=e;return(0,i.kt)(d,(0,n.Z)({},c,t,{components:a,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"packaging-practices"},"Packaging Practices"),(0,i.kt)("p",null,"The primary goal of ",(0,i.kt)("inlineCode",{parentName:"p"},"ypkg")," is ease of maintenance. In order to do so we ensure packages in the binary repository adhere to a strict set of conventions and practices."),(0,i.kt)("p",null,"The next few sections will detail these."),(0,i.kt)("h2",{id:"package-naming"},"Package naming"),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"ypkg")," tool does not allow for custom subpackages or subpackage naming, and will enforce its own policy. This can be eased somewhat through the use of ",(0,i.kt)("inlineCode",{parentName:"p"},"patterns"),", however the available subpackage names are limited."),(0,i.kt)("p",null,"We request you use (where possible) the upstream source name for your package. Subpackage names (when generated) are constructed by using the ",(0,i.kt)("inlineCode",{parentName:"p"},"name")," value first, then applying the subpackage name as such:"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"pkgname-$subpackage")),(0,i.kt)("p",null,"Subpackages are fully automatic with ",(0,i.kt)("inlineCode",{parentName:"p"},"ypkg"),", and are created based on file patterns. All subpackages automatically depend on the main package, to ensure correct operation. In the following explanations, ",(0,i.kt)("inlineCode",{parentName:"p"},"$lib")," is used to refer to the host library directory, i.e. ",(0,i.kt)("inlineCode",{parentName:"p"},"lib")," or ",(0,i.kt)("inlineCode",{parentName:"p"},"lib64")," (or ",(0,i.kt)("inlineCode",{parentName:"p"},"lib32")," on ",(0,i.kt)("inlineCode",{parentName:"p"},"emul32")," builds)."),(0,i.kt)("p",null,"For the libraries / packages of the following programming languages, you should typically use the following template for it."),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:null},"Language"),(0,i.kt)("th",{parentName:"tr",align:null},"Prefix"),(0,i.kt)("th",{parentName:"tr",align:null},"Example"))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"Haskell"),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"haskell-")),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"text-binary")," would be ",(0,i.kt)("inlineCode",{parentName:"td"},"haskell-text-binary"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"Perl"),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"perl-")),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"algorithm-diff")," would be ",(0,i.kt)("inlineCode",{parentName:"td"},"perl-algorithm-diff"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"Python"),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"python-")),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"wikipedia")," would be ",(0,i.kt)("inlineCode",{parentName:"td"},"python-wikipedia")," ",(0,i.kt)("strong",{parentName:"td"},"even if only Python3 is enabled"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"Ruby"),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"ruby-")),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"gssapi")," would be ",(0,i.kt)("inlineCode",{parentName:"td"},"ruby-gssapi"))))),(0,i.kt)("h3",{id:"the-devel-subpackage"},"The devel subpackage"),(0,i.kt)("p",null,"This is invariably created for packages that provide libraries and development headers. The following rules will result in files being placed in a ",(0,i.kt)("inlineCode",{parentName:"p"},"devel")," subpackage:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"/usr/include\n/usr/$lib/lib*.so\n/usr/$lib/lib*.a\n/usr/share/man2/\n/usr/share/man3/\n/usr/share/pkgconfig\n/usr/$lib/pkgconfig\n/usr/share/cmake\n/usr/share/vala\n")),(0,i.kt)("p",null,"Note that for some packages, ",(0,i.kt)("inlineCode",{parentName:"p"},"/usr/$lib/lib*.so")," files are not symlinks. In this instance, the main package will be broken with no library files present. This can quickly be determined by looking at the resulting .xml file generated after running the build.\nIf this happens, simply override with ",(0,i.kt)("inlineCode",{parentName:"p"},"patterns")," or set ",(0,i.kt)("inlineCode",{parentName:"p"},"libsplit")," to \u201cno\u201d."),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"A note on static archives"),": Unless it is absolutely unavoidable, you should disable static libraries within your build. This is usually fixed by adding ",(0,i.kt)("inlineCode",{parentName:"p"},"--disable-static")," to your configure routine. If ",(0,i.kt)("inlineCode",{parentName:"p"},"*.a")," files are shown in your packaging request, it will be\nquestioned, as they can pose a greater security risk if packages link against these static archives."),(0,i.kt)("h3",{id:"the-docs-subpackage"},"The docs subpackage"),(0,i.kt)("p",null,"Currently there is only one pattern which is forced into a ",(0,i.kt)("inlineCode",{parentName:"p"},"docs")," subpackage:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"/usr/share/gtk-doc\n")),(0,i.kt)("p",null,"If required, you can use ",(0,i.kt)("inlineCode",{parentName:"p"},"patterns")," to move other files into the ",(0,i.kt)("inlineCode",{parentName:"p"},"docs")," subpackage, making it smaller."),(0,i.kt)("h3",{id:"the-32bit-subpackage"},"The 32bit subpackage"),(0,i.kt)("p",null,"This subpackage is only generated during an ",(0,i.kt)("inlineCode",{parentName:"p"},"emul32")," build. The following paths will automatically be placed into a ",(0,i.kt)("inlineCode",{parentName:"p"},"32bit")," subpackage"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"/usr/lib32/lib*.so\n/usr/lib32/lib*.so.*\n/usr/lib32/lib*.a\n")),(0,i.kt)("p",null,"Note the same static archive rules apply to ",(0,i.kt)("inlineCode",{parentName:"p"},"32bit")," packages. These packages aren\u2019t as heavily split as we try to discourage their use, though they must be provided in some instances."),(0,i.kt)("h3",{id:"the-utils-subpackage"},"The utils subpackage"),(0,i.kt)("p",null,"This is not an automatic subpackage, you must use ",(0,i.kt)("inlineCode",{parentName:"p"},"patterns")," to utilise it. It is provided for instances that it may not be suitable to have binaries present, i.e. for a library package."),(0,i.kt)("h2",{id:"maintenance"},"Maintenance"),(0,i.kt)("p",null,"When submitting a changed ",(0,i.kt)("inlineCode",{parentName:"p"},"package.yml"),", it must be accompanied by its corresponding ",(0,i.kt)("inlineCode",{parentName:"p"},"pspec_*.xml")," file, which was generated at build time. This machine file allows the repository maintainers to evaluate the package condition."),(0,i.kt)("p",null,"When providing a new version of a package, or a fix, always ensure you increment the ",(0,i.kt)("inlineCode",{parentName:"p"},"release")," number by 1. This ensures that users of your package are correctly updated to the latest version."),(0,i.kt)("p",null,"Never submit a package without having first tested it, and ensuring it builds within ",(0,i.kt)("inlineCode",{parentName:"p"},"solbuild"),", a clean chroot environment."),(0,i.kt)("h2",{id:"licenses"},"Licenses"),(0,i.kt)("p",null,"All new packages or updates to packages should abide by the ",(0,i.kt)("a",{parentName:"p",href:"https://spdx.org/licenses/"},"SPDX 3.x")," definitions, with the following policy:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"-only")," licenses, such as ",(0,i.kt)("inlineCode",{parentName:"li"},"GPL-2.0-only"),", should ",(0,i.kt)("strong",{parentName:"li"},"only be declared"),' as such when the upstream explicitly states "only", otherwise it should always be ',(0,i.kt)("inlineCode",{parentName:"li"},"-or-later"),".")),(0,i.kt)("h2",{id:"build-dependencies"},"Build dependencies"),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("p",{parentName:"admonition"},"Build dependencies should be listed in the following order in ",(0,i.kt)("inlineCode",{parentName:"p"},"package.yml"),"\npkgconfig dependencies in alphabetical order\nexplicitly named dependencies in alphabetical order"),(0,i.kt)("p",{parentName:"admonition"},"Example:"),(0,i.kt)("pre",{parentName:"admonition"},(0,i.kt)("code",{parentName:"pre",className:"language-yaml"},"builddeps :\n - pkgconfig(ayatana-appindicator-0.1)\n - pkgconfig(dri)\n - pkgconfig(gtk+-3.0)\n - pkgconfig(libnotify)\n - pkgconfig(libpcsclite)\n - pkgconfig(pango)\n - pkgconfig(python3)\n - git\n - python-poetry\n - swig\n"))),(0,i.kt)("h3",{id:"background"},"Background"),(0,i.kt)("p",null,"Most software packages that you build will, in one way or another, depend on another software package to provide specific functionality. This is usually achieved by using a library."),(0,i.kt)("p",null,"Any package that is submitted to our repositories is always built in a clean chroot environment. Therefore, any dependencies required to build that package in a reproducible and sane fashion must be listed."),(0,i.kt)("p",null,"This is achieved by populating the ",(0,i.kt)("inlineCode",{parentName:"p"},"builddeps")," key with a list of build dependencies. We support two kinds of build dependencies: explicitly named, or ",(0,i.kt)("inlineCode",{parentName:"p"},"pkgconfig")," dependencies."),(0,i.kt)("p",null,"We prefer the use of ",(0,i.kt)("inlineCode",{parentName:"p"},"pkgconfig")," dependencies. Most modern software will use the ",(0,i.kt)("inlineCode",{parentName:"p"},"pkg-config")," tool (package configuration) to determine which files are required to build the current software. This may include compiler flags, library to link against and where the package headers are located."),(0,i.kt)("p",null,"An obvious advantage to supporting ",(0,i.kt)("inlineCode",{parentName:"p"},"pkgconfig")," dependencies is that there is a 1:1 mapping between the name requested by the build and the name used within the ",(0,i.kt)("inlineCode",{parentName:"p"},"package.yml"),". Instead of trying to hunt down the package providing that dependency, you simply list the same name. Any package in the repository will export information about the ",(0,i.kt)("inlineCode",{parentName:"p"},".pc")," files (for ",(0,i.kt)("inlineCode",{parentName:"p"},"pkg-config"),") it contains, enabling you to use those as a build dependency."),(0,i.kt)("p",null,"A secondary advantage is that this allows for easily switching or replacing a providing package. When no ",(0,i.kt)("inlineCode",{parentName:"p"},"pkgconfig")," name is available (some packages do not provide these, or it doesn\u2019t make sense for them to), you\nmay use the explicit package name. Always ensure you select the correct package, i.e. the ",(0,i.kt)("inlineCode",{parentName:"p"},"-devel")," subpackage. This provides the necessary symlinks and headers to build packages."),(0,i.kt)("h3",{id:"finding-what-package-provides-a-dependency-if-any"},"Finding what package provides a dependency (if any)"),(0,i.kt)("p",null,"The script ",(0,i.kt)("inlineCode",{parentName:"p"},"common/Scripts/epcsearch.py")," is used to find packages that satisfy build dependencies. We recommend making an alias for your shell for this."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"alias epcsearch='~/packaging/common/Scripts/epcsearch.py'\n")),(0,i.kt)("p",null,"As an example, if you know a package has a build dependency of ",(0,i.kt)("inlineCode",{parentName:"p"},"gtk+-3.0")," you would run:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"epcsearch gtk+-3.0\n")),(0,i.kt)("p",null,"This will output:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"epcsearch gtk+-3.0\npkgconfig(gtk+-3.0) found in: libgtk-3-devel\npkgconfig32(gtk+-3.0) found in: libgtk-3-32bit-devel\n")),(0,i.kt)("p",null,"You can also determine if there are pkgconfigs available from a -devel package by doing ",(0,i.kt)("inlineCode",{parentName:"p"},"eopkg info (name)")," and looking for the ",(0,i.kt)("inlineCode",{parentName:"p"},"Provides")," key."),(0,i.kt)("p",null,"Example:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"eopkg info libgtk-3-devel\n")),(0,i.kt)("p",null,"In output:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"Provides: pkgconfig(gtk+-3.0) pkgconfig(gdk-3.0) pkgconfig(gdk-wayland-3.0) pkgconfig(gail-3.0) pkgconfig(gdk-x11-3.0) pkgconfig(gtk+-unix-print-3.0)\npkgconfig(gtk+-wayland-3.0) pkgconfig(gtk+-x11-3.0)\n")),(0,i.kt)("h3",{id:"using-pkgconfig-dependencies"},"Using pkgconfig dependencies"),(0,i.kt)("p",null,"In the ",(0,i.kt)("inlineCode",{parentName:"p"},"builddeps")," list, simply use the ",(0,i.kt)("inlineCode",{parentName:"p"},"pkgconfig(name)")," syntax. For example, to add gtk+-3.0 to the build dependencies, we would do the following:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml"},"builddeps:\n - pkgconfig(gtk+-3.0)\n")),(0,i.kt)("p",null,"At build time the appropriate provider package is selected, in this instance ",(0,i.kt)("inlineCode",{parentName:"p"},"libgtk-3-devel")),(0,i.kt)("h3",{id:"using-explicitly-named-dependencies"},"Using explicitly named dependencies"),(0,i.kt)("p",null,"When there is not a ",(0,i.kt)("inlineCode",{parentName:"p"},"pkgconfig")," dependency available, use an explicitly named dependency.\nSimply list the package name."),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("p",{parentName:"admonition"},"When a ",(0,i.kt)("inlineCode",{parentName:"p"},"pkgconfig")," dependency is available you will be asked to use that instead.")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml"},"builddeps:\n - stk-devel\n")),(0,i.kt)("h2",{id:"runtime-dependencies"},"Runtime dependencies"),(0,i.kt)("p",null,"Runtime dependencies are extra packages that a package needs in order to function correctly. A common example of this is other libraries. Solus ",(0,i.kt)("inlineCode",{parentName:"p"},"eopkg")," packages will automatically add any binary dependencies at\nruntime, so that you do not have to."),(0,i.kt)("p",null,"All ",(0,i.kt)("inlineCode",{parentName:"p"},"devel")," subpackages automatically depend on their parent package. On top of this, if they provide a ",(0,i.kt)("inlineCode",{parentName:"p"},".pc")," pkg-config file, we export this information, and automatically determine the packages this particular\npackage would need to be able to build against correctly. As such, the majority of dependencies for builds are automatically resolved."),(0,i.kt)("p",null,"In certain instances, binary dependencies aren\u2019t enough. An example of this might be an extra Python package, or a font, something that is not accounted for by binary checks."),(0,i.kt)("p",null,"To account for this, you may add extra explicit runtime dependencies to your package. These are taken from the optional ",(0,i.kt)("inlineCode",{parentName:"p"},"rundeps")," ypkg key."),(0,i.kt)("p",null,"This key uses the ",(0,i.kt)("inlineCode",{parentName:"p"},"dict(s)")," type, and the default key is the current package ",(0,i.kt)("inlineCode",{parentName:"p"},"name"),". You may express a different subpackage to apply dependencies to by using that name as a key, i.e. ",(0,i.kt)("inlineCode",{parentName:"p"},"devel"),", or ",(0,i.kt)("inlineCode",{parentName:"p"},"docs"),"."),(0,i.kt)("p",null,"This would add the \u201cpython-gobject\u201d runtime dependency to the main package:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml"},"rundeps:\n - python-gobject\n")),(0,i.kt)("p",null,"This would add the same dependency, as well as adding it to the ",(0,i.kt)("inlineCode",{parentName:"p"},"devel")," subpackage:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml"},"rundeps:\n - python-gobject\n - devel: python-gobject\n")),(0,i.kt)("p",null,"Remember this uses the ",(0,i.kt)("inlineCode",{parentName:"p"},"dict(s)")," type, which is very flexible. You can equally express this as follows (adding more deps as an example):"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml"},"rundeps:\n - python-gobject\n - devel:\n - somepackage\n - someotherpackage\n")),(0,i.kt)("h2",{id:"patching--extra-files"},"Patching / extra files"),(0,i.kt)("p",null,"Files that may be required during the build can be accessed via the ",(0,i.kt)("inlineCode",{parentName:"p"},"$pkgfiles")," variable. Note that you must store your files in the ",(0,i.kt)("inlineCode",{parentName:"p"},"./files")," directory relative to your ",(0,i.kt)("inlineCode",{parentName:"p"},"package.yml")),(0,i.kt)("p",null,"Both patches and extra files (such as systemd units) are stored in this directory. Note that if your patch is to address a ",(0,i.kt)("strong",{parentName:"p"},"CVE"),", you must use the following naming scheme: ",(0,i.kt)("inlineCode",{parentName:"p"},"./files/security/cve-xxxx-xxxx.patch")),(0,i.kt)("p",null,"Where ",(0,i.kt)("inlineCode",{parentName:"p"},"xxxx-xxxx")," is replaced with the full CVE ID. Complying with this simple rule ensures that we can know at any time the security status of packages when using tools such as ",(0,i.kt)("inlineCode",{parentName:"p"},"cve-check-tool")),(0,i.kt)("p",null,"Solus tooling allows the use of ",(0,i.kt)("inlineCode",{parentName:"p"},"./files/security/cve-xxxx-xxxx.nopatch")," (which isn't applied in the build) to indicate that a CVE has been validated as not applicable to the Solus package. This can be because another patch resolves this CVE, or there is a false positive via ",(0,i.kt)("inlineCode",{parentName:"p"},"cve-check-tool"),". The contents of the file can describe why it doesn't apply without requiring a patch (i.e. Resolved by cve-xxxx-xxxx.patch)."),(0,i.kt)("h3",{id:"applying-a-patch"},"Applying a patch"),(0,i.kt)("p",null,"It is common practice to apply the patch file(s) within the ",(0,i.kt)("inlineCode",{parentName:"p"},"setup")," section of your build staging. We can achieve this using the ",(0,i.kt)("inlineCode",{parentName:"p"},"%patch")," macro, and the ",(0,i.kt)("inlineCode",{parentName:"p"},"$pkgfiles")," variable. In this example, the required file is located\nat ",(0,i.kt)("inlineCode",{parentName:"p"},"./files/0002-Sample-commit-2.patch")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"%patch -p1 -i $pkgfiles/0002-Sample-commit-2.patch\n")),(0,i.kt)("p",null,"Note you use the macro as you would normally use the patch command, however use of the macro ensures it performs a clean batch-mode patch."),(0,i.kt)("p",null,"If you are using compressed patches, i.e. for the ",(0,i.kt)("inlineCode",{parentName:"p"},"bash")," or ",(0,i.kt)("inlineCode",{parentName:"p"},"readline")," packages, you can pipe the call through ",(0,i.kt)("inlineCode",{parentName:"p"},"zcat")," or similar:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"zcat $pkgfiles/bash43-032.gz | %patch -p0\n")),(0,i.kt)("h4",{id:"handling-multiple-patches"},"Handling multiple patches"),(0,i.kt)("p",null,"In the event you need to apply multiple patches, such as a multitude of CVE patches, it may be sensible to use our ",(0,i.kt)("inlineCode",{parentName:"p"},"%apply_patches")," macro, which will apply all the patches listed in a ",(0,i.kt)("inlineCode",{parentName:"p"},"series")," file in your package's ",(0,i.kt)("inlineCode",{parentName:"p"},"./files")," folder. Example below:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"security/cve-xxxx-xxxx.patch\nfix-silliness.patch\n")),(0,i.kt)("p",null,"Both of the files above will be applied using ",(0,i.kt)("inlineCode",{parentName:"p"},"-p1"),". If you need to use stripping num, like ",(0,i.kt)("inlineCode",{parentName:"p"},"-p4"),", you can do something like:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"security/cve-xxxx-xxxx.patch -p4\nfix-silliness.patch\n")),(0,i.kt)("h2",{id:"installing-extra-files"},"Installing extra files"),(0,i.kt)("p",null,"We recommend using patches where possible first, as they ensure correct maintenance and will be updated across package versions. If you must install extra files into the directory, please use the ",(0,i.kt)("inlineCode",{parentName:"p"},"install"),"\ncommand, ensuring you set the correct permissions. Again, files are accessible from the ",(0,i.kt)("inlineCode",{parentName:"p"},"./files/")," directory, relative to ",(0,i.kt)("inlineCode",{parentName:"p"},"package.yml"),"."),(0,i.kt)("p",null,"This is an example of installing a custom profile file, seen in the ",(0,i.kt)("inlineCode",{parentName:"p"},"bash")," package:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"install -m 0644 $pkgfiles/profile $installdir/etc/profile\n")),(0,i.kt)("h2",{id:"patterns"},"Patterns"),(0,i.kt)("p",null,"In most instances, ",(0,i.kt)("inlineCode",{parentName:"p"},"ypkg")," will assign the correct location for files, whether it be in the main ",(0,i.kt)("inlineCode",{parentName:"p"},"name")," package, or a subpackage. However there may be instances where the default does not match the intended behaviour."),(0,i.kt)("p",null,"In these instances it is possible to override the default assignment by way of patterns. These are simply a list of paths or globs to ensure a particular file, or set of files, end up in the desired location."),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"patterns")," key expects a ",(0,i.kt)("inlineCode",{parentName:"p"},"dict(s)")," argument. The default key for each pattern is assumed to be the ",(0,i.kt)("inlineCode",{parentName:"p"},"name")," of the package, so omitting the name would place files into the main package. The value should be a\npath or pattern you wish to match, ensuring files go to a specific location."),(0,i.kt)("p",null,"In this example from libjpeg-turbo, we move all documentation into the ",(0,i.kt)("inlineCode",{parentName:"p"},"docs")," subpackage:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"patterns:\n - docs: [/usr/share/man]\n")),(0,i.kt)("p",null,"This example, taken from the wayland package, ensures the binaries from ",(0,i.kt)("inlineCode",{parentName:"p"},"/usr/bin")," and the ",(0,i.kt)("inlineCode",{parentName:"p"},"/usr/share/wayland")," are located in the ",(0,i.kt)("inlineCode",{parentName:"p"},"devel")," subpackage:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"patterns:\n - devel:\n - /usr/bin\n - /usr/share/wayland\n")),(0,i.kt)("h2",{id:"replace--rename"},"Replace / rename"),(0,i.kt)("p",null,"In some situations, it may be required to replace one package with another, or to rename an existing package. In these instances you should coordinate with a repository maintainer to ensure the replaced package is\nmarked ",(0,i.kt)("strong",{parentName:"p"},"Obsolete")," within the index. This will ensure correct upgrade paths for users."),(0,i.kt)("p",null,"Note that to retire a package, you must also coordinate with a repository maintainer. An ",(0,i.kt)("strong",{parentName:"p"},"Obsolete")," package is removed by the package manager when the user upgrades. As such, correct upgrade paths need to be\nestablished."),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"replaces")," ypkg key uses the ",(0,i.kt)("inlineCode",{parentName:"p"},"dict(s)")," type, and the default key is assumed to be the current package ",(0,i.kt)("inlineCode",{parentName:"p"},"name"),"."),(0,i.kt)("p",null,"In this example, we rename the ",(0,i.kt)("inlineCode",{parentName:"p"},"libgeoclue*")," packages to use the correct names, and ensure a working upgrade path."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"replaces:\n - devel: libgeoclue-devel\n - libgeoclue\n")),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"name")," of this package is ",(0,i.kt)("strong",{parentName:"p"},"geoclue"),", and the new package names are now:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"geoclue"),(0,i.kt)("li",{parentName:"ul"},"geoclue-devel")),(0,i.kt)("p",null,"Given the ",(0,i.kt)("inlineCode",{parentName:"p"},"replaces")," values above, ",(0,i.kt)("strong",{parentName:"p"},"geoclue")," now replaces ",(0,i.kt)("strong",{parentName:"p"},"libgeoclue"),", and ",(0,i.kt)("strong",{parentName:"p"},"geoclue-devel")," replaces ",(0,i.kt)("strong",{parentName:"p"},"libgeoclue-devel"),". This is entirely transparent to the user, with a seamless update replacing the old\npackages with the new renamed packages."),(0,i.kt)("p",null,"The repository maintainer marked the old names as ",(0,i.kt)("strong",{parentName:"p"},"Obsolete")," in the index."))}u.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[3783],{3905:(e,a,t)=>{t.d(a,{Zo:()=>c,kt:()=>g});var n=t(7294);function i(e,a,t){return a in e?Object.defineProperty(e,a,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[a]=t,e}function l(e,a){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),t.push.apply(t,n)}return t}function p(e){for(var a=1;a=0||(i[t]=e[t]);return i}(e,a);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(i[t]=e[t])}return i}var o=n.createContext({}),s=function(e){var a=n.useContext(o),t=a;return e&&(t="function"==typeof e?e(a):p(p({},a),e)),t},c=function(e){var a=s(e.components);return n.createElement(o.Provider,{value:a},e.children)},d="mdxType",u={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},k=n.forwardRef((function(e,a){var t=e.components,i=e.mdxType,l=e.originalType,o=e.parentName,c=r(e,["components","mdxType","originalType","parentName"]),d=s(t),k=i,g=d["".concat(o,".").concat(k)]||d[k]||u[k]||l;return t?n.createElement(g,p(p({ref:a},c),{},{components:t})):n.createElement(g,p({ref:a},c))}));function g(e,a){var t=arguments,i=a&&a.mdxType;if("string"==typeof e||i){var l=t.length,p=new Array(l);p[0]=k;var r={};for(var o in a)hasOwnProperty.call(a,o)&&(r[o]=a[o]);r.originalType=e,r[d]="string"==typeof e?e:i,p[1]=r;for(var s=2;s{t.r(a),t.d(a,{assets:()=>o,contentTitle:()=>p,default:()=>u,frontMatter:()=>l,metadata:()=>r,toc:()=>s});var n=t(7462),i=(t(7294),t(3905));const l={title:"Packaging Practices",summary:"Learning the best packaging practices"},p="Packaging Practices",r={unversionedId:"packaging/packaging-practices",id:"packaging/packaging-practices",title:"Packaging Practices",description:"The primary goal of ypkg is ease of maintenance. In order to do so we ensure packages in the binary repository adhere to a strict set of conventions and practices.",source:"@site/docs/packaging/packaging-practices.md",sourceDirName:"packaging",slug:"/packaging/packaging-practices",permalink:"/docs/packaging/packaging-practices",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/packaging-practices.md",tags:[],version:"current",lastUpdatedAt:1695222528,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Packaging Practices",summary:"Learning the best packaging practices"},sidebar:"packagingSidebar",previous:{title:"Package YAML",permalink:"/docs/packaging/package.yml"},next:{title:"Procedures",permalink:"/docs/category/procedures"}},o={},s=[{value:"Package naming",id:"package-naming",level:2},{value:"The devel subpackage",id:"the-devel-subpackage",level:3},{value:"The docs subpackage",id:"the-docs-subpackage",level:3},{value:"The 32bit subpackage",id:"the-32bit-subpackage",level:3},{value:"The utils subpackage",id:"the-utils-subpackage",level:3},{value:"Maintenance",id:"maintenance",level:2},{value:"Licenses",id:"licenses",level:2},{value:"Build dependencies",id:"build-dependencies",level:2},{value:"Background",id:"background",level:3},{value:"Finding what package provides a dependency (if any)",id:"finding-what-package-provides-a-dependency-if-any",level:3},{value:"Using pkgconfig dependencies",id:"using-pkgconfig-dependencies",level:3},{value:"Using explicitly named dependencies",id:"using-explicitly-named-dependencies",level:3},{value:"Runtime dependencies",id:"runtime-dependencies",level:2},{value:"Patching / extra files",id:"patching--extra-files",level:2},{value:"Applying a patch",id:"applying-a-patch",level:3},{value:"Handling multiple patches",id:"handling-multiple-patches",level:4},{value:"Installing extra files",id:"installing-extra-files",level:2},{value:"Patterns",id:"patterns",level:2},{value:"Replace / rename",id:"replace--rename",level:2}],c={toc:s},d="wrapper";function u(e){let{components:a,...t}=e;return(0,i.kt)(d,(0,n.Z)({},c,t,{components:a,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"packaging-practices"},"Packaging Practices"),(0,i.kt)("p",null,"The primary goal of ",(0,i.kt)("inlineCode",{parentName:"p"},"ypkg")," is ease of maintenance. In order to do so we ensure packages in the binary repository adhere to a strict set of conventions and practices."),(0,i.kt)("p",null,"The next few sections will detail these."),(0,i.kt)("h2",{id:"package-naming"},"Package naming"),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"ypkg")," tool does not allow for custom subpackages or subpackage naming, and will enforce its own policy. This can be eased somewhat through the use of ",(0,i.kt)("inlineCode",{parentName:"p"},"patterns"),", however the available subpackage names are limited."),(0,i.kt)("p",null,"We request you use (where possible) the upstream source name for your package. Subpackage names (when generated) are constructed by using the ",(0,i.kt)("inlineCode",{parentName:"p"},"name")," value first, then applying the subpackage name as such:"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"pkgname-$subpackage")),(0,i.kt)("p",null,"Subpackages are fully automatic with ",(0,i.kt)("inlineCode",{parentName:"p"},"ypkg"),", and are created based on file patterns. All subpackages automatically depend on the main package, to ensure correct operation. In the following explanations, ",(0,i.kt)("inlineCode",{parentName:"p"},"$lib")," is used to refer to the host library directory, i.e. ",(0,i.kt)("inlineCode",{parentName:"p"},"lib")," or ",(0,i.kt)("inlineCode",{parentName:"p"},"lib64")," (or ",(0,i.kt)("inlineCode",{parentName:"p"},"lib32")," on ",(0,i.kt)("inlineCode",{parentName:"p"},"emul32")," builds)."),(0,i.kt)("p",null,"For the libraries / packages of the following programming languages, you should typically use the following template for it."),(0,i.kt)("table",null,(0,i.kt)("thead",{parentName:"table"},(0,i.kt)("tr",{parentName:"thead"},(0,i.kt)("th",{parentName:"tr",align:null},"Language"),(0,i.kt)("th",{parentName:"tr",align:null},"Prefix"),(0,i.kt)("th",{parentName:"tr",align:null},"Example"))),(0,i.kt)("tbody",{parentName:"table"},(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"Haskell"),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"haskell-")),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"text-binary")," would be ",(0,i.kt)("inlineCode",{parentName:"td"},"haskell-text-binary"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"Perl"),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"perl-")),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"algorithm-diff")," would be ",(0,i.kt)("inlineCode",{parentName:"td"},"perl-algorithm-diff"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"Python"),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"python-")),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"wikipedia")," would be ",(0,i.kt)("inlineCode",{parentName:"td"},"python-wikipedia")," ",(0,i.kt)("strong",{parentName:"td"},"even if only Python3 is enabled"))),(0,i.kt)("tr",{parentName:"tbody"},(0,i.kt)("td",{parentName:"tr",align:null},"Ruby"),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"ruby-")),(0,i.kt)("td",{parentName:"tr",align:null},(0,i.kt)("inlineCode",{parentName:"td"},"gssapi")," would be ",(0,i.kt)("inlineCode",{parentName:"td"},"ruby-gssapi"))))),(0,i.kt)("h3",{id:"the-devel-subpackage"},"The devel subpackage"),(0,i.kt)("p",null,"This is invariably created for packages that provide libraries and development headers. The following rules will result in files being placed in a ",(0,i.kt)("inlineCode",{parentName:"p"},"devel")," subpackage:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"/usr/include\n/usr/$lib/lib*.so\n/usr/$lib/lib*.a\n/usr/share/man2/\n/usr/share/man3/\n/usr/share/pkgconfig\n/usr/$lib/pkgconfig\n/usr/share/cmake\n/usr/share/vala\n")),(0,i.kt)("p",null,"Note that for some packages, ",(0,i.kt)("inlineCode",{parentName:"p"},"/usr/$lib/lib*.so")," files are not symlinks. In this instance, the main package will be broken with no library files present. This can quickly be determined by looking at the resulting .xml file generated after running the build.\nIf this happens, simply override with ",(0,i.kt)("inlineCode",{parentName:"p"},"patterns")," or set ",(0,i.kt)("inlineCode",{parentName:"p"},"libsplit")," to \u201cno\u201d."),(0,i.kt)("p",null,(0,i.kt)("strong",{parentName:"p"},"A note on static archives"),": Unless it is absolutely unavoidable, you should disable static libraries within your build. This is usually fixed by adding ",(0,i.kt)("inlineCode",{parentName:"p"},"--disable-static")," to your configure routine. If ",(0,i.kt)("inlineCode",{parentName:"p"},"*.a")," files are shown in your packaging request, it will be\nquestioned, as they can pose a greater security risk if packages link against these static archives."),(0,i.kt)("h3",{id:"the-docs-subpackage"},"The docs subpackage"),(0,i.kt)("p",null,"Currently there is only one pattern which is forced into a ",(0,i.kt)("inlineCode",{parentName:"p"},"docs")," subpackage:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"/usr/share/gtk-doc\n")),(0,i.kt)("p",null,"If required, you can use ",(0,i.kt)("inlineCode",{parentName:"p"},"patterns")," to move other files into the ",(0,i.kt)("inlineCode",{parentName:"p"},"docs")," subpackage, making it smaller."),(0,i.kt)("h3",{id:"the-32bit-subpackage"},"The 32bit subpackage"),(0,i.kt)("p",null,"This subpackage is only generated during an ",(0,i.kt)("inlineCode",{parentName:"p"},"emul32")," build. The following paths will automatically be placed into a ",(0,i.kt)("inlineCode",{parentName:"p"},"32bit")," subpackage"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"/usr/lib32/lib*.so\n/usr/lib32/lib*.so.*\n/usr/lib32/lib*.a\n")),(0,i.kt)("p",null,"Note the same static archive rules apply to ",(0,i.kt)("inlineCode",{parentName:"p"},"32bit")," packages. These packages aren\u2019t as heavily split as we try to discourage their use, though they must be provided in some instances."),(0,i.kt)("h3",{id:"the-utils-subpackage"},"The utils subpackage"),(0,i.kt)("p",null,"This is not an automatic subpackage, you must use ",(0,i.kt)("inlineCode",{parentName:"p"},"patterns")," to utilise it. It is provided for instances that it may not be suitable to have binaries present, i.e. for a library package."),(0,i.kt)("h2",{id:"maintenance"},"Maintenance"),(0,i.kt)("p",null,"When submitting a changed ",(0,i.kt)("inlineCode",{parentName:"p"},"package.yml"),", it must be accompanied by its corresponding ",(0,i.kt)("inlineCode",{parentName:"p"},"pspec_*.xml")," file, which was generated at build time. This machine file allows the repository maintainers to evaluate the package condition."),(0,i.kt)("p",null,"When providing a new version of a package, or a fix, always ensure you increment the ",(0,i.kt)("inlineCode",{parentName:"p"},"release")," number by 1. This ensures that users of your package are correctly updated to the latest version."),(0,i.kt)("p",null,"Never submit a package without having first tested it, and ensuring it builds within ",(0,i.kt)("inlineCode",{parentName:"p"},"solbuild"),", a clean chroot environment."),(0,i.kt)("h2",{id:"licenses"},"Licenses"),(0,i.kt)("p",null,"All new packages or updates to packages should abide by the ",(0,i.kt)("a",{parentName:"p",href:"https://spdx.org/licenses/"},"SPDX 3.x")," definitions, with the following policy:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"-only")," licenses, such as ",(0,i.kt)("inlineCode",{parentName:"li"},"GPL-2.0-only"),", should ",(0,i.kt)("strong",{parentName:"li"},"only be declared"),' as such when the upstream explicitly states "only", otherwise it should always be ',(0,i.kt)("inlineCode",{parentName:"li"},"-or-later"),".")),(0,i.kt)("h2",{id:"build-dependencies"},"Build dependencies"),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("p",{parentName:"admonition"},"Build dependencies should be listed in the following order in ",(0,i.kt)("inlineCode",{parentName:"p"},"package.yml"),"\npkgconfig dependencies in alphabetical order\nexplicitly named dependencies in alphabetical order"),(0,i.kt)("p",{parentName:"admonition"},"Example:"),(0,i.kt)("pre",{parentName:"admonition"},(0,i.kt)("code",{parentName:"pre",className:"language-yaml"},"builddeps :\n - pkgconfig(ayatana-appindicator-0.1)\n - pkgconfig(dri)\n - pkgconfig(gtk+-3.0)\n - pkgconfig(libnotify)\n - pkgconfig(libpcsclite)\n - pkgconfig(pango)\n - pkgconfig(python3)\n - git\n - python-poetry\n - swig\n"))),(0,i.kt)("h3",{id:"background"},"Background"),(0,i.kt)("p",null,"Most software packages that you build will, in one way or another, depend on another software package to provide specific functionality. This is usually achieved by using a library."),(0,i.kt)("p",null,"Any package that is submitted to our repositories is always built in a clean chroot environment. Therefore, any dependencies required to build that package in a reproducible and sane fashion must be listed."),(0,i.kt)("p",null,"This is achieved by populating the ",(0,i.kt)("inlineCode",{parentName:"p"},"builddeps")," key with a list of build dependencies. We support two kinds of build dependencies: explicitly named, or ",(0,i.kt)("inlineCode",{parentName:"p"},"pkgconfig")," dependencies."),(0,i.kt)("p",null,"We prefer the use of ",(0,i.kt)("inlineCode",{parentName:"p"},"pkgconfig")," dependencies. Most modern software will use the ",(0,i.kt)("inlineCode",{parentName:"p"},"pkg-config")," tool (package configuration) to determine which files are required to build the current software. This may include compiler flags, library to link against and where the package headers are located."),(0,i.kt)("p",null,"An obvious advantage to supporting ",(0,i.kt)("inlineCode",{parentName:"p"},"pkgconfig")," dependencies is that there is a 1:1 mapping between the name requested by the build and the name used within the ",(0,i.kt)("inlineCode",{parentName:"p"},"package.yml"),". Instead of trying to hunt down the package providing that dependency, you simply list the same name. Any package in the repository will export information about the ",(0,i.kt)("inlineCode",{parentName:"p"},".pc")," files (for ",(0,i.kt)("inlineCode",{parentName:"p"},"pkg-config"),") it contains, enabling you to use those as a build dependency."),(0,i.kt)("p",null,"A secondary advantage is that this allows for easily switching or replacing a providing package. When no ",(0,i.kt)("inlineCode",{parentName:"p"},"pkgconfig")," name is available (some packages do not provide these, or it doesn\u2019t make sense for them to), you\nmay use the explicit package name. Always ensure you select the correct package, i.e. the ",(0,i.kt)("inlineCode",{parentName:"p"},"-devel")," subpackage. This provides the necessary symlinks and headers to build packages."),(0,i.kt)("h3",{id:"finding-what-package-provides-a-dependency-if-any"},"Finding what package provides a dependency (if any)"),(0,i.kt)("p",null,"The script ",(0,i.kt)("inlineCode",{parentName:"p"},"common/Scripts/epcsearch.py")," is used to find packages that satisfy build dependencies. We recommend making an alias for your shell for this."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"alias epcsearch='~/packaging/common/Scripts/epcsearch.py'\n")),(0,i.kt)("p",null,"As an example, if you know a package has a build dependency of ",(0,i.kt)("inlineCode",{parentName:"p"},"gtk+-3.0")," you would run:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"epcsearch gtk+-3.0\n")),(0,i.kt)("p",null,"This will output:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"epcsearch gtk+-3.0\npkgconfig(gtk+-3.0) found in: libgtk-3-devel\npkgconfig32(gtk+-3.0) found in: libgtk-3-32bit-devel\n")),(0,i.kt)("p",null,"You can also determine if there are pkgconfigs available from a -devel package by doing ",(0,i.kt)("inlineCode",{parentName:"p"},"eopkg info (name)")," and looking for the ",(0,i.kt)("inlineCode",{parentName:"p"},"Provides")," key."),(0,i.kt)("p",null,"Example:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"eopkg info libgtk-3-devel\n")),(0,i.kt)("p",null,"In output:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"Provides: pkgconfig(gtk+-3.0) pkgconfig(gdk-3.0) pkgconfig(gdk-wayland-3.0) pkgconfig(gail-3.0) pkgconfig(gdk-x11-3.0) pkgconfig(gtk+-unix-print-3.0)\npkgconfig(gtk+-wayland-3.0) pkgconfig(gtk+-x11-3.0)\n")),(0,i.kt)("h3",{id:"using-pkgconfig-dependencies"},"Using pkgconfig dependencies"),(0,i.kt)("p",null,"In the ",(0,i.kt)("inlineCode",{parentName:"p"},"builddeps")," list, simply use the ",(0,i.kt)("inlineCode",{parentName:"p"},"pkgconfig(name)")," syntax. For example, to add gtk+-3.0 to the build dependencies, we would do the following:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml"},"builddeps:\n - pkgconfig(gtk+-3.0)\n")),(0,i.kt)("p",null,"At build time the appropriate provider package is selected, in this instance ",(0,i.kt)("inlineCode",{parentName:"p"},"libgtk-3-devel")),(0,i.kt)("h3",{id:"using-explicitly-named-dependencies"},"Using explicitly named dependencies"),(0,i.kt)("p",null,"When there is not a ",(0,i.kt)("inlineCode",{parentName:"p"},"pkgconfig")," dependency available, use an explicitly named dependency.\nSimply list the package name."),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("p",{parentName:"admonition"},"When a ",(0,i.kt)("inlineCode",{parentName:"p"},"pkgconfig")," dependency is available you will be asked to use that instead.")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml"},"builddeps:\n - stk-devel\n")),(0,i.kt)("h2",{id:"runtime-dependencies"},"Runtime dependencies"),(0,i.kt)("p",null,"Runtime dependencies are extra packages that a package needs in order to function correctly. A common example of this is other libraries. Solus ",(0,i.kt)("inlineCode",{parentName:"p"},"eopkg")," packages will automatically add any binary dependencies at\nruntime, so that you do not have to."),(0,i.kt)("p",null,"All ",(0,i.kt)("inlineCode",{parentName:"p"},"devel")," subpackages automatically depend on their parent package. On top of this, if they provide a ",(0,i.kt)("inlineCode",{parentName:"p"},".pc")," pkg-config file, we export this information, and automatically determine the packages this particular\npackage would need to be able to build against correctly. As such, the majority of dependencies for builds are automatically resolved."),(0,i.kt)("p",null,"In certain instances, binary dependencies aren\u2019t enough. An example of this might be an extra Python package, or a font, something that is not accounted for by binary checks."),(0,i.kt)("p",null,"To account for this, you may add extra explicit runtime dependencies to your package. These are taken from the optional ",(0,i.kt)("inlineCode",{parentName:"p"},"rundeps")," ypkg key."),(0,i.kt)("p",null,"This key uses the ",(0,i.kt)("inlineCode",{parentName:"p"},"dict(s)")," type, and the default key is the current package ",(0,i.kt)("inlineCode",{parentName:"p"},"name"),". You may express a different subpackage to apply dependencies to by using that name as a key, i.e. ",(0,i.kt)("inlineCode",{parentName:"p"},"devel"),", or ",(0,i.kt)("inlineCode",{parentName:"p"},"docs"),"."),(0,i.kt)("p",null,"This would add the \u201cpython-gobject\u201d runtime dependency to the main package:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml"},"rundeps:\n - python-gobject\n")),(0,i.kt)("p",null,"This would add the same dependency, as well as adding it to the ",(0,i.kt)("inlineCode",{parentName:"p"},"devel")," subpackage:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml"},"rundeps:\n - python-gobject\n - devel: python-gobject\n")),(0,i.kt)("p",null,"Remember this uses the ",(0,i.kt)("inlineCode",{parentName:"p"},"dict(s)")," type, which is very flexible. You can equally express this as follows (adding more deps as an example):"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml"},"rundeps:\n - python-gobject\n - devel:\n - somepackage\n - someotherpackage\n")),(0,i.kt)("h2",{id:"patching--extra-files"},"Patching / extra files"),(0,i.kt)("p",null,"Files that may be required during the build can be accessed via the ",(0,i.kt)("inlineCode",{parentName:"p"},"$pkgfiles")," variable. Note that you must store your files in the ",(0,i.kt)("inlineCode",{parentName:"p"},"./files")," directory relative to your ",(0,i.kt)("inlineCode",{parentName:"p"},"package.yml")),(0,i.kt)("p",null,"Both patches and extra files (such as systemd units) are stored in this directory. Note that if your patch is to address a ",(0,i.kt)("strong",{parentName:"p"},"CVE"),", you must use the following naming scheme: ",(0,i.kt)("inlineCode",{parentName:"p"},"./files/security/cve-xxxx-xxxx.patch")),(0,i.kt)("p",null,"Where ",(0,i.kt)("inlineCode",{parentName:"p"},"xxxx-xxxx")," is replaced with the full CVE ID. Complying with this simple rule ensures that we can know at any time the security status of packages when using tools such as ",(0,i.kt)("inlineCode",{parentName:"p"},"cve-check-tool")),(0,i.kt)("p",null,"Solus tooling allows the use of ",(0,i.kt)("inlineCode",{parentName:"p"},"./files/security/cve-xxxx-xxxx.nopatch")," (which isn't applied in the build) to indicate that a CVE has been validated as not applicable to the Solus package. This can be because another patch resolves this CVE, or there is a false positive via ",(0,i.kt)("inlineCode",{parentName:"p"},"cve-check-tool"),". The contents of the file can describe why it doesn't apply without requiring a patch (i.e. Resolved by cve-xxxx-xxxx.patch)."),(0,i.kt)("h3",{id:"applying-a-patch"},"Applying a patch"),(0,i.kt)("p",null,"It is common practice to apply the patch file(s) within the ",(0,i.kt)("inlineCode",{parentName:"p"},"setup")," section of your build staging. We can achieve this using the ",(0,i.kt)("inlineCode",{parentName:"p"},"%patch")," macro, and the ",(0,i.kt)("inlineCode",{parentName:"p"},"$pkgfiles")," variable. In this example, the required file is located\nat ",(0,i.kt)("inlineCode",{parentName:"p"},"./files/0002-Sample-commit-2.patch")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"%patch -p1 -i $pkgfiles/0002-Sample-commit-2.patch\n")),(0,i.kt)("p",null,"Note you use the macro as you would normally use the patch command, however use of the macro ensures it performs a clean batch-mode patch."),(0,i.kt)("p",null,"If you are using compressed patches, i.e. for the ",(0,i.kt)("inlineCode",{parentName:"p"},"bash")," or ",(0,i.kt)("inlineCode",{parentName:"p"},"readline")," packages, you can pipe the call through ",(0,i.kt)("inlineCode",{parentName:"p"},"zcat")," or similar:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"zcat $pkgfiles/bash43-032.gz | %patch -p0\n")),(0,i.kt)("h4",{id:"handling-multiple-patches"},"Handling multiple patches"),(0,i.kt)("p",null,"In the event you need to apply multiple patches, such as a multitude of CVE patches, it may be sensible to use our ",(0,i.kt)("inlineCode",{parentName:"p"},"%apply_patches")," macro, which will apply all the patches listed in a ",(0,i.kt)("inlineCode",{parentName:"p"},"series")," file in your package's ",(0,i.kt)("inlineCode",{parentName:"p"},"./files")," folder. Example below:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"security/cve-xxxx-xxxx.patch\nfix-silliness.patch\n")),(0,i.kt)("p",null,"Both of the files above will be applied using ",(0,i.kt)("inlineCode",{parentName:"p"},"-p1"),". If you need to use stripping num, like ",(0,i.kt)("inlineCode",{parentName:"p"},"-p4"),", you can do something like:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"security/cve-xxxx-xxxx.patch -p4\nfix-silliness.patch\n")),(0,i.kt)("h2",{id:"installing-extra-files"},"Installing extra files"),(0,i.kt)("p",null,"We recommend using patches where possible first, as they ensure correct maintenance and will be updated across package versions. If you must install extra files into the directory, please use the ",(0,i.kt)("inlineCode",{parentName:"p"},"install"),"\ncommand, ensuring you set the correct permissions. Again, files are accessible from the ",(0,i.kt)("inlineCode",{parentName:"p"},"./files/")," directory, relative to ",(0,i.kt)("inlineCode",{parentName:"p"},"package.yml"),"."),(0,i.kt)("p",null,"This is an example of installing a custom profile file, seen in the ",(0,i.kt)("inlineCode",{parentName:"p"},"bash")," package:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"install -m 0644 $pkgfiles/profile $installdir/etc/profile\n")),(0,i.kt)("h2",{id:"patterns"},"Patterns"),(0,i.kt)("p",null,"In most instances, ",(0,i.kt)("inlineCode",{parentName:"p"},"ypkg")," will assign the correct location for files, whether it be in the main ",(0,i.kt)("inlineCode",{parentName:"p"},"name")," package, or a subpackage. However there may be instances where the default does not match the intended behaviour."),(0,i.kt)("p",null,"In these instances it is possible to override the default assignment by way of patterns. These are simply a list of paths or globs to ensure a particular file, or set of files, end up in the desired location."),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"patterns")," key expects a ",(0,i.kt)("inlineCode",{parentName:"p"},"dict(s)")," argument. The default key for each pattern is assumed to be the ",(0,i.kt)("inlineCode",{parentName:"p"},"name")," of the package, so omitting the name would place files into the main package. The value should be a\npath or pattern you wish to match, ensuring files go to a specific location."),(0,i.kt)("p",null,"In this example from libjpeg-turbo, we move all documentation into the ",(0,i.kt)("inlineCode",{parentName:"p"},"docs")," subpackage:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"patterns:\n - docs: [/usr/share/man]\n")),(0,i.kt)("p",null,"This example, taken from the wayland package, ensures the binaries from ",(0,i.kt)("inlineCode",{parentName:"p"},"/usr/bin")," and the ",(0,i.kt)("inlineCode",{parentName:"p"},"/usr/share/wayland")," are located in the ",(0,i.kt)("inlineCode",{parentName:"p"},"devel")," subpackage:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"patterns:\n - devel:\n - /usr/bin\n - /usr/share/wayland\n")),(0,i.kt)("h2",{id:"replace--rename"},"Replace / rename"),(0,i.kt)("p",null,"In some situations, it may be required to replace one package with another, or to rename an existing package. In these instances you should coordinate with a repository maintainer to ensure the replaced package is\nmarked ",(0,i.kt)("strong",{parentName:"p"},"Obsolete")," within the index. This will ensure correct upgrade paths for users."),(0,i.kt)("p",null,"Note that to retire a package, you must also coordinate with a repository maintainer. An ",(0,i.kt)("strong",{parentName:"p"},"Obsolete")," package is removed by the package manager when the user upgrades. As such, correct upgrade paths need to be\nestablished."),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"replaces")," ypkg key uses the ",(0,i.kt)("inlineCode",{parentName:"p"},"dict(s)")," type, and the default key is assumed to be the current package ",(0,i.kt)("inlineCode",{parentName:"p"},"name"),"."),(0,i.kt)("p",null,"In this example, we rename the ",(0,i.kt)("inlineCode",{parentName:"p"},"libgeoclue*")," packages to use the correct names, and ensure a working upgrade path."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"replaces:\n - devel: libgeoclue-devel\n - libgeoclue\n")),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"name")," of this package is ",(0,i.kt)("strong",{parentName:"p"},"geoclue"),", and the new package names are now:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"geoclue"),(0,i.kt)("li",{parentName:"ul"},"geoclue-devel")),(0,i.kt)("p",null,"Given the ",(0,i.kt)("inlineCode",{parentName:"p"},"replaces")," values above, ",(0,i.kt)("strong",{parentName:"p"},"geoclue")," now replaces ",(0,i.kt)("strong",{parentName:"p"},"libgeoclue"),", and ",(0,i.kt)("strong",{parentName:"p"},"geoclue-devel")," replaces ",(0,i.kt)("strong",{parentName:"p"},"libgeoclue-devel"),". This is entirely transparent to the user, with a seamless update replacing the old\npackages with the new renamed packages."),(0,i.kt)("p",null,"The repository maintainer marked the old names as ",(0,i.kt)("strong",{parentName:"p"},"Obsolete")," in the index."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/513b6405.2eb17c49.js b/assets/js/513b6405.2eb17c49.js new file mode 100644 index 000000000..47759b7ea --- /dev/null +++ b/assets/js/513b6405.2eb17c49.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[4278],{3905:(e,t,a)=>{a.d(t,{Zo:()=>p,kt:()=>m});var n=a(7294);function i(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function r(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function o(e){for(var t=1;t=0||(i[a]=e[a]);return i}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(i[a]=e[a])}return i}var s=n.createContext({}),u=function(e){var t=n.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):o(o({},t),e)),a},p=function(e){var t=u(e.components);return n.createElement(s.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},g=n.forwardRef((function(e,t){var a=e.components,i=e.mdxType,r=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),c=u(a),g=i,m=c["".concat(s,".").concat(g)]||c[g]||d[g]||r;return a?n.createElement(m,o(o({ref:t},p),{},{components:a})):n.createElement(m,o({ref:t},p))}));function m(e,t){var a=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var r=a.length,o=new Array(r);o[0]=g;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[c]="string"==typeof e?e:i,o[1]=l;for(var u=2;u{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>o,default:()=>d,frontMatter:()=>r,metadata:()=>l,toc:()=>u});var n=a(7462),i=(a(7294),a(3905));const r={title:"Prepare for Packaging",summary:"Quick guide on getting your system set up for packaging on Solus",sidebar_position:1},o="Prepare for Packaging",l={unversionedId:"packaging/prepare-for-packaging",id:"packaging/prepare-for-packaging",title:"Prepare for Packaging",description:"Switch to the Unstable Repository",source:"@site/docs/packaging/prepare-for-packaging.md",sourceDirName:"packaging",slug:"/packaging/prepare-for-packaging",permalink:"/docs/packaging/prepare-for-packaging",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/prepare-for-packaging.md",tags:[],version:"current",lastUpdatedAt:1695222528,formattedLastUpdatedAt:"Sep 20, 2023",sidebarPosition:1,frontMatter:{title:"Prepare for Packaging",summary:"Quick guide on getting your system set up for packaging on Solus",sidebar_position:1},sidebar:"packagingSidebar",previous:{title:"Packaging Overview",permalink:"/docs/packaging/"},next:{title:"Update Your Development Environment",permalink:"/docs/packaging/update-dev-environment"}},s={},u=[{value:"Switch to the Unstable Repository",id:"switch-to-the-unstable-repository",level:2},{value:"Setting up the Packager file",id:"setting-up-the-packager-file",level:2},{value:"Installing Development Tools",id:"installing-development-tools",level:2},{value:"Setting up a GitHub account",id:"setting-up-a-github-account",level:2},{value:"Configure github-cli.",id:"configure-github-cli",level:3},{value:"Setting up solbuild",id:"setting-up-solbuild",level:2},{value:"Updating solbuild",id:"updating-solbuild",level:3},{value:"Setting up a Build Directory",id:"setting-up-a-build-directory",level:2},{value:"Recommended aliases",id:"recommended-aliases",level:2},{value:"Building Packages",id:"building-packages",level:2}],p={toc:u},c="wrapper";function d(e){let{components:t,...a}=e;return(0,i.kt)(c,(0,n.Z)({},p,a,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"prepare-for-packaging"},"Prepare for Packaging"),(0,i.kt)("h2",{id:"switch-to-the-unstable-repository"},"Switch to the Unstable Repository"),(0,i.kt)("p",null,'Packages need to be built and tested against the "unstable" repository. If you don\'t want to switch your primary system to unstable, you can do your packaging work in a VM. We have Virtual Machine Manager in the repos.'),(0,i.kt)("p",null,"Refer to ",(0,i.kt)("a",{parentName:"p",href:"docs/user/package-management/repo-management"},"Repository Management")," to see how to add and switch to unstable."),(0,i.kt)("h2",{id:"setting-up-the-packager-file"},"Setting up the Packager file"),(0,i.kt)("p",null,"In order to utilize the build system, you must first set up a configuration file that has your packager details."),(0,i.kt)("p",null,"This file lives in the ",(0,i.kt)("inlineCode",{parentName:"p"},".config/solus")," folder of your home directory. You will need to create the ",(0,i.kt)("inlineCode",{parentName:"p"},".config/solus")," folder as well as the inner ",(0,i.kt)("inlineCode",{parentName:"p"},"packager")," file. Inside the packager file, you need two keys, ",(0,i.kt)("inlineCode",{parentName:"p"},"Name")," and ",(0,i.kt)("inlineCode",{parentName:"p"},"Email"),". This is used when generating the machine file so that the packager details are stored within the resulting binary package."),(0,i.kt)("p",null,"Name and email address are mandatory. You must use your real first and last name(s) for accountability purposes.\nA ",(0,i.kt)("a",{parentName:"p",href:"/docs/user/contributing/getting-involved#matrix-chat"},"Matrix")," contact is optional but recommended."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-ini"},"[Packager]\nName=Your Name Here\nEmail=your.email@address\nMatrix=@username.matrix.org\n")),(0,i.kt)("h2",{id:"installing-development-tools"},"Installing Development Tools"),(0,i.kt)("p",null,"We need to install a few things in order to get started with packaging:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"go-task")," is used by our build tools for scripting"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"git")," is used for version control of the solus sources"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"github-cli")," is used to make working with GitHub easier"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"solbuild")," is a lightweight container environment for building packages repeatably"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"solbuild-config-unstable")," sets up solbuild for working with the ",(0,i.kt)("inlineCode",{parentName:"li"},"unstable")," repository"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"ypkg")," is the program that actually builds packages")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg it go-task git github-cli solbuild solbuild-config-unstable ypkg\n")),(0,i.kt)("h2",{id:"setting-up-a-github-account"},"Setting up a GitHub account"),(0,i.kt)("p",null,"The Solus source repositories for the package repository currently reside on ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/getsolus/packages"},"github.com/getsolus/packages"),". You will need a GitHub account to submit patches and file issues. You can create a GitHub account ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/signup"},"here"),". Note that you will also need to set up ",(0,i.kt)("a",{parentName:"p",href:"https://docs.github.com/en/authentication/securing-your-account-with-two-factor-authentication-2fa"},"2FA")," (two factor authentication) for your account."),(0,i.kt)("h3",{id:"configure-github-cli"},"Configure ",(0,i.kt)("inlineCode",{parentName:"h3"},"github-cli"),"."),(0,i.kt)("p",null,"Once you have a GitHub account, you need to configure ",(0,i.kt)("inlineCode",{parentName:"p"},"github-cli")," to work with it. At minimum, you need to run ",(0,i.kt)("inlineCode",{parentName:"p"},"gh auth login"),". Have your GitHub credentials and 2FA (two factor authentication) mechanism at hand."),(0,i.kt)("p",null,"See the ",(0,i.kt)("a",{parentName:"p",href:"https://docs.github.com/en/github-cli/github-cli/quickstart"},"GitHub CLI quickstart")," for some common uses of the tool."),(0,i.kt)("h2",{id:"setting-up-solbuild"},"Setting up solbuild"),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"solbuild")," tool must first be initialized with a base image. All builds thereafter will use this as a base, and construct a temporary overlay root to save on time and disk space in builds."),(0,i.kt)("p",null,"Initialize solbuild via:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"sudo solbuild init\n")),(0,i.kt)("p",null,"This will take some time as it downloads and prepares the image."),(0,i.kt)("h3",{id:"updating-solbuild"},"Updating solbuild"),(0,i.kt)("p",null,"It is a good idea to keep the base image updated. It will help reduce build times by not having to repeatedly download updates to packages in the base image, and will strictly need to pull down the packages your build needs."),(0,i.kt)("p",null,"To update solbuild, run:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"sudo solbuild update\n")),(0,i.kt)("h2",{id:"setting-up-a-build-directory"},"Setting up a Build Directory"),(0,i.kt)("p",null,"Create a packaging directory to hold sub-directories with packaging files. Here we are using the name ",(0,i.kt)("inlineCode",{parentName:"p"},"solus-builds")," and placing it in our home directory, but you can use whatever you prefer."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"mkdir ~/solus-builds\ncd solus-builds\n")),(0,i.kt)("h2",{id:"recommended-aliases"},"Recommended aliases"),(0,i.kt)("p",null,"Consider creating these aliases in your ",(0,i.kt)("inlineCode",{parentName:"p"},".bashrc")," file (or equivalent for the zsh or fish shell)."),(0,i.kt)("p",null,"The script ",(0,i.kt)("inlineCode",{parentName:"p"},"common/Scripts/yauto.py")," is used to create an initial ",(0,i.kt)("inlineCode",{parentName:"p"},"package.yml")," file for packages that aren't yet in the repository."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},'alias fetchYml="$HOME/solus-builds/common/Scripts/yauto.py"\n')),(0,i.kt)("p",null,"The script ",(0,i.kt)("inlineCode",{parentName:"p"},"common/Scripts/epcsearch.py")," is used to find packages that satisfy build dependencies."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"alias epcsearch='~/packaging/common/Scripts/epcsearch.py'\n")),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"yupdate")," tool is used when updating packages."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"alias updatePackage='/usr/share/ypkg/yupdate.py'\n")),(0,i.kt)("h2",{id:"building-packages"},"Building Packages"),(0,i.kt)("p",null,"Your system is now set up for package work.\nIf you are new to packaging, see ",(0,i.kt)("a",{parentName:"p",href:"/docs/packaging/your-first-package-update"},"Your First Package Update"),"."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/528b6a6b.9053fe9a.js b/assets/js/528b6a6b.748f3bea.js similarity index 98% rename from assets/js/528b6a6b.9053fe9a.js rename to assets/js/528b6a6b.748f3bea.js index 8d58c4224..d9621cb54 100644 --- a/assets/js/528b6a6b.9053fe9a.js +++ b/assets/js/528b6a6b.748f3bea.js @@ -1 +1 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[7822],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>m});var s=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function n(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);t&&(s=s.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,s)}return r}function o(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(s=0;s=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var i=s.createContext({}),l=function(e){var t=s.useContext(i),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},p=function(e){var t=l(e.components);return s.createElement(i.Provider,{value:t},e.children)},d="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return s.createElement(s.Fragment,{},t)}},y=s.forwardRef((function(e,t){var r=e.components,a=e.mdxType,n=e.originalType,i=e.parentName,p=u(e,["components","mdxType","originalType","parentName"]),d=l(r),y=a,m=d["".concat(i,".").concat(y)]||d[y]||c[y]||n;return r?s.createElement(m,o(o({ref:t},p),{},{components:r})):s.createElement(m,o({ref:t},p))}));function m(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var n=r.length,o=new Array(n);o[0]=y;var u={};for(var i in t)hasOwnProperty.call(t,i)&&(u[i]=t[i]);u.originalType=e,u[d]="string"==typeof e?e:a,o[1]=u;for(var l=2;l{r.r(t),r.d(t,{assets:()=>i,contentTitle:()=>o,default:()=>c,frontMatter:()=>n,metadata:()=>u,toc:()=>l});var s=r(7462),a=(r(7294),r(3905));const n={title:"KSysGuard",summary:"Quick Start guide to KSysGuard on Solus"},o="KSysGuard",u={unversionedId:"user/software/utilities/ksysguard",id:"user/software/utilities/ksysguard",title:"KSysGuard",description:"KSysGuard KSysGuard, also known as KDE System Guard and KDE System Monitor, is designed to make simple process control available to a user without needing to do any special setup.",source:"@site/docs/user/software/utilities/ksysguard.md",sourceDirName:"user/software/utilities",slug:"/user/software/utilities/ksysguard",permalink:"/docs/user/software/utilities/ksysguard",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/utilities/ksysguard.md",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"KSysGuard",summary:"Quick Start guide to KSysGuard on Solus"},sidebar:"userSidebar",previous:{title:"Utilities",permalink:"/docs/category/utilities"},next:{title:"KDE Wallet",permalink:"/docs/user/software/utilities/kwallet"}},i={},l=[{value:"Installation",id:"installation",level:2},{value:"Use KSysGuard as a non-root user",id:"use-ksysguard-as-a-non-root-user",level:2},{value:"Usage",id:"usage",level:2}],p={toc:l},d="wrapper";function c(e){let{components:t,...r}=e;return(0,a.kt)(d,(0,s.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"ksysguard"},"KSysGuard"),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"https://userbase.kde.org/KSysGuard"},"KSysGuard")," KSysGuard, also known as KDE System Guard and KDE System Monitor, is designed to make simple process control available to a user without needing to do any special setup."),(0,a.kt)("h2",{id:"installation"},"Installation"),(0,a.kt)("p",null,"KSysGuard is usually installed as part of the KDE Plasma Desktop environment, but can be installed from the Software Center or via terminal:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg it ksysguard\n")),(0,a.kt)("h2",{id:"use-ksysguard-as-a-non-root-user"},"Use KSysGuard as a non-root user"),(0,a.kt)("p",null,"The per process networking plugin requires elevated access to your system. To enable the plugin as non-root user, execute these commands:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},'sudo setcap "CAP_NET_RAW=+ep" "/usr/lib64/kf5/ksysguard/ksgrd_network_helper"\n')),(0,a.kt)("h2",{id:"usage"},"Usage"),(0,a.kt)("p",null,"KSysGuard ",(0,a.kt)("a",{parentName:"p",href:"https://userbase.kde.org/KSysGuard"},"User\u2019s Guide")," or the KDE Help Centre (open khelp on your Plasma Desktop)."))}c.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[7822],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>m});var s=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function n(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);t&&(s=s.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,s)}return r}function o(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(s=0;s=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var i=s.createContext({}),l=function(e){var t=s.useContext(i),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},p=function(e){var t=l(e.components);return s.createElement(i.Provider,{value:t},e.children)},d="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return s.createElement(s.Fragment,{},t)}},y=s.forwardRef((function(e,t){var r=e.components,a=e.mdxType,n=e.originalType,i=e.parentName,p=u(e,["components","mdxType","originalType","parentName"]),d=l(r),y=a,m=d["".concat(i,".").concat(y)]||d[y]||c[y]||n;return r?s.createElement(m,o(o({ref:t},p),{},{components:r})):s.createElement(m,o({ref:t},p))}));function m(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var n=r.length,o=new Array(n);o[0]=y;var u={};for(var i in t)hasOwnProperty.call(t,i)&&(u[i]=t[i]);u.originalType=e,u[d]="string"==typeof e?e:a,o[1]=u;for(var l=2;l{r.r(t),r.d(t,{assets:()=>i,contentTitle:()=>o,default:()=>c,frontMatter:()=>n,metadata:()=>u,toc:()=>l});var s=r(7462),a=(r(7294),r(3905));const n={title:"KSysGuard",summary:"Quick Start guide to KSysGuard on Solus"},o="KSysGuard",u={unversionedId:"user/software/utilities/ksysguard",id:"user/software/utilities/ksysguard",title:"KSysGuard",description:"KSysGuard KSysGuard, also known as KDE System Guard and KDE System Monitor, is designed to make simple process control available to a user without needing to do any special setup.",source:"@site/docs/user/software/utilities/ksysguard.md",sourceDirName:"user/software/utilities",slug:"/user/software/utilities/ksysguard",permalink:"/docs/user/software/utilities/ksysguard",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/utilities/ksysguard.md",tags:[],version:"current",lastUpdatedAt:1695222528,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"KSysGuard",summary:"Quick Start guide to KSysGuard on Solus"},sidebar:"userSidebar",previous:{title:"Utilities",permalink:"/docs/category/utilities"},next:{title:"KDE Wallet",permalink:"/docs/user/software/utilities/kwallet"}},i={},l=[{value:"Installation",id:"installation",level:2},{value:"Use KSysGuard as a non-root user",id:"use-ksysguard-as-a-non-root-user",level:2},{value:"Usage",id:"usage",level:2}],p={toc:l},d="wrapper";function c(e){let{components:t,...r}=e;return(0,a.kt)(d,(0,s.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"ksysguard"},"KSysGuard"),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"https://userbase.kde.org/KSysGuard"},"KSysGuard")," KSysGuard, also known as KDE System Guard and KDE System Monitor, is designed to make simple process control available to a user without needing to do any special setup."),(0,a.kt)("h2",{id:"installation"},"Installation"),(0,a.kt)("p",null,"KSysGuard is usually installed as part of the KDE Plasma Desktop environment, but can be installed from the Software Center or via terminal:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg it ksysguard\n")),(0,a.kt)("h2",{id:"use-ksysguard-as-a-non-root-user"},"Use KSysGuard as a non-root user"),(0,a.kt)("p",null,"The per process networking plugin requires elevated access to your system. To enable the plugin as non-root user, execute these commands:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},'sudo setcap "CAP_NET_RAW=+ep" "/usr/lib64/kf5/ksysguard/ksgrd_network_helper"\n')),(0,a.kt)("h2",{id:"usage"},"Usage"),(0,a.kt)("p",null,"KSysGuard ",(0,a.kt)("a",{parentName:"p",href:"https://userbase.kde.org/KSysGuard"},"User\u2019s Guide")," or the KDE Help Centre (open khelp on your Plasma Desktop)."))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/533eefa9.91179800.js b/assets/js/533eefa9.8326f15c.js similarity index 99% rename from assets/js/533eefa9.91179800.js rename to assets/js/533eefa9.8326f15c.js index bfcb2c8aa..542d633e6 100644 --- a/assets/js/533eefa9.91179800.js +++ b/assets/js/533eefa9.8326f15c.js @@ -1 +1 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[4002],{3905:(e,t,i)=>{i.d(t,{Zo:()=>u,kt:()=>m});var n=i(7294);function a(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function l(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function o(e){for(var t=1;t=0||(a[i]=e[i]);return a}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(a[i]=e[i])}return a}var s=n.createContext({}),d=function(e){var t=n.useContext(s),i=t;return e&&(i="function"==typeof e?e(t):o(o({},t),e)),i},u=function(e){var t=d(e.components);return n.createElement(s.Provider,{value:t},e.children)},p="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},h=n.forwardRef((function(e,t){var i=e.components,a=e.mdxType,l=e.originalType,s=e.parentName,u=r(e,["components","mdxType","originalType","parentName"]),p=d(i),h=a,m=p["".concat(s,".").concat(h)]||p[h]||c[h]||l;return i?n.createElement(m,o(o({ref:t},u),{},{components:i})):n.createElement(m,o({ref:t},u))}));function m(e,t){var i=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var l=i.length,o=new Array(l);o[0]=h;var r={};for(var s in t)hasOwnProperty.call(t,s)&&(r[s]=t[s]);r.originalType=e,r[p]="string"==typeof e?e:a,o[1]=r;for(var d=2;d{i.r(t),i.d(t,{assets:()=>s,contentTitle:()=>o,default:()=>c,frontMatter:()=>l,metadata:()=>r,toc:()=>d});var n=i(7462),a=(i(7294),i(3905));const l={title:"Preparing to Install",summary:"Installation Guide for multiple operating systems"},o="Preparing to install",r={unversionedId:"user/quick-start/installation/index",id:"user/quick-start/installation/index",title:"Preparing to Install",description:"The first step to installing Solus is acquiring the correct media. The Solus Project provides ISO images, which contain the contents of Solus for installing.",source:"@site/docs/user/quick-start/installation/index.md",sourceDirName:"user/quick-start/installation",slug:"/user/quick-start/installation/",permalink:"/docs/user/quick-start/installation/",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/quick-start/installation/index.md",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Preparing to Install",summary:"Installation Guide for multiple operating systems"},sidebar:"userSidebar",previous:{title:"Default Applications",permalink:"/docs/user/quick-start/default-applications"},next:{title:"Disk Partitioning",permalink:"/docs/user/quick-start/installation/disks"}},s={},d=[{value:"Linux and Mac",id:"linux-and-mac",level:2},{value:"Import the Public Key",id:"import-the-public-key",level:3},{value:"Verify SHA256SUMS file signature",id:"verify-sha256sums-file-signature",level:3},{value:"Verify ISO",id:"verify-iso",level:3},{value:"Linux",id:"linux",level:2},{value:"DVD",id:"dvd",level:3},{value:"USB",id:"usb",level:3},{value:"Graphical Tool",id:"graphical-tool",level:4},{value:"Command-Line",id:"command-line",level:4},{value:"Windows",id:"windows",level:2},{value:"DVD",id:"dvd-1",level:3},{value:"USB",id:"usb-1",level:3},{value:"macOS",id:"macos",level:2},{value:"DVD",id:"dvd-2",level:3},{value:"USB",id:"usb-2",level:3},{value:"Graphical Tool",id:"graphical-tool-1",level:4},{value:"Command-Line",id:"command-line-1",level:4},{value:"Boot the Media",id:"boot-the-media",level:2}],u={toc:d},p="wrapper";function c(e){let{components:t,...l}=e;return(0,a.kt)(p,(0,n.Z)({},u,l,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"preparing-to-install"},"Preparing to install"),(0,a.kt)("p",null,"The first step to installing Solus is acquiring the correct media. The Solus Project provides ISO images, which contain the contents of Solus for installing."),(0,a.kt)("hr",null),(0,a.kt)("h1",{id:"getting-the-iso"},"Getting the ISO"),(0,a.kt)("p",null,"You can download a Solus ISO by going to our ",(0,a.kt)("a",{parentName:"p",href:"https://getsol.us/download"},"Download page"),"."),(0,a.kt)("hr",null),(0,a.kt)("h1",{id:"verifying-the-iso"},"Verifying the ISO"),(0,a.kt)("h2",{id:"linux-and-mac"},"Linux and Mac"),(0,a.kt)("p",null,"Download the relevant Solus ISO SHA256SUMS: File, Signed File and Public Key from the ",(0,a.kt)("a",{parentName:"p",href:"https://getsol.us/download"},"Download page"),"."),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"Note:")," It is advisable that the files are all placed in the same folder."),(0,a.kt)("h3",{id:"import-the-public-key"},"Import the Public Key"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"gpg --import .gpg\n")),(0,a.kt)("h3",{id:"verify-sha256sums-file-signature"},"Verify SHA256SUMS file signature"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"gpg --verify .sign .sha256sum\n")),(0,a.kt)("h3",{id:"verify-iso"},"Verify ISO"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sha256sum -c Solus-4.4-Budgie.iso.sha256sum | grep OK\n")),(0,a.kt)("hr",null),(0,a.kt)("h1",{id:"creating-bootable-media"},"Creating Bootable Media"),(0,a.kt)("p",null,"To make boot media, you will need:"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"Either a blank DVD or a USB drive larger than 2 GB."),(0,a.kt)("li",{parentName:"ol"},"If using a USB, the ability to boot from the USB."),(0,a.kt)("li",{parentName:"ol"},'ISO from the "Getting the ISO" section.')),(0,a.kt)("p",null,"There is a multitude of tools which enable the writing of our ISO image to DVDs or USB thumb drives. Below, we break it apart across Linux, Windows and macOS."),(0,a.kt)("h2",{id:"linux"},"Linux"),(0,a.kt)("h3",{id:"dvd"},"DVD"),(0,a.kt)("p",null,"We recommend using ",(0,a.kt)("a",{parentName:"p",href:"https://wiki.gnome.org/Apps/Brasero"},"Brasero")," for writing the ISO to a DVD."),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"Insert blank DVD (DVD-R or DVD+RW is suitable) into your DVD writer."),(0,a.kt)("li",{parentName:"ol"},"Open Brasero."),(0,a.kt)("li",{parentName:"ol"},"Select the option \u201cBurn image\u201d."),(0,a.kt)("li",{parentName:"ol"},"Click the \u201cClick here to select a disc image\u201d button and using the file dialog, choose the ISO."),(0,a.kt)("li",{parentName:"ol"},"Ensure the correct DVD is selected in the \u201cSelect a disc to write to\u201d."),(0,a.kt)("li",{parentName:"ol"},'Click "Burn" and wait.'),(0,a.kt)("li",{parentName:"ol"},'Upon seeing \u201cImage successfully burned to DVD\u201d, click "Close".')),(0,a.kt)("h3",{id:"usb"},"USB"),(0,a.kt)("h4",{id:"graphical-tool"},"Graphical Tool"),(0,a.kt)("p",null,"We recommend using ",(0,a.kt)("a",{parentName:"p",href:"https://wiki.gnome.org/Apps/MultiWriter"},"Gnome MultiWriter"),". Please note that unetbootin will ",(0,a.kt)("strong",{parentName:"p"},"not")," work."),(0,a.kt)("p",null,"Upon opening Gnome MultiWriter, you will likely be shown a window similar to the one below, in the event your USB drive is already plugged in."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MultiWriter Start",src:i(9948).Z,width:"706",height:"156"})),(0,a.kt)("p",null,"If your USB drive is not plugged, you will be prompted with an image indicating to plug it in."),(0,a.kt)("p",null,'Next, click the "Start Copying" button, and you will be prompted to select the ISO. Choose the ISO you downloaded in the "Getting the ISO" section. The USB will automatically be written to.'),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MultiWriter Writing",src:i(4992).Z,width:"706",height:"156"})),(0,a.kt)("p",null,"Upon completion, you will be prompted with the following dialog and your USB is now ready for use."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MultiWriter Done",src:i(1910).Z,width:"706",height:"156"})),(0,a.kt)("h4",{id:"command-line"},"Command-Line"),(0,a.kt)("p",null,"For those comfortable with the command-line / terminal, we will walk you through using ",(0,a.kt)("inlineCode",{parentName:"p"},"dd"),"."),(0,a.kt)("p",null,"First, insert the USB drive into your computer and open your Terminal. Proceed to type ",(0,a.kt)("inlineCode",{parentName:"p"},"lsblk")," into your Terminal. It should output something along the lines of:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT\nsda 8:0 0 111.8G 0 disk\n\u251c\u2500sda1 8:1 0 350M 0 part\n\u251c\u2500sda2 8:2 0 39.7G 0 part\n\u2514\u2500sda3 8:3 0 71.8G 0 part /\nsdb 8:64 1 7.5G 0 disk\n\u251c\u2500sdb1 8:65 1 712M 0 part\n\u2514\u2500sdb2 8:66 1 17.2M 0 part\n")),(0,a.kt)("p",null,"You will see one disk, in this case ",(0,a.kt)("inlineCode",{parentName:"p"},"/dev/sdb"),", that is roughly the size of the USB drive. Yours should be similar (difference being in size). Write this device down somewhere."),(0,a.kt)("p",null,"Next, locate the downloaded ISO. It will most likely be in your Downloads folder. In the event that it is, type: ",(0,a.kt)("inlineCode",{parentName:"p"},"cd ~/Downloads")),(0,a.kt)("p",null,"If it is ",(0,a.kt)("strong",{parentName:"p"},"not")," in your Downloads folder, use ",(0,a.kt)("inlineCode",{parentName:"p"},"cd")," to navigate to the correct directory."),(0,a.kt)("admonition",{type:"danger"},(0,a.kt)("p",{parentName:"admonition"},"This is where we overwrite the contents of your USB drive so please ensure you identified the correct drive in the ",(0,a.kt)("inlineCode",{parentName:"p"},"lsblk")," stage above. Selecting the wrong drive here will lead to its contents being overwritten. An example command is below, however you may need to replace ",(0,a.kt)("inlineCode",{parentName:"p"},"sdb")," with the drive we located above:")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo dd if=Solus-4.4-Budgie.iso of=/dev/sdb bs=4M status=progress oflag=sync && sudo eject /dev/sdb\n")),(0,a.kt)("p",null,"This will write the contents of the ISO to the thumb drive so you can boot it and also make sure the data is synchronised so you can eject the USB safely."),(0,a.kt)("h2",{id:"windows"},"Windows"),(0,a.kt)("h3",{id:"dvd-1"},"DVD"),(0,a.kt)("p",null,"You can easily burn an ISO image to a DVD, on Windows 7 and newer, by using Window's built-in file manager (Explorer)."),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"Open Window's built-in file manager (Explorer)."),(0,a.kt)("li",{parentName:"ol"},'Right click on the ISO image file and click "Burn disk image".'),(0,a.kt)("li",{parentName:"ol"},"Select the correct disc burner."),(0,a.kt)("li",{parentName:"ol"},'Click "Burn".')),(0,a.kt)("h3",{id:"usb-1"},"USB"),(0,a.kt)("p",null,"You can easily burn an ISO image to a USB by using graphical tool ",(0,a.kt)("a",{parentName:"p",href:"https://rufus.ie/"},"Rufus"),"."),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"Open Rufus."),(0,a.kt)("li",{parentName:"ol"},"Ensure your device is correct by checking the contents of the Device dropdown."),(0,a.kt)("li",{parentName:"ol"},"Click the CD icon found in the image below, and select the ISO."),(0,a.kt)("li",{parentName:"ol"},'Untick all options except "Create a bootable disk using" and use the dropdown to select "DD Image".'),(0,a.kt)("li",{parentName:"ol"},'Click "Start".')),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"Rufus",src:i(3093).Z,width:"365",height:"518"})),(0,a.kt)("h2",{id:"macos"},"macOS"),(0,a.kt)("h3",{id:"dvd-2"},"DVD"),(0,a.kt)("p",null,"Since OS X El Capitan (10.11), the easiest way to burn a DVD is:"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"Insert your DVD and open Finder."),(0,a.kt)("li",{parentName:"ol"},"Right click on the ISO image."),(0,a.kt)("li",{parentName:"ol"},"Click on \u201cBurn Disk Image \u2018Solus-4.4-Budgie.iso\u2019 to Disc\u2026\u201d"),(0,a.kt)("li",{parentName:"ol"},"Then click \u201cBurn\u201d.")),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"macOS Burn DVD",src:i(4725).Z,width:"638",height:"343"})),(0,a.kt)("h3",{id:"usb-2"},"USB"),(0,a.kt)("h4",{id:"graphical-tool-1"},"Graphical Tool"),(0,a.kt)("p",null,"One of the easiest ways to burn an ISO image to a USB thumb drive is by using a graphical tool called ",(0,a.kt)("a",{parentName:"p",href:"https://etcher.balena.io/"},"Etcher"),"."),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"Open Etcher."),(0,a.kt)("li",{parentName:"ol"},"Click on \u201cSelect image\u201d and then select the ISO and click \u201cOpen\u201d."),(0,a.kt)("li",{parentName:"ol"},"Etcher will automatically select your USB drive. If it has selected the wrong one, click \u201cChange\u201d and select the correct one."),(0,a.kt)("li",{parentName:"ol"},"Click \u201cFlash!\u201d."),(0,a.kt)("li",{parentName:"ol"},"You may be prompted for your macOS user password."),(0,a.kt)("li",{parentName:"ol"},"Once Etcher has finished it is safe to remove the USB drive.")),(0,a.kt)("p",null,"You may see a message stating \u201cThe disk you inserted was not readable by this computer.\u201d once Etcher finishes. This can be ignored."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"macOS Etcher",src:i(4020).Z,width:"800",height:"380"})),(0,a.kt)("h4",{id:"command-line-1"},"Command-Line"),(0,a.kt)("p",null,"For those comfortable with the macOS Terminal app, we will walk you through using ",(0,a.kt)("inlineCode",{parentName:"p"},"dd"),"."),(0,a.kt)("p",null,"First, insert the USB drive into your computer and open Terminal (found in Applications/Utilities)."),(0,a.kt)("p",null,"Now you'll need to identify your USB drive by listing your storage devices with the following command:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"diskutil list\n")),(0,a.kt)("p",null,"You should see output similar to this:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"/dev/disk0 (internal, physical):\n #: TYPE NAME SIZE IDENTIFIER\n 0: GUID_partition_scheme *1.0 TB disk0\n 1: EFI EFI 209.7 MB disk0s1\n 2: Apple_HFS Macintosh HD 999.3 GB disk0s2\n 3: Apple_Boot Recovery HD 650.0 MB disk0s3\n\n/dev/disk1 (external, physical):\n #: TYPE NAME SIZE IDENTIFIER\n 0: GUID_partition_scheme *15.6 GB disk1\n 1: EFI EFI 209.7 MB disk1s1\n 2: Apple_HFS Ultra 15.3 GB disk1s2\n")),(0,a.kt)("p",null,"From this output, we can see the USB drive is listed as ",(0,a.kt)("inlineCode",{parentName:"p"},"/dev/disk1 (external, physical)"),". In this example, the IDENTIFIER is ",(0,a.kt)("inlineCode",{parentName:"p"},"disk1"),". Please note, your USB drive may have a different identifier. You should be able to tell which is your USB drive by checking the name and size."),(0,a.kt)("p",null,"macOS usually auto-mounts USB drives so you\u2019ll need to unmount it first before proceeding. Use the following command and replace ",(0,a.kt)("inlineCode",{parentName:"p"},"IDENTIFIER")," with the correct identifier we found in the ",(0,a.kt)("inlineCode",{parentName:"p"},"diskutil list")," step."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"diskutil unmountDisk /dev/IDENTIFIER\n")),(0,a.kt)("p",null,"Now navigate to the folder that has the downloaded ISO. This could be your Mac\u2019s Downloads folder. The following command will get you there:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"cd ~/Downloads\n")),(0,a.kt)("admonition",{type:"danger"},(0,a.kt)("p",{parentName:"admonition"},(0,a.kt)("strong",{parentName:"p"},"This next step is dangerous. Using the wrong drive identifier could result in data loss."))),(0,a.kt)("p",null,"We will use the ",(0,a.kt)("inlineCode",{parentName:"p"},"dd")," command to write the contents of the ISO to the thumb drive. Replace ",(0,a.kt)("inlineCode",{parentName:"p"},"IDENTIFIER")," in the command below with your drive identifier. Note the extra ",(0,a.kt)("inlineCode",{parentName:"p"},"r")," before the identifier (i.e ",(0,a.kt)("inlineCode",{parentName:"p"},"rdisk1"),"). This is for raw mode, which along with bs=1m, makes the transfer faster."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo dd if=Solus-4.4-Budgie.iso of=/dev/rIDENTIFIER bs=1m\n")),(0,a.kt)("p",null,"Be patient! After a few minutes you\u2019ll receive a message saying how much data was transferred. You can now safely eject the usb drive."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"diskutil eject /dev/IDENTIFIER\n")),(0,a.kt)("hr",null),(0,a.kt)("h2",{id:"boot-the-media"},"Boot the Media"),(0,a.kt)("p",null,"Now it is time to restart your computer to boot the DVD or USB. Most computers will automatically boot from DVDs and USB, however if you experience issues booting the media, you may need to select to boot from DVD or USB."),(0,a.kt)("p",null,"This is usually accessible by pressing ",(0,a.kt)("inlineCode",{parentName:"p"},"F9")," or ",(0,a.kt)("inlineCode",{parentName:"p"},"F12")," while your computer is booting. On some devices it may also be ",(0,a.kt)("inlineCode",{parentName:"p"},"ESC"),"."),(0,a.kt)("p",null,'Macs will boot to the "Startup Manager" by holding down the Option (Alt) key. The DVD or USB drive will most likely show up as "EFI Boot".'))}c.isMDXComponent=!0},1910:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/done-fdbb3bda7061afd0ca7f97b85c1cef18.jpg"},4725:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/mac-burn-dvd-0bef9578a58d61610854fc7c25e3496f.jpg"},4020:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/mac-etcher-2d28aaeb19eda12c960c6b09e81eceb2.jpg"},3093:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/rufus-6f16a561298400882bff901d61064e58.jpg"},9948:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/start-c8e10b8e6f627b862f8f6344260db698.jpg"},4992:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/writing-1a2eb065ba3c61dd1371f89b2ab9f7c1.jpg"}}]); \ No newline at end of file +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[4002],{3905:(e,t,i)=>{i.d(t,{Zo:()=>u,kt:()=>m});var n=i(7294);function a(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function l(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function o(e){for(var t=1;t=0||(a[i]=e[i]);return a}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(a[i]=e[i])}return a}var s=n.createContext({}),d=function(e){var t=n.useContext(s),i=t;return e&&(i="function"==typeof e?e(t):o(o({},t),e)),i},u=function(e){var t=d(e.components);return n.createElement(s.Provider,{value:t},e.children)},p="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},h=n.forwardRef((function(e,t){var i=e.components,a=e.mdxType,l=e.originalType,s=e.parentName,u=r(e,["components","mdxType","originalType","parentName"]),p=d(i),h=a,m=p["".concat(s,".").concat(h)]||p[h]||c[h]||l;return i?n.createElement(m,o(o({ref:t},u),{},{components:i})):n.createElement(m,o({ref:t},u))}));function m(e,t){var i=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var l=i.length,o=new Array(l);o[0]=h;var r={};for(var s in t)hasOwnProperty.call(t,s)&&(r[s]=t[s]);r.originalType=e,r[p]="string"==typeof e?e:a,o[1]=r;for(var d=2;d{i.r(t),i.d(t,{assets:()=>s,contentTitle:()=>o,default:()=>c,frontMatter:()=>l,metadata:()=>r,toc:()=>d});var n=i(7462),a=(i(7294),i(3905));const l={title:"Preparing to Install",summary:"Installation Guide for multiple operating systems"},o="Preparing to install",r={unversionedId:"user/quick-start/installation/index",id:"user/quick-start/installation/index",title:"Preparing to Install",description:"The first step to installing Solus is acquiring the correct media. The Solus Project provides ISO images, which contain the contents of Solus for installing.",source:"@site/docs/user/quick-start/installation/index.md",sourceDirName:"user/quick-start/installation",slug:"/user/quick-start/installation/",permalink:"/docs/user/quick-start/installation/",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/quick-start/installation/index.md",tags:[],version:"current",lastUpdatedAt:1695222528,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Preparing to Install",summary:"Installation Guide for multiple operating systems"},sidebar:"userSidebar",previous:{title:"Default Applications",permalink:"/docs/user/quick-start/default-applications"},next:{title:"Disk Partitioning",permalink:"/docs/user/quick-start/installation/disks"}},s={},d=[{value:"Linux and Mac",id:"linux-and-mac",level:2},{value:"Import the Public Key",id:"import-the-public-key",level:3},{value:"Verify SHA256SUMS file signature",id:"verify-sha256sums-file-signature",level:3},{value:"Verify ISO",id:"verify-iso",level:3},{value:"Linux",id:"linux",level:2},{value:"DVD",id:"dvd",level:3},{value:"USB",id:"usb",level:3},{value:"Graphical Tool",id:"graphical-tool",level:4},{value:"Command-Line",id:"command-line",level:4},{value:"Windows",id:"windows",level:2},{value:"DVD",id:"dvd-1",level:3},{value:"USB",id:"usb-1",level:3},{value:"macOS",id:"macos",level:2},{value:"DVD",id:"dvd-2",level:3},{value:"USB",id:"usb-2",level:3},{value:"Graphical Tool",id:"graphical-tool-1",level:4},{value:"Command-Line",id:"command-line-1",level:4},{value:"Boot the Media",id:"boot-the-media",level:2}],u={toc:d},p="wrapper";function c(e){let{components:t,...l}=e;return(0,a.kt)(p,(0,n.Z)({},u,l,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"preparing-to-install"},"Preparing to install"),(0,a.kt)("p",null,"The first step to installing Solus is acquiring the correct media. The Solus Project provides ISO images, which contain the contents of Solus for installing."),(0,a.kt)("hr",null),(0,a.kt)("h1",{id:"getting-the-iso"},"Getting the ISO"),(0,a.kt)("p",null,"You can download a Solus ISO by going to our ",(0,a.kt)("a",{parentName:"p",href:"https://getsol.us/download"},"Download page"),"."),(0,a.kt)("hr",null),(0,a.kt)("h1",{id:"verifying-the-iso"},"Verifying the ISO"),(0,a.kt)("h2",{id:"linux-and-mac"},"Linux and Mac"),(0,a.kt)("p",null,"Download the relevant Solus ISO SHA256SUMS: File, Signed File and Public Key from the ",(0,a.kt)("a",{parentName:"p",href:"https://getsol.us/download"},"Download page"),"."),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"Note:")," It is advisable that the files are all placed in the same folder."),(0,a.kt)("h3",{id:"import-the-public-key"},"Import the Public Key"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"gpg --import .gpg\n")),(0,a.kt)("h3",{id:"verify-sha256sums-file-signature"},"Verify SHA256SUMS file signature"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"gpg --verify .sign .sha256sum\n")),(0,a.kt)("h3",{id:"verify-iso"},"Verify ISO"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sha256sum -c Solus-4.4-Budgie.iso.sha256sum | grep OK\n")),(0,a.kt)("hr",null),(0,a.kt)("h1",{id:"creating-bootable-media"},"Creating Bootable Media"),(0,a.kt)("p",null,"To make boot media, you will need:"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"Either a blank DVD or a USB drive larger than 2 GB."),(0,a.kt)("li",{parentName:"ol"},"If using a USB, the ability to boot from the USB."),(0,a.kt)("li",{parentName:"ol"},'ISO from the "Getting the ISO" section.')),(0,a.kt)("p",null,"There is a multitude of tools which enable the writing of our ISO image to DVDs or USB thumb drives. Below, we break it apart across Linux, Windows and macOS."),(0,a.kt)("h2",{id:"linux"},"Linux"),(0,a.kt)("h3",{id:"dvd"},"DVD"),(0,a.kt)("p",null,"We recommend using ",(0,a.kt)("a",{parentName:"p",href:"https://wiki.gnome.org/Apps/Brasero"},"Brasero")," for writing the ISO to a DVD."),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"Insert blank DVD (DVD-R or DVD+RW is suitable) into your DVD writer."),(0,a.kt)("li",{parentName:"ol"},"Open Brasero."),(0,a.kt)("li",{parentName:"ol"},"Select the option \u201cBurn image\u201d."),(0,a.kt)("li",{parentName:"ol"},"Click the \u201cClick here to select a disc image\u201d button and using the file dialog, choose the ISO."),(0,a.kt)("li",{parentName:"ol"},"Ensure the correct DVD is selected in the \u201cSelect a disc to write to\u201d."),(0,a.kt)("li",{parentName:"ol"},'Click "Burn" and wait.'),(0,a.kt)("li",{parentName:"ol"},'Upon seeing \u201cImage successfully burned to DVD\u201d, click "Close".')),(0,a.kt)("h3",{id:"usb"},"USB"),(0,a.kt)("h4",{id:"graphical-tool"},"Graphical Tool"),(0,a.kt)("p",null,"We recommend using ",(0,a.kt)("a",{parentName:"p",href:"https://wiki.gnome.org/Apps/MultiWriter"},"Gnome MultiWriter"),". Please note that unetbootin will ",(0,a.kt)("strong",{parentName:"p"},"not")," work."),(0,a.kt)("p",null,"Upon opening Gnome MultiWriter, you will likely be shown a window similar to the one below, in the event your USB drive is already plugged in."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MultiWriter Start",src:i(9948).Z,width:"706",height:"156"})),(0,a.kt)("p",null,"If your USB drive is not plugged, you will be prompted with an image indicating to plug it in."),(0,a.kt)("p",null,'Next, click the "Start Copying" button, and you will be prompted to select the ISO. Choose the ISO you downloaded in the "Getting the ISO" section. The USB will automatically be written to.'),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MultiWriter Writing",src:i(4992).Z,width:"706",height:"156"})),(0,a.kt)("p",null,"Upon completion, you will be prompted with the following dialog and your USB is now ready for use."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"MultiWriter Done",src:i(1910).Z,width:"706",height:"156"})),(0,a.kt)("h4",{id:"command-line"},"Command-Line"),(0,a.kt)("p",null,"For those comfortable with the command-line / terminal, we will walk you through using ",(0,a.kt)("inlineCode",{parentName:"p"},"dd"),"."),(0,a.kt)("p",null,"First, insert the USB drive into your computer and open your Terminal. Proceed to type ",(0,a.kt)("inlineCode",{parentName:"p"},"lsblk")," into your Terminal. It should output something along the lines of:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT\nsda 8:0 0 111.8G 0 disk\n\u251c\u2500sda1 8:1 0 350M 0 part\n\u251c\u2500sda2 8:2 0 39.7G 0 part\n\u2514\u2500sda3 8:3 0 71.8G 0 part /\nsdb 8:64 1 7.5G 0 disk\n\u251c\u2500sdb1 8:65 1 712M 0 part\n\u2514\u2500sdb2 8:66 1 17.2M 0 part\n")),(0,a.kt)("p",null,"You will see one disk, in this case ",(0,a.kt)("inlineCode",{parentName:"p"},"/dev/sdb"),", that is roughly the size of the USB drive. Yours should be similar (difference being in size). Write this device down somewhere."),(0,a.kt)("p",null,"Next, locate the downloaded ISO. It will most likely be in your Downloads folder. In the event that it is, type: ",(0,a.kt)("inlineCode",{parentName:"p"},"cd ~/Downloads")),(0,a.kt)("p",null,"If it is ",(0,a.kt)("strong",{parentName:"p"},"not")," in your Downloads folder, use ",(0,a.kt)("inlineCode",{parentName:"p"},"cd")," to navigate to the correct directory."),(0,a.kt)("admonition",{type:"danger"},(0,a.kt)("p",{parentName:"admonition"},"This is where we overwrite the contents of your USB drive so please ensure you identified the correct drive in the ",(0,a.kt)("inlineCode",{parentName:"p"},"lsblk")," stage above. Selecting the wrong drive here will lead to its contents being overwritten. An example command is below, however you may need to replace ",(0,a.kt)("inlineCode",{parentName:"p"},"sdb")," with the drive we located above:")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo dd if=Solus-4.4-Budgie.iso of=/dev/sdb bs=4M status=progress oflag=sync && sudo eject /dev/sdb\n")),(0,a.kt)("p",null,"This will write the contents of the ISO to the thumb drive so you can boot it and also make sure the data is synchronised so you can eject the USB safely."),(0,a.kt)("h2",{id:"windows"},"Windows"),(0,a.kt)("h3",{id:"dvd-1"},"DVD"),(0,a.kt)("p",null,"You can easily burn an ISO image to a DVD, on Windows 7 and newer, by using Window's built-in file manager (Explorer)."),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"Open Window's built-in file manager (Explorer)."),(0,a.kt)("li",{parentName:"ol"},'Right click on the ISO image file and click "Burn disk image".'),(0,a.kt)("li",{parentName:"ol"},"Select the correct disc burner."),(0,a.kt)("li",{parentName:"ol"},'Click "Burn".')),(0,a.kt)("h3",{id:"usb-1"},"USB"),(0,a.kt)("p",null,"You can easily burn an ISO image to a USB by using graphical tool ",(0,a.kt)("a",{parentName:"p",href:"https://rufus.ie/"},"Rufus"),"."),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"Open Rufus."),(0,a.kt)("li",{parentName:"ol"},"Ensure your device is correct by checking the contents of the Device dropdown."),(0,a.kt)("li",{parentName:"ol"},"Click the CD icon found in the image below, and select the ISO."),(0,a.kt)("li",{parentName:"ol"},'Untick all options except "Create a bootable disk using" and use the dropdown to select "DD Image".'),(0,a.kt)("li",{parentName:"ol"},'Click "Start".')),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"Rufus",src:i(3093).Z,width:"365",height:"518"})),(0,a.kt)("h2",{id:"macos"},"macOS"),(0,a.kt)("h3",{id:"dvd-2"},"DVD"),(0,a.kt)("p",null,"Since OS X El Capitan (10.11), the easiest way to burn a DVD is:"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"Insert your DVD and open Finder."),(0,a.kt)("li",{parentName:"ol"},"Right click on the ISO image."),(0,a.kt)("li",{parentName:"ol"},"Click on \u201cBurn Disk Image \u2018Solus-4.4-Budgie.iso\u2019 to Disc\u2026\u201d"),(0,a.kt)("li",{parentName:"ol"},"Then click \u201cBurn\u201d.")),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"macOS Burn DVD",src:i(4725).Z,width:"638",height:"343"})),(0,a.kt)("h3",{id:"usb-2"},"USB"),(0,a.kt)("h4",{id:"graphical-tool-1"},"Graphical Tool"),(0,a.kt)("p",null,"One of the easiest ways to burn an ISO image to a USB thumb drive is by using a graphical tool called ",(0,a.kt)("a",{parentName:"p",href:"https://etcher.balena.io/"},"Etcher"),"."),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"Open Etcher."),(0,a.kt)("li",{parentName:"ol"},"Click on \u201cSelect image\u201d and then select the ISO and click \u201cOpen\u201d."),(0,a.kt)("li",{parentName:"ol"},"Etcher will automatically select your USB drive. If it has selected the wrong one, click \u201cChange\u201d and select the correct one."),(0,a.kt)("li",{parentName:"ol"},"Click \u201cFlash!\u201d."),(0,a.kt)("li",{parentName:"ol"},"You may be prompted for your macOS user password."),(0,a.kt)("li",{parentName:"ol"},"Once Etcher has finished it is safe to remove the USB drive.")),(0,a.kt)("p",null,"You may see a message stating \u201cThe disk you inserted was not readable by this computer.\u201d once Etcher finishes. This can be ignored."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"macOS Etcher",src:i(4020).Z,width:"800",height:"380"})),(0,a.kt)("h4",{id:"command-line-1"},"Command-Line"),(0,a.kt)("p",null,"For those comfortable with the macOS Terminal app, we will walk you through using ",(0,a.kt)("inlineCode",{parentName:"p"},"dd"),"."),(0,a.kt)("p",null,"First, insert the USB drive into your computer and open Terminal (found in Applications/Utilities)."),(0,a.kt)("p",null,"Now you'll need to identify your USB drive by listing your storage devices with the following command:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"diskutil list\n")),(0,a.kt)("p",null,"You should see output similar to this:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"/dev/disk0 (internal, physical):\n #: TYPE NAME SIZE IDENTIFIER\n 0: GUID_partition_scheme *1.0 TB disk0\n 1: EFI EFI 209.7 MB disk0s1\n 2: Apple_HFS Macintosh HD 999.3 GB disk0s2\n 3: Apple_Boot Recovery HD 650.0 MB disk0s3\n\n/dev/disk1 (external, physical):\n #: TYPE NAME SIZE IDENTIFIER\n 0: GUID_partition_scheme *15.6 GB disk1\n 1: EFI EFI 209.7 MB disk1s1\n 2: Apple_HFS Ultra 15.3 GB disk1s2\n")),(0,a.kt)("p",null,"From this output, we can see the USB drive is listed as ",(0,a.kt)("inlineCode",{parentName:"p"},"/dev/disk1 (external, physical)"),". In this example, the IDENTIFIER is ",(0,a.kt)("inlineCode",{parentName:"p"},"disk1"),". Please note, your USB drive may have a different identifier. You should be able to tell which is your USB drive by checking the name and size."),(0,a.kt)("p",null,"macOS usually auto-mounts USB drives so you\u2019ll need to unmount it first before proceeding. Use the following command and replace ",(0,a.kt)("inlineCode",{parentName:"p"},"IDENTIFIER")," with the correct identifier we found in the ",(0,a.kt)("inlineCode",{parentName:"p"},"diskutil list")," step."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"diskutil unmountDisk /dev/IDENTIFIER\n")),(0,a.kt)("p",null,"Now navigate to the folder that has the downloaded ISO. This could be your Mac\u2019s Downloads folder. The following command will get you there:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"cd ~/Downloads\n")),(0,a.kt)("admonition",{type:"danger"},(0,a.kt)("p",{parentName:"admonition"},(0,a.kt)("strong",{parentName:"p"},"This next step is dangerous. Using the wrong drive identifier could result in data loss."))),(0,a.kt)("p",null,"We will use the ",(0,a.kt)("inlineCode",{parentName:"p"},"dd")," command to write the contents of the ISO to the thumb drive. Replace ",(0,a.kt)("inlineCode",{parentName:"p"},"IDENTIFIER")," in the command below with your drive identifier. Note the extra ",(0,a.kt)("inlineCode",{parentName:"p"},"r")," before the identifier (i.e ",(0,a.kt)("inlineCode",{parentName:"p"},"rdisk1"),"). This is for raw mode, which along with bs=1m, makes the transfer faster."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo dd if=Solus-4.4-Budgie.iso of=/dev/rIDENTIFIER bs=1m\n")),(0,a.kt)("p",null,"Be patient! After a few minutes you\u2019ll receive a message saying how much data was transferred. You can now safely eject the usb drive."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"diskutil eject /dev/IDENTIFIER\n")),(0,a.kt)("hr",null),(0,a.kt)("h2",{id:"boot-the-media"},"Boot the Media"),(0,a.kt)("p",null,"Now it is time to restart your computer to boot the DVD or USB. Most computers will automatically boot from DVDs and USB, however if you experience issues booting the media, you may need to select to boot from DVD or USB."),(0,a.kt)("p",null,"This is usually accessible by pressing ",(0,a.kt)("inlineCode",{parentName:"p"},"F9")," or ",(0,a.kt)("inlineCode",{parentName:"p"},"F12")," while your computer is booting. On some devices it may also be ",(0,a.kt)("inlineCode",{parentName:"p"},"ESC"),"."),(0,a.kt)("p",null,'Macs will boot to the "Startup Manager" by holding down the Option (Alt) key. The DVD or USB drive will most likely show up as "EFI Boot".'))}c.isMDXComponent=!0},1910:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/done-fdbb3bda7061afd0ca7f97b85c1cef18.jpg"},4725:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/mac-burn-dvd-0bef9578a58d61610854fc7c25e3496f.jpg"},4020:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/mac-etcher-2d28aaeb19eda12c960c6b09e81eceb2.jpg"},3093:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/rufus-6f16a561298400882bff901d61064e58.jpg"},9948:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/start-c8e10b8e6f627b862f8f6344260db698.jpg"},4992:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/writing-1a2eb065ba3c61dd1371f89b2ab9f7c1.jpg"}}]); \ No newline at end of file diff --git a/assets/js/55e618af.6e451025.js b/assets/js/55e618af.6e451025.js deleted file mode 100644 index 30452a81b..000000000 --- a/assets/js/55e618af.6e451025.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[4489],{3905:(e,t,a)=>{a.d(t,{Zo:()=>p,kt:()=>m});var n=a(7294);function i(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function r(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function o(e){for(var t=1;t=0||(i[a]=e[a]);return i}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(i[a]=e[a])}return i}var s=n.createContext({}),u=function(e){var t=n.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):o(o({},t),e)),a},p=function(e){var t=u(e.components);return n.createElement(s.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},g=n.forwardRef((function(e,t){var a=e.components,i=e.mdxType,r=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),c=u(a),g=i,m=c["".concat(s,".").concat(g)]||c[g]||d[g]||r;return a?n.createElement(m,o(o({ref:t},p),{},{components:a})):n.createElement(m,o({ref:t},p))}));function m(e,t){var a=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var r=a.length,o=new Array(r);o[0]=g;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[c]="string"==typeof e?e:i,o[1]=l;for(var u=2;u{a.d(t,{ZP:()=>l});var n=a(7462),i=(a(7294),a(3905));const r={toc:[]},o="wrapper";function l(e){let{components:t,...a}=e;return(0,i.kt)(o,(0,n.Z)({},r,a,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("admonition",{type:"danger"},(0,i.kt)("p",{parentName:"admonition"},"We are currently in the process of migrating our source repositories from Phabricator to GitHub. If you have any repos checked out from Phabricator, ",(0,i.kt)("a",{parentName:"p",href:"/docs/packaging/procedures/migrate-repos-to-github"},"migrate them")," before proceeding."),(0,i.kt)("p",{parentName:"admonition"},"Updating all facets of the documentation will take some time.\nIf you notice any issues feel free to ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/getsolus/help-center-docs/issues/new"},"file an issue")," on our docs tracker, or get in contact with us on our ",(0,i.kt)("a",{parentName:"p",href:"/docs/user/contributing/getting-involved#matrix-chat"},"Matrix")," channels.")))}l.isMDXComponent=!0},7845:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>u,contentTitle:()=>l,default:()=>g,frontMatter:()=>o,metadata:()=>s,toc:()=>p});var n=a(7462),i=(a(7294),a(3905)),r=a(3110);const o={title:"Prepare for Packaging",summary:"Quick guide on getting your system set up for packaging on Solus",sidebar_position:1},l=void 0,s={unversionedId:"packaging/prepare-for-packaging",id:"packaging/prepare-for-packaging",title:"Prepare for Packaging",description:"Switch to the Unstable Repository",source:"@site/docs/packaging/prepare-for-packaging.mdx",sourceDirName:"packaging",slug:"/packaging/prepare-for-packaging",permalink:"/docs/packaging/prepare-for-packaging",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/prepare-for-packaging.mdx",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",sidebarPosition:1,frontMatter:{title:"Prepare for Packaging",summary:"Quick guide on getting your system set up for packaging on Solus",sidebar_position:1},sidebar:"packagingSidebar",previous:{title:"Packaging Overview",permalink:"/docs/packaging/"},next:{title:"Update Your Development Environment",permalink:"/docs/packaging/update-dev-environment"}},u={},p=[{value:"Switch to the Unstable Repository",id:"switch-to-the-unstable-repository",level:2},{value:"Setting up the Packager file",id:"setting-up-the-packager-file",level:2},{value:"Installing Development Tools",id:"installing-development-tools",level:2},{value:"Setting up a GitHub account",id:"setting-up-a-github-account",level:2},{value:"Configure github-cli.",id:"configure-github-cli",level:3},{value:"Setting up solbuild",id:"setting-up-solbuild",level:2},{value:"Updating solbuild",id:"updating-solbuild",level:3},{value:"Setting up a Build Directory",id:"setting-up-a-build-directory",level:2},{value:"Recommended aliases",id:"recommended-aliases",level:2},{value:"Building Packages",id:"building-packages",level:2}],c={toc:p},d="wrapper";function g(e){let{components:t,...a}=e;return(0,i.kt)(d,(0,n.Z)({},c,a,{components:t,mdxType:"MDXLayout"}),(0,i.kt)(r.ZP,{mdxType:"MigrationWarning"}),(0,i.kt)("h1",{id:"prepare-for-packaging"},"Prepare for Packaging"),(0,i.kt)("h2",{id:"switch-to-the-unstable-repository"},"Switch to the Unstable Repository"),(0,i.kt)("p",null,'Packages need to be built and tested against the "unstable" repository. If you don\'t want to switch your primary system to unstable, you can do your packaging work in a VM. We have Virtual Machine Manager in the repos.'),(0,i.kt)("p",null,"Refer to ",(0,i.kt)("a",{parentName:"p",href:"docs/user/package-management/repo-management"},"Repository Management")," to see how to add and switch to unstable."),(0,i.kt)("h2",{id:"setting-up-the-packager-file"},"Setting up the Packager file"),(0,i.kt)("p",null,"In order to utilize the build system, you must first set up a configuration file that has your packager details."),(0,i.kt)("p",null,"This file lives in the ",(0,i.kt)("inlineCode",{parentName:"p"},".config/solus")," folder of your home directory. You will need to create the ",(0,i.kt)("inlineCode",{parentName:"p"},".config/solus")," folder as well as the inner ",(0,i.kt)("inlineCode",{parentName:"p"},"packager")," file. Inside the packager file, you need two keys, ",(0,i.kt)("inlineCode",{parentName:"p"},"Name")," and ",(0,i.kt)("inlineCode",{parentName:"p"},"Email"),". This is used when generating the machine file so that the packager details are stored within the resulting binary package."),(0,i.kt)("p",null,"Name and email address are mandatory. You must use your real first and last name(s) for accountability purposes.\nA ",(0,i.kt)("a",{parentName:"p",href:"/docs/user/contributing/getting-involved#matrix-chat"},"Matrix")," contact is optional but recommended."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-ini"},"[Packager]\nName=Your Name Here\nEmail=your.email@address\nMatrix=@username.matrix.org\n")),(0,i.kt)("h2",{id:"installing-development-tools"},"Installing Development Tools"),(0,i.kt)("p",null,"We need to install a few things in order to get started with packaging:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"go-task")," is used by our build tools for scripting"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"git")," is used for version control of the solus sources"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"github-cli")," is used to make working with GitHub easier"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"solbuild")," is a lightweight container environment for building packages repeatably"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"solbuild-config-unstable")," sets up solbuild for working with the ",(0,i.kt)("inlineCode",{parentName:"li"},"unstable")," repository"),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("inlineCode",{parentName:"li"},"ypkg")," is the program that actually builds packages")),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg it go-task git github-cli solbuild solbuild-config-unstable ypkg\n")),(0,i.kt)("h2",{id:"setting-up-a-github-account"},"Setting up a GitHub account"),(0,i.kt)("p",null,"The Solus source repositories for the package repository currently reside on ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/getsolus/packages"},"github.com/getsolus/packages"),". You will need a GitHub account to submit patches and file issues. You can create a GitHub account ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/signup"},"here"),". Note that you will also need to set up ",(0,i.kt)("a",{parentName:"p",href:"https://docs.github.com/en/authentication/securing-your-account-with-two-factor-authentication-2fa"},"2FA")," (two factor authentication) for your account."),(0,i.kt)("h3",{id:"configure-github-cli"},"Configure ",(0,i.kt)("inlineCode",{parentName:"h3"},"github-cli"),"."),(0,i.kt)("p",null,"Once you have a GitHub account, you need to configure ",(0,i.kt)("inlineCode",{parentName:"p"},"github-cli")," to work with it. At minimum, you need to run ",(0,i.kt)("inlineCode",{parentName:"p"},"gh auth login"),". Have your GitHub credentials and 2FA (two factor authentication) mechanism at hand."),(0,i.kt)("p",null,"See the ",(0,i.kt)("a",{parentName:"p",href:"https://docs.github.com/en/github-cli/github-cli/quickstart"},"GitHub CLI quickstart")," for some common uses of the tool."),(0,i.kt)("h2",{id:"setting-up-solbuild"},"Setting up solbuild"),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"solbuild")," tool must first be initialized with a base image. All builds thereafter will use this as a base, and construct a temporary overlay root to save on time and disk space in builds."),(0,i.kt)("p",null,"Initialize solbuild via:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"sudo solbuild init\n")),(0,i.kt)("p",null,"This will take some time as it downloads and prepares the image."),(0,i.kt)("h3",{id:"updating-solbuild"},"Updating solbuild"),(0,i.kt)("p",null,"It is a good idea to keep the base image updated. It will help reduce build times by not having to repeatedly download updates to packages in the base image, and will strictly need to pull down the packages your build needs."),(0,i.kt)("p",null,"To update solbuild, run:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"sudo solbuild update\n")),(0,i.kt)("h2",{id:"setting-up-a-build-directory"},"Setting up a Build Directory"),(0,i.kt)("p",null,"Create a packaging directory to hold sub-directories with packaging files. Here we are using the name ",(0,i.kt)("inlineCode",{parentName:"p"},"solus-builds")," and placing it in our home directory, but you can use whatever you prefer."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"mkdir ~/solus-builds\ncd solus-builds\n")),(0,i.kt)("h2",{id:"recommended-aliases"},"Recommended aliases"),(0,i.kt)("p",null,"Consider creating these aliases in your ",(0,i.kt)("inlineCode",{parentName:"p"},".bashrc")," file (or equivalent for the zsh or fish shell)."),(0,i.kt)("p",null,"The script ",(0,i.kt)("inlineCode",{parentName:"p"},"common/Scripts/yauto.py")," is used to create an initial ",(0,i.kt)("inlineCode",{parentName:"p"},"package.yml")," file for packages that aren't yet in the repository."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},'alias fetchYml="$HOME/solus-builds/common/Scripts/yauto.py"\n')),(0,i.kt)("p",null,"The script ",(0,i.kt)("inlineCode",{parentName:"p"},"common/Scripts/epcsearch.py")," is used to find packages that satisfy build dependencies."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"alias epcsearch='~/packaging/common/Scripts/epcsearch.py'\n")),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"yupdate")," tool is used when updating packages."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"alias updatePackage='/usr/share/ypkg/yupdate.py'\n")),(0,i.kt)("h2",{id:"building-packages"},"Building Packages"),(0,i.kt)("p",null,"Your system is now set up for package work.\nIf you are new to packaging, see ",(0,i.kt)("a",{parentName:"p",href:"/docs/packaging/your-first-package-update"},"Your First Package Update"),"."))}g.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/5b7f3753.12c46d98.js b/assets/js/5b7f3753.22b35b86.js similarity index 99% rename from assets/js/5b7f3753.12c46d98.js rename to assets/js/5b7f3753.22b35b86.js index 5de3bac6b..9681bca34 100644 --- a/assets/js/5b7f3753.12c46d98.js +++ b/assets/js/5b7f3753.22b35b86.js @@ -1 +1 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[6413],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>d});var i=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,i)}return n}function o(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var l=i.createContext({}),s=function(e){var t=i.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},u=function(e){var t=s(e.components);return i.createElement(l.Provider,{value:t},e.children)},p="mdxType",g={inlineCode:"code",wrapper:function(e){var t=e.children;return i.createElement(i.Fragment,{},t)}},h=i.forwardRef((function(e,t){var n=e.components,a=e.mdxType,r=e.originalType,l=e.parentName,u=c(e,["components","mdxType","originalType","parentName"]),p=s(n),h=a,d=p["".concat(l,".").concat(h)]||p[h]||g[h]||r;return n?i.createElement(d,o(o({ref:t},u),{},{components:n})):i.createElement(d,o({ref:t},u))}));function d(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var r=n.length,o=new Array(r);o[0]=h;var c={};for(var l in t)hasOwnProperty.call(t,l)&&(c[l]=t[l]);c.originalType=e,c[p]="string"==typeof e?e:a,o[1]=c;for(var s=2;s{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>g,frontMatter:()=>r,metadata:()=>c,toc:()=>s});var i=n(7462),a=(n(7294),n(3905));const r={title:"Git Basics",summary:"Basic git commands for packaging"},o="Git Basics",c={unversionedId:"packaging/git-basics",id:"packaging/git-basics",title:"Git Basics",description:"Working with branches",source:"@site/docs/packaging/git-basics.md",sourceDirName:"packaging",slug:"/packaging/git-basics",permalink:"/docs/packaging/git-basics",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/git-basics.md",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Git Basics",summary:"Basic git commands for packaging"},sidebar:"packagingSidebar",previous:{title:"Local Repository",permalink:"/docs/packaging/advanced-config/local-repository"},next:{title:"Package YAML",permalink:"/docs/packaging/package.yml"}},l={},s=[{value:"Working with branches",id:"working-with-branches",level:2},{value:"Keeping your branch up to date with the main branch",id:"keeping-your-branch-up-to-date-with-the-main-branch",level:2},{value:"Adding files",id:"adding-files",level:2},{value:"Removing files",id:"removing-files",level:2},{value:"Renaming files",id:"renaming-files",level:2},{value:"Check the changes in your files",id:"check-the-changes-in-your-files",level:2},{value:"Commit your changes",id:"commit-your-changes",level:2},{value:"Deleting your branch after a pull request is merged",id:"deleting-your-branch-after-a-pull-request-is-merged",level:2}],u={toc:s},p="wrapper";function g(e){let{components:t,...n}=e;return(0,a.kt)(p,(0,i.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"git-basics"},"Git Basics"),(0,a.kt)("h2",{id:"working-with-branches"},"Working with branches"),(0,a.kt)("p",null,"The recommended way to switch branches is ",(0,a.kt)("inlineCode",{parentName:"p"},"git switch"),".\nTo create a new branch use ",(0,a.kt)("inlineCode",{parentName:"p"},"git switch -c"),"."),(0,a.kt)("h2",{id:"keeping-your-branch-up-to-date-with-the-main-branch"},"Keeping your branch up to date with the main branch"),(0,a.kt)("p",null,"If there any new changes to the repository whilst you are still working on your branch you need to ",(0,a.kt)("a",{parentName:"p",href:"https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/syncing-a-fork"},"sync your fork"),".\nRun ",(0,a.kt)("inlineCode",{parentName:"p"},"git fetch"),", and ",(0,a.kt)("inlineCode",{parentName:"p"},"git rebase origin/main")," to pull the changes in.\nYou will need to fix any conflicts manually.\nYou can check your branch against main with ",(0,a.kt)("inlineCode",{parentName:"p"},"git diff origin/main..my-branch"),"."),(0,a.kt)("h2",{id:"adding-files"},"Adding files"),(0,a.kt)("p",null,"For every file you change or add, you must let git know about it: ",(0,a.kt)("inlineCode",{parentName:"p"},"git add someFile")),(0,a.kt)("h2",{id:"removing-files"},"Removing files"),(0,a.kt)("p",null,"For files that need to be removed, you must do so using git: ",(0,a.kt)("inlineCode",{parentName:"p"},"git rm someFile")),(0,a.kt)("h2",{id:"renaming-files"},"Renaming files"),(0,a.kt)("p",null,"Likewise, for renaming a file, you must do so via git: ",(0,a.kt)("inlineCode",{parentName:"p"},"git mv someFile someFileName2")),(0,a.kt)("h2",{id:"check-the-changes-in-your-files"},"Check the changes in your files"),(0,a.kt)("p",null,"It's a good idea to review the changes you have made to each file. This is to make sure you're committing what you intend and to make sure it looks good. Do this before adding changed files."),(0,a.kt)("p",null,"To diff them all at once, useful for small changes, use ",(0,a.kt)("inlineCode",{parentName:"p"},"git diff"),".\nTo diff each file one at a time run ",(0,a.kt)("inlineCode",{parentName:"p"},"git diff filename")," on each one."),(0,a.kt)("h2",{id:"commit-your-changes"},"Commit your changes"),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"Check your branch")),(0,a.kt)("p",null,"Get the status of the branch with ",(0,a.kt)("inlineCode",{parentName:"p"},"git status"),". Make sure all the files you changed are staged, and that there are no untracked files. The git status should say your branch is clean."),(0,a.kt)("p",null,"Now that you've tested and reviewed your change, when you're happy with it, it's time to commit your changes with ",(0,a.kt)("inlineCode",{parentName:"p"},"git commit"),"."),(0,a.kt)("h2",{id:"deleting-your-branch-after-a-pull-request-is-merged"},"Deleting your branch after a pull request is merged"),(0,a.kt)("p",null,"Once your pull request has been accepted you can delete your working branches.\nFirst, change to the package directory, switch to the main branch, then delete your local and the remote branches."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"cd ~/solus-builds/package\ngit switch main\ngit branch -D my-branch\ngit push -d origin my-branch\n")))}g.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[6413],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>d});var i=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,i)}return n}function o(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var l=i.createContext({}),s=function(e){var t=i.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},u=function(e){var t=s(e.components);return i.createElement(l.Provider,{value:t},e.children)},p="mdxType",g={inlineCode:"code",wrapper:function(e){var t=e.children;return i.createElement(i.Fragment,{},t)}},h=i.forwardRef((function(e,t){var n=e.components,a=e.mdxType,r=e.originalType,l=e.parentName,u=c(e,["components","mdxType","originalType","parentName"]),p=s(n),h=a,d=p["".concat(l,".").concat(h)]||p[h]||g[h]||r;return n?i.createElement(d,o(o({ref:t},u),{},{components:n})):i.createElement(d,o({ref:t},u))}));function d(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var r=n.length,o=new Array(r);o[0]=h;var c={};for(var l in t)hasOwnProperty.call(t,l)&&(c[l]=t[l]);c.originalType=e,c[p]="string"==typeof e?e:a,o[1]=c;for(var s=2;s{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>g,frontMatter:()=>r,metadata:()=>c,toc:()=>s});var i=n(7462),a=(n(7294),n(3905));const r={title:"Git Basics",summary:"Basic git commands for packaging"},o="Git Basics",c={unversionedId:"packaging/git-basics",id:"packaging/git-basics",title:"Git Basics",description:"Working with branches",source:"@site/docs/packaging/git-basics.md",sourceDirName:"packaging",slug:"/packaging/git-basics",permalink:"/docs/packaging/git-basics",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/git-basics.md",tags:[],version:"current",lastUpdatedAt:1695222528,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Git Basics",summary:"Basic git commands for packaging"},sidebar:"packagingSidebar",previous:{title:"Local Repository",permalink:"/docs/packaging/advanced-config/local-repository"},next:{title:"Package YAML",permalink:"/docs/packaging/package.yml"}},l={},s=[{value:"Working with branches",id:"working-with-branches",level:2},{value:"Keeping your branch up to date with the main branch",id:"keeping-your-branch-up-to-date-with-the-main-branch",level:2},{value:"Adding files",id:"adding-files",level:2},{value:"Removing files",id:"removing-files",level:2},{value:"Renaming files",id:"renaming-files",level:2},{value:"Check the changes in your files",id:"check-the-changes-in-your-files",level:2},{value:"Commit your changes",id:"commit-your-changes",level:2},{value:"Deleting your branch after a pull request is merged",id:"deleting-your-branch-after-a-pull-request-is-merged",level:2}],u={toc:s},p="wrapper";function g(e){let{components:t,...n}=e;return(0,a.kt)(p,(0,i.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"git-basics"},"Git Basics"),(0,a.kt)("h2",{id:"working-with-branches"},"Working with branches"),(0,a.kt)("p",null,"The recommended way to switch branches is ",(0,a.kt)("inlineCode",{parentName:"p"},"git switch"),".\nTo create a new branch use ",(0,a.kt)("inlineCode",{parentName:"p"},"git switch -c"),"."),(0,a.kt)("h2",{id:"keeping-your-branch-up-to-date-with-the-main-branch"},"Keeping your branch up to date with the main branch"),(0,a.kt)("p",null,"If there any new changes to the repository whilst you are still working on your branch you need to ",(0,a.kt)("a",{parentName:"p",href:"https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/syncing-a-fork"},"sync your fork"),".\nRun ",(0,a.kt)("inlineCode",{parentName:"p"},"git fetch"),", and ",(0,a.kt)("inlineCode",{parentName:"p"},"git rebase origin/main")," to pull the changes in.\nYou will need to fix any conflicts manually.\nYou can check your branch against main with ",(0,a.kt)("inlineCode",{parentName:"p"},"git diff origin/main..my-branch"),"."),(0,a.kt)("h2",{id:"adding-files"},"Adding files"),(0,a.kt)("p",null,"For every file you change or add, you must let git know about it: ",(0,a.kt)("inlineCode",{parentName:"p"},"git add someFile")),(0,a.kt)("h2",{id:"removing-files"},"Removing files"),(0,a.kt)("p",null,"For files that need to be removed, you must do so using git: ",(0,a.kt)("inlineCode",{parentName:"p"},"git rm someFile")),(0,a.kt)("h2",{id:"renaming-files"},"Renaming files"),(0,a.kt)("p",null,"Likewise, for renaming a file, you must do so via git: ",(0,a.kt)("inlineCode",{parentName:"p"},"git mv someFile someFileName2")),(0,a.kt)("h2",{id:"check-the-changes-in-your-files"},"Check the changes in your files"),(0,a.kt)("p",null,"It's a good idea to review the changes you have made to each file. This is to make sure you're committing what you intend and to make sure it looks good. Do this before adding changed files."),(0,a.kt)("p",null,"To diff them all at once, useful for small changes, use ",(0,a.kt)("inlineCode",{parentName:"p"},"git diff"),".\nTo diff each file one at a time run ",(0,a.kt)("inlineCode",{parentName:"p"},"git diff filename")," on each one."),(0,a.kt)("h2",{id:"commit-your-changes"},"Commit your changes"),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"Check your branch")),(0,a.kt)("p",null,"Get the status of the branch with ",(0,a.kt)("inlineCode",{parentName:"p"},"git status"),". Make sure all the files you changed are staged, and that there are no untracked files. The git status should say your branch is clean."),(0,a.kt)("p",null,"Now that you've tested and reviewed your change, when you're happy with it, it's time to commit your changes with ",(0,a.kt)("inlineCode",{parentName:"p"},"git commit"),"."),(0,a.kt)("h2",{id:"deleting-your-branch-after-a-pull-request-is-merged"},"Deleting your branch after a pull request is merged"),(0,a.kt)("p",null,"Once your pull request has been accepted you can delete your working branches.\nFirst, change to the package directory, switch to the main branch, then delete your local and the remote branches."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"cd ~/solus-builds/package\ngit switch main\ngit branch -D my-branch\ngit push -d origin my-branch\n")))}g.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/5f194406.041badad.js b/assets/js/5f194406.6895d0f0.js similarity index 99% rename from assets/js/5f194406.041badad.js rename to assets/js/5f194406.6895d0f0.js index a3001829a..d9ed1dd2f 100644 --- a/assets/js/5f194406.041badad.js +++ b/assets/js/5f194406.6895d0f0.js @@ -1 +1 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[7607],{3905:(e,t,i)=>{i.d(t,{Zo:()=>c,kt:()=>h});var n=i(7294);function r(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function o(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function a(e){for(var t=1;t=0||(r[i]=e[i]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(r[i]=e[i])}return r}var l=n.createContext({}),u=function(e){var t=n.useContext(l),i=t;return e&&(i="function"==typeof e?e(t):a(a({},t),e)),i},c=function(e){var t=u(e.components);return n.createElement(l.Provider,{value:t},e.children)},d="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},p=n.forwardRef((function(e,t){var i=e.components,r=e.mdxType,o=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),d=u(i),p=r,h=d["".concat(l,".").concat(p)]||d[p]||m[p]||o;return i?n.createElement(h,a(a({ref:t},c),{},{components:i})):n.createElement(h,a({ref:t},c))}));function h(e,t){var i=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=i.length,a=new Array(o);a[0]=p;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[d]="string"==typeof e?e:r,a[1]=s;for(var u=2;u{i.r(t),i.d(t,{assets:()=>l,contentTitle:()=>a,default:()=>m,frontMatter:()=>o,metadata:()=>s,toc:()=>u});var n=i(7462),r=(i(7294),i(3905));const o={title:"Community Guidelines",summary:"Community Guidelines"},a="Community Guidelines",s={unversionedId:"user/contributing/community-guidelines",id:"user/contributing/community-guidelines",title:"Community Guidelines",description:"The Solus Project enforces a set of community guidelines to maintain a family-friendly, respectful, and professional environment.",source:"@site/docs/user/contributing/community-guidelines.md",sourceDirName:"user/contributing",slug:"/user/contributing/community-guidelines",permalink:"/docs/user/contributing/community-guidelines",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/contributing/community-guidelines.md",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Community Guidelines",summary:"Community Guidelines"},sidebar:"userSidebar",previous:{title:"Contributing",permalink:"/docs/category/contributing"},next:{title:"Getting Involved",permalink:"/docs/user/contributing/getting-involved"}},l={},u=[{value:"General Guidelines",id:"general-guidelines",level:2},{value:"Harassment",id:"harassment",level:3},{value:"Language",id:"language",level:3},{value:"Media Sharing",id:"media-sharing",level:3},{value:"Observe Topic Guidance",id:"observe-topic-guidance",level:3},{value:"Other",id:"other",level:3},{value:"Service-Specific Guidelines",id:"service-specific-guidelines",level:2},{value:"Development / Issue Trackers",id:"development--issue-trackers",level:3}],c={toc:u},d="wrapper";function m(e){let{components:t,...i}=e;return(0,r.kt)(d,(0,n.Z)({},c,i,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"community-guidelines"},"Community Guidelines"),(0,r.kt)("p",null,"The Solus Project enforces a set of community guidelines to maintain a family-friendly, respectful, and professional environment."),(0,r.kt)("p",null,"Our guidelines apply to all services offered or used by the project, in addition to any terms of service of third-party services used by the project. Solus Staff reserves the right to either ban or terminate access, on a temporary or permanent basis, to members of the community which are found to be violating our guidelines."),(0,r.kt)("h2",{id:"general-guidelines"},"General Guidelines"),(0,r.kt)("p",null,"The guidelines laid out in this section apply to all services offered or used by the project, such as (but not limited to):"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Our Development Tracker"),(0,r.kt)("li",{parentName:"ul"},"Any and all forums or organized communities, e.g. our Forums or sub-reddit"),(0,r.kt)("li",{parentName:"ul"},"Matrix, IRC, or any other officially supported means of communicating with the project and community members in real-time"),(0,r.kt)("li",{parentName:"ul"},"Postings to social media pages / properties owned or used by the project.")),(0,r.kt)("h3",{id:"harassment"},"Harassment"),(0,r.kt)("p",null,"The project condemns any and all forms of harassment. Harassment by individuals in our community, whether in public (on services provided by or used by the project) or private (e.g. direct messages), to other members in our community, will result in the temporary or permanent banning of such individuals across any and all services provided by or used by the project."),(0,r.kt)("p",null,"This extends to any and all events / venues sponsored or otherwise supported by the project. Harassment in such events or venues will result in the permanent banning of such individuals from future events and if necessary, the immediate removal of such individuals from any current events / venues."),(0,r.kt)("p",null,"You are encouraged to reach out to a member of the Solus Staff should you be harassed by any member of our community so such matters may be addressed immediately."),(0,r.kt)("h3",{id:"language"},"Language"),(0,r.kt)("p",null,"Members of the community are expected to engage in a manner which is respectful and avoids the use of language which is hateful, derogatory, or otherwise intentionally degrading. This includes (but is not limited to) language which could be classified as:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Hateful towards individuals or groups based on:",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Disabilities"),(0,r.kt)("li",{parentName:"ul"},"Gender or gender identity"),(0,r.kt)("li",{parentName:"ul"},"Religious beliefs"),(0,r.kt)("li",{parentName:"ul"},"Sexual orientation"),(0,r.kt)("li",{parentName:"ul"},"Race or nationality"),(0,r.kt)("li",{parentName:"ul"},"Political affiliation"))),(0,r.kt)("li",{parentName:"ul"},"Sexual or otherwise lewd in nature")),(0,r.kt)("p",null,"Profane language which is not derogatory, hateful, or sexual in nature may be allowed in specific off-topic rooms or other locations permitted by the project. However, the Solus Staff moderation team reserves the right to request the immediate ceasing of the use of such language by any individual if it is deemed to be derogatory, hateful, sexual, or in a manner which is otherwise distasteful."),(0,r.kt)("h3",{id:"media-sharing"},"Media Sharing"),(0,r.kt)("p",null,"Members of the community shall not link / share media which is illegal, pornographic / sexual, or otherwise offensive in nature. This extends to sharing media which shows any illegal or otherwise harmful acts, such as acts of violence."),(0,r.kt)("h3",{id:"observe-topic-guidance"},"Observe Topic Guidance"),(0,r.kt)("p",null,"Members of the community should attempt to observe topic guidance when participating in various services offered or used by the project, such as:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Ensuring support-related rooms / mediums remain free of development and off-topic discussions to maximize the community and Solus Staff\u2019s ability to respond and address issues or support requests."),(0,r.kt)("li",{parentName:"ul"},"Ensuring development rooms / mediums remain free of off-topic discussions which are not relevant to the development or progression of various development items relating to Solus."),(0,r.kt)("li",{parentName:"ul"},"Ensuring off-topic rooms / mediums remain free of heated discussions of polarizing issues or current events in order to keep these spaces inviting and enjoyable.")),(0,r.kt)("h3",{id:"other"},"Other"),(0,r.kt)("p",null,"The below guidelines do not fall into any specific category but should be observed by members of the community:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"The continual repetition and/or advertisement of any products, services, or projects is not permitted."),(0,r.kt)("li",{parentName:"ul"},"The usage of bots unless explicitly permitted by the project is strictly forbidden."),(0,r.kt)("li",{parentName:"ul"},"No spamming or flooding. This may result in temporary removals (e.g. kicks in IRC) to prevent the continued spamming or flooding.")),(0,r.kt)("h2",{id:"service-specific-guidelines"},"Service-Specific Guidelines"),(0,r.kt)("p",null,"The below mentioned guidelines apply to individual services provided or used by the project."),(0,r.kt)("h3",{id:"development--issue-trackers"},"Development / Issue Trackers"),(0,r.kt)("p",null,"Solus utilizes a number of repositories and issue trackers to facilitate the development of various items in our project and to address issues raised by our community through tasks / issue reports. These include, but are not limited to:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Our ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/getsolus/"},"Documentation, Package, Software Center, and various tooling repositories")),(0,r.kt)("li",{parentName:"ul"},"Our package ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/getsolus/packages/issues"},"issue tracker")),(0,r.kt)("li",{parentName:"ul"},"All other issue trackers utilized by the project across repositories hosted in our GitHub organizations")),(0,r.kt)("p",null,"Members of the community are expected to:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Maintain on-topic discussions as relevant to each individual task"),(0,r.kt)("li",{parentName:"ul"},"Not engage in disruptive behavior such as the modification of tasks or task information which are not owned or assigned to the user. Please leave the general maintenance of tasks or requesting of specific information to individuals which are assigned to the task, or Solus Staff"),(0,r.kt)("li",{parentName:"ul"},"Refrain from using the Development Tracker for general support queries, such as (but not limited to): installation assistance, package installation assistance, etc.")),(0,r.kt)("p",null,"Members of the community should remain mindful that all contributors to the project do so on a voluntary basis, in their free time, and should refrain from making demands or engaging in behavior which is not respectful."),(0,r.kt)("p",null,"Solus Staff reserves the rights to:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Close or lock tasks on a temporary or permanent basis"),(0,r.kt)("li",{parentName:"ul"},"Disable the account of individuals which violate either general guidelines or \u201cDevelopment / Issue Trackers\u201d-specific guidelines."),(0,r.kt)("li",{parentName:"ul"},"Make any finalized decisions in the interest of the project, continuation of our vision / objectives for the project or various software which we develop or support.")))}m.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[7607],{3905:(e,t,i)=>{i.d(t,{Zo:()=>c,kt:()=>h});var n=i(7294);function r(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function o(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function a(e){for(var t=1;t=0||(r[i]=e[i]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(r[i]=e[i])}return r}var l=n.createContext({}),u=function(e){var t=n.useContext(l),i=t;return e&&(i="function"==typeof e?e(t):a(a({},t),e)),i},c=function(e){var t=u(e.components);return n.createElement(l.Provider,{value:t},e.children)},d="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},p=n.forwardRef((function(e,t){var i=e.components,r=e.mdxType,o=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),d=u(i),p=r,h=d["".concat(l,".").concat(p)]||d[p]||m[p]||o;return i?n.createElement(h,a(a({ref:t},c),{},{components:i})):n.createElement(h,a({ref:t},c))}));function h(e,t){var i=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=i.length,a=new Array(o);a[0]=p;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[d]="string"==typeof e?e:r,a[1]=s;for(var u=2;u{i.r(t),i.d(t,{assets:()=>l,contentTitle:()=>a,default:()=>m,frontMatter:()=>o,metadata:()=>s,toc:()=>u});var n=i(7462),r=(i(7294),i(3905));const o={title:"Community Guidelines",summary:"Community Guidelines"},a="Community Guidelines",s={unversionedId:"user/contributing/community-guidelines",id:"user/contributing/community-guidelines",title:"Community Guidelines",description:"The Solus Project enforces a set of community guidelines to maintain a family-friendly, respectful, and professional environment.",source:"@site/docs/user/contributing/community-guidelines.md",sourceDirName:"user/contributing",slug:"/user/contributing/community-guidelines",permalink:"/docs/user/contributing/community-guidelines",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/contributing/community-guidelines.md",tags:[],version:"current",lastUpdatedAt:1695222528,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Community Guidelines",summary:"Community Guidelines"},sidebar:"userSidebar",previous:{title:"Contributing",permalink:"/docs/category/contributing"},next:{title:"Getting Involved",permalink:"/docs/user/contributing/getting-involved"}},l={},u=[{value:"General Guidelines",id:"general-guidelines",level:2},{value:"Harassment",id:"harassment",level:3},{value:"Language",id:"language",level:3},{value:"Media Sharing",id:"media-sharing",level:3},{value:"Observe Topic Guidance",id:"observe-topic-guidance",level:3},{value:"Other",id:"other",level:3},{value:"Service-Specific Guidelines",id:"service-specific-guidelines",level:2},{value:"Development / Issue Trackers",id:"development--issue-trackers",level:3}],c={toc:u},d="wrapper";function m(e){let{components:t,...i}=e;return(0,r.kt)(d,(0,n.Z)({},c,i,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"community-guidelines"},"Community Guidelines"),(0,r.kt)("p",null,"The Solus Project enforces a set of community guidelines to maintain a family-friendly, respectful, and professional environment."),(0,r.kt)("p",null,"Our guidelines apply to all services offered or used by the project, in addition to any terms of service of third-party services used by the project. Solus Staff reserves the right to either ban or terminate access, on a temporary or permanent basis, to members of the community which are found to be violating our guidelines."),(0,r.kt)("h2",{id:"general-guidelines"},"General Guidelines"),(0,r.kt)("p",null,"The guidelines laid out in this section apply to all services offered or used by the project, such as (but not limited to):"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Our Development Tracker"),(0,r.kt)("li",{parentName:"ul"},"Any and all forums or organized communities, e.g. our Forums or sub-reddit"),(0,r.kt)("li",{parentName:"ul"},"Matrix, IRC, or any other officially supported means of communicating with the project and community members in real-time"),(0,r.kt)("li",{parentName:"ul"},"Postings to social media pages / properties owned or used by the project.")),(0,r.kt)("h3",{id:"harassment"},"Harassment"),(0,r.kt)("p",null,"The project condemns any and all forms of harassment. Harassment by individuals in our community, whether in public (on services provided by or used by the project) or private (e.g. direct messages), to other members in our community, will result in the temporary or permanent banning of such individuals across any and all services provided by or used by the project."),(0,r.kt)("p",null,"This extends to any and all events / venues sponsored or otherwise supported by the project. Harassment in such events or venues will result in the permanent banning of such individuals from future events and if necessary, the immediate removal of such individuals from any current events / venues."),(0,r.kt)("p",null,"You are encouraged to reach out to a member of the Solus Staff should you be harassed by any member of our community so such matters may be addressed immediately."),(0,r.kt)("h3",{id:"language"},"Language"),(0,r.kt)("p",null,"Members of the community are expected to engage in a manner which is respectful and avoids the use of language which is hateful, derogatory, or otherwise intentionally degrading. This includes (but is not limited to) language which could be classified as:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Hateful towards individuals or groups based on:",(0,r.kt)("ul",{parentName:"li"},(0,r.kt)("li",{parentName:"ul"},"Disabilities"),(0,r.kt)("li",{parentName:"ul"},"Gender or gender identity"),(0,r.kt)("li",{parentName:"ul"},"Religious beliefs"),(0,r.kt)("li",{parentName:"ul"},"Sexual orientation"),(0,r.kt)("li",{parentName:"ul"},"Race or nationality"),(0,r.kt)("li",{parentName:"ul"},"Political affiliation"))),(0,r.kt)("li",{parentName:"ul"},"Sexual or otherwise lewd in nature")),(0,r.kt)("p",null,"Profane language which is not derogatory, hateful, or sexual in nature may be allowed in specific off-topic rooms or other locations permitted by the project. However, the Solus Staff moderation team reserves the right to request the immediate ceasing of the use of such language by any individual if it is deemed to be derogatory, hateful, sexual, or in a manner which is otherwise distasteful."),(0,r.kt)("h3",{id:"media-sharing"},"Media Sharing"),(0,r.kt)("p",null,"Members of the community shall not link / share media which is illegal, pornographic / sexual, or otherwise offensive in nature. This extends to sharing media which shows any illegal or otherwise harmful acts, such as acts of violence."),(0,r.kt)("h3",{id:"observe-topic-guidance"},"Observe Topic Guidance"),(0,r.kt)("p",null,"Members of the community should attempt to observe topic guidance when participating in various services offered or used by the project, such as:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Ensuring support-related rooms / mediums remain free of development and off-topic discussions to maximize the community and Solus Staff\u2019s ability to respond and address issues or support requests."),(0,r.kt)("li",{parentName:"ul"},"Ensuring development rooms / mediums remain free of off-topic discussions which are not relevant to the development or progression of various development items relating to Solus."),(0,r.kt)("li",{parentName:"ul"},"Ensuring off-topic rooms / mediums remain free of heated discussions of polarizing issues or current events in order to keep these spaces inviting and enjoyable.")),(0,r.kt)("h3",{id:"other"},"Other"),(0,r.kt)("p",null,"The below guidelines do not fall into any specific category but should be observed by members of the community:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"The continual repetition and/or advertisement of any products, services, or projects is not permitted."),(0,r.kt)("li",{parentName:"ul"},"The usage of bots unless explicitly permitted by the project is strictly forbidden."),(0,r.kt)("li",{parentName:"ul"},"No spamming or flooding. This may result in temporary removals (e.g. kicks in IRC) to prevent the continued spamming or flooding.")),(0,r.kt)("h2",{id:"service-specific-guidelines"},"Service-Specific Guidelines"),(0,r.kt)("p",null,"The below mentioned guidelines apply to individual services provided or used by the project."),(0,r.kt)("h3",{id:"development--issue-trackers"},"Development / Issue Trackers"),(0,r.kt)("p",null,"Solus utilizes a number of repositories and issue trackers to facilitate the development of various items in our project and to address issues raised by our community through tasks / issue reports. These include, but are not limited to:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Our ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/getsolus/"},"Documentation, Package, Software Center, and various tooling repositories")),(0,r.kt)("li",{parentName:"ul"},"Our package ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/getsolus/packages/issues"},"issue tracker")),(0,r.kt)("li",{parentName:"ul"},"All other issue trackers utilized by the project across repositories hosted in our GitHub organizations")),(0,r.kt)("p",null,"Members of the community are expected to:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Maintain on-topic discussions as relevant to each individual task"),(0,r.kt)("li",{parentName:"ul"},"Not engage in disruptive behavior such as the modification of tasks or task information which are not owned or assigned to the user. Please leave the general maintenance of tasks or requesting of specific information to individuals which are assigned to the task, or Solus Staff"),(0,r.kt)("li",{parentName:"ul"},"Refrain from using the Development Tracker for general support queries, such as (but not limited to): installation assistance, package installation assistance, etc.")),(0,r.kt)("p",null,"Members of the community should remain mindful that all contributors to the project do so on a voluntary basis, in their free time, and should refrain from making demands or engaging in behavior which is not respectful."),(0,r.kt)("p",null,"Solus Staff reserves the rights to:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"Close or lock tasks on a temporary or permanent basis"),(0,r.kt)("li",{parentName:"ul"},"Disable the account of individuals which violate either general guidelines or \u201cDevelopment / Issue Trackers\u201d-specific guidelines."),(0,r.kt)("li",{parentName:"ul"},"Make any finalized decisions in the interest of the project, continuation of our vision / objectives for the project or various software which we develop or support.")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/61c953b4.a304f614.js b/assets/js/61c953b4.a304f614.js new file mode 100644 index 000000000..f5ca2b05a --- /dev/null +++ b/assets/js/61c953b4.a304f614.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[8032],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>h});var n=a(7294);function i(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function r(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function o(e){for(var t=1;t=0||(i[a]=e[a]);return i}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(i[a]=e[a])}return i}var p=n.createContext({}),l=function(e){var t=n.useContext(p),a=t;return e&&(a="function"==typeof e?e(t):o(o({},t),e)),a},c=function(e){var t=l(e.components);return n.createElement(p.Provider,{value:t},e.children)},d="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},u=n.forwardRef((function(e,t){var a=e.components,i=e.mdxType,r=e.originalType,p=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),d=l(a),u=i,h=d["".concat(p,".").concat(u)]||d[u]||m[u]||r;return a?n.createElement(h,o(o({ref:t},c),{},{components:a})):n.createElement(h,o({ref:t},c))}));function h(e,t){var a=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var r=a.length,o=new Array(r);o[0]=u;var s={};for(var p in t)hasOwnProperty.call(t,p)&&(s[p]=t[p]);s.originalType=e,s[d]="string"==typeof e?e:i,o[1]=s;for(var l=2;l{a.r(t),a.d(t,{assets:()=>p,contentTitle:()=>o,default:()=>m,frontMatter:()=>r,metadata:()=>s,toc:()=>l});var n=a(7462),i=(a(7294),a(3905));const r={title:"Maintainership",summary:"Package maintainership"},o="Maintainership",s={unversionedId:"packaging/procedures/maintainership",id:"packaging/procedures/maintainership",title:"Maintainership",description:"The role of a maintainer is to update package(s) on a regular basis, while following Solus packaging and consistency standards.",source:"@site/docs/packaging/procedures/maintainership.md",sourceDirName:"packaging/procedures",slug:"/packaging/procedures/maintainership",permalink:"/docs/packaging/procedures/maintainership",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/procedures/maintainership.md",tags:[],version:"current",lastUpdatedAt:1695222528,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Maintainership",summary:"Package maintainership"},sidebar:"packagingSidebar",previous:{title:"Procedures",permalink:"/docs/category/procedures"},next:{title:"Package Inclusion Policy",permalink:"/docs/packaging/procedures/package-inclusion"}},p={},l=[{value:"Commitment",id:"commitment",level:2},{value:"Stepping In",id:"stepping-in",level:2},{value:"Updating a Maintained Package",id:"updating-a-maintained-package",level:2},{value:"Maintainers",id:"maintainers",level:3},{value:"Non-maintainers",id:"non-maintainers",level:3},{value:"Template for the MAINTAINERS.md File",id:"template-for-the-maintainersmd-file",level:2}],c={toc:l},d="wrapper";function m(e){let{components:t,...a}=e;return(0,i.kt)(d,(0,n.Z)({},c,a,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"maintainership"},"Maintainership"),(0,i.kt)("p",null,"The role of a maintainer is to update package(s) on a regular basis, while following Solus packaging and consistency standards."),(0,i.kt)("h2",{id:"commitment"},"Commitment"),(0,i.kt)("p",null,"Each new package which is going to land in the Solus repository must have one or more maintainers. These individuals commit to:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Update the package reasonably regularly, unless there are valid reasons to hold it back"),(0,i.kt)("li",{parentName:"ul"},"Ensure the ",(0,i.kt)("a",{parentName:"li",href:"/docs/packaging/package.yml"},"packaging file")," adheres to the Solus ",(0,i.kt)("a",{parentName:"li",href:"/docs/packaging/packaging-practices"},"standards")),(0,i.kt)("li",{parentName:"ul"},"Ensure the application or library is consistent with the Operating System aesthetics, file system conventions and the Solus philosophy in general")),(0,i.kt)("p",null,"On the Solus side however, the community must not forget that maintainers are volunteers, which may or may not have a technical background. More experienced users are to engage new maintainers in a welcoming manner, e.g. by listing their errors and inviting them to fix them. (More on this in the ",(0,i.kt)("a",{parentName:"p",href:"/docs/user/contributing/community-guidelines#development--issue-trackers"},"community guidelines"),")"),(0,i.kt)("p",null,"The Solus Staff have the right to enforce certain practices, even when in contrast with maintainers' vision. It also has the right to ultimately accept or reject a patch."),(0,i.kt)("h2",{id:"stepping-in"},"Stepping In"),(0,i.kt)("p",null,"To officially step in as the maintainer of a package, a ",(0,i.kt)("inlineCode",{parentName:"p"},"MAINTAINERS.md")," file must be provided for accepted packages that are not yet included in the repository, or if the package predates the policy of requiring one. Instead, if a previously maintained package is marked by Solus Staff as needing a new maintainer, the ",(0,i.kt)("inlineCode",{parentName:"p"},"MAINTAINERS.md")," file must be updated."),(0,i.kt)("h2",{id:"updating-a-maintained-package"},"Updating a Maintained Package"),(0,i.kt)("p",null,"The procedure varies depending on whether or not the individual is the maintainer."),(0,i.kt)("h3",{id:"maintainers"},"Maintainers"),(0,i.kt)("p",null,"Maintainers are free to ",(0,i.kt)("a",{parentName:"p",href:"/docs/packaging/updating-an-existing-package"},"update a package")," at their will, unless otherwise indicated by Solus Staff."),(0,i.kt)("h3",{id:"non-maintainers"},"Non-maintainers"),(0,i.kt)("p",null,"If a package is actively maintained, modifications should not occur and the individual should exercise patience when it comes to updates. In some cases, a maintainer may intentionally be holding back a package, or has simply not updated yet. If pertinent, the individual should file a ",(0,i.kt)("a",{parentName:"p",href:"/docs/packaging/procedures/request-a-package-update"},"package update request"),". Alternatively, the individual can reach the maintainers or Solus Staff via the Solus Packaging room on ",(0,i.kt)("a",{parentName:"p",href:"/docs/user/contributing/getting-involved#matrix-chat"},"Matrix")," and ask permission to update the package. It is also possible to submit an update and attach a message to it clarifying the intention of updating the package, although this is a special case reserved to e.g. security updates."),(0,i.kt)("h2",{id:"template-for-the-maintainersmd-file"},"Template for the ",(0,i.kt)("inlineCode",{parentName:"h2"},"MAINTAINERS.md")," File"),(0,i.kt)("p",null,"Presented here is the ",(0,i.kt)("inlineCode",{parentName:"p"},"MAINTAINERS.md")," file. This file must be provided verbatim alongside the other patch contents, and filled in with the maintainers' personal information. A ",(0,i.kt)("a",{parentName:"p",href:"https://help.getsol.us/docs/user/contributing/getting-involved#matrix-chat"},"Matrix")," contact is optional but recommended, while an email address is mandatory. Similar to the ",(0,i.kt)("inlineCode",{parentName:"p"},".solus/packager")," file used for packaging, the maintainers listed in ",(0,i.kt)("inlineCode",{parentName:"p"},"MAINTAINERS.md")," must use their real first and last name(s) for accountability purposes."),(0,i.kt)("p",null,"The contact information section is a YAML list. If needed, more elements may be added, each per maintainer. Do not edit the file in any other way, including spacing, except ",(0,i.kt)("em",{parentName:"p"},"Name"),", ",(0,i.kt)("em",{parentName:"p"},"Surname")," and ",(0,i.kt)("em",{parentName:"p"},"REPLACEME")," placeholders."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"This file is used to indicate primary maintainership for this package. A package may list more than one maintainer to avoid bus factor issues. People on this list may be considered \u201csubject-matter experts\u201d. Please note that Solus Staff may need to perform necessary rebuilds, upgrades, or security fixes as part of the normal maintenance of the Solus package repository. If you believe this package requires an update, follow documentation from https://help.getsol.us/docs/packaging/procedures/request-a-package-update. In the event that this package becomes insufficiently maintained, the Solus Staff reserves the right to request a new maintainer, or deprecate and remove this package from the repository entirely.\n\n- Name Surname\n - Matrix: REPLACEME\n - Email: REPLACEME\n")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/61c953b4.cc613f3c.js b/assets/js/61c953b4.cc613f3c.js deleted file mode 100644 index ee1ce8942..000000000 --- a/assets/js/61c953b4.cc613f3c.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[8032],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>h});var n=a(7294);function i(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function r(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function o(e){for(var t=1;t=0||(i[a]=e[a]);return i}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(i[a]=e[a])}return i}var p=n.createContext({}),l=function(e){var t=n.useContext(p),a=t;return e&&(a="function"==typeof e?e(t):o(o({},t),e)),a},c=function(e){var t=l(e.components);return n.createElement(p.Provider,{value:t},e.children)},d="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var a=e.components,i=e.mdxType,r=e.originalType,p=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),d=l(a),m=i,h=d["".concat(p,".").concat(m)]||d[m]||u[m]||r;return a?n.createElement(h,o(o({ref:t},c),{},{components:a})):n.createElement(h,o({ref:t},c))}));function h(e,t){var a=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var r=a.length,o=new Array(r);o[0]=m;var s={};for(var p in t)hasOwnProperty.call(t,p)&&(s[p]=t[p]);s.originalType=e,s[d]="string"==typeof e?e:i,o[1]=s;for(var l=2;l{a.r(t),a.d(t,{assets:()=>p,contentTitle:()=>o,default:()=>u,frontMatter:()=>r,metadata:()=>s,toc:()=>l});var n=a(7462),i=(a(7294),a(3905));const r={title:"Maintainership",summary:"Package maintainership"},o="Maintainership",s={unversionedId:"packaging/procedures/maintainership",id:"packaging/procedures/maintainership",title:"Maintainership",description:"The role of a maintainer is to update package(s) on a regular basis, while following Solus packaging and consistency standards.",source:"@site/docs/packaging/procedures/maintainership.md",sourceDirName:"packaging/procedures",slug:"/packaging/procedures/maintainership",permalink:"/docs/packaging/procedures/maintainership",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/procedures/maintainership.md",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Maintainership",summary:"Package maintainership"},sidebar:"packagingSidebar",previous:{title:"Diff to Pull Request",permalink:"/docs/packaging/procedures/diff-to-pull-request"},next:{title:"Migrating Existing Repos to GitHub",permalink:"/docs/packaging/procedures/migrate-repos-to-github"}},p={},l=[{value:"Commitment",id:"commitment",level:2},{value:"Stepping In",id:"stepping-in",level:2},{value:"Updating a Maintained Package",id:"updating-a-maintained-package",level:2},{value:"Maintainers",id:"maintainers",level:3},{value:"Non-maintainers",id:"non-maintainers",level:3},{value:"Template for the MAINTAINERS.md File",id:"template-for-the-maintainersmd-file",level:2}],c={toc:l},d="wrapper";function u(e){let{components:t,...a}=e;return(0,i.kt)(d,(0,n.Z)({},c,a,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"maintainership"},"Maintainership"),(0,i.kt)("p",null,"The role of a maintainer is to update package(s) on a regular basis, while following Solus packaging and consistency standards."),(0,i.kt)("h2",{id:"commitment"},"Commitment"),(0,i.kt)("p",null,"Each new package which is going to land in the Solus repository must have one or more maintainers. These individuals commit to:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Update the package reasonably regularly, unless there are valid reasons to hold it back"),(0,i.kt)("li",{parentName:"ul"},"Ensure the ",(0,i.kt)("a",{parentName:"li",href:"/docs/packaging/package.yml"},"packaging file")," adheres to the Solus ",(0,i.kt)("a",{parentName:"li",href:"/docs/packaging/packaging-practices"},"standards")),(0,i.kt)("li",{parentName:"ul"},"Ensure the application or library is consistent with the Operating System aesthetics, file system conventions and the Solus philosophy in general")),(0,i.kt)("p",null,"On the Solus side however, the community must not forget that maintainers are volunteers, which may or may not have a technical background. More experienced users are to engage new maintainers in a welcoming manner, e.g. by listing their errors and inviting them to fix them. (More on this in the ",(0,i.kt)("a",{parentName:"p",href:"/docs/user/contributing/community-guidelines#development--issue-trackers"},"community guidelines"),")"),(0,i.kt)("p",null,"The Solus Staff have the right to enforce certain practices, even when in contrast with maintainers' vision. It also has the right to ultimately accept or reject a patch."),(0,i.kt)("h2",{id:"stepping-in"},"Stepping In"),(0,i.kt)("p",null,"To officially step in as the maintainer of a package, a ",(0,i.kt)("inlineCode",{parentName:"p"},"MAINTAINERS.md")," file must be provided for accepted packages that are not yet included in the repository, or if the package predates the policy of requiring one. Instead, if a previously maintained package is marked by Solus Staff as needing a new maintainer, the ",(0,i.kt)("inlineCode",{parentName:"p"},"MAINTAINERS.md")," file must be updated."),(0,i.kt)("h2",{id:"updating-a-maintained-package"},"Updating a Maintained Package"),(0,i.kt)("p",null,"The procedure varies depending on whether or not the individual is the maintainer."),(0,i.kt)("h3",{id:"maintainers"},"Maintainers"),(0,i.kt)("p",null,"Maintainers are free to ",(0,i.kt)("a",{parentName:"p",href:"/docs/packaging/updating-an-existing-package"},"update a package")," at their will, unless otherwise indicated by Solus Staff."),(0,i.kt)("h3",{id:"non-maintainers"},"Non-maintainers"),(0,i.kt)("p",null,"If a package is actively maintained, modifications should not occur and the individual should exercise patience when it comes to updates. In some cases, a maintainer may intentionally be holding back a package, or has simply not updated yet. If pertinent, the individual should file a ",(0,i.kt)("a",{parentName:"p",href:"/docs/packaging/procedures/request-a-package-update"},"package update request"),". Alternatively, the individual can reach the maintainers or Solus Staff via the Solus Packaging room on ",(0,i.kt)("a",{parentName:"p",href:"/docs/user/contributing/getting-involved#matrix-chat"},"Matrix")," and ask permission to update the package. It is also possible to submit an update and attach a message to it clarifying the intention of updating the package, although this is a special case reserved to e.g. security updates."),(0,i.kt)("h2",{id:"template-for-the-maintainersmd-file"},"Template for the ",(0,i.kt)("inlineCode",{parentName:"h2"},"MAINTAINERS.md")," File"),(0,i.kt)("p",null,"Presented here is the ",(0,i.kt)("inlineCode",{parentName:"p"},"MAINTAINERS.md")," file. This file must be provided verbatim alongside the other patch contents, and filled in with the maintainers' personal information. A ",(0,i.kt)("a",{parentName:"p",href:"https://help.getsol.us/docs/user/contributing/getting-involved#matrix-chat"},"Matrix")," contact is optional but recommended, while an email address is mandatory. Similar to the ",(0,i.kt)("inlineCode",{parentName:"p"},".solus/packager")," file used for packaging, the maintainers listed in ",(0,i.kt)("inlineCode",{parentName:"p"},"MAINTAINERS.md")," must use their real first and last name(s) for accountability purposes."),(0,i.kt)("p",null,"The contact information section is a YAML list. If needed, more elements may be added, each per maintainer. Do not edit the file in any other way, including spacing, except ",(0,i.kt)("em",{parentName:"p"},"Name"),", ",(0,i.kt)("em",{parentName:"p"},"Surname")," and ",(0,i.kt)("em",{parentName:"p"},"REPLACEME")," placeholders."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"This file is used to indicate primary maintainership for this package. A package may list more than one maintainer to avoid bus factor issues. People on this list may be considered \u201csubject-matter experts\u201d. Please note that Solus Staff may need to perform necessary rebuilds, upgrades, or security fixes as part of the normal maintenance of the Solus package repository. If you believe this package requires an update, follow documentation from https://help.getsol.us/docs/packaging/procedures/request-a-package-update. In the event that this package becomes insufficiently maintained, the Solus Staff reserves the right to request a new maintainer, or deprecate and remove this package from the repository entirely.\n\n- Name Surname\n - Matrix: REPLACEME\n - Email: REPLACEME\n")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/64699048.a8545eff.js b/assets/js/64699048.2670a513.js similarity index 98% rename from assets/js/64699048.a8545eff.js rename to assets/js/64699048.2670a513.js index 857838edd..80a22cf72 100644 --- a/assets/js/64699048.a8545eff.js +++ b/assets/js/64699048.2670a513.js @@ -1 +1 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[2151],{3905:(e,t,o)=>{o.d(t,{Zo:()=>c,kt:()=>f});var n=o(7294);function r(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function l(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,n)}return o}function a(e){for(var t=1;t=0||(r[o]=e[o]);return r}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(r[o]=e[o])}return r}var i=n.createContext({}),p=function(e){var t=n.useContext(i),o=t;return e&&(o="function"==typeof e?e(t):a(a({},t),e)),o},c=function(e){var t=p(e.components);return n.createElement(i.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var o=e.components,r=e.mdxType,l=e.originalType,i=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),u=p(o),m=r,f=u["".concat(i,".").concat(m)]||u[m]||d[m]||l;return o?n.createElement(f,a(a({ref:t},c),{},{components:o})):n.createElement(f,a({ref:t},c))}));function f(e,t){var o=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var l=o.length,a=new Array(l);a[0]=m;var s={};for(var i in t)hasOwnProperty.call(t,i)&&(s[i]=t[i]);s.originalType=e,s[u]="string"==typeof e?e:r,a[1]=s;for(var p=2;p{o.r(t),o.d(t,{assets:()=>i,contentTitle:()=>a,default:()=>d,frontMatter:()=>l,metadata:()=>s,toc:()=>p});var n=o(7462),r=(o(7294),o(3905));const l={title:"Development",summary:"Installation of development software on Solus"},a="Development",s={unversionedId:"user/software/development/index",id:"user/software/development/index",title:"Development",description:"Base Development Tools",source:"@site/docs/user/software/development/index.md",sourceDirName:"user/software/development",slug:"/user/software/development/",permalink:"/docs/user/software/development/",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/development/index.md",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Development",summary:"Installation of development software on Solus"},sidebar:"userSidebar",previous:{title:"Desktops",permalink:"/docs/user/software/desktops/"},next:{title:"Android",permalink:"/docs/user/software/development/android"}},i={},p=[{value:"Base Development Tools",id:"base-development-tools",level:2},{value:"Additional Tools",id:"additional-tools",level:2}],c={toc:p},u="wrapper";function d(e){let{components:t,...o}=e;return(0,r.kt)(u,(0,n.Z)({},c,o,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"development"},"Development"),(0,r.kt)("h2",{id:"base-development-tools"},"Base Development Tools"),(0,r.kt)("p",null,"If you are wanting to compile software under Solus, we recommend installing our system.devel component by running the following:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg install -c system.devel\n")),(0,r.kt)("p",null,"This will provide items such as clang, gcc, make, a multitude of devel sub-packages, and more. Our system.devel is similar to packages on other operating systems, such as Debian's build-essentials."),(0,r.kt)("h2",{id:"additional-tools"},"Additional Tools"),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"TODO: Add blockquote CSS to mkdocs theme")),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"TODO: Add links to the other development pages")))}d.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[2151],{3905:(e,t,o)=>{o.d(t,{Zo:()=>c,kt:()=>f});var n=o(7294);function r(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function l(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,n)}return o}function a(e){for(var t=1;t=0||(r[o]=e[o]);return r}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(r[o]=e[o])}return r}var i=n.createContext({}),p=function(e){var t=n.useContext(i),o=t;return e&&(o="function"==typeof e?e(t):a(a({},t),e)),o},c=function(e){var t=p(e.components);return n.createElement(i.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var o=e.components,r=e.mdxType,l=e.originalType,i=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),u=p(o),m=r,f=u["".concat(i,".").concat(m)]||u[m]||d[m]||l;return o?n.createElement(f,a(a({ref:t},c),{},{components:o})):n.createElement(f,a({ref:t},c))}));function f(e,t){var o=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var l=o.length,a=new Array(l);a[0]=m;var s={};for(var i in t)hasOwnProperty.call(t,i)&&(s[i]=t[i]);s.originalType=e,s[u]="string"==typeof e?e:r,a[1]=s;for(var p=2;p{o.r(t),o.d(t,{assets:()=>i,contentTitle:()=>a,default:()=>d,frontMatter:()=>l,metadata:()=>s,toc:()=>p});var n=o(7462),r=(o(7294),o(3905));const l={title:"Development",summary:"Installation of development software on Solus"},a="Development",s={unversionedId:"user/software/development/index",id:"user/software/development/index",title:"Development",description:"Base Development Tools",source:"@site/docs/user/software/development/index.md",sourceDirName:"user/software/development",slug:"/user/software/development/",permalink:"/docs/user/software/development/",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/development/index.md",tags:[],version:"current",lastUpdatedAt:1695222528,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Development",summary:"Installation of development software on Solus"},sidebar:"userSidebar",previous:{title:"Desktops",permalink:"/docs/user/software/desktops/"},next:{title:"Android",permalink:"/docs/user/software/development/android"}},i={},p=[{value:"Base Development Tools",id:"base-development-tools",level:2},{value:"Additional Tools",id:"additional-tools",level:2}],c={toc:p},u="wrapper";function d(e){let{components:t,...o}=e;return(0,r.kt)(u,(0,n.Z)({},c,o,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"development"},"Development"),(0,r.kt)("h2",{id:"base-development-tools"},"Base Development Tools"),(0,r.kt)("p",null,"If you are wanting to compile software under Solus, we recommend installing our system.devel component by running the following:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg install -c system.devel\n")),(0,r.kt)("p",null,"This will provide items such as clang, gcc, make, a multitude of devel sub-packages, and more. Our system.devel is similar to packages on other operating systems, such as Debian's build-essentials."),(0,r.kt)("h2",{id:"additional-tools"},"Additional Tools"),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"TODO: Add blockquote CSS to mkdocs theme")),(0,r.kt)("blockquote",null,(0,r.kt)("p",{parentName:"blockquote"},"TODO: Add links to the other development pages")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/6787574e.fd64fe82.js b/assets/js/6787574e.729d102a.js similarity index 99% rename from assets/js/6787574e.fd64fe82.js rename to assets/js/6787574e.729d102a.js index 0b254a3fb..5bd7f2e2d 100644 --- a/assets/js/6787574e.fd64fe82.js +++ b/assets/js/6787574e.729d102a.js @@ -1 +1 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[4500],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>d});var o=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function s(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function a(e){for(var t=1;t=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var l=o.createContext({}),u=function(e){var t=o.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},p=function(e){var t=u(e.components);return o.createElement(l.Provider,{value:t},e.children)},c="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},h=o.forwardRef((function(e,t){var r=e.components,n=e.mdxType,s=e.originalType,l=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),c=u(r),h=n,d=c["".concat(l,".").concat(h)]||c[h]||m[h]||s;return r?o.createElement(d,a(a({ref:t},p),{},{components:r})):o.createElement(d,a({ref:t},p))}));function d(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var s=r.length,a=new Array(s);a[0]=h;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i[c]="string"==typeof e?e:n,a[1]=i;for(var u=2;u{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>a,default:()=>m,frontMatter:()=>s,metadata:()=>i,toc:()=>u});var o=r(7462),n=(r(7294),r(3905));const s={title:"Welcome",summary:"Front page of the Help Center",sidebar_position:0},a="Welcome",i={unversionedId:"user/intro",id:"user/intro",title:"Welcome",description:"Solus is committed to helping our users get the most out of their systems. The Help Center has been put together to introduce Solus users to our ecosystem and guide them through some of the most common tasks they might need help with.",source:"@site/docs/user/intro.md",sourceDirName:"user",slug:"/user/intro",permalink:"/docs/user/intro",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/intro.md",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",sidebarPosition:0,frontMatter:{title:"Welcome",summary:"Front page of the Help Center",sidebar_position:0},sidebar:"userSidebar",next:{title:"Quick Start",permalink:"/docs/category/quick-start"}},l={},u=[{value:"Sections",id:"sections",level:2},{value:"Additional Support",id:"additional-support",level:2}],p={toc:u},c="wrapper";function m(e){let{components:t,...r}=e;return(0,n.kt)(c,(0,o.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"welcome"},"Welcome"),(0,n.kt)("p",null,"Solus is committed to helping our users get the most out of their systems. The Help Center has been put together to introduce Solus users to our ecosystem and guide them through some of the most common tasks they might need help with."),(0,n.kt)("h2",{id:"sections"},"Sections"),(0,n.kt)("p",null,"With that in mind, the Help Center has been broken up into several sections to help better organize the docs within:"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},(0,n.kt)("a",{parentName:"strong",href:"/docs/category/quick-start"},"Quick Start"))),(0,n.kt)("p",null,"If you've never used Solus before, this section will set you on the right track. It contains docs related to installing Solus, software package management, the boot process, and troubleshooting all of the above."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},(0,n.kt)("a",{parentName:"strong",href:"/docs/user/editions/"},"Editions"))),(0,n.kt)("p",null,"Solus comes in multiple Editions for different Desktop Environments. The purpose of this section is to introduce you to those desktops, walk you through common configuration tasks, and provides useful tips and tricks."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},(0,n.kt)("a",{parentName:"strong",href:"/docs/user/hardware/"},"Hardware"))),(0,n.kt)("p",null,"For the most part, Solus will work with the majority of hardware out-of-the-box. But there are always exceptions. The docs in this section are focused on those exceptions and how to get the most out of your hardware."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},(0,n.kt)("a",{parentName:"strong",href:"/docs/category/software"},"Software"))),(0,n.kt)("p",null,"We believe that Solus is for everyone. Each installation comes with a sane set of default applications for the majority of people, but everyone uses Solus for their own reasons. This section is intended to help you install other software to better suit your needs."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},(0,n.kt)("a",{parentName:"strong",href:"/docs/category/contributing"},"Contributing"))),(0,n.kt)("p",null,"Solus is not a commercial project. It is built and maintained by volunteers who use Solus every day and have a passion for making it better. Whatever your skill-level or knowledge about Linux and Solus, this section will show you how to contribute to Solus."),(0,n.kt)("h2",{id:"additional-support"},"Additional Support"),(0,n.kt)("p",null,"The Help Center is not intended to be as comprehensive as something like the Arch Wiki. If you find yourself needing help with something not covered here, there are a varienty of places you might get support from us or fellow users."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},(0,n.kt)("a",{parentName:"strong",href:"https://discuss.getsol.us"},"Forums"))),(0,n.kt)("p",null,"Our Flarum-powered forums are easy to use from any device and are a great resource for getting support."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},(0,n.kt)("a",{parentName:"strong",href:"https://matrix.to/#/#solus:matrix.org"},"Matrix"))),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Matrix_(protocol)"},"Matrix")," is a great way to discuss issues and development with the community, and project developers in real-time. It's also a great place for getting support, but remember due\nto timezone differences there might not always be people there to answer your question immediately. You can access ",(0,n.kt)("a",{parentName:"p",href:"/docs/user/contributing/getting-involved#matrix-chat"},"Matrix")," using a client like ",(0,n.kt)("a",{parentName:"p",href:"https://app.element.io/"},"Element Web"),", or many ",(0,n.kt)("a",{parentName:"p",href:"https://matrix.org/clients/"},"others"),". You will need a ",(0,n.kt)("a",{parentName:"p",href:"/docs/user/contributing/getting-involved#matrix-chat"},"Matrix")," account."),(0,n.kt)("p",null,"Read more about Solus on Matrix ",(0,n.kt)("a",{parentName:"p",href:"/docs/user/contributing/getting-involved#matrix-chat"},"here.")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},(0,n.kt)("a",{parentName:"strong",href:"https://www.reddit.com/r/SolusProject"},"Reddit"))),(0,n.kt)("p",null,"If you are a Redditor, our subreddit fulfills a similar purpose to the forums."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},(0,n.kt)("a",{parentName:"strong",href:"https://issues.getsol.us"},"Issue Tracker"))),(0,n.kt)("p",null,"If you are having issues with your Solus system or one of our software packages not working as expected, you might consider filing a bug report on our Dev Tracker."))}m.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[4500],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>d});var o=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function s(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,o)}return r}function a(e){for(var t=1;t=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var l=o.createContext({}),u=function(e){var t=o.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},p=function(e){var t=u(e.components);return o.createElement(l.Provider,{value:t},e.children)},c="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},h=o.forwardRef((function(e,t){var r=e.components,n=e.mdxType,s=e.originalType,l=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),c=u(r),h=n,d=c["".concat(l,".").concat(h)]||c[h]||m[h]||s;return r?o.createElement(d,a(a({ref:t},p),{},{components:r})):o.createElement(d,a({ref:t},p))}));function d(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var s=r.length,a=new Array(s);a[0]=h;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i[c]="string"==typeof e?e:n,a[1]=i;for(var u=2;u{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>a,default:()=>m,frontMatter:()=>s,metadata:()=>i,toc:()=>u});var o=r(7462),n=(r(7294),r(3905));const s={title:"Welcome",summary:"Front page of the Help Center",sidebar_position:0},a="Welcome",i={unversionedId:"user/intro",id:"user/intro",title:"Welcome",description:"Solus is committed to helping our users get the most out of their systems. The Help Center has been put together to introduce Solus users to our ecosystem and guide them through some of the most common tasks they might need help with.",source:"@site/docs/user/intro.md",sourceDirName:"user",slug:"/user/intro",permalink:"/docs/user/intro",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/intro.md",tags:[],version:"current",lastUpdatedAt:1695222528,formattedLastUpdatedAt:"Sep 20, 2023",sidebarPosition:0,frontMatter:{title:"Welcome",summary:"Front page of the Help Center",sidebar_position:0},sidebar:"userSidebar",next:{title:"Quick Start",permalink:"/docs/category/quick-start"}},l={},u=[{value:"Sections",id:"sections",level:2},{value:"Additional Support",id:"additional-support",level:2}],p={toc:u},c="wrapper";function m(e){let{components:t,...r}=e;return(0,n.kt)(c,(0,o.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"welcome"},"Welcome"),(0,n.kt)("p",null,"Solus is committed to helping our users get the most out of their systems. The Help Center has been put together to introduce Solus users to our ecosystem and guide them through some of the most common tasks they might need help with."),(0,n.kt)("h2",{id:"sections"},"Sections"),(0,n.kt)("p",null,"With that in mind, the Help Center has been broken up into several sections to help better organize the docs within:"),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},(0,n.kt)("a",{parentName:"strong",href:"/docs/category/quick-start"},"Quick Start"))),(0,n.kt)("p",null,"If you've never used Solus before, this section will set you on the right track. It contains docs related to installing Solus, software package management, the boot process, and troubleshooting all of the above."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},(0,n.kt)("a",{parentName:"strong",href:"/docs/user/editions/"},"Editions"))),(0,n.kt)("p",null,"Solus comes in multiple Editions for different Desktop Environments. The purpose of this section is to introduce you to those desktops, walk you through common configuration tasks, and provides useful tips and tricks."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},(0,n.kt)("a",{parentName:"strong",href:"/docs/user/hardware/"},"Hardware"))),(0,n.kt)("p",null,"For the most part, Solus will work with the majority of hardware out-of-the-box. But there are always exceptions. The docs in this section are focused on those exceptions and how to get the most out of your hardware."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},(0,n.kt)("a",{parentName:"strong",href:"/docs/category/software"},"Software"))),(0,n.kt)("p",null,"We believe that Solus is for everyone. Each installation comes with a sane set of default applications for the majority of people, but everyone uses Solus for their own reasons. This section is intended to help you install other software to better suit your needs."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},(0,n.kt)("a",{parentName:"strong",href:"/docs/category/contributing"},"Contributing"))),(0,n.kt)("p",null,"Solus is not a commercial project. It is built and maintained by volunteers who use Solus every day and have a passion for making it better. Whatever your skill-level or knowledge about Linux and Solus, this section will show you how to contribute to Solus."),(0,n.kt)("h2",{id:"additional-support"},"Additional Support"),(0,n.kt)("p",null,"The Help Center is not intended to be as comprehensive as something like the Arch Wiki. If you find yourself needing help with something not covered here, there are a varienty of places you might get support from us or fellow users."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},(0,n.kt)("a",{parentName:"strong",href:"https://discuss.getsol.us"},"Forums"))),(0,n.kt)("p",null,"Our Flarum-powered forums are easy to use from any device and are a great resource for getting support."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},(0,n.kt)("a",{parentName:"strong",href:"https://matrix.to/#/#solus:matrix.org"},"Matrix"))),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"https://en.wikipedia.org/wiki/Matrix_(protocol)"},"Matrix")," is a great way to discuss issues and development with the community, and project developers in real-time. It's also a great place for getting support, but remember due\nto timezone differences there might not always be people there to answer your question immediately. You can access ",(0,n.kt)("a",{parentName:"p",href:"/docs/user/contributing/getting-involved#matrix-chat"},"Matrix")," using a client like ",(0,n.kt)("a",{parentName:"p",href:"https://app.element.io/"},"Element Web"),", or many ",(0,n.kt)("a",{parentName:"p",href:"https://matrix.org/clients/"},"others"),". You will need a ",(0,n.kt)("a",{parentName:"p",href:"/docs/user/contributing/getting-involved#matrix-chat"},"Matrix")," account."),(0,n.kt)("p",null,"Read more about Solus on Matrix ",(0,n.kt)("a",{parentName:"p",href:"/docs/user/contributing/getting-involved#matrix-chat"},"here.")),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},(0,n.kt)("a",{parentName:"strong",href:"https://www.reddit.com/r/SolusProject"},"Reddit"))),(0,n.kt)("p",null,"If you are a Redditor, our subreddit fulfills a similar purpose to the forums."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},(0,n.kt)("a",{parentName:"strong",href:"https://issues.getsol.us"},"Issue Tracker"))),(0,n.kt)("p",null,"If you are having issues with your Solus system or one of our software packages not working as expected, you might consider filing a bug report on our Dev Tracker."))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/6cfe09a0.2f6cd3cf.js b/assets/js/6cfe09a0.031ee958.js similarity index 99% rename from assets/js/6cfe09a0.2f6cd3cf.js rename to assets/js/6cfe09a0.031ee958.js index 133373f64..656a0ac70 100644 --- a/assets/js/6cfe09a0.2f6cd3cf.js +++ b/assets/js/6cfe09a0.031ee958.js @@ -1 +1 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[1174],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>m});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=r.createContext({}),u=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},p=function(e){var t=u(e.components);return r.createElement(l.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},g=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),c=u(n),g=o,m=c["".concat(l,".").concat(g)]||c[g]||d[g]||a;return n?r.createElement(m,i(i({ref:t},p),{},{components:n})):r.createElement(m,i({ref:t},p))}));function m(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=g;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[c]="string"==typeof e?e:o,i[1]=s;for(var u=2;u{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>s,toc:()=>u});var r=n(7462),o=(n(7294),n(3905));const a={title:"TigerVNC",summary:"A quick start guide to using TigerVNC on Solus"},i="TigerVNC",s={unversionedId:"user/software/networking/tigervnc",id:"user/software/networking/tigervnc",title:"TigerVNC",description:"TigerVNC is a high-performance implementation of the VNC protocol, which allows you to control/view desktops remotely over the internet.",source:"@site/docs/user/software/networking/tigervnc.md",sourceDirName:"user/software/networking",slug:"/user/software/networking/tigervnc",permalink:"/docs/user/software/networking/tigervnc",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/networking/tigervnc.md",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"TigerVNC",summary:"A quick start guide to using TigerVNC on Solus"},sidebar:"userSidebar",previous:{title:"Samba File Sharing",permalink:"/docs/user/software/networking/samba"},next:{title:"Wireshark",permalink:"/docs/user/software/networking/wireshark"}},l={},u=[{value:"Installation",id:"installation",level:2},{value:"Usage",id:"usage",level:2},{value:"Initial setup of vncserver",id:"initial-setup-of-vncserver",level:3},{value:"Configuration for your desktops",id:"configuration-for-your-desktops",level:3},{value:"Budgie",id:"budgie",level:3},{value:"GNOME",id:"gnome",level:3},{value:"MATE",id:"mate",level:3},{value:"Plasma",id:"plasma",level:3}],p={toc:u},c="wrapper";function d(e){let{components:t,...n}=e;return(0,o.kt)(c,(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"tigervnc"},"TigerVNC"),(0,o.kt)("p",null,"TigerVNC is a high-performance implementation of the VNC protocol, which allows you to control/view desktops remotely over the internet."),(0,o.kt)("h2",{id:"installation"},"Installation"),(0,o.kt)("p",null,"TigerVNC can be installed either from the Software Center or via terminal. The terminal command to run it is:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg install tigervnc\n")),(0,o.kt)("h2",{id:"usage"},"Usage"),(0,o.kt)("h3",{id:"initial-setup-of-vncserver"},"Initial setup of vncserver"),(0,o.kt)("p",null,"For the initial setup of vncserver for TigerVNC you have to open a terminal and run:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"vncserver\n")),(0,o.kt)("p",null,"While this setup you will be asked for setting up a ",(0,o.kt)("strong",{parentName:"p"},"password")," and if you'd like to setup a ",(0,o.kt)("strong",{parentName:"p"},"view-only mode"),", please do it accordingly your desire."),(0,o.kt)("p",null,"After the initial setup you have to stop the vncserver process, for this please type inside the terminal"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"vncserver -kill :1\n")),(0,o.kt)("h3",{id:"configuration-for-your-desktops"},"Configuration for your desktops"),(0,o.kt)("p",null,"Every Desktop needs a different Setup, you find the vncserver config under",(0,o.kt)("inlineCode",{parentName:"p"},"$HOME/.vnc/xstartup")," open the file with your desired editor and change bash script inside the file with the following information for your Desktop."),(0,o.kt)("h3",{id:"budgie"},"Budgie"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"#!/bin/bash\n\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\n\ngnome-session --session=budgie-desktop &\nbudgie-wm &\nbudgie-panel &\n")),(0,o.kt)("h3",{id:"gnome"},"GNOME"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"#!/bin/bash\n\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\nexport XKL_XMODMAP_DISABLE=1\n\ngnome-session &\ngnome-panel &\ngnome-settings-daemon &\nmetacity &\nnautilus &\n")),(0,o.kt)("h3",{id:"mate"},"MATE"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"#!/bin/bash\n\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\n\nmate-session &\nmate-panel &\n")),(0,o.kt)("h3",{id:"plasma"},"Plasma"),(0,o.kt)("p",null,"Plasma desktop is not supported at the moment. Please use the software ",(0,o.kt)("inlineCode",{parentName:"p"},"x11vnc")," for vncserver support on Plasma."))}d.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[1174],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>m});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=r.createContext({}),u=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},p=function(e){var t=u(e.components);return r.createElement(l.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},g=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),c=u(n),g=o,m=c["".concat(l,".").concat(g)]||c[g]||d[g]||a;return n?r.createElement(m,i(i({ref:t},p),{},{components:n})):r.createElement(m,i({ref:t},p))}));function m(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=g;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[c]="string"==typeof e?e:o,i[1]=s;for(var u=2;u{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>d,frontMatter:()=>a,metadata:()=>s,toc:()=>u});var r=n(7462),o=(n(7294),n(3905));const a={title:"TigerVNC",summary:"A quick start guide to using TigerVNC on Solus"},i="TigerVNC",s={unversionedId:"user/software/networking/tigervnc",id:"user/software/networking/tigervnc",title:"TigerVNC",description:"TigerVNC is a high-performance implementation of the VNC protocol, which allows you to control/view desktops remotely over the internet.",source:"@site/docs/user/software/networking/tigervnc.md",sourceDirName:"user/software/networking",slug:"/user/software/networking/tigervnc",permalink:"/docs/user/software/networking/tigervnc",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/networking/tigervnc.md",tags:[],version:"current",lastUpdatedAt:1695222528,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"TigerVNC",summary:"A quick start guide to using TigerVNC on Solus"},sidebar:"userSidebar",previous:{title:"Samba File Sharing",permalink:"/docs/user/software/networking/samba"},next:{title:"Wireshark",permalink:"/docs/user/software/networking/wireshark"}},l={},u=[{value:"Installation",id:"installation",level:2},{value:"Usage",id:"usage",level:2},{value:"Initial setup of vncserver",id:"initial-setup-of-vncserver",level:3},{value:"Configuration for your desktops",id:"configuration-for-your-desktops",level:3},{value:"Budgie",id:"budgie",level:3},{value:"GNOME",id:"gnome",level:3},{value:"MATE",id:"mate",level:3},{value:"Plasma",id:"plasma",level:3}],p={toc:u},c="wrapper";function d(e){let{components:t,...n}=e;return(0,o.kt)(c,(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"tigervnc"},"TigerVNC"),(0,o.kt)("p",null,"TigerVNC is a high-performance implementation of the VNC protocol, which allows you to control/view desktops remotely over the internet."),(0,o.kt)("h2",{id:"installation"},"Installation"),(0,o.kt)("p",null,"TigerVNC can be installed either from the Software Center or via terminal. The terminal command to run it is:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg install tigervnc\n")),(0,o.kt)("h2",{id:"usage"},"Usage"),(0,o.kt)("h3",{id:"initial-setup-of-vncserver"},"Initial setup of vncserver"),(0,o.kt)("p",null,"For the initial setup of vncserver for TigerVNC you have to open a terminal and run:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"vncserver\n")),(0,o.kt)("p",null,"While this setup you will be asked for setting up a ",(0,o.kt)("strong",{parentName:"p"},"password")," and if you'd like to setup a ",(0,o.kt)("strong",{parentName:"p"},"view-only mode"),", please do it accordingly your desire."),(0,o.kt)("p",null,"After the initial setup you have to stop the vncserver process, for this please type inside the terminal"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"vncserver -kill :1\n")),(0,o.kt)("h3",{id:"configuration-for-your-desktops"},"Configuration for your desktops"),(0,o.kt)("p",null,"Every Desktop needs a different Setup, you find the vncserver config under",(0,o.kt)("inlineCode",{parentName:"p"},"$HOME/.vnc/xstartup")," open the file with your desired editor and change bash script inside the file with the following information for your Desktop."),(0,o.kt)("h3",{id:"budgie"},"Budgie"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"#!/bin/bash\n\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\n\ngnome-session --session=budgie-desktop &\nbudgie-wm &\nbudgie-panel &\n")),(0,o.kt)("h3",{id:"gnome"},"GNOME"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"#!/bin/bash\n\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\nexport XKL_XMODMAP_DISABLE=1\n\ngnome-session &\ngnome-panel &\ngnome-settings-daemon &\nmetacity &\nnautilus &\n")),(0,o.kt)("h3",{id:"mate"},"MATE"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"#!/bin/bash\n\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\n\nmate-session &\nmate-panel &\n")),(0,o.kt)("h3",{id:"plasma"},"Plasma"),(0,o.kt)("p",null,"Plasma desktop is not supported at the moment. Please use the software ",(0,o.kt)("inlineCode",{parentName:"p"},"x11vnc")," for vncserver support on Plasma."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/74470af4.f0828f78.js b/assets/js/74470af4.84252df9.js similarity index 99% rename from assets/js/74470af4.f0828f78.js rename to assets/js/74470af4.84252df9.js index a05f39af3..282785112 100644 --- a/assets/js/74470af4.f0828f78.js +++ b/assets/js/74470af4.84252df9.js @@ -1 +1 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[1896],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>h});var a=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}return r}function l(e){for(var t=1;t=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var s=a.createContext({}),u=function(e){var t=a.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},p=function(e){var t=u(e.components);return a.createElement(s.Provider,{value:t},e.children)},d="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},c=a.forwardRef((function(e,t){var r=e.components,n=e.mdxType,o=e.originalType,s=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),d=u(r),c=n,h=d["".concat(s,".").concat(c)]||d[c]||m[c]||o;return r?a.createElement(h,l(l({ref:t},p),{},{components:r})):a.createElement(h,l({ref:t},p))}));function h(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var o=r.length,l=new Array(o);l[0]=c;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[d]="string"==typeof e?e:n,l[1]=i;for(var u=2;u{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>m,frontMatter:()=>o,metadata:()=>i,toc:()=>u});var a=r(7462),n=(r(7294),r(3905));const o={title:"VirtualBox",summary:"Quick start guide for VirtualBox on Solus"},l="VirtualBox",i={unversionedId:"user/software/virtualization/virtualbox",id:"user/software/virtualization/virtualbox",title:"VirtualBox",description:"VirtualBox is an x86 and x86_64 virtualization software package developed by Oracle.",source:"@site/docs/user/software/virtualization/virtualbox.md",sourceDirName:"user/software/virtualization",slug:"/user/software/virtualization/virtualbox",permalink:"/docs/user/software/virtualization/virtualbox",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/virtualization/virtualbox.md",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"VirtualBox",summary:"Quick start guide for VirtualBox on Solus"},sidebar:"userSidebar",previous:{title:"Virtualization",permalink:"/docs/category/virtualization"},next:{title:"Web",permalink:"/docs/category/web"}},s={},u=[{value:"Before you start",id:"before-you-start",level:2},{value:"Remove prior installation",id:"remove-prior-installation",level:3},{value:"Update your system",id:"update-your-system",level:3},{value:"Determine which kernel you are using",id:"determine-which-kernel-you-are-using",level:3},{value:"Solus as Host",id:"solus-as-host",level:2},{value:"Solus as Guest",id:"solus-as-guest",level:2},{value:"Extra configuration",id:"extra-configuration",level:2},{value:"USB Controller",id:"usb-controller",level:4},{value:"Shared Folders",id:"shared-folders",level:4},{value:"Troubleshooting",id:"troubleshooting",level:2}],p={toc:u},d="wrapper";function m(e){let{components:t,...o}=e;return(0,n.kt)(d,(0,a.Z)({},p,o,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"virtualbox"},"VirtualBox"),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"https://www.virtualbox.org/"},"VirtualBox")," is an x86 and x86_64 virtualization software package developed by Oracle."),(0,n.kt)("h2",{id:"before-you-start"},"Before you start"),(0,n.kt)("p",null,"This section applies to new installations for both ",(0,n.kt)("strong",{parentName:"p"},"Host")," and ",(0,n.kt)("strong",{parentName:"p"},"Guest"),"."),(0,n.kt)("h3",{id:"remove-prior-installation"},"Remove prior installation"),(0,n.kt)("p",null,"It is important to uninstall any version of VirtualBox (or VirtualBox Guest Additions) that ",(0,n.kt)("strong",{parentName:"p"},"was not")," installed from the Software Center or there will be conflicts that will prevent the application to work.\nThis can usually be done by executing the following command from a terminal:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo /opt/VirtualBox/uninstall.sh\n")),(0,n.kt)("h3",{id:"update-your-system"},"Update your system"),(0,n.kt)("p",null,"Ensure your system is up-to-date. This is very important because VirtualBox installs some kernel modules and the application will not work if your kernel is outdated."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg upgrade\n")),(0,n.kt)("h3",{id:"determine-which-kernel-you-are-using"},"Determine which kernel you are using"),(0,n.kt)("p",null,"Solus support both a ",(0,n.kt)("inlineCode",{parentName:"p"},"current")," and ",(0,n.kt)("inlineCode",{parentName:"p"},"lts")," kernel. It is important to install the version that corresponds to your kernel."),(0,n.kt)("p",null,"If you aren't sure which kernel you are running, run the following in terminal:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"uname -r\n")),(0,n.kt)("p",null,"You will either have a ",(0,n.kt)("inlineCode",{parentName:"p"},".current")," or ",(0,n.kt)("inlineCode",{parentName:"p"},".lts")," suffix. Examples: ",(0,n.kt)("inlineCode",{parentName:"p"},"5.13.1-187.current")," or ",(0,n.kt)("inlineCode",{parentName:"p"},"4.14.237-175.lts")),(0,n.kt)("h2",{id:"solus-as-host"},"Solus as Host"),(0,n.kt)("p",null,"VirtualBox is available in the Software Center, select the package that matches your kernel."),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:null},"virtualbox"),(0,n.kt)("th",{parentName:"tr",align:null},"virtualbox-current"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"VirtualBox Host modules for the ",(0,n.kt)("strong",{parentName:"td"},"linux-lts")," kernel"),(0,n.kt)("td",{parentName:"tr",align:null},"VirtualBox Host modules for the ",(0,n.kt)("strong",{parentName:"td"},"linux-current")," kernel")))),(0,n.kt)("p",null,"You ",(0,n.kt)("strong",{parentName:"p"},"must")," reboot your computer before running VirtualBox for the first time."),(0,n.kt)("h2",{id:"solus-as-guest"},"Solus as Guest"),(0,n.kt)("p",null,"VirtualBox Guest Additions are available in the Software Center, select the package that matches kernel version on the Solus virtual machine."),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:null},"virtualbox-guest"),(0,n.kt)("th",{parentName:"tr",align:null},"virtualbox-guest-common"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"VirtualBox Guest modules for the ",(0,n.kt)("strong",{parentName:"td"},"linux-lts")," kernel"),(0,n.kt)("td",{parentName:"tr",align:null},"Install this package if the ",(0,n.kt)("strong",{parentName:"td"},"linux-current")," kernel is used")))),(0,n.kt)("p",null,"You ",(0,n.kt)("strong",{parentName:"p"},"must")," reboot your virtual machine to load the newly installed modules"),(0,n.kt)("h2",{id:"extra-configuration"},"Extra configuration"),(0,n.kt)("h4",{id:"usb-controller"},"USB Controller"),(0,n.kt)("p",null,"If you want to use USB 2.0 or 3.0 in your virtual machine (and your hardware supports it), you have to install the ",(0,n.kt)("a",{parentName:"p",href:"https://www.virtualbox.org/manual/ch01.html#intro-installing"},"extension pack"),"."),(0,n.kt)("p",null,"Note: Access to USB is granted by the user group ",(0,n.kt)("inlineCode",{parentName:"p"},"vboxusers")," on the ",(0,n.kt)("strong",{parentName:"p"},"Host")," operating system. You can add yourself to this group with the following command"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo gpasswd -a $USER vboxusers\n")),(0,n.kt)("h4",{id:"shared-folders"},"Shared Folders"),(0,n.kt)("p",null,"Share folders let you access files from the host system from within a guest machine."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Note:")," auto-mounted shared folders are mounted into the ",(0,n.kt)("inlineCode",{parentName:"p"},"/media")," directory, along with the prefix ",(0,n.kt)("inlineCode",{parentName:"p"},"sf_"),". For example, the shared folder ",(0,n.kt)("inlineCode",{parentName:"p"},"myfiles")," would be mounted to ",(0,n.kt)("inlineCode",{parentName:"p"},"/media/sf_myfiles"),"."),(0,n.kt)("p",null,"Access to the shared folders is only granted to the user group ",(0,n.kt)("inlineCode",{parentName:"p"},"vboxsf")," on the ",(0,n.kt)("strong",{parentName:"p"},"Guest")," operating system."),(0,n.kt)("p",null,"Execute these commands to set the permissions and add yourself to the group"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo gpasswd -a $USER vboxsf\n")),(0,n.kt)("h2",{id:"troubleshooting"},"Troubleshooting"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"VBOX Kernel",src:r(4848).Z,width:"500",height:"336"})),(0,n.kt)("p",null,"The Error ",(0,n.kt)("inlineCode",{parentName:"p"},"Kernel driver not installed (rc=-1908)")," may occur if"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"The computer was not restarted before launching VirtualBox for the first time"),(0,n.kt)("li",{parentName:"ul"},"The computer is not booted on the latest kernel. Make sure to apply the updates from the Software Center and restart your machine."),(0,n.kt)("li",{parentName:"ul"},"The wrong VirtualBox package was installed. Please check the instructions just above to install the correct package for your kernel."),(0,n.kt)("li",{parentName:"ul"},"VirtualBox was manually installed and it conflicts with the version installed from the Solus Repository.")))}m.isMDXComponent=!0},4848:(e,t,r)=>{r.d(t,{Z:()=>a});const a=r.p+"assets/images/vbox-kernel-85eb11034e02dafe61706f4d967580fe.png"}}]); \ No newline at end of file +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[1896],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>h});var a=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}return r}function l(e){for(var t=1;t=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var s=a.createContext({}),u=function(e){var t=a.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},p=function(e){var t=u(e.components);return a.createElement(s.Provider,{value:t},e.children)},d="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},c=a.forwardRef((function(e,t){var r=e.components,n=e.mdxType,o=e.originalType,s=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),d=u(r),c=n,h=d["".concat(s,".").concat(c)]||d[c]||m[c]||o;return r?a.createElement(h,l(l({ref:t},p),{},{components:r})):a.createElement(h,l({ref:t},p))}));function h(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var o=r.length,l=new Array(o);l[0]=c;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[d]="string"==typeof e?e:n,l[1]=i;for(var u=2;u{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>m,frontMatter:()=>o,metadata:()=>i,toc:()=>u});var a=r(7462),n=(r(7294),r(3905));const o={title:"VirtualBox",summary:"Quick start guide for VirtualBox on Solus"},l="VirtualBox",i={unversionedId:"user/software/virtualization/virtualbox",id:"user/software/virtualization/virtualbox",title:"VirtualBox",description:"VirtualBox is an x86 and x86_64 virtualization software package developed by Oracle.",source:"@site/docs/user/software/virtualization/virtualbox.md",sourceDirName:"user/software/virtualization",slug:"/user/software/virtualization/virtualbox",permalink:"/docs/user/software/virtualization/virtualbox",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/virtualization/virtualbox.md",tags:[],version:"current",lastUpdatedAt:1695222528,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"VirtualBox",summary:"Quick start guide for VirtualBox on Solus"},sidebar:"userSidebar",previous:{title:"Virtualization",permalink:"/docs/category/virtualization"},next:{title:"Web",permalink:"/docs/category/web"}},s={},u=[{value:"Before you start",id:"before-you-start",level:2},{value:"Remove prior installation",id:"remove-prior-installation",level:3},{value:"Update your system",id:"update-your-system",level:3},{value:"Determine which kernel you are using",id:"determine-which-kernel-you-are-using",level:3},{value:"Solus as Host",id:"solus-as-host",level:2},{value:"Solus as Guest",id:"solus-as-guest",level:2},{value:"Extra configuration",id:"extra-configuration",level:2},{value:"USB Controller",id:"usb-controller",level:4},{value:"Shared Folders",id:"shared-folders",level:4},{value:"Troubleshooting",id:"troubleshooting",level:2}],p={toc:u},d="wrapper";function m(e){let{components:t,...o}=e;return(0,n.kt)(d,(0,a.Z)({},p,o,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"virtualbox"},"VirtualBox"),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"https://www.virtualbox.org/"},"VirtualBox")," is an x86 and x86_64 virtualization software package developed by Oracle."),(0,n.kt)("h2",{id:"before-you-start"},"Before you start"),(0,n.kt)("p",null,"This section applies to new installations for both ",(0,n.kt)("strong",{parentName:"p"},"Host")," and ",(0,n.kt)("strong",{parentName:"p"},"Guest"),"."),(0,n.kt)("h3",{id:"remove-prior-installation"},"Remove prior installation"),(0,n.kt)("p",null,"It is important to uninstall any version of VirtualBox (or VirtualBox Guest Additions) that ",(0,n.kt)("strong",{parentName:"p"},"was not")," installed from the Software Center or there will be conflicts that will prevent the application to work.\nThis can usually be done by executing the following command from a terminal:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo /opt/VirtualBox/uninstall.sh\n")),(0,n.kt)("h3",{id:"update-your-system"},"Update your system"),(0,n.kt)("p",null,"Ensure your system is up-to-date. This is very important because VirtualBox installs some kernel modules and the application will not work if your kernel is outdated."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg upgrade\n")),(0,n.kt)("h3",{id:"determine-which-kernel-you-are-using"},"Determine which kernel you are using"),(0,n.kt)("p",null,"Solus support both a ",(0,n.kt)("inlineCode",{parentName:"p"},"current")," and ",(0,n.kt)("inlineCode",{parentName:"p"},"lts")," kernel. It is important to install the version that corresponds to your kernel."),(0,n.kt)("p",null,"If you aren't sure which kernel you are running, run the following in terminal:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"uname -r\n")),(0,n.kt)("p",null,"You will either have a ",(0,n.kt)("inlineCode",{parentName:"p"},".current")," or ",(0,n.kt)("inlineCode",{parentName:"p"},".lts")," suffix. Examples: ",(0,n.kt)("inlineCode",{parentName:"p"},"5.13.1-187.current")," or ",(0,n.kt)("inlineCode",{parentName:"p"},"4.14.237-175.lts")),(0,n.kt)("h2",{id:"solus-as-host"},"Solus as Host"),(0,n.kt)("p",null,"VirtualBox is available in the Software Center, select the package that matches your kernel."),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:null},"virtualbox"),(0,n.kt)("th",{parentName:"tr",align:null},"virtualbox-current"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"VirtualBox Host modules for the ",(0,n.kt)("strong",{parentName:"td"},"linux-lts")," kernel"),(0,n.kt)("td",{parentName:"tr",align:null},"VirtualBox Host modules for the ",(0,n.kt)("strong",{parentName:"td"},"linux-current")," kernel")))),(0,n.kt)("p",null,"You ",(0,n.kt)("strong",{parentName:"p"},"must")," reboot your computer before running VirtualBox for the first time."),(0,n.kt)("h2",{id:"solus-as-guest"},"Solus as Guest"),(0,n.kt)("p",null,"VirtualBox Guest Additions are available in the Software Center, select the package that matches kernel version on the Solus virtual machine."),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:null},"virtualbox-guest"),(0,n.kt)("th",{parentName:"tr",align:null},"virtualbox-guest-common"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"VirtualBox Guest modules for the ",(0,n.kt)("strong",{parentName:"td"},"linux-lts")," kernel"),(0,n.kt)("td",{parentName:"tr",align:null},"Install this package if the ",(0,n.kt)("strong",{parentName:"td"},"linux-current")," kernel is used")))),(0,n.kt)("p",null,"You ",(0,n.kt)("strong",{parentName:"p"},"must")," reboot your virtual machine to load the newly installed modules"),(0,n.kt)("h2",{id:"extra-configuration"},"Extra configuration"),(0,n.kt)("h4",{id:"usb-controller"},"USB Controller"),(0,n.kt)("p",null,"If you want to use USB 2.0 or 3.0 in your virtual machine (and your hardware supports it), you have to install the ",(0,n.kt)("a",{parentName:"p",href:"https://www.virtualbox.org/manual/ch01.html#intro-installing"},"extension pack"),"."),(0,n.kt)("p",null,"Note: Access to USB is granted by the user group ",(0,n.kt)("inlineCode",{parentName:"p"},"vboxusers")," on the ",(0,n.kt)("strong",{parentName:"p"},"Host")," operating system. You can add yourself to this group with the following command"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo gpasswd -a $USER vboxusers\n")),(0,n.kt)("h4",{id:"shared-folders"},"Shared Folders"),(0,n.kt)("p",null,"Share folders let you access files from the host system from within a guest machine."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Note:")," auto-mounted shared folders are mounted into the ",(0,n.kt)("inlineCode",{parentName:"p"},"/media")," directory, along with the prefix ",(0,n.kt)("inlineCode",{parentName:"p"},"sf_"),". For example, the shared folder ",(0,n.kt)("inlineCode",{parentName:"p"},"myfiles")," would be mounted to ",(0,n.kt)("inlineCode",{parentName:"p"},"/media/sf_myfiles"),"."),(0,n.kt)("p",null,"Access to the shared folders is only granted to the user group ",(0,n.kt)("inlineCode",{parentName:"p"},"vboxsf")," on the ",(0,n.kt)("strong",{parentName:"p"},"Guest")," operating system."),(0,n.kt)("p",null,"Execute these commands to set the permissions and add yourself to the group"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo gpasswd -a $USER vboxsf\n")),(0,n.kt)("h2",{id:"troubleshooting"},"Troubleshooting"),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"VBOX Kernel",src:r(4848).Z,width:"500",height:"336"})),(0,n.kt)("p",null,"The Error ",(0,n.kt)("inlineCode",{parentName:"p"},"Kernel driver not installed (rc=-1908)")," may occur if"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"The computer was not restarted before launching VirtualBox for the first time"),(0,n.kt)("li",{parentName:"ul"},"The computer is not booted on the latest kernel. Make sure to apply the updates from the Software Center and restart your machine."),(0,n.kt)("li",{parentName:"ul"},"The wrong VirtualBox package was installed. Please check the instructions just above to install the correct package for your kernel."),(0,n.kt)("li",{parentName:"ul"},"VirtualBox was manually installed and it conflicts with the version installed from the Solus Repository.")))}m.isMDXComponent=!0},4848:(e,t,r)=>{r.d(t,{Z:()=>a});const a=r.p+"assets/images/vbox-kernel-85eb11034e02dafe61706f4d967580fe.png"}}]); \ No newline at end of file diff --git a/assets/js/793c86b2.fdd37ed6.js b/assets/js/793c86b2.fcb5b3ec.js similarity index 99% rename from assets/js/793c86b2.fdd37ed6.js rename to assets/js/793c86b2.fcb5b3ec.js index 63a4649b0..ccd8b2f45 100644 --- a/assets/js/793c86b2.fdd37ed6.js +++ b/assets/js/793c86b2.fcb5b3ec.js @@ -1 +1 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[168],{3905:(e,n,t)=>{t.d(n,{Zo:()=>h,kt:()=>c});var a=t(7294);function l(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function o(e){for(var n=1;n=0||(l[t]=e[t]);return l}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(l[t]=e[t])}return l}var r=a.createContext({}),p=function(e){var n=a.useContext(r),t=n;return e&&(t="function"==typeof e?e(n):o(o({},n),e)),t},h=function(e){var n=p(e.components);return a.createElement(r.Provider,{value:n},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},m=a.forwardRef((function(e,n){var t=e.components,l=e.mdxType,i=e.originalType,r=e.parentName,h=s(e,["components","mdxType","originalType","parentName"]),u=p(t),m=l,c=u["".concat(r,".").concat(m)]||u[m]||d[m]||i;return t?a.createElement(c,o(o({ref:n},h),{},{components:t})):a.createElement(c,o({ref:n},h))}));function c(e,n){var t=arguments,l=n&&n.mdxType;if("string"==typeof e||l){var i=t.length,o=new Array(i);o[0]=m;var s={};for(var r in n)hasOwnProperty.call(n,r)&&(s[r]=n[r]);s.originalType=e,s[u]="string"==typeof e?e:l,o[1]=s;for(var p=2;p{t.r(n),t.d(n,{assets:()=>r,contentTitle:()=>o,default:()=>d,frontMatter:()=>i,metadata:()=>s,toc:()=>p});var a=t(7462),l=(t(7294),t(3905));const i={title:"Command Line",summary:"Installation and configuration of popular command line programs on Solus"},o="Command Line",s={unversionedId:"user/software/command-line/index",id:"user/software/command-line/index",title:"Command Line",description:"Changing Shell",source:"@site/docs/user/software/command-line/index.md",sourceDirName:"user/software/command-line",slug:"/user/software/command-line/",permalink:"/docs/user/software/command-line/",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/command-line/index.md",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Command Line",summary:"Installation and configuration of popular command line programs on Solus"},sidebar:"userSidebar",previous:{title:"Software",permalink:"/docs/category/software"},next:{title:"Desktops",permalink:"/docs/user/software/desktops/"}},r={},p=[{value:"Changing Shell",id:"changing-shell",level:2},{value:"Installation",id:"installation",level:3},{value:"Switching",id:"switching",level:3},{value:"Troubleshooting",id:"troubleshooting",level:3},{value:"fzf",id:"fzf",level:2},{value:"Installation",id:"installation-1",level:3},{value:"Fuzzy Auto-Completion",id:"fuzzy-auto-completion",level:3},{value:"Bash",id:"bash",level:4},{value:"Zsh",id:"zsh",level:4},{value:"Key Bindings",id:"key-bindings",level:3},{value:"Bash",id:"bash-1",level:4},{value:"Fish",id:"fish",level:4},{value:"Zsh",id:"zsh-1",level:4},{value:"Powerline Shell Prompt",id:"powerline-shell-prompt",level:2},{value:"Installation",id:"installation-2",level:3},{value:"Shell Prompts",id:"shell-prompts",level:3},{value:"Bash",id:"bash-2",level:4},{value:"Busybox and dash",id:"busybox-and-dash",level:4},{value:"Fish",id:"fish-1",level:4},{value:"Zsh",id:"zsh-2",level:4}],h={toc:p},u="wrapper";function d(e){let{components:n,...t}=e;return(0,l.kt)(u,(0,a.Z)({},h,t,{components:n,mdxType:"MDXLayout"}),(0,l.kt)("h1",{id:"command-line"},"Command Line"),(0,l.kt)("h2",{id:"changing-shell"},"Changing Shell"),(0,l.kt)("p",null,"When using a terminal session to perform command-line activities, a Unix shell is used to interpret commands. The default shell on Solus is Bash, however changing your shell may enable additional features and functionality."),(0,l.kt)("p",null,"Solus makes available other shells via our repository, with a full list available in ",(0,l.kt)("inlineCode",{parentName:"p"},"/usr/share/defaults/etc/shells"),". Common shells, aside from Bash, are:"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"http://gondor.apana.org.au/~herbert/dash/"},"Dash")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"https://fishshell.com/"},"Fish")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"http://zsh.sourceforge.net/"},"Zsh"))),(0,l.kt)("h3",{id:"installation"},"Installation"),(0,l.kt)("p",null,"In order to use a shell different from Bash, you may need to install the respective package for the shell to be able to work. You will find those packages in the Software-Center within the ",(0,l.kt)("em",{parentName:"p"},"System utilities")," category, or via the command-line with ",(0,l.kt)("inlineCode",{parentName:"p"},"sudo eopkg install "),"."),(0,l.kt)("p",null,"Example:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg install fish\n")),(0,l.kt)("h3",{id:"switching"},"Switching"),(0,l.kt)("p",null,"To switch to another shell, first install the appropriate package, followed by the command ",(0,l.kt)("inlineCode",{parentName:"p"},"chsh")," (change shell) to change the shell for your user session, using the path provided in ",(0,l.kt)("inlineCode",{parentName:"p"},"/usr/share/defaults/etc/shells"),". Lastly you need to log out and back in again for the change to take effect."),(0,l.kt)("p",null,"Example:"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},"For Zsh: ",(0,l.kt)("inlineCode",{parentName:"p"},"chsh -s /bin/zsh"))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},"For Fish: ",(0,l.kt)("inlineCode",{parentName:"p"},"chsh -s /usr/bin/fish")))),(0,l.kt)("h3",{id:"troubleshooting"},"Troubleshooting"),(0,l.kt)("p",null,"If the default shell is not changed, you must add the shell to ",(0,l.kt)("inlineCode",{parentName:"p"},"/etc/shells")," via the command ",(0,l.kt)("inlineCode",{parentName:"p"},"sh")," with ",(0,l.kt)("inlineCode",{parentName:"p"},"sudo"),"."),(0,l.kt)("p",null,"Example:"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},"For Zsh: ",(0,l.kt)("inlineCode",{parentName:"p"},'echo "/bin/zsh" | sudo tee -a /etc/shells'))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},"For Fish: ",(0,l.kt)("inlineCode",{parentName:"p"},'echo "/usr/bin/fish" | sudo tee -a /etc/shells')))),(0,l.kt)("h2",{id:"fzf"},"fzf"),(0,l.kt)("p",null,(0,l.kt)("a",{parentName:"p",href:"https://github.com/junegunn/fzf"},"fzf")," is a general-purpose command-line fuzzy finder. It can be used as an interactive Unix filter with any list: files, command history, processes, hostnames, bookmarks, git commits, etc."),(0,l.kt)("h3",{id:"installation-1"},"Installation"),(0,l.kt)("p",null,"The fzf project consists of the following components: an ",(0,l.kt)("inlineCode",{parentName:"p"},"fzf")," executable, an ",(0,l.kt)("inlineCode",{parentName:"p"},"fzf-tmux")," script for launching fzf in a tmux pane, shell extensions (including key bindings and command-line fuzzy auto-completion), and a vim/Neovim plugin file. They are all available in the ",(0,l.kt)("inlineCode",{parentName:"p"},"fzf")," package in the Software Center or via eopkg in a terminal:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg it fzf\n")),(0,l.kt)("p",null,"The shell extensions are not enabled by default after the ",(0,l.kt)("inlineCode",{parentName:"p"},"fzf")," package is installed. The procedures to enable these features are described below. For more tips and examples on the usage of ",(0,l.kt)("inlineCode",{parentName:"p"},"fzf"),", visit its ",(0,l.kt)("a",{parentName:"p",href:"https://github.com/junegunn/fzf"},"github")," and ",(0,l.kt)("a",{parentName:"p",href:"https://github.com/junegunn/fzf/wiki/examples"},"wiki")," pages."),(0,l.kt)("h3",{id:"fuzzy-auto-completion"},"Fuzzy Auto-Completion"),(0,l.kt)("p",null,(0,l.kt)("a",{parentName:"p",href:"https://github.com/junegunn/fzf#fuzzy-completion-for-bash-and-zsh"},"Fuzzy completion")," for files and directories can be triggered by a trigger sequence (",(0,l.kt)("inlineCode",{parentName:"p"},"**")," by default) followed by the ",(0,l.kt)("inlineCode",{parentName:"p"},"TAB")," key for ",(0,l.kt)("inlineCode",{parentName:"p"},"bash")," and ",(0,l.kt)("inlineCode",{parentName:"p"},"zsh"),". To enable this feature, add the following lines to the shell configuration file depending on the shell you use (",(0,l.kt)("inlineCode",{parentName:"p"},"~/.bashrc")," for ",(0,l.kt)("inlineCode",{parentName:"p"},"bash")," and ",(0,l.kt)("inlineCode",{parentName:"p"},"~/.zshrc")," for ",(0,l.kt)("inlineCode",{parentName:"p"},"zsh"),")."),(0,l.kt)("h4",{id:"bash"},"Bash"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"FZF_COMPLETION_FILE=/usr/share/bash-completion/completions/fzf\n[[ -f $FZF_COMPLETION_FILE ]] && source $FZF_COMPLETION_FILE\n")),(0,l.kt)("h4",{id:"zsh"},"Zsh"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"FZF_COMPLETION_FILE=/usr/share/zsh/site-functions/_fzf\n[[ -f $FZF_COMPLETION_FILE ]] && source $FZF_COMPLETION_FILE\n")),(0,l.kt)("h3",{id:"key-bindings"},"Key Bindings"),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"fzf")," can use specific ",(0,l.kt)("a",{parentName:"p",href:"https://github.com/junegunn/fzf#key-bindings-for-command-line"},"key bindings")," to trigger a search over a list of files, command history and directories and paste the result onto the command-line. Follow these steps to set up the key bindings for your favorite shell."),(0,l.kt)("h4",{id:"bash-1"},"Bash"),(0,l.kt)("p",null,"Add the following content to ",(0,l.kt)("inlineCode",{parentName:"p"},"~/.bashrc"),":"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"FZF_KEYBINDING_FILE=/usr/share/fzf/key-bindings.bash\n[[ -f $FZF_KEYBINDING_FILE ]] && source $FZF_KEYBINDING_FILE\n")),(0,l.kt)("h4",{id:"fish"},"Fish"),(0,l.kt)("p",null,"First create the following directory if it does not already exist:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"mkdir -p $HOME/.config/fish/functions\n")),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"cd")," into this directory and make a file ",(0,l.kt)("inlineCode",{parentName:"p"},"fish_user_key_bindings.fish")," with the following content:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"function fish_user_key_bindings\n fzf_key_bindings\nend\n")),(0,l.kt)("p",null,"Then create the following symlink:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"ln -s /usr/share/fzf/key-bindings.fish $HOME/.config/fish/functions/fzf_key_bindings.fish\n")),(0,l.kt)("h4",{id:"zsh-1"},"Zsh"),(0,l.kt)("p",null,"Add the following content to ",(0,l.kt)("inlineCode",{parentName:"p"},"~/.zshrc"),":"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"FZF_KEYBINDING_FILE=/usr/share/fzf/key-bindings.zsh\n[[ -f $FZF_KEYBINDING_FILE ]] && source $FZF_KEYBINDING_FILE\n")),(0,l.kt)("h2",{id:"powerline-shell-prompt"},"Powerline Shell Prompt"),(0,l.kt)("p",null,(0,l.kt)("a",{parentName:"p",href:"https://github.com/powerline"},"Powerline")," is a statusline plugin for vim, and provides statuslines and prompts for several other applications, including zsh, bash, tmux, IPython, Awesome and Qtile."),(0,l.kt)("h3",{id:"installation-2"},"Installation"),(0,l.kt)("p",null,"Powerline has two components, the plugin system itself ",(0,l.kt)("inlineCode",{parentName:"p"},"powerline")," and the\nfonts ",(0,l.kt)("inlineCode",{parentName:"p"},"powerline-fonts"),". Both are available in the Software Center or via ",(0,l.kt)("inlineCode",{parentName:"p"},"eopkg")," in a terminal:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg it powerline powerline-fonts\n")),(0,l.kt)("p",null,"To get powerline working inside your terminal, you need to add the following commands to the ",(0,l.kt)("inlineCode",{parentName:"p"},".bashrc")," inside your ",(0,l.kt)("inlineCode",{parentName:"p"},"$HOME")," directory."),(0,l.kt)("h3",{id:"shell-prompts"},"Shell Prompts"),(0,l.kt)("p",null,"The Powerline daemon is not running automatically by any of the bindings. It is advised to add the following before any other powerline-related code in the shell configuration file"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"powerline-daemon -q\n")),(0,l.kt)("h4",{id:"bash-2"},"Bash"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"powerline-daemon -q\nPOWERLINE_BASH_CONTINUATION=1\nPOWERLINE_BASH_SELECT=1\nsource /usr/lib/python3.10/site-packages/powerline/bindings/bash/powerline.sh\n")),(0,l.kt)("h4",{id:"busybox-and-dash"},"Busybox and dash"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"source /usr/lib/python3.10/site-packages/powerline/bindings/shell/powerline.sh\n")),(0,l.kt)("h4",{id:"fish-1"},"Fish"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"source /usr/lib/python3.10/site-packages/powerline/bindings/fish/powerline-setup.fish\n")),(0,l.kt)("h4",{id:"zsh-2"},"Zsh"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"source /usr/lib/python3.10/site-packages/powerline/bindings/zsh/powerline.zsh\n")),(0,l.kt)("p",null,"Read more about powerline on its ",(0,l.kt)("a",{parentName:"p",href:"https://powerline.readthedocs.io/en/master/usage.html#shell-prompts-requirements"},"docs website")))}d.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[168],{3905:(e,n,t)=>{t.d(n,{Zo:()=>h,kt:()=>c});var a=t(7294);function l(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);n&&(a=a.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,a)}return t}function o(e){for(var n=1;n=0||(l[t]=e[t]);return l}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(l[t]=e[t])}return l}var r=a.createContext({}),p=function(e){var n=a.useContext(r),t=n;return e&&(t="function"==typeof e?e(n):o(o({},n),e)),t},h=function(e){var n=p(e.components);return a.createElement(r.Provider,{value:n},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var n=e.children;return a.createElement(a.Fragment,{},n)}},m=a.forwardRef((function(e,n){var t=e.components,l=e.mdxType,i=e.originalType,r=e.parentName,h=s(e,["components","mdxType","originalType","parentName"]),u=p(t),m=l,c=u["".concat(r,".").concat(m)]||u[m]||d[m]||i;return t?a.createElement(c,o(o({ref:n},h),{},{components:t})):a.createElement(c,o({ref:n},h))}));function c(e,n){var t=arguments,l=n&&n.mdxType;if("string"==typeof e||l){var i=t.length,o=new Array(i);o[0]=m;var s={};for(var r in n)hasOwnProperty.call(n,r)&&(s[r]=n[r]);s.originalType=e,s[u]="string"==typeof e?e:l,o[1]=s;for(var p=2;p{t.r(n),t.d(n,{assets:()=>r,contentTitle:()=>o,default:()=>d,frontMatter:()=>i,metadata:()=>s,toc:()=>p});var a=t(7462),l=(t(7294),t(3905));const i={title:"Command Line",summary:"Installation and configuration of popular command line programs on Solus"},o="Command Line",s={unversionedId:"user/software/command-line/index",id:"user/software/command-line/index",title:"Command Line",description:"Changing Shell",source:"@site/docs/user/software/command-line/index.md",sourceDirName:"user/software/command-line",slug:"/user/software/command-line/",permalink:"/docs/user/software/command-line/",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/command-line/index.md",tags:[],version:"current",lastUpdatedAt:1695222528,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Command Line",summary:"Installation and configuration of popular command line programs on Solus"},sidebar:"userSidebar",previous:{title:"Software",permalink:"/docs/category/software"},next:{title:"Desktops",permalink:"/docs/user/software/desktops/"}},r={},p=[{value:"Changing Shell",id:"changing-shell",level:2},{value:"Installation",id:"installation",level:3},{value:"Switching",id:"switching",level:3},{value:"Troubleshooting",id:"troubleshooting",level:3},{value:"fzf",id:"fzf",level:2},{value:"Installation",id:"installation-1",level:3},{value:"Fuzzy Auto-Completion",id:"fuzzy-auto-completion",level:3},{value:"Bash",id:"bash",level:4},{value:"Zsh",id:"zsh",level:4},{value:"Key Bindings",id:"key-bindings",level:3},{value:"Bash",id:"bash-1",level:4},{value:"Fish",id:"fish",level:4},{value:"Zsh",id:"zsh-1",level:4},{value:"Powerline Shell Prompt",id:"powerline-shell-prompt",level:2},{value:"Installation",id:"installation-2",level:3},{value:"Shell Prompts",id:"shell-prompts",level:3},{value:"Bash",id:"bash-2",level:4},{value:"Busybox and dash",id:"busybox-and-dash",level:4},{value:"Fish",id:"fish-1",level:4},{value:"Zsh",id:"zsh-2",level:4}],h={toc:p},u="wrapper";function d(e){let{components:n,...t}=e;return(0,l.kt)(u,(0,a.Z)({},h,t,{components:n,mdxType:"MDXLayout"}),(0,l.kt)("h1",{id:"command-line"},"Command Line"),(0,l.kt)("h2",{id:"changing-shell"},"Changing Shell"),(0,l.kt)("p",null,"When using a terminal session to perform command-line activities, a Unix shell is used to interpret commands. The default shell on Solus is Bash, however changing your shell may enable additional features and functionality."),(0,l.kt)("p",null,"Solus makes available other shells via our repository, with a full list available in ",(0,l.kt)("inlineCode",{parentName:"p"},"/usr/share/defaults/etc/shells"),". Common shells, aside from Bash, are:"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"http://gondor.apana.org.au/~herbert/dash/"},"Dash")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"https://fishshell.com/"},"Fish")),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("a",{parentName:"li",href:"http://zsh.sourceforge.net/"},"Zsh"))),(0,l.kt)("h3",{id:"installation"},"Installation"),(0,l.kt)("p",null,"In order to use a shell different from Bash, you may need to install the respective package for the shell to be able to work. You will find those packages in the Software-Center within the ",(0,l.kt)("em",{parentName:"p"},"System utilities")," category, or via the command-line with ",(0,l.kt)("inlineCode",{parentName:"p"},"sudo eopkg install "),"."),(0,l.kt)("p",null,"Example:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg install fish\n")),(0,l.kt)("h3",{id:"switching"},"Switching"),(0,l.kt)("p",null,"To switch to another shell, first install the appropriate package, followed by the command ",(0,l.kt)("inlineCode",{parentName:"p"},"chsh")," (change shell) to change the shell for your user session, using the path provided in ",(0,l.kt)("inlineCode",{parentName:"p"},"/usr/share/defaults/etc/shells"),". Lastly you need to log out and back in again for the change to take effect."),(0,l.kt)("p",null,"Example:"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},"For Zsh: ",(0,l.kt)("inlineCode",{parentName:"p"},"chsh -s /bin/zsh"))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},"For Fish: ",(0,l.kt)("inlineCode",{parentName:"p"},"chsh -s /usr/bin/fish")))),(0,l.kt)("h3",{id:"troubleshooting"},"Troubleshooting"),(0,l.kt)("p",null,"If the default shell is not changed, you must add the shell to ",(0,l.kt)("inlineCode",{parentName:"p"},"/etc/shells")," via the command ",(0,l.kt)("inlineCode",{parentName:"p"},"sh")," with ",(0,l.kt)("inlineCode",{parentName:"p"},"sudo"),"."),(0,l.kt)("p",null,"Example:"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},"For Zsh: ",(0,l.kt)("inlineCode",{parentName:"p"},'echo "/bin/zsh" | sudo tee -a /etc/shells'))),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("p",{parentName:"li"},"For Fish: ",(0,l.kt)("inlineCode",{parentName:"p"},'echo "/usr/bin/fish" | sudo tee -a /etc/shells')))),(0,l.kt)("h2",{id:"fzf"},"fzf"),(0,l.kt)("p",null,(0,l.kt)("a",{parentName:"p",href:"https://github.com/junegunn/fzf"},"fzf")," is a general-purpose command-line fuzzy finder. It can be used as an interactive Unix filter with any list: files, command history, processes, hostnames, bookmarks, git commits, etc."),(0,l.kt)("h3",{id:"installation-1"},"Installation"),(0,l.kt)("p",null,"The fzf project consists of the following components: an ",(0,l.kt)("inlineCode",{parentName:"p"},"fzf")," executable, an ",(0,l.kt)("inlineCode",{parentName:"p"},"fzf-tmux")," script for launching fzf in a tmux pane, shell extensions (including key bindings and command-line fuzzy auto-completion), and a vim/Neovim plugin file. They are all available in the ",(0,l.kt)("inlineCode",{parentName:"p"},"fzf")," package in the Software Center or via eopkg in a terminal:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg it fzf\n")),(0,l.kt)("p",null,"The shell extensions are not enabled by default after the ",(0,l.kt)("inlineCode",{parentName:"p"},"fzf")," package is installed. The procedures to enable these features are described below. For more tips and examples on the usage of ",(0,l.kt)("inlineCode",{parentName:"p"},"fzf"),", visit its ",(0,l.kt)("a",{parentName:"p",href:"https://github.com/junegunn/fzf"},"github")," and ",(0,l.kt)("a",{parentName:"p",href:"https://github.com/junegunn/fzf/wiki/examples"},"wiki")," pages."),(0,l.kt)("h3",{id:"fuzzy-auto-completion"},"Fuzzy Auto-Completion"),(0,l.kt)("p",null,(0,l.kt)("a",{parentName:"p",href:"https://github.com/junegunn/fzf#fuzzy-completion-for-bash-and-zsh"},"Fuzzy completion")," for files and directories can be triggered by a trigger sequence (",(0,l.kt)("inlineCode",{parentName:"p"},"**")," by default) followed by the ",(0,l.kt)("inlineCode",{parentName:"p"},"TAB")," key for ",(0,l.kt)("inlineCode",{parentName:"p"},"bash")," and ",(0,l.kt)("inlineCode",{parentName:"p"},"zsh"),". To enable this feature, add the following lines to the shell configuration file depending on the shell you use (",(0,l.kt)("inlineCode",{parentName:"p"},"~/.bashrc")," for ",(0,l.kt)("inlineCode",{parentName:"p"},"bash")," and ",(0,l.kt)("inlineCode",{parentName:"p"},"~/.zshrc")," for ",(0,l.kt)("inlineCode",{parentName:"p"},"zsh"),")."),(0,l.kt)("h4",{id:"bash"},"Bash"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"FZF_COMPLETION_FILE=/usr/share/bash-completion/completions/fzf\n[[ -f $FZF_COMPLETION_FILE ]] && source $FZF_COMPLETION_FILE\n")),(0,l.kt)("h4",{id:"zsh"},"Zsh"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"FZF_COMPLETION_FILE=/usr/share/zsh/site-functions/_fzf\n[[ -f $FZF_COMPLETION_FILE ]] && source $FZF_COMPLETION_FILE\n")),(0,l.kt)("h3",{id:"key-bindings"},"Key Bindings"),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"fzf")," can use specific ",(0,l.kt)("a",{parentName:"p",href:"https://github.com/junegunn/fzf#key-bindings-for-command-line"},"key bindings")," to trigger a search over a list of files, command history and directories and paste the result onto the command-line. Follow these steps to set up the key bindings for your favorite shell."),(0,l.kt)("h4",{id:"bash-1"},"Bash"),(0,l.kt)("p",null,"Add the following content to ",(0,l.kt)("inlineCode",{parentName:"p"},"~/.bashrc"),":"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"FZF_KEYBINDING_FILE=/usr/share/fzf/key-bindings.bash\n[[ -f $FZF_KEYBINDING_FILE ]] && source $FZF_KEYBINDING_FILE\n")),(0,l.kt)("h4",{id:"fish"},"Fish"),(0,l.kt)("p",null,"First create the following directory if it does not already exist:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"mkdir -p $HOME/.config/fish/functions\n")),(0,l.kt)("p",null,(0,l.kt)("inlineCode",{parentName:"p"},"cd")," into this directory and make a file ",(0,l.kt)("inlineCode",{parentName:"p"},"fish_user_key_bindings.fish")," with the following content:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"function fish_user_key_bindings\n fzf_key_bindings\nend\n")),(0,l.kt)("p",null,"Then create the following symlink:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"ln -s /usr/share/fzf/key-bindings.fish $HOME/.config/fish/functions/fzf_key_bindings.fish\n")),(0,l.kt)("h4",{id:"zsh-1"},"Zsh"),(0,l.kt)("p",null,"Add the following content to ",(0,l.kt)("inlineCode",{parentName:"p"},"~/.zshrc"),":"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"FZF_KEYBINDING_FILE=/usr/share/fzf/key-bindings.zsh\n[[ -f $FZF_KEYBINDING_FILE ]] && source $FZF_KEYBINDING_FILE\n")),(0,l.kt)("h2",{id:"powerline-shell-prompt"},"Powerline Shell Prompt"),(0,l.kt)("p",null,(0,l.kt)("a",{parentName:"p",href:"https://github.com/powerline"},"Powerline")," is a statusline plugin for vim, and provides statuslines and prompts for several other applications, including zsh, bash, tmux, IPython, Awesome and Qtile."),(0,l.kt)("h3",{id:"installation-2"},"Installation"),(0,l.kt)("p",null,"Powerline has two components, the plugin system itself ",(0,l.kt)("inlineCode",{parentName:"p"},"powerline")," and the\nfonts ",(0,l.kt)("inlineCode",{parentName:"p"},"powerline-fonts"),". Both are available in the Software Center or via ",(0,l.kt)("inlineCode",{parentName:"p"},"eopkg")," in a terminal:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg it powerline powerline-fonts\n")),(0,l.kt)("p",null,"To get powerline working inside your terminal, you need to add the following commands to the ",(0,l.kt)("inlineCode",{parentName:"p"},".bashrc")," inside your ",(0,l.kt)("inlineCode",{parentName:"p"},"$HOME")," directory."),(0,l.kt)("h3",{id:"shell-prompts"},"Shell Prompts"),(0,l.kt)("p",null,"The Powerline daemon is not running automatically by any of the bindings. It is advised to add the following before any other powerline-related code in the shell configuration file"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"powerline-daemon -q\n")),(0,l.kt)("h4",{id:"bash-2"},"Bash"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"powerline-daemon -q\nPOWERLINE_BASH_CONTINUATION=1\nPOWERLINE_BASH_SELECT=1\nsource /usr/lib/python3.10/site-packages/powerline/bindings/bash/powerline.sh\n")),(0,l.kt)("h4",{id:"busybox-and-dash"},"Busybox and dash"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"source /usr/lib/python3.10/site-packages/powerline/bindings/shell/powerline.sh\n")),(0,l.kt)("h4",{id:"fish-1"},"Fish"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"source /usr/lib/python3.10/site-packages/powerline/bindings/fish/powerline-setup.fish\n")),(0,l.kt)("h4",{id:"zsh-2"},"Zsh"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"source /usr/lib/python3.10/site-packages/powerline/bindings/zsh/powerline.zsh\n")),(0,l.kt)("p",null,"Read more about powerline on its ",(0,l.kt)("a",{parentName:"p",href:"https://powerline.readthedocs.io/en/master/usage.html#shell-prompts-requirements"},"docs website")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/7a24477a.229829cb.js b/assets/js/7a24477a.e7535e48.js similarity index 99% rename from assets/js/7a24477a.229829cb.js rename to assets/js/7a24477a.e7535e48.js index 69949e15d..eba1644a5 100644 --- a/assets/js/7a24477a.229829cb.js +++ b/assets/js/7a24477a.e7535e48.js @@ -1 +1 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[9135],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>g});var o=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function a(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=o.createContext({}),u=function(e){var t=o.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},p=function(e){var t=u(e.components);return o.createElement(s.Provider,{value:t},e.children)},m="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},d=o.forwardRef((function(e,t){var n=e.components,r=e.mdxType,i=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),m=u(n),d=r,g=m["".concat(s,".").concat(d)]||m[d]||c[d]||i;return n?o.createElement(g,a(a({ref:t},p),{},{components:n})):o.createElement(g,a({ref:t},p))}));function g(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var i=n.length,a=new Array(i);a[0]=d;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[m]="string"==typeof e?e:r,a[1]=l;for(var u=2;u{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>a,default:()=>c,frontMatter:()=>i,metadata:()=>l,toc:()=>u});var o=n(7462),r=(n(7294),n(3905));const i={title:"Getting Involved",summary:"Getting involved with the Solus community"},a="Getting Involved",l={unversionedId:"user/contributing/getting-involved",id:"user/contributing/getting-involved",title:"Getting Involved",description:"Solus is a big undertaking, and as such there are many ways in which your involvement can help us. Naturally, that means there are also many ways in which you can help out.",source:"@site/docs/user/contributing/getting-involved.md",sourceDirName:"user/contributing",slug:"/user/contributing/getting-involved",permalink:"/docs/user/contributing/getting-involved",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/contributing/getting-involved.md",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Getting Involved",summary:"Getting involved with the Solus community"},sidebar:"userSidebar",previous:{title:"Community Guidelines",permalink:"/docs/user/contributing/community-guidelines"},next:{title:"Testing an ISO",permalink:"/docs/user/contributing/testing-an-iso"}},s={},u=[{value:"Engaging with the Community",id:"engaging-with-the-community",level:2},{value:"Community Guidelines",id:"community-guidelines",level:3},{value:"Community Forums",id:"community-forums",level:3},{value:"Matrix (chat)",id:"matrix-chat",level:3},{value:"Social Media",id:"social-media",level:3},{value:"Funding",id:"funding",level:2},{value:"Improving Documentation",id:"improving-documentation",level:2},{value:"Packaging",id:"packaging",level:2},{value:"Report Bugs",id:"report-bugs",level:2},{value:"Translations",id:"translations",level:2}],p={toc:u},m="wrapper";function c(e){let{components:t,...n}=e;return(0,r.kt)(m,(0,o.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"getting-involved"},"Getting Involved"),(0,r.kt)("p",null,"Solus is a big undertaking, and as such there are many ways in which your involvement can help us. Naturally, that means there are also many ways in which you can help out."),(0,r.kt)("h2",{id:"engaging-with-the-community"},"Engaging with the Community"),(0,r.kt)("h3",{id:"community-guidelines"},"Community Guidelines"),(0,r.kt)("p",null,"The Solus Project enforces a set of community guidelines to maintain respect and professionalism, as well as a family-friendly environment. Please view our community guidelines ",(0,r.kt)("a",{parentName:"p",href:"/docs/user/contributing/community-guidelines"},"here"),"."),(0,r.kt)("h3",{id:"community-forums"},"Community Forums"),(0,r.kt)("p",null,"With so many new users joining, there are always more people needing help. A great way to help us out, would be to help out our users on the ",(0,r.kt)("a",{parentName:"p",href:"https://discuss.getsol.us"},"Solus Project Forums"),"."),(0,r.kt)("h3",{id:"matrix-chat"},(0,r.kt)("a",{parentName:"h3",href:"/docs/user/contributing/getting-involved#matrix-chat"},"Matrix")," (chat)"),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"https:/.wikipedia.org/wiki/Matrix_(protocol)"},"Matrix")," is a great way to discuss issues and development with the community, and project developers in real-time. It's also a great place for getting support, but remember due\nto timezone differences there might not always be people there to answer your question immediately. You can access Matrix using a client like ",(0,r.kt)("a",{parentName:"p",href:"https://app.element.io/"},"Element Web"),", or many ",(0,r.kt)("a",{parentName:"p",href:"https://matrix.org/clients/"},"others"),". You will need a Matrix account."),(0,r.kt)("p",null,"You will find the following Solus rooms on the ",(0,r.kt)("inlineCode",{parentName:"p"},"matrix.org")," homeserver:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://matrix.to/#/#solus-support:matrix.org"},"#solus-support:matrix.org")," Support room"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://matrix.to/#/#solus-off-topic:matrix.org"},"#solus-off-topic:matrix.org")," Off-topic room"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://matrix.to/#/#solus-packaging:matrix.org"},"#solus-packaging:matrix.org")," Packaging-related room"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://matrix.to/#/#solus-development:matrix.org"},"#solus-development:matrix.org")," Development-related room"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://matrix.to/#/#solus-devlog:matrix.org"},"#solus-devlog:matrix.org")," Commit and Pull Request notifications from the ",(0,r.kt)("inlineCode",{parentName:"li"},"getsolus")," GitHub organization (developer oriented, read-only)"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://matrix.to/#/#solus:matrix.org"},"#solus:matrix.org")," ",(0,r.kt)("strong",{parentName:"li"},"Matrix Space containing all rooms"))),(0,r.kt)("h3",{id:"social-media"},"Social Media"),(0,r.kt)("p",null,"Alongside the forums, you can communicate with developers or others in the community by using one of the following websites:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://www.facebook.com/get.solus"},"Facebook")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://fosstodon.org/@Solus"},"Mastodon")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://www.reddit.com/r/SolusProject/"},"Reddit")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://twitter.com/solusproject"},"Twitter"))),(0,r.kt)("h2",{id:"funding"},"Funding"),(0,r.kt)("p",null,"Solus is funded through our ",(0,r.kt)("a",{parentName:"p",href:"https://opencollective.com/getsolus"},"Open Collective"),", with our fiscal host being the non-profit 501(c)3 organization ",(0,r.kt)("a",{parentName:"p",href:"https://www.oscollective.org/"},"Open Source Collective"),". This funding enables / will enable us to:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Offset virtual and physical infrastructure / hardware, ranging from datacenter co-location to providing repository mirrors and hardware upgrades for faster builds."),(0,r.kt)("li",{parentName:"ol"},"Enable part-time and eventually full-time development by one or more developers (e.g. myself and Beatrice)."),(0,r.kt)("li",{parentName:"ol"},"Subsidize or pay in full necessary hardware for Solus Staff and active contributors."),(0,r.kt)("li",{parentName:"ol"},"Provide opportunities to finance specific approved works, such as various features, fixes, or rewrites that the Solus Staff would want to be done in a timely manner, by individuals in the our community that are well-known for high-quality contributions. These opportunities would be provided on a case-by-case basis with direct communication and engagement between Solus Staff and the individual.")),(0,r.kt)("h2",{id:"improving-documentation"},"Improving Documentation"),(0,r.kt)("p",null,"Our Help Center improves when the documentation improves. If there are docs that you think would be valuable to add, get involved by submitting pull requests to our ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/getsolus/help-center-docs"},"Help Center Docs")," repo!"),(0,r.kt)("h2",{id:"packaging"},"Packaging"),(0,r.kt)("p",null,"There may be software you wish to have on your system that is currently not available in the repository. While you are more than welcome to submit a bug and wait for someone else to package the software you want, you can also improve\nand contribute to the community by packaging software. If you're interested in learning to package software, feel free to visit our documentation ",(0,r.kt)("a",{parentName:"p",href:"/docs/packaging/"},"here"),"."),(0,r.kt)("h2",{id:"report-bugs"},"Report Bugs"),(0,r.kt)("p",null,"We're always looking to improve our systems, especially when they're not functioning as expected. By reporting bugs, you improve the system not only for you, but for all Solus Project users."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("a",{parentName:"p",href:"https://issues.getsol.us"},"Main Solus GitHub Issue Tracker"),"\nMost bug reports about Solus itself, and its packages, should be filed here.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("a",{parentName:"p",href:"https://github.com/getsolus"},"Other Solus GitHub Repos"),"\nCertain parts of Solus, such as the Software Center, have repos in the ",(0,r.kt)("inlineCode",{parentName:"p"},"getsolus")," organization on GitHub. Check here to see if the system in question is listed. If so, file the bug in the appropriate repo.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("a",{parentName:"p",href:"https://github.com/buddiesofbudgie/budgie-desktop/issues"},"Budgie Desktop"),"\nBudgie Desktop issues are filed in the ",(0,r.kt)("inlineCode",{parentName:"p"},"buddiesofbudgie")," repo on GitHub."))),(0,r.kt)("h2",{id:"translations"},"Translations"),(0,r.kt)("p",null,"Assistance is always welcome in translating our projects ",(0,r.kt)("a",{parentName:"p",href:"https://translate.getsol.us"},"to other languages"),"!"))}c.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[9135],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>g});var o=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function a(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=o.createContext({}),u=function(e){var t=o.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):a(a({},t),e)),n},p=function(e){var t=u(e.components);return o.createElement(s.Provider,{value:t},e.children)},m="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},d=o.forwardRef((function(e,t){var n=e.components,r=e.mdxType,i=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),m=u(n),d=r,g=m["".concat(s,".").concat(d)]||m[d]||c[d]||i;return n?o.createElement(g,a(a({ref:t},p),{},{components:n})):o.createElement(g,a({ref:t},p))}));function g(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var i=n.length,a=new Array(i);a[0]=d;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[m]="string"==typeof e?e:r,a[1]=l;for(var u=2;u{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>a,default:()=>c,frontMatter:()=>i,metadata:()=>l,toc:()=>u});var o=n(7462),r=(n(7294),n(3905));const i={title:"Getting Involved",summary:"Getting involved with the Solus community"},a="Getting Involved",l={unversionedId:"user/contributing/getting-involved",id:"user/contributing/getting-involved",title:"Getting Involved",description:"Solus is a big undertaking, and as such there are many ways in which your involvement can help us. Naturally, that means there are also many ways in which you can help out.",source:"@site/docs/user/contributing/getting-involved.md",sourceDirName:"user/contributing",slug:"/user/contributing/getting-involved",permalink:"/docs/user/contributing/getting-involved",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/contributing/getting-involved.md",tags:[],version:"current",lastUpdatedAt:1695222528,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Getting Involved",summary:"Getting involved with the Solus community"},sidebar:"userSidebar",previous:{title:"Community Guidelines",permalink:"/docs/user/contributing/community-guidelines"},next:{title:"Testing an ISO",permalink:"/docs/user/contributing/testing-an-iso"}},s={},u=[{value:"Engaging with the Community",id:"engaging-with-the-community",level:2},{value:"Community Guidelines",id:"community-guidelines",level:3},{value:"Community Forums",id:"community-forums",level:3},{value:"Matrix (chat)",id:"matrix-chat",level:3},{value:"Social Media",id:"social-media",level:3},{value:"Funding",id:"funding",level:2},{value:"Improving Documentation",id:"improving-documentation",level:2},{value:"Packaging",id:"packaging",level:2},{value:"Report Bugs",id:"report-bugs",level:2},{value:"Translations",id:"translations",level:2}],p={toc:u},m="wrapper";function c(e){let{components:t,...n}=e;return(0,r.kt)(m,(0,o.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"getting-involved"},"Getting Involved"),(0,r.kt)("p",null,"Solus is a big undertaking, and as such there are many ways in which your involvement can help us. Naturally, that means there are also many ways in which you can help out."),(0,r.kt)("h2",{id:"engaging-with-the-community"},"Engaging with the Community"),(0,r.kt)("h3",{id:"community-guidelines"},"Community Guidelines"),(0,r.kt)("p",null,"The Solus Project enforces a set of community guidelines to maintain respect and professionalism, as well as a family-friendly environment. Please view our community guidelines ",(0,r.kt)("a",{parentName:"p",href:"/docs/user/contributing/community-guidelines"},"here"),"."),(0,r.kt)("h3",{id:"community-forums"},"Community Forums"),(0,r.kt)("p",null,"With so many new users joining, there are always more people needing help. A great way to help us out, would be to help out our users on the ",(0,r.kt)("a",{parentName:"p",href:"https://discuss.getsol.us"},"Solus Project Forums"),"."),(0,r.kt)("h3",{id:"matrix-chat"},(0,r.kt)("a",{parentName:"h3",href:"/docs/user/contributing/getting-involved#matrix-chat"},"Matrix")," (chat)"),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"https:/.wikipedia.org/wiki/Matrix_(protocol)"},"Matrix")," is a great way to discuss issues and development with the community, and project developers in real-time. It's also a great place for getting support, but remember due\nto timezone differences there might not always be people there to answer your question immediately. You can access Matrix using a client like ",(0,r.kt)("a",{parentName:"p",href:"https://app.element.io/"},"Element Web"),", or many ",(0,r.kt)("a",{parentName:"p",href:"https://matrix.org/clients/"},"others"),". You will need a Matrix account."),(0,r.kt)("p",null,"You will find the following Solus rooms on the ",(0,r.kt)("inlineCode",{parentName:"p"},"matrix.org")," homeserver:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://matrix.to/#/#solus-support:matrix.org"},"#solus-support:matrix.org")," Support room"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://matrix.to/#/#solus-off-topic:matrix.org"},"#solus-off-topic:matrix.org")," Off-topic room"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://matrix.to/#/#solus-packaging:matrix.org"},"#solus-packaging:matrix.org")," Packaging-related room"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://matrix.to/#/#solus-development:matrix.org"},"#solus-development:matrix.org")," Development-related room"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://matrix.to/#/#solus-devlog:matrix.org"},"#solus-devlog:matrix.org")," Commit and Pull Request notifications from the ",(0,r.kt)("inlineCode",{parentName:"li"},"getsolus")," GitHub organization (developer oriented, read-only)"),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://matrix.to/#/#solus:matrix.org"},"#solus:matrix.org")," ",(0,r.kt)("strong",{parentName:"li"},"Matrix Space containing all rooms"))),(0,r.kt)("h3",{id:"social-media"},"Social Media"),(0,r.kt)("p",null,"Alongside the forums, you can communicate with developers or others in the community by using one of the following websites:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://www.facebook.com/get.solus"},"Facebook")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://fosstodon.org/@Solus"},"Mastodon")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://www.reddit.com/r/SolusProject/"},"Reddit")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("a",{parentName:"li",href:"https://twitter.com/solusproject"},"Twitter"))),(0,r.kt)("h2",{id:"funding"},"Funding"),(0,r.kt)("p",null,"Solus is funded through our ",(0,r.kt)("a",{parentName:"p",href:"https://opencollective.com/getsolus"},"Open Collective"),", with our fiscal host being the non-profit 501(c)3 organization ",(0,r.kt)("a",{parentName:"p",href:"https://www.oscollective.org/"},"Open Source Collective"),". This funding enables / will enable us to:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Offset virtual and physical infrastructure / hardware, ranging from datacenter co-location to providing repository mirrors and hardware upgrades for faster builds."),(0,r.kt)("li",{parentName:"ol"},"Enable part-time and eventually full-time development by one or more developers (e.g. myself and Beatrice)."),(0,r.kt)("li",{parentName:"ol"},"Subsidize or pay in full necessary hardware for Solus Staff and active contributors."),(0,r.kt)("li",{parentName:"ol"},"Provide opportunities to finance specific approved works, such as various features, fixes, or rewrites that the Solus Staff would want to be done in a timely manner, by individuals in the our community that are well-known for high-quality contributions. These opportunities would be provided on a case-by-case basis with direct communication and engagement between Solus Staff and the individual.")),(0,r.kt)("h2",{id:"improving-documentation"},"Improving Documentation"),(0,r.kt)("p",null,"Our Help Center improves when the documentation improves. If there are docs that you think would be valuable to add, get involved by submitting pull requests to our ",(0,r.kt)("a",{parentName:"p",href:"https://github.com/getsolus/help-center-docs"},"Help Center Docs")," repo!"),(0,r.kt)("h2",{id:"packaging"},"Packaging"),(0,r.kt)("p",null,"There may be software you wish to have on your system that is currently not available in the repository. While you are more than welcome to submit a bug and wait for someone else to package the software you want, you can also improve\nand contribute to the community by packaging software. If you're interested in learning to package software, feel free to visit our documentation ",(0,r.kt)("a",{parentName:"p",href:"/docs/packaging/"},"here"),"."),(0,r.kt)("h2",{id:"report-bugs"},"Report Bugs"),(0,r.kt)("p",null,"We're always looking to improve our systems, especially when they're not functioning as expected. By reporting bugs, you improve the system not only for you, but for all Solus Project users."),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("a",{parentName:"p",href:"https://issues.getsol.us"},"Main Solus GitHub Issue Tracker"),"\nMost bug reports about Solus itself, and its packages, should be filed here.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("a",{parentName:"p",href:"https://github.com/getsolus"},"Other Solus GitHub Repos"),"\nCertain parts of Solus, such as the Software Center, have repos in the ",(0,r.kt)("inlineCode",{parentName:"p"},"getsolus")," organization on GitHub. Check here to see if the system in question is listed. If so, file the bug in the appropriate repo.")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("p",{parentName:"li"},(0,r.kt)("a",{parentName:"p",href:"https://github.com/buddiesofbudgie/budgie-desktop/issues"},"Budgie Desktop"),"\nBudgie Desktop issues are filed in the ",(0,r.kt)("inlineCode",{parentName:"p"},"buddiesofbudgie")," repo on GitHub."))),(0,r.kt)("h2",{id:"translations"},"Translations"),(0,r.kt)("p",null,"Assistance is always welcome in translating our projects ",(0,r.kt)("a",{parentName:"p",href:"https://translate.getsol.us"},"to other languages"),"!"))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/7e4100d6.3489598e.js b/assets/js/7e4100d6.ba9f4b31.js similarity index 98% rename from assets/js/7e4100d6.3489598e.js rename to assets/js/7e4100d6.ba9f4b31.js index 9dc0eaf4b..ae85ecf84 100644 --- a/assets/js/7e4100d6.3489598e.js +++ b/assets/js/7e4100d6.ba9f4b31.js @@ -1 +1 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[6990],{3905:(e,r,t)=>{t.d(r,{Zo:()=>c,kt:()=>h});var a=t(7294);function n(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function o(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);r&&(a=a.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,a)}return t}function s(e){for(var r=1;r=0||(n[t]=e[t]);return n}(e,r);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(n[t]=e[t])}return n}var l=a.createContext({}),u=function(e){var r=a.useContext(l),t=r;return e&&(t="function"==typeof e?e(r):s(s({},r),e)),t},c=function(e){var r=u(e.components);return a.createElement(l.Provider,{value:r},e.children)},p="mdxType",d={inlineCode:"code",wrapper:function(e){var r=e.children;return a.createElement(a.Fragment,{},r)}},k=a.forwardRef((function(e,r){var t=e.components,n=e.mdxType,o=e.originalType,l=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),p=u(t),k=n,h=p["".concat(l,".").concat(k)]||p[k]||d[k]||o;return t?a.createElement(h,s(s({ref:r},c),{},{components:t})):a.createElement(h,s({ref:r},c))}));function h(e,r){var t=arguments,n=r&&r.mdxType;if("string"==typeof e||n){var o=t.length,s=new Array(o);s[0]=k;var i={};for(var l in r)hasOwnProperty.call(r,l)&&(i[l]=r[l]);i.originalType=e,i[p]="string"==typeof e?e:n,s[1]=i;for(var u=2;u{t.r(r),t.d(r,{assets:()=>l,contentTitle:()=>s,default:()=>d,frontMatter:()=>o,metadata:()=>i,toc:()=>u});var a=t(7462),n=(t(7294),t(3905));const o={title:"Wireshark",summary:"A quick start guide to Wireshark on Solus"},s="Wireshark",i={unversionedId:"user/software/networking/wireshark",id:"user/software/networking/wireshark",title:"Wireshark",description:"Wireshark is a widely-used network protocol analyzer that lets you see what\u2019s happening on a network at a microscopic level.",source:"@site/docs/user/software/networking/wireshark.md",sourceDirName:"user/software/networking",slug:"/user/software/networking/wireshark",permalink:"/docs/user/software/networking/wireshark",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/networking/wireshark.md",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Wireshark",summary:"A quick start guide to Wireshark on Solus"},sidebar:"userSidebar",previous:{title:"TigerVNC",permalink:"/docs/user/software/networking/tigervnc"},next:{title:"XRDP",permalink:"/docs/user/software/networking/xrdp"}},l={},u=[{value:"Installation",id:"installation",level:2},{value:"Use wireshark as a non-root user",id:"use-wireshark-as-a-non-root-user",level:2},{value:"Usage",id:"usage",level:2}],c={toc:u},p="wrapper";function d(e){let{components:r,...t}=e;return(0,n.kt)(p,(0,a.Z)({},c,t,{components:r,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"wireshark"},"Wireshark"),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"https://www.wireshark.org/"},"Wireshark")," is a widely-used network protocol analyzer that lets you see what\u2019s happening on a network at a microscopic level."),(0,n.kt)("h2",{id:"installation"},"Installation"),(0,n.kt)("p",null,"Wireshark can be installed either from the Software Center or via terminal:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg it wireshark\n")),(0,n.kt)("h2",{id:"use-wireshark-as-a-non-root-user"},"Use wireshark as a non-root user"),(0,n.kt)("p",null,"For security reasons, it is strongly unadvised to run Wireshark as root. To capture packets as non-root user, execute these commands:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo gpasswd -a $USER wireshark\nsudo setcap cap_dac_override,cap_net_admin,cap_net_raw+eip /usr/bin/dumpcap\n")),(0,n.kt)("h2",{id:"usage"},"Usage"),(0,n.kt)("p",null,"Wireshark ",(0,n.kt)("a",{parentName:"p",href:"https://www.wireshark.org/docs/wsug_html_chunked/"},"User\u2019s Guide")," and ",(0,n.kt)("a",{parentName:"p",href:"https://www.wireshark.org/docs/"},"learning material")," are available on ",(0,n.kt)("a",{parentName:"p",href:"https://wireshark.org"},"https://wireshark.org"),"."))}d.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[6990],{3905:(e,r,t)=>{t.d(r,{Zo:()=>c,kt:()=>h});var a=t(7294);function n(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function o(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);r&&(a=a.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,a)}return t}function s(e){for(var r=1;r=0||(n[t]=e[t]);return n}(e,r);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(n[t]=e[t])}return n}var l=a.createContext({}),u=function(e){var r=a.useContext(l),t=r;return e&&(t="function"==typeof e?e(r):s(s({},r),e)),t},c=function(e){var r=u(e.components);return a.createElement(l.Provider,{value:r},e.children)},p="mdxType",d={inlineCode:"code",wrapper:function(e){var r=e.children;return a.createElement(a.Fragment,{},r)}},k=a.forwardRef((function(e,r){var t=e.components,n=e.mdxType,o=e.originalType,l=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),p=u(t),k=n,h=p["".concat(l,".").concat(k)]||p[k]||d[k]||o;return t?a.createElement(h,s(s({ref:r},c),{},{components:t})):a.createElement(h,s({ref:r},c))}));function h(e,r){var t=arguments,n=r&&r.mdxType;if("string"==typeof e||n){var o=t.length,s=new Array(o);s[0]=k;var i={};for(var l in r)hasOwnProperty.call(r,l)&&(i[l]=r[l]);i.originalType=e,i[p]="string"==typeof e?e:n,s[1]=i;for(var u=2;u{t.r(r),t.d(r,{assets:()=>l,contentTitle:()=>s,default:()=>d,frontMatter:()=>o,metadata:()=>i,toc:()=>u});var a=t(7462),n=(t(7294),t(3905));const o={title:"Wireshark",summary:"A quick start guide to Wireshark on Solus"},s="Wireshark",i={unversionedId:"user/software/networking/wireshark",id:"user/software/networking/wireshark",title:"Wireshark",description:"Wireshark is a widely-used network protocol analyzer that lets you see what\u2019s happening on a network at a microscopic level.",source:"@site/docs/user/software/networking/wireshark.md",sourceDirName:"user/software/networking",slug:"/user/software/networking/wireshark",permalink:"/docs/user/software/networking/wireshark",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/networking/wireshark.md",tags:[],version:"current",lastUpdatedAt:1695222528,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Wireshark",summary:"A quick start guide to Wireshark on Solus"},sidebar:"userSidebar",previous:{title:"TigerVNC",permalink:"/docs/user/software/networking/tigervnc"},next:{title:"XRDP",permalink:"/docs/user/software/networking/xrdp"}},l={},u=[{value:"Installation",id:"installation",level:2},{value:"Use wireshark as a non-root user",id:"use-wireshark-as-a-non-root-user",level:2},{value:"Usage",id:"usage",level:2}],c={toc:u},p="wrapper";function d(e){let{components:r,...t}=e;return(0,n.kt)(p,(0,a.Z)({},c,t,{components:r,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"wireshark"},"Wireshark"),(0,n.kt)("p",null,(0,n.kt)("a",{parentName:"p",href:"https://www.wireshark.org/"},"Wireshark")," is a widely-used network protocol analyzer that lets you see what\u2019s happening on a network at a microscopic level."),(0,n.kt)("h2",{id:"installation"},"Installation"),(0,n.kt)("p",null,"Wireshark can be installed either from the Software Center or via terminal:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg it wireshark\n")),(0,n.kt)("h2",{id:"use-wireshark-as-a-non-root-user"},"Use wireshark as a non-root user"),(0,n.kt)("p",null,"For security reasons, it is strongly unadvised to run Wireshark as root. To capture packets as non-root user, execute these commands:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo gpasswd -a $USER wireshark\nsudo setcap cap_dac_override,cap_net_admin,cap_net_raw+eip /usr/bin/dumpcap\n")),(0,n.kt)("h2",{id:"usage"},"Usage"),(0,n.kt)("p",null,"Wireshark ",(0,n.kt)("a",{parentName:"p",href:"https://www.wireshark.org/docs/wsug_html_chunked/"},"User\u2019s Guide")," and ",(0,n.kt)("a",{parentName:"p",href:"https://www.wireshark.org/docs/"},"learning material")," are available on ",(0,n.kt)("a",{parentName:"p",href:"https://wireshark.org"},"https://wireshark.org"),"."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/8490a22d.8c49350c.js b/assets/js/8490a22d.863372c0.js similarity index 99% rename from assets/js/8490a22d.8c49350c.js rename to assets/js/8490a22d.863372c0.js index b831f6773..be198e586 100644 --- a/assets/js/8490a22d.8c49350c.js +++ b/assets/js/8490a22d.863372c0.js @@ -1 +1 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[8575],{3905:(e,o,t)=>{t.d(o,{Zo:()=>c,kt:()=>k});var l=t(7294);function i(e,o,t){return o in e?Object.defineProperty(e,o,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[o]=t,e}function r(e,o){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);o&&(l=l.filter((function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable}))),t.push.apply(t,l)}return t}function n(e){for(var o=1;o=0||(i[t]=e[t]);return i}(e,o);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(l=0;l=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(i[t]=e[t])}return i}var s=l.createContext({}),p=function(e){var o=l.useContext(s),t=o;return e&&(t="function"==typeof e?e(o):n(n({},o),e)),t},c=function(e){var o=p(e.components);return l.createElement(s.Provider,{value:o},e.children)},d="mdxType",u={inlineCode:"code",wrapper:function(e){var o=e.children;return l.createElement(l.Fragment,{},o)}},g=l.forwardRef((function(e,o){var t=e.components,i=e.mdxType,r=e.originalType,s=e.parentName,c=a(e,["components","mdxType","originalType","parentName"]),d=p(t),g=i,k=d["".concat(s,".").concat(g)]||d[g]||u[g]||r;return t?l.createElement(k,n(n({ref:o},c),{},{components:t})):l.createElement(k,n({ref:o},c))}));function k(e,o){var t=arguments,i=o&&o.mdxType;if("string"==typeof e||i){var r=t.length,n=new Array(r);n[0]=g;var a={};for(var s in o)hasOwnProperty.call(o,s)&&(a[s]=o[s]);a.originalType=e,a[d]="string"==typeof e?e:i,n[1]=a;for(var p=2;p{t.r(o),t.d(o,{assets:()=>s,contentTitle:()=>n,default:()=>u,frontMatter:()=>r,metadata:()=>a,toc:()=>p});var l=t(7462),i=(t(7294),t(3905));const r={title:"Local Repository",summary:"Packaging Using a Local Repository"},n="Packaging Using a Local Repository",a={unversionedId:"packaging/advanced-config/local-repository",id:"packaging/advanced-config/local-repository",title:"Local Repository",description:"This guide walks you through the steps necessary to tell solbuild how to utilise locally built .eopkg's that are not yet in the Solus repository.",source:"@site/docs/packaging/advanced-config/local-repository.md",sourceDirName:"packaging/advanced-config",slug:"/packaging/advanced-config/local-repository",permalink:"/docs/packaging/advanced-config/local-repository",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/advanced-config/local-repository.md",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Local Repository",summary:"Packaging Using a Local Repository"},sidebar:"packagingSidebar",previous:{title:"Eopkg Configuration",permalink:"/docs/packaging/advanced-config/eopkg-configuration"},next:{title:"Git Basics",permalink:"/docs/packaging/git-basics"}},s={},p=[{value:"Install the local profile",id:"install-the-local-profile",level:2},{value:"Utilising the local repository",id:"utilising-the-local-repository",level:2},{value:"Best practices when working with a solbuild local repository",id:"best-practices-when-working-with-a-solbuild-local-repository",level:2},{value:"Eopkg and local repositories",id:"eopkg-and-local-repositories",level:2},{value:"Generating an eopkg index for the local solbuild repository",id:"generating-an-eopkg-index-for-the-local-solbuild-repository",level:3},{value:"A note on package resolution priority",id:"a-note-on-package-resolution-priority",level:3},{value:"Adding the local solbuild repo to the eopkg repository database",id:"adding-the-local-solbuild-repo-to-the-eopkg-repository-database",level:3},{value:"Checking the currently known eopkg repositories",id:"checking-the-currently-known-eopkg-repositories",level:4},{value:"Adding repositories in the correct order",id:"adding-repositories-in-the-correct-order",level:4},{value:"Re-checking the currently known eopkg repositories",id:"re-checking-the-currently-known-eopkg-repositories",level:4},{value:"Disabling the local solbuild repository in eopkg",id:"disabling-the-local-solbuild-repository-in-eopkg",level:4},{value:"Closing thoughts",id:"closing-thoughts",level:2}],c={toc:p},d="wrapper";function u(e){let{components:o,...t}=e;return(0,i.kt)(d,(0,l.Z)({},c,t,{components:o,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"packaging-using-a-local-repository"},"Packaging Using a Local Repository"),(0,i.kt)("p",null,"This guide walks you through the steps necessary to tell solbuild how to utilise locally built ",(0,i.kt)("inlineCode",{parentName:"p"},".eopkg's")," that are not yet in the Solus repository."),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("p",{parentName:"admonition"},"It is not necessary to use a local repository to test most package submissions. The easier and recommended way is to install the eopkg files provided when a package is built. This is intended for use with stack upgrades, rebuilds, or new packages that need new dependencies that are not yet in the repo.")),(0,i.kt)("p",null,"We assume you have worked through the ",(0,i.kt)("a",{parentName:"p",href:"/docs/packaging"},"packaging")," material for creating a package with solbuild."),(0,i.kt)("h2",{id:"install-the-local-profile"},"Install the local profile"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg install solbuild-config-local-unstable\n")),(0,i.kt)("p",null,"You will also need to ensure that your common directory is fully up to date. Run ",(0,i.kt)("inlineCode",{parentName:"p"},"git pull")," from within the common directory to receive the latest updates."),(0,i.kt)("h2",{id:"utilising-the-local-repository"},"Utilising the local repository"),(0,i.kt)("p",null,"Solbuild has had support for local repos since its creation."),(0,i.kt)("p",null,"Improvements have been made to make it simple for contributors to test fixes out of the repo without having to wait for each patch to be merged. To include ",(0,i.kt)("inlineCode",{parentName:"p"},".eopkg")," files within a build, they need to be copied to the local repo directory ",(0,i.kt)("inlineCode",{parentName:"p"},"/var/lib/solbuild/local"),"."),(0,i.kt)("p",null,"Note that you will need both the regular package and the ",(0,i.kt)("inlineCode",{parentName:"p"},"-devel")," package if you want to build another package against them using ",(0,i.kt)("inlineCode",{parentName:"p"},"pkgconfig()")," in the ",(0,i.kt)("inlineCode",{parentName:"p"},"package.yml file"),"."),(0,i.kt)("p",null,"With the ",(0,i.kt)("inlineCode",{parentName:"p"},".eopkg")," files now present in the local repo, we can make use of them in solbuild by running ",(0,i.kt)("inlineCode",{parentName:"p"},"make local")," rather than ",(0,i.kt)("inlineCode",{parentName:"p"},"make"),". This will index the local repository and prioritise their use over what is available in the Solus unstable repository."),(0,i.kt)("h2",{id:"best-practices-when-working-with-a-solbuild-local-repository"},"Best practices when working with a solbuild local repository"),(0,i.kt)("p",null,"There are some important things to know when working with local repositories, as they may lead to issues later on."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Solbuild will use your version of a package from the local repo regardless of whether there's a higher release in the Solus repository. Therefore you should only use ",(0,i.kt)("inlineCode",{parentName:"li"},"make local")," when required and also remove old packages from the local repo when no longer needed."),(0,i.kt)("li",{parentName:"ul"},"If the package is already installed in the solbuild image, the release must be higher for it to be installed.")),(0,i.kt)("h2",{id:"eopkg-and-local-repositories"},"Eopkg and local repositories"),(0,i.kt)("p",null,"As alluded to above, eopkg supports resolving packages from more than one repository."),(0,i.kt)("p",null,"In practice, this can be leveraged to make the developer workflow more convenient by ensuring that eopkg pulls from the local solbuild repository."),(0,i.kt)("h3",{id:"generating-an-eopkg-index-for-the-local-solbuild-repository"},"Generating an eopkg index for the local solbuild repository"),(0,i.kt)("p",null,"Before packages from the local solbuild repository can be resolved, an eopkg index file needs to be created."),(0,i.kt)("p",null,"As mentioned earlier, the local solbuild repo installed by the ",(0,i.kt)("inlineCode",{parentName:"p"},"solbuild-config-local-unstable")," package lives in ",(0,i.kt)("inlineCode",{parentName:"p"},"/var/lib/solbuild/local"),"."),(0,i.kt)("p",null,"To generate or refresh the eopkg index in ",(0,i.kt)("inlineCode",{parentName:"p"},"/var/lib/solbuild/local"),", simply run:"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"sudo eopkg index --skip-signing /var/lib/solbuild/local/ --output /var/lib/solbuild/local/eopkg-index.xml")),(0,i.kt)("h3",{id:"a-note-on-package-resolution-priority"},"A note on package resolution priority"),(0,i.kt)("p",null,"It bears repeating that in its current incarnation, eopkg will always prefer packages from the topmost repository listed with ",(0,i.kt)("inlineCode",{parentName:"p"},"eopkg lr"),"."),(0,i.kt)("p",null,"In other words, if a package exists both in the local solbuild repository and the official upstream Solus repository, eopkg will only consider the package from the first repository listed with ",(0,i.kt)("inlineCode",{parentName:"p"},"eopkg lr")," ",(0,i.kt)("em",{parentName:"p"},"regardless of its release number"),"."),(0,i.kt)("h3",{id:"adding-the-local-solbuild-repo-to-the-eopkg-repository-database"},"Adding the local solbuild repo to the eopkg repository database"),(0,i.kt)("p",null,"The easiest way to add the local solbuild repo to the list of repositories known to eopkg is to add the local solbuild repo and then ",(0,i.kt)("em",{parentName:"p"},"re-add")," the official Solus repo."),(0,i.kt)("h4",{id:"checking-the-currently-known-eopkg-repositories"},"Checking the currently known eopkg repositories"),(0,i.kt)("p",null,"But first, let's list the repositories currently known to eopkg with ",(0,i.kt)("inlineCode",{parentName:"p"},"eopkg lr")," -- this should produce output similar to:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"Solus [active]\n https://cdn.getsol.us/repo/unstable/eopkg-index.xml.xz\n")),(0,i.kt)("h4",{id:"adding-repositories-in-the-correct-order"},"Adding repositories in the correct order"),(0,i.kt)("p",null,"Now the repositories need to be added to account for the desired dependency resolution order:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"sudo eopkg ar Local /var/lib/solbuild/local/eopkg-index.xml.xz\nsudo eopkg ar Solus https://cdn.getsol.us/repo/unstable/eopkg-index.xml.xz\n")),(0,i.kt)("p",null,"This should yield output similar to:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"$ sudo eopkg ar Local /var/lib/solbuild/local/eopkg-index.xml.xz\nRepo Local added to system.\nUpdating repository: Local\nPackage database updated.\n$ sudo eopkg ar Solus https://cdn.getsol.us/repo/unstable/eopkg-index.xml.xz\nRepo already present with name Solus and same URL. Removing first.\nRepo Solus added to system.\nUpdating repository: Solus\neopkg-index.xml.xz.sha1sum (40.0 B)100% 765.61 KB/s [00:00:00] [complete]\neopkg-index.xml.xz (2.1 MB)100% 914.38 KB/s [00:00:01] [complete]\nPackage database updated.\n")),(0,i.kt)("h4",{id:"re-checking-the-currently-known-eopkg-repositories"},"Re-checking the currently known eopkg repositories"),(0,i.kt)("p",null,"All that is left now is to check that the dependency resolution order is correct so that packages from the local solbuild repository are preferred over the upstream Solus repository."),(0,i.kt)("p",null,"Thus, ",(0,i.kt)("inlineCode",{parentName:"p"},"eopkg lr")," should yield output similar to:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"$ eopkg lr\nLocal [active]\n /var/lib/solbuild/local/eopkg-index.xml.xz\nSolus [active]\n https://cdn.getsol.us/repo/unstable/eopkg-index.xml.xz\n")),(0,i.kt)("h4",{id:"disabling-the-local-solbuild-repository-in-eopkg"},"Disabling the local solbuild repository in eopkg"),(0,i.kt)("p",null,"To reset the system to use packages from the official Solus repository exclusively, the ",(0,i.kt)("inlineCode",{parentName:"p"},"Local")," eopkg repository can be disabled with the command ",(0,i.kt)("inlineCode",{parentName:"p"},"sudo eopkg disable-repo Local"),"."),(0,i.kt)("p",null,"The output should look similar to:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"$ sudo eopkg disable-repo Local\n$ sudo eopkg lr\nLocal [inactive]\n /var/lib/solbuild/local/eopkg-index.xml.xz\nSolus [active]\n https://cdn.getsol.us/repo/unstable/eopkg-index.xml.xz\n")),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"Local")," eopkg repository can be re-enabled with ",(0,i.kt)("inlineCode",{parentName:"p"},"sudo eopkg enable-repo Local"),"."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"$ sudo eopkg enable-repo Local\n$ sudo eopkg lr\nLocal [active]\n /var/lib/solbuild/local/eopkg-index.xml.xz\nSolus [active]\n https://cdn.getsol.us/repo/unstable/eopkg-index.xml.xz\n")),(0,i.kt)("h2",{id:"closing-thoughts"},"Closing thoughts"),(0,i.kt)("p",null,"Congratulations on making it this far! Your system should now be ready for convenient deployment and testing of locally built packages."),(0,i.kt)("p",null,"Note that packages not present in the local solbuild repository will be fetched from the upstream official Solus (unstable) repository."),(0,i.kt)("p",null,"Finally, keep in mind that the eopkg index needs to be refreshed whenever you add or remove locally built packages to your local solbuild repository -- otherwise eopkg won't know that new packages are available / have been removed from the repository."))}u.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[8575],{3905:(e,o,t)=>{t.d(o,{Zo:()=>c,kt:()=>k});var l=t(7294);function i(e,o,t){return o in e?Object.defineProperty(e,o,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[o]=t,e}function r(e,o){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);o&&(l=l.filter((function(o){return Object.getOwnPropertyDescriptor(e,o).enumerable}))),t.push.apply(t,l)}return t}function n(e){for(var o=1;o=0||(i[t]=e[t]);return i}(e,o);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(l=0;l=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(i[t]=e[t])}return i}var s=l.createContext({}),p=function(e){var o=l.useContext(s),t=o;return e&&(t="function"==typeof e?e(o):n(n({},o),e)),t},c=function(e){var o=p(e.components);return l.createElement(s.Provider,{value:o},e.children)},d="mdxType",u={inlineCode:"code",wrapper:function(e){var o=e.children;return l.createElement(l.Fragment,{},o)}},g=l.forwardRef((function(e,o){var t=e.components,i=e.mdxType,r=e.originalType,s=e.parentName,c=a(e,["components","mdxType","originalType","parentName"]),d=p(t),g=i,k=d["".concat(s,".").concat(g)]||d[g]||u[g]||r;return t?l.createElement(k,n(n({ref:o},c),{},{components:t})):l.createElement(k,n({ref:o},c))}));function k(e,o){var t=arguments,i=o&&o.mdxType;if("string"==typeof e||i){var r=t.length,n=new Array(r);n[0]=g;var a={};for(var s in o)hasOwnProperty.call(o,s)&&(a[s]=o[s]);a.originalType=e,a[d]="string"==typeof e?e:i,n[1]=a;for(var p=2;p{t.r(o),t.d(o,{assets:()=>s,contentTitle:()=>n,default:()=>u,frontMatter:()=>r,metadata:()=>a,toc:()=>p});var l=t(7462),i=(t(7294),t(3905));const r={title:"Local Repository",summary:"Packaging Using a Local Repository"},n="Packaging Using a Local Repository",a={unversionedId:"packaging/advanced-config/local-repository",id:"packaging/advanced-config/local-repository",title:"Local Repository",description:"This guide walks you through the steps necessary to tell solbuild how to utilise locally built .eopkg's that are not yet in the Solus repository.",source:"@site/docs/packaging/advanced-config/local-repository.md",sourceDirName:"packaging/advanced-config",slug:"/packaging/advanced-config/local-repository",permalink:"/docs/packaging/advanced-config/local-repository",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/advanced-config/local-repository.md",tags:[],version:"current",lastUpdatedAt:1695222528,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Local Repository",summary:"Packaging Using a Local Repository"},sidebar:"packagingSidebar",previous:{title:"Eopkg Configuration",permalink:"/docs/packaging/advanced-config/eopkg-configuration"},next:{title:"Git Basics",permalink:"/docs/packaging/git-basics"}},s={},p=[{value:"Install the local profile",id:"install-the-local-profile",level:2},{value:"Utilising the local repository",id:"utilising-the-local-repository",level:2},{value:"Best practices when working with a solbuild local repository",id:"best-practices-when-working-with-a-solbuild-local-repository",level:2},{value:"Eopkg and local repositories",id:"eopkg-and-local-repositories",level:2},{value:"Generating an eopkg index for the local solbuild repository",id:"generating-an-eopkg-index-for-the-local-solbuild-repository",level:3},{value:"A note on package resolution priority",id:"a-note-on-package-resolution-priority",level:3},{value:"Adding the local solbuild repo to the eopkg repository database",id:"adding-the-local-solbuild-repo-to-the-eopkg-repository-database",level:3},{value:"Checking the currently known eopkg repositories",id:"checking-the-currently-known-eopkg-repositories",level:4},{value:"Adding repositories in the correct order",id:"adding-repositories-in-the-correct-order",level:4},{value:"Re-checking the currently known eopkg repositories",id:"re-checking-the-currently-known-eopkg-repositories",level:4},{value:"Disabling the local solbuild repository in eopkg",id:"disabling-the-local-solbuild-repository-in-eopkg",level:4},{value:"Closing thoughts",id:"closing-thoughts",level:2}],c={toc:p},d="wrapper";function u(e){let{components:o,...t}=e;return(0,i.kt)(d,(0,l.Z)({},c,t,{components:o,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"packaging-using-a-local-repository"},"Packaging Using a Local Repository"),(0,i.kt)("p",null,"This guide walks you through the steps necessary to tell solbuild how to utilise locally built ",(0,i.kt)("inlineCode",{parentName:"p"},".eopkg's")," that are not yet in the Solus repository."),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("p",{parentName:"admonition"},"It is not necessary to use a local repository to test most package submissions. The easier and recommended way is to install the eopkg files provided when a package is built. This is intended for use with stack upgrades, rebuilds, or new packages that need new dependencies that are not yet in the repo.")),(0,i.kt)("p",null,"We assume you have worked through the ",(0,i.kt)("a",{parentName:"p",href:"/docs/packaging"},"packaging")," material for creating a package with solbuild."),(0,i.kt)("h2",{id:"install-the-local-profile"},"Install the local profile"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg install solbuild-config-local-unstable\n")),(0,i.kt)("p",null,"You will also need to ensure that your common directory is fully up to date. Run ",(0,i.kt)("inlineCode",{parentName:"p"},"git pull")," from within the common directory to receive the latest updates."),(0,i.kt)("h2",{id:"utilising-the-local-repository"},"Utilising the local repository"),(0,i.kt)("p",null,"Solbuild has had support for local repos since its creation."),(0,i.kt)("p",null,"Improvements have been made to make it simple for contributors to test fixes out of the repo without having to wait for each patch to be merged. To include ",(0,i.kt)("inlineCode",{parentName:"p"},".eopkg")," files within a build, they need to be copied to the local repo directory ",(0,i.kt)("inlineCode",{parentName:"p"},"/var/lib/solbuild/local"),"."),(0,i.kt)("p",null,"Note that you will need both the regular package and the ",(0,i.kt)("inlineCode",{parentName:"p"},"-devel")," package if you want to build another package against them using ",(0,i.kt)("inlineCode",{parentName:"p"},"pkgconfig()")," in the ",(0,i.kt)("inlineCode",{parentName:"p"},"package.yml file"),"."),(0,i.kt)("p",null,"With the ",(0,i.kt)("inlineCode",{parentName:"p"},".eopkg")," files now present in the local repo, we can make use of them in solbuild by running ",(0,i.kt)("inlineCode",{parentName:"p"},"make local")," rather than ",(0,i.kt)("inlineCode",{parentName:"p"},"make"),". This will index the local repository and prioritise their use over what is available in the Solus unstable repository."),(0,i.kt)("h2",{id:"best-practices-when-working-with-a-solbuild-local-repository"},"Best practices when working with a solbuild local repository"),(0,i.kt)("p",null,"There are some important things to know when working with local repositories, as they may lead to issues later on."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Solbuild will use your version of a package from the local repo regardless of whether there's a higher release in the Solus repository. Therefore you should only use ",(0,i.kt)("inlineCode",{parentName:"li"},"make local")," when required and also remove old packages from the local repo when no longer needed."),(0,i.kt)("li",{parentName:"ul"},"If the package is already installed in the solbuild image, the release must be higher for it to be installed.")),(0,i.kt)("h2",{id:"eopkg-and-local-repositories"},"Eopkg and local repositories"),(0,i.kt)("p",null,"As alluded to above, eopkg supports resolving packages from more than one repository."),(0,i.kt)("p",null,"In practice, this can be leveraged to make the developer workflow more convenient by ensuring that eopkg pulls from the local solbuild repository."),(0,i.kt)("h3",{id:"generating-an-eopkg-index-for-the-local-solbuild-repository"},"Generating an eopkg index for the local solbuild repository"),(0,i.kt)("p",null,"Before packages from the local solbuild repository can be resolved, an eopkg index file needs to be created."),(0,i.kt)("p",null,"As mentioned earlier, the local solbuild repo installed by the ",(0,i.kt)("inlineCode",{parentName:"p"},"solbuild-config-local-unstable")," package lives in ",(0,i.kt)("inlineCode",{parentName:"p"},"/var/lib/solbuild/local"),"."),(0,i.kt)("p",null,"To generate or refresh the eopkg index in ",(0,i.kt)("inlineCode",{parentName:"p"},"/var/lib/solbuild/local"),", simply run:"),(0,i.kt)("p",null,(0,i.kt)("inlineCode",{parentName:"p"},"sudo eopkg index --skip-signing /var/lib/solbuild/local/ --output /var/lib/solbuild/local/eopkg-index.xml")),(0,i.kt)("h3",{id:"a-note-on-package-resolution-priority"},"A note on package resolution priority"),(0,i.kt)("p",null,"It bears repeating that in its current incarnation, eopkg will always prefer packages from the topmost repository listed with ",(0,i.kt)("inlineCode",{parentName:"p"},"eopkg lr"),"."),(0,i.kt)("p",null,"In other words, if a package exists both in the local solbuild repository and the official upstream Solus repository, eopkg will only consider the package from the first repository listed with ",(0,i.kt)("inlineCode",{parentName:"p"},"eopkg lr")," ",(0,i.kt)("em",{parentName:"p"},"regardless of its release number"),"."),(0,i.kt)("h3",{id:"adding-the-local-solbuild-repo-to-the-eopkg-repository-database"},"Adding the local solbuild repo to the eopkg repository database"),(0,i.kt)("p",null,"The easiest way to add the local solbuild repo to the list of repositories known to eopkg is to add the local solbuild repo and then ",(0,i.kt)("em",{parentName:"p"},"re-add")," the official Solus repo."),(0,i.kt)("h4",{id:"checking-the-currently-known-eopkg-repositories"},"Checking the currently known eopkg repositories"),(0,i.kt)("p",null,"But first, let's list the repositories currently known to eopkg with ",(0,i.kt)("inlineCode",{parentName:"p"},"eopkg lr")," -- this should produce output similar to:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"Solus [active]\n https://cdn.getsol.us/repo/unstable/eopkg-index.xml.xz\n")),(0,i.kt)("h4",{id:"adding-repositories-in-the-correct-order"},"Adding repositories in the correct order"),(0,i.kt)("p",null,"Now the repositories need to be added to account for the desired dependency resolution order:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"sudo eopkg ar Local /var/lib/solbuild/local/eopkg-index.xml.xz\nsudo eopkg ar Solus https://cdn.getsol.us/repo/unstable/eopkg-index.xml.xz\n")),(0,i.kt)("p",null,"This should yield output similar to:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"$ sudo eopkg ar Local /var/lib/solbuild/local/eopkg-index.xml.xz\nRepo Local added to system.\nUpdating repository: Local\nPackage database updated.\n$ sudo eopkg ar Solus https://cdn.getsol.us/repo/unstable/eopkg-index.xml.xz\nRepo already present with name Solus and same URL. Removing first.\nRepo Solus added to system.\nUpdating repository: Solus\neopkg-index.xml.xz.sha1sum (40.0 B)100% 765.61 KB/s [00:00:00] [complete]\neopkg-index.xml.xz (2.1 MB)100% 914.38 KB/s [00:00:01] [complete]\nPackage database updated.\n")),(0,i.kt)("h4",{id:"re-checking-the-currently-known-eopkg-repositories"},"Re-checking the currently known eopkg repositories"),(0,i.kt)("p",null,"All that is left now is to check that the dependency resolution order is correct so that packages from the local solbuild repository are preferred over the upstream Solus repository."),(0,i.kt)("p",null,"Thus, ",(0,i.kt)("inlineCode",{parentName:"p"},"eopkg lr")," should yield output similar to:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"$ eopkg lr\nLocal [active]\n /var/lib/solbuild/local/eopkg-index.xml.xz\nSolus [active]\n https://cdn.getsol.us/repo/unstable/eopkg-index.xml.xz\n")),(0,i.kt)("h4",{id:"disabling-the-local-solbuild-repository-in-eopkg"},"Disabling the local solbuild repository in eopkg"),(0,i.kt)("p",null,"To reset the system to use packages from the official Solus repository exclusively, the ",(0,i.kt)("inlineCode",{parentName:"p"},"Local")," eopkg repository can be disabled with the command ",(0,i.kt)("inlineCode",{parentName:"p"},"sudo eopkg disable-repo Local"),"."),(0,i.kt)("p",null,"The output should look similar to:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"$ sudo eopkg disable-repo Local\n$ sudo eopkg lr\nLocal [inactive]\n /var/lib/solbuild/local/eopkg-index.xml.xz\nSolus [active]\n https://cdn.getsol.us/repo/unstable/eopkg-index.xml.xz\n")),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"Local")," eopkg repository can be re-enabled with ",(0,i.kt)("inlineCode",{parentName:"p"},"sudo eopkg enable-repo Local"),"."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"$ sudo eopkg enable-repo Local\n$ sudo eopkg lr\nLocal [active]\n /var/lib/solbuild/local/eopkg-index.xml.xz\nSolus [active]\n https://cdn.getsol.us/repo/unstable/eopkg-index.xml.xz\n")),(0,i.kt)("h2",{id:"closing-thoughts"},"Closing thoughts"),(0,i.kt)("p",null,"Congratulations on making it this far! Your system should now be ready for convenient deployment and testing of locally built packages."),(0,i.kt)("p",null,"Note that packages not present in the local solbuild repository will be fetched from the upstream official Solus (unstable) repository."),(0,i.kt)("p",null,"Finally, keep in mind that the eopkg index needs to be refreshed whenever you add or remove locally built packages to your local solbuild repository -- otherwise eopkg won't know that new packages are available / have been removed from the repository."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/88a83a8c.c72b314a.js b/assets/js/88a83a8c.68d5338a.js similarity index 99% rename from assets/js/88a83a8c.c72b314a.js rename to assets/js/88a83a8c.68d5338a.js index dd772b8ca..721e00a42 100644 --- a/assets/js/88a83a8c.c72b314a.js +++ b/assets/js/88a83a8c.68d5338a.js @@ -1 +1 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[1242],{3905:(e,t,s)=>{s.d(t,{Zo:()=>p,kt:()=>k});var a=s(7294);function n(e,t,s){return t in e?Object.defineProperty(e,t,{value:s,enumerable:!0,configurable:!0,writable:!0}):e[t]=s,e}function r(e,t){var s=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),s.push.apply(s,a)}return s}function o(e){for(var t=1;t=0||(n[s]=e[s]);return n}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,s)&&(n[s]=e[s])}return n}var i=a.createContext({}),u=function(e){var t=a.useContext(i),s=t;return e&&(s="function"==typeof e?e(t):o(o({},t),e)),s},p=function(e){var t=u(e.components);return a.createElement(i.Provider,{value:t},e.children)},d="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},h=a.forwardRef((function(e,t){var s=e.components,n=e.mdxType,r=e.originalType,i=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),d=u(s),h=n,k=d["".concat(i,".").concat(h)]||d[h]||c[h]||r;return s?a.createElement(k,o(o({ref:t},p),{},{components:s})):a.createElement(k,o({ref:t},p))}));function k(e,t){var s=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var r=s.length,o=new Array(r);o[0]=h;var l={};for(var i in t)hasOwnProperty.call(t,i)&&(l[i]=t[i]);l.originalType=e,l[d]="string"==typeof e?e:n,o[1]=l;for(var u=2;u{s.r(t),s.d(t,{assets:()=>i,contentTitle:()=>o,default:()=>c,frontMatter:()=>r,metadata:()=>l,toc:()=>u});var a=s(7462),n=(s(7294),s(3905));const r={title:"KDE Wallet",summary:"A quick introduction to using KWallet on Solus"},o="KDE Wallet and SSH keys",l={unversionedId:"user/software/utilities/kwallet",id:"user/software/utilities/kwallet",title:"KDE Wallet",description:"In KDE Plasma, the KDE Wallet is responsible for securely storing and supplying user credentials to the various KDE applications that request them.",source:"@site/docs/user/software/utilities/kwallet.md",sourceDirName:"user/software/utilities",slug:"/user/software/utilities/kwallet",permalink:"/docs/user/software/utilities/kwallet",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/utilities/kwallet.md",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"KDE Wallet",summary:"A quick introduction to using KWallet on Solus"},sidebar:"userSidebar",previous:{title:"KSysGuard",permalink:"/docs/user/software/utilities/ksysguard"},next:{title:"Virtualization",permalink:"/docs/category/virtualization"}},i={},u=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"The SSH_ASKPASS environment variable",id:"the-ssh_askpass-environment-variable",level:2},{value:"Create ~/.config/autostart/ssh-add.desktop",id:"create-configautostartssh-adddesktop",level:2},{value:"Example",id:"example",level:3},{value:"Set correct permissions",id:"set-correct-permissions",level:3},{value:"Re-log to test your changes",id:"re-log-to-test-your-changes",level:2},{value:"Unlock SSH key passphrases automatically on login",id:"unlock-ssh-key-passphrases-automatically-on-login",level:2},{value:"Troubleshooting",id:"troubleshooting",level:2}],p={toc:u},d="wrapper";function c(e){let{components:t,...s}=e;return(0,n.kt)(d,(0,a.Z)({},p,s,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"kde-wallet-and-ssh-keys"},"KDE Wallet and SSH keys"),(0,n.kt)("p",null,"In KDE Plasma, the KDE Wallet is responsible for securely storing and supplying user credentials to the various KDE applications that request them."),(0,n.kt)("p",null,"Out of the box, the Solus KDE Plasma Desktop is already configured to use the KDE Wallet PAM module, which unlocks the KDE Wallet on session login."),(0,n.kt)("p",null,"However, additional configuration is needed to make the KDE Wallet manage SSH key passphrases."),(0,n.kt)("h2",{id:"prerequisites"},"Prerequisites"),(0,n.kt)("p",null,"This document assumes that you are familiar with utilising SSH key passphrases."),(0,n.kt)("p",null,"For more information, see ",(0,n.kt)("a",{parentName:"p",href:"https://help.github.com/en/articles/working-with-ssh-key-passphrases"},"working with SSH key passphrases")),(0,n.kt)("h2",{id:"the-ssh_askpass-environment-variable"},"The ",(0,n.kt)("inlineCode",{parentName:"h2"},"SSH_ASKPASS")," environment variable"),(0,n.kt)("p",null,"The ",(0,n.kt)("inlineCode",{parentName:"p"},"SSH_ASKPASS")," environment variable tells the SSH subsystem which application to use when prompting the user for SSH key passphrases."),(0,n.kt)("p",null,"On the Solus KDE Plasma Desktop spin, ",(0,n.kt)("inlineCode",{parentName:"p"},"ksshaskpass")," is installed out of the box and ",(0,n.kt)("inlineCode",{parentName:"p"},"SSH_ASKPASS")," is set to ",(0,n.kt)("inlineCode",{parentName:"p"},"ksshaskpass")," in the file ",(0,n.kt)("inlineCode",{parentName:"p"},"/usr/share/xdg/plasma-workspace/env/50-solus-defaults.sh")," by default."),(0,n.kt)("h2",{id:"create-configautostartssh-adddesktop"},"Create ",(0,n.kt)("inlineCode",{parentName:"h2"},"~/.config/autostart/ssh-add.desktop")),(0,n.kt)("p",null,"The contents of ",(0,n.kt)("inlineCode",{parentName:"p"},"~/.config/autostart/ssh-add.desktop")," should reflect the SSH keys you want to manage using the KDE Wallet."),(0,n.kt)("h3",{id:"example"},"Example"),(0,n.kt)("p",null,"Below is an example of the contents of ",(0,n.kt)("inlineCode",{parentName:"p"},"~/.config/autostart/ssh-add.desktop"),":"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"[Desktop Entry]\nExec=ssh-add -q\nName=ssh-add\nType=Application\n")),(0,n.kt)("p",null,"Tip: The above ssh-add.desktop file will only add the default key ",(0,n.kt)("inlineCode",{parentName:"p"},"~/.ssh/id_rsa"),". Assuming you have different keys named key1, key2 etc you need to change the above desktop file to"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"[Desktop Entry]\nExec=ssh-add -q ~/.ssh/key1 ~/.ssh/key2 ~/.ssh/key3\nName=ssh-add\nType=Application\n")),(0,n.kt)("h3",{id:"set-correct-permissions"},"Set correct permissions"),(0,n.kt)("p",null,"After you created your file inside the autostart folder you have to give it the correct permissions"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"chmod 700 ~/.config/autostart/ssh-add.desktop\n")),(0,n.kt)("p",null,"with this the file should appear inside the autostart settings"),(0,n.kt)("h2",{id:"re-log-to-test-your-changes"},"Re-log to test your changes"),(0,n.kt)("p",null,"After logging out and back in, you should now be prompted by the KDE Wallet to input your SSH key passphrases."),(0,n.kt)("h2",{id:"unlock-ssh-key-passphrases-automatically-on-login"},"Unlock SSH key passphrases automatically on login"),(0,n.kt)("p",null,"KDE Wallet supports automatically unlocking your SSH key passphrases on login."),(0,n.kt)("p",null,"For this to work, your KDE Wallet password needs to be identical to your login password."),(0,n.kt)("h2",{id:"troubleshooting"},"Troubleshooting"),(0,n.kt)("p",null,"ssh key doesn't get triggered, you can force this manually by running this command."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"SSH_ASKPASS=/usr/bin/ksshaskpass ssh-add < /dev/null\n")))}c.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[1242],{3905:(e,t,s)=>{s.d(t,{Zo:()=>p,kt:()=>k});var a=s(7294);function n(e,t,s){return t in e?Object.defineProperty(e,t,{value:s,enumerable:!0,configurable:!0,writable:!0}):e[t]=s,e}function r(e,t){var s=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),s.push.apply(s,a)}return s}function o(e){for(var t=1;t=0||(n[s]=e[s]);return n}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,s)&&(n[s]=e[s])}return n}var i=a.createContext({}),u=function(e){var t=a.useContext(i),s=t;return e&&(s="function"==typeof e?e(t):o(o({},t),e)),s},p=function(e){var t=u(e.components);return a.createElement(i.Provider,{value:t},e.children)},d="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},h=a.forwardRef((function(e,t){var s=e.components,n=e.mdxType,r=e.originalType,i=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),d=u(s),h=n,k=d["".concat(i,".").concat(h)]||d[h]||c[h]||r;return s?a.createElement(k,o(o({ref:t},p),{},{components:s})):a.createElement(k,o({ref:t},p))}));function k(e,t){var s=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var r=s.length,o=new Array(r);o[0]=h;var l={};for(var i in t)hasOwnProperty.call(t,i)&&(l[i]=t[i]);l.originalType=e,l[d]="string"==typeof e?e:n,o[1]=l;for(var u=2;u{s.r(t),s.d(t,{assets:()=>i,contentTitle:()=>o,default:()=>c,frontMatter:()=>r,metadata:()=>l,toc:()=>u});var a=s(7462),n=(s(7294),s(3905));const r={title:"KDE Wallet",summary:"A quick introduction to using KWallet on Solus"},o="KDE Wallet and SSH keys",l={unversionedId:"user/software/utilities/kwallet",id:"user/software/utilities/kwallet",title:"KDE Wallet",description:"In KDE Plasma, the KDE Wallet is responsible for securely storing and supplying user credentials to the various KDE applications that request them.",source:"@site/docs/user/software/utilities/kwallet.md",sourceDirName:"user/software/utilities",slug:"/user/software/utilities/kwallet",permalink:"/docs/user/software/utilities/kwallet",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/utilities/kwallet.md",tags:[],version:"current",lastUpdatedAt:1695222528,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"KDE Wallet",summary:"A quick introduction to using KWallet on Solus"},sidebar:"userSidebar",previous:{title:"KSysGuard",permalink:"/docs/user/software/utilities/ksysguard"},next:{title:"Virtualization",permalink:"/docs/category/virtualization"}},i={},u=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"The SSH_ASKPASS environment variable",id:"the-ssh_askpass-environment-variable",level:2},{value:"Create ~/.config/autostart/ssh-add.desktop",id:"create-configautostartssh-adddesktop",level:2},{value:"Example",id:"example",level:3},{value:"Set correct permissions",id:"set-correct-permissions",level:3},{value:"Re-log to test your changes",id:"re-log-to-test-your-changes",level:2},{value:"Unlock SSH key passphrases automatically on login",id:"unlock-ssh-key-passphrases-automatically-on-login",level:2},{value:"Troubleshooting",id:"troubleshooting",level:2}],p={toc:u},d="wrapper";function c(e){let{components:t,...s}=e;return(0,n.kt)(d,(0,a.Z)({},p,s,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"kde-wallet-and-ssh-keys"},"KDE Wallet and SSH keys"),(0,n.kt)("p",null,"In KDE Plasma, the KDE Wallet is responsible for securely storing and supplying user credentials to the various KDE applications that request them."),(0,n.kt)("p",null,"Out of the box, the Solus KDE Plasma Desktop is already configured to use the KDE Wallet PAM module, which unlocks the KDE Wallet on session login."),(0,n.kt)("p",null,"However, additional configuration is needed to make the KDE Wallet manage SSH key passphrases."),(0,n.kt)("h2",{id:"prerequisites"},"Prerequisites"),(0,n.kt)("p",null,"This document assumes that you are familiar with utilising SSH key passphrases."),(0,n.kt)("p",null,"For more information, see ",(0,n.kt)("a",{parentName:"p",href:"https://help.github.com/en/articles/working-with-ssh-key-passphrases"},"working with SSH key passphrases")),(0,n.kt)("h2",{id:"the-ssh_askpass-environment-variable"},"The ",(0,n.kt)("inlineCode",{parentName:"h2"},"SSH_ASKPASS")," environment variable"),(0,n.kt)("p",null,"The ",(0,n.kt)("inlineCode",{parentName:"p"},"SSH_ASKPASS")," environment variable tells the SSH subsystem which application to use when prompting the user for SSH key passphrases."),(0,n.kt)("p",null,"On the Solus KDE Plasma Desktop spin, ",(0,n.kt)("inlineCode",{parentName:"p"},"ksshaskpass")," is installed out of the box and ",(0,n.kt)("inlineCode",{parentName:"p"},"SSH_ASKPASS")," is set to ",(0,n.kt)("inlineCode",{parentName:"p"},"ksshaskpass")," in the file ",(0,n.kt)("inlineCode",{parentName:"p"},"/usr/share/xdg/plasma-workspace/env/50-solus-defaults.sh")," by default."),(0,n.kt)("h2",{id:"create-configautostartssh-adddesktop"},"Create ",(0,n.kt)("inlineCode",{parentName:"h2"},"~/.config/autostart/ssh-add.desktop")),(0,n.kt)("p",null,"The contents of ",(0,n.kt)("inlineCode",{parentName:"p"},"~/.config/autostart/ssh-add.desktop")," should reflect the SSH keys you want to manage using the KDE Wallet."),(0,n.kt)("h3",{id:"example"},"Example"),(0,n.kt)("p",null,"Below is an example of the contents of ",(0,n.kt)("inlineCode",{parentName:"p"},"~/.config/autostart/ssh-add.desktop"),":"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"[Desktop Entry]\nExec=ssh-add -q\nName=ssh-add\nType=Application\n")),(0,n.kt)("p",null,"Tip: The above ssh-add.desktop file will only add the default key ",(0,n.kt)("inlineCode",{parentName:"p"},"~/.ssh/id_rsa"),". Assuming you have different keys named key1, key2 etc you need to change the above desktop file to"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"[Desktop Entry]\nExec=ssh-add -q ~/.ssh/key1 ~/.ssh/key2 ~/.ssh/key3\nName=ssh-add\nType=Application\n")),(0,n.kt)("h3",{id:"set-correct-permissions"},"Set correct permissions"),(0,n.kt)("p",null,"After you created your file inside the autostart folder you have to give it the correct permissions"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"chmod 700 ~/.config/autostart/ssh-add.desktop\n")),(0,n.kt)("p",null,"with this the file should appear inside the autostart settings"),(0,n.kt)("h2",{id:"re-log-to-test-your-changes"},"Re-log to test your changes"),(0,n.kt)("p",null,"After logging out and back in, you should now be prompted by the KDE Wallet to input your SSH key passphrases."),(0,n.kt)("h2",{id:"unlock-ssh-key-passphrases-automatically-on-login"},"Unlock SSH key passphrases automatically on login"),(0,n.kt)("p",null,"KDE Wallet supports automatically unlocking your SSH key passphrases on login."),(0,n.kt)("p",null,"For this to work, your KDE Wallet password needs to be identical to your login password."),(0,n.kt)("h2",{id:"troubleshooting"},"Troubleshooting"),(0,n.kt)("p",null,"ssh key doesn't get triggered, you can force this manually by running this command."),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre"},"SSH_ASKPASS=/usr/bin/ksshaskpass ssh-add < /dev/null\n")))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/8e3d5b32.277e2ac1.js b/assets/js/8e3d5b32.460f3fad.js similarity index 98% rename from assets/js/8e3d5b32.277e2ac1.js rename to assets/js/8e3d5b32.460f3fad.js index 243035aa4..946096fb8 100644 --- a/assets/js/8e3d5b32.277e2ac1.js +++ b/assets/js/8e3d5b32.460f3fad.js @@ -1 +1 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[8499],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>m});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=a.createContext({}),u=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},p=function(e){var t=u(e.components);return a.createElement(s.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},g=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,i=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),c=u(n),g=r,m=c["".concat(s,".").concat(g)]||c[g]||d[g]||i;return n?a.createElement(m,o(o({ref:t},p),{},{components:n})):a.createElement(m,o({ref:t},p))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var i=n.length,o=new Array(i);o[0]=g;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[c]="string"==typeof e?e:r,o[1]=l;for(var u=2;u{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>o,default:()=>d,frontMatter:()=>i,metadata:()=>l,toc:()=>u});var a=n(7462),r=(n(7294),n(3905));const i={title:"IBus",summary:"Configuration of additional languages via IBUS"},o="IBus",l={unversionedId:"user/software/localization/ibus",id:"user/software/localization/ibus",title:"IBus",description:"Configuration",source:"@site/docs/user/software/localization/ibus.md",sourceDirName:"user/software/localization",slug:"/user/software/localization/ibus",permalink:"/docs/user/software/localization/ibus",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/localization/ibus.md",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"IBus",summary:"Configuration of additional languages via IBUS"},sidebar:"userSidebar",previous:{title:"Localization",permalink:"/docs/category/localization"},next:{title:"Networking",permalink:"/docs/category/networking"}},s={},u=[{value:"Configuration",id:"configuration",level:2},{value:"IBus IME Package List",id:"ibus-ime-package-list",level:2}],p={toc:u},c="wrapper";function d(e){let{components:t,...i}=e;return(0,r.kt)(c,(0,a.Z)({},p,i,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"ibus"},"IBus"),(0,r.kt)("h2",{id:"configuration"},"Configuration"),(0,r.kt)("p",null,"Find the IME (Input Method Editor) you require from the ",(0,r.kt)("a",{parentName:"p",href:"#ibus-ime-package-list"},"IBus IME Package List"),' and then search for it in the Software Center. Click "Install" to add the IME.'),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"IBus IME Install",src:n(8161).Z,width:"812",height:"315"})),(0,r.kt)("p",null,"You may have to agree to install some additional dependencies and will need to type in your user password as authentication is required."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"IBus IME Dependencies",src:n(1533).Z,width:"446",height:"445"})),(0,r.kt)("p",null,"Once it has finished installing, logout of your computer and then login again. Now you'll be able to select the newly installed IME by following the same steps as detailed above for changing keyboard layouts in Budgie. For instance, in this example we have installed the ",(0,r.kt)("inlineCode",{parentName:"p"},"ibus-hangul")," package for the Korean language. By following the steps above and then searching for Korean keyboard layouts, we are now able to select Korean (Hangul) as an input source."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"IBus Region and Language",src:n(9809).Z,width:"742",height:"394"})),(0,r.kt)("p",null,"Additionally, once you have added the IME and have it selected in the Region & Languages window, you can click on the cog icon under the input sources to load the settings window for your specific IME. The ",(0,r.kt)("inlineCode",{parentName:"p"},"ibus-hangul")," settings window is shown below but this will vary between the different IME's."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"IBus IME Settings Example: Hangul",src:n(584).Z,width:"347",height:"405"})),(0,r.kt)("h2",{id:"ibus-ime-package-list"},"IBus IME Package List"),(0,r.kt)("p",null,"A list of IBus IME packages available in the Solus software repository."),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Package"),(0,r.kt)("th",{parentName:"tr",align:null},"Input Method"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Anthy"),(0,r.kt)("td",{parentName:"tr",align:null},"Japanese")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"ibus-chewing"),(0,r.kt)("td",{parentName:"tr",align:null},"Phonetic Chinese input method for Zhuyin (Bopomofo)")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"ibus-hangul"),(0,r.kt)("td",{parentName:"tr",align:null},"Korean")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"ibus-m17n"),(0,r.kt)("td",{parentName:"tr",align:null},"Multiple Languages")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"ibus-unikey"),(0,r.kt)("td",{parentName:"tr",align:null},"Vietnamese")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Pinyin"),(0,r.kt)("td",{parentName:"tr",align:null},"Chinese Pinyin and Bopomofo")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Zhuyin"),(0,r.kt)("td",{parentName:"tr",align:null},"Chinese Zhuyin")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Quick"),(0,r.kt)("td",{parentName:"tr",align:null},"Simplified Cangjie")))))}d.isMDXComponent=!0},1533:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/ibus-ime-dependencies-0dc4668d437230c7528de2f86647531b.jpg"},8161:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/ibus-ime-install-68ba41c372dec67147393ad161a0f6f9.jpg"},584:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/ibus-ime-settings-hangul-27a3a73e189a7c7e02287539008b825c.jpg"},9809:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/ibus-region-and-languages-beb500ff774fb2dc414857fe1d196515.jpg"}}]); \ No newline at end of file +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[8499],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>m});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function o(e){for(var t=1;t=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=a.createContext({}),u=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},p=function(e){var t=u(e.components);return a.createElement(s.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},g=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,i=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),c=u(n),g=r,m=c["".concat(s,".").concat(g)]||c[g]||d[g]||i;return n?a.createElement(m,o(o({ref:t},p),{},{components:n})):a.createElement(m,o({ref:t},p))}));function m(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var i=n.length,o=new Array(i);o[0]=g;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[c]="string"==typeof e?e:r,o[1]=l;for(var u=2;u{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>o,default:()=>d,frontMatter:()=>i,metadata:()=>l,toc:()=>u});var a=n(7462),r=(n(7294),n(3905));const i={title:"IBus",summary:"Configuration of additional languages via IBUS"},o="IBus",l={unversionedId:"user/software/localization/ibus",id:"user/software/localization/ibus",title:"IBus",description:"Configuration",source:"@site/docs/user/software/localization/ibus.md",sourceDirName:"user/software/localization",slug:"/user/software/localization/ibus",permalink:"/docs/user/software/localization/ibus",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/localization/ibus.md",tags:[],version:"current",lastUpdatedAt:1695222528,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"IBus",summary:"Configuration of additional languages via IBUS"},sidebar:"userSidebar",previous:{title:"Localization",permalink:"/docs/category/localization"},next:{title:"Networking",permalink:"/docs/category/networking"}},s={},u=[{value:"Configuration",id:"configuration",level:2},{value:"IBus IME Package List",id:"ibus-ime-package-list",level:2}],p={toc:u},c="wrapper";function d(e){let{components:t,...i}=e;return(0,r.kt)(c,(0,a.Z)({},p,i,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"ibus"},"IBus"),(0,r.kt)("h2",{id:"configuration"},"Configuration"),(0,r.kt)("p",null,"Find the IME (Input Method Editor) you require from the ",(0,r.kt)("a",{parentName:"p",href:"#ibus-ime-package-list"},"IBus IME Package List"),' and then search for it in the Software Center. Click "Install" to add the IME.'),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"IBus IME Install",src:n(8161).Z,width:"812",height:"315"})),(0,r.kt)("p",null,"You may have to agree to install some additional dependencies and will need to type in your user password as authentication is required."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"IBus IME Dependencies",src:n(1533).Z,width:"446",height:"445"})),(0,r.kt)("p",null,"Once it has finished installing, logout of your computer and then login again. Now you'll be able to select the newly installed IME by following the same steps as detailed above for changing keyboard layouts in Budgie. For instance, in this example we have installed the ",(0,r.kt)("inlineCode",{parentName:"p"},"ibus-hangul")," package for the Korean language. By following the steps above and then searching for Korean keyboard layouts, we are now able to select Korean (Hangul) as an input source."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"IBus Region and Language",src:n(9809).Z,width:"742",height:"394"})),(0,r.kt)("p",null,"Additionally, once you have added the IME and have it selected in the Region & Languages window, you can click on the cog icon under the input sources to load the settings window for your specific IME. The ",(0,r.kt)("inlineCode",{parentName:"p"},"ibus-hangul")," settings window is shown below but this will vary between the different IME's."),(0,r.kt)("p",null,(0,r.kt)("img",{alt:"IBus IME Settings Example: Hangul",src:n(584).Z,width:"347",height:"405"})),(0,r.kt)("h2",{id:"ibus-ime-package-list"},"IBus IME Package List"),(0,r.kt)("p",null,"A list of IBus IME packages available in the Solus software repository."),(0,r.kt)("table",null,(0,r.kt)("thead",{parentName:"table"},(0,r.kt)("tr",{parentName:"thead"},(0,r.kt)("th",{parentName:"tr",align:null},"Package"),(0,r.kt)("th",{parentName:"tr",align:null},"Input Method"))),(0,r.kt)("tbody",{parentName:"table"},(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Anthy"),(0,r.kt)("td",{parentName:"tr",align:null},"Japanese")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"ibus-chewing"),(0,r.kt)("td",{parentName:"tr",align:null},"Phonetic Chinese input method for Zhuyin (Bopomofo)")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"ibus-hangul"),(0,r.kt)("td",{parentName:"tr",align:null},"Korean")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"ibus-m17n"),(0,r.kt)("td",{parentName:"tr",align:null},"Multiple Languages")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"ibus-unikey"),(0,r.kt)("td",{parentName:"tr",align:null},"Vietnamese")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Pinyin"),(0,r.kt)("td",{parentName:"tr",align:null},"Chinese Pinyin and Bopomofo")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Zhuyin"),(0,r.kt)("td",{parentName:"tr",align:null},"Chinese Zhuyin")),(0,r.kt)("tr",{parentName:"tbody"},(0,r.kt)("td",{parentName:"tr",align:null},"Quick"),(0,r.kt)("td",{parentName:"tr",align:null},"Simplified Cangjie")))))}d.isMDXComponent=!0},1533:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/ibus-ime-dependencies-0dc4668d437230c7528de2f86647531b.jpg"},8161:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/ibus-ime-install-68ba41c372dec67147393ad161a0f6f9.jpg"},584:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/ibus-ime-settings-hangul-27a3a73e189a7c7e02287539008b825c.jpg"},9809:(e,t,n)=>{n.d(t,{Z:()=>a});const a=n.p+"assets/images/ibus-region-and-languages-beb500ff774fb2dc414857fe1d196515.jpg"}}]); \ No newline at end of file diff --git a/assets/js/8e861970.4d1c311e.js b/assets/js/8e861970.85c0a4da.js similarity index 98% rename from assets/js/8e861970.4d1c311e.js rename to assets/js/8e861970.85c0a4da.js index 3bc51abfc..fdb80e853 100644 --- a/assets/js/8e861970.4d1c311e.js +++ b/assets/js/8e861970.85c0a4da.js @@ -1 +1 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[8026],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>f});var a=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}return r}function s(e){for(var t=1;t=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var p=a.createContext({}),l=function(e){var t=a.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):s(s({},t),e)),r},u=function(e){var t=l(e.components);return a.createElement(p.Provider,{value:t},e.children)},c="mdxType",g={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var r=e.components,n=e.mdxType,o=e.originalType,p=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),c=l(r),d=n,f=c["".concat(p,".").concat(d)]||c[d]||g[d]||o;return r?a.createElement(f,s(s({ref:t},u),{},{components:r})):a.createElement(f,s({ref:t},u))}));function f(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var o=r.length,s=new Array(o);s[0]=d;var i={};for(var p in t)hasOwnProperty.call(t,p)&&(i[p]=t[p]);i.originalType=e,i[c]="string"==typeof e?e:n,s[1]=i;for(var l=2;l{r.r(t),r.d(t,{assets:()=>p,contentTitle:()=>s,default:()=>g,frontMatter:()=>o,metadata:()=>i,toc:()=>l});var a=r(7462),n=(r(7294),r(3905));const o={title:"Requesting a Package",summary:"Requesting a new package"},s="Requesting A Package",i={unversionedId:"packaging/procedures/request-a-package",id:"packaging/procedures/request-a-package",title:"Requesting a Package",description:"Packages are how users install Software in Solus, however if we are missing one you can let us know using our Task Tracker.",source:"@site/docs/packaging/procedures/request-a-package.md",sourceDirName:"packaging/procedures",slug:"/packaging/procedures/request-a-package",permalink:"/docs/packaging/procedures/request-a-package",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/procedures/request-a-package.md",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Requesting a Package",summary:"Requesting a new package"},sidebar:"packagingSidebar",previous:{title:"Requesting a Package Update",permalink:"/docs/packaging/procedures/request-a-package-update"},next:{title:"Your First Package Update",permalink:"/docs/packaging/your-first-package-update"}},p={},l=[],u={toc:l},c="wrapper";function g(e){let{components:t,...r}=e;return(0,n.kt)(c,(0,a.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"requesting-a-package"},"Requesting A Package"),(0,n.kt)("p",null,"Packages are how users install Software in Solus, however if we are missing one you can let us know using our Task Tracker."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Please ",(0,n.kt)("a",{parentName:"strong",href:"https://github.com/getsolus/packages/issues?q=label%3A%22Package+Request%22"},"look to see if an issue has been filed")," for the software or library you require"),". If there isn't an existing request, you can use the template below for requesting packages to be added to the Solus Package Repository. The Third Party Repository has been deprecated and will not be accepting any new packages."),(0,n.kt)("p",null,"You will be asked in the form to provide the following information, please provide as much as possible:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Name"),(0,n.kt)("li",{parentName:"ul"},"Homepage"),(0,n.kt)("li",{parentName:"ul"},"Why should this be included in the repository? If we already offer similar software in our repository ",(0,n.kt)("strong",{parentName:"li"},"or third party"),", please provide information on what your proposed software does that our existing offerings don't (",(0,n.kt)("em",{parentName:"li"},"differentiators"),")."),(0,n.kt)("li",{parentName:"ul"},"Is it Open Source (yes/no)"),(0,n.kt)("li",{parentName:"ul"},"If no: Are we allowed to distribute it?"),(0,n.kt)("li",{parentName:"ul"},"Who and how many users do you anticipate will use this software?"),(0,n.kt)("li",{parentName:"ul"},"Link to source tarball/zip file. master.zip files ",(0,n.kt)("strong",{parentName:"li"},"are not permitted"),'. We require versioned tarballs, for example: "1.2.3.tar.gz" or "packagename-1.2.3".')),(0,n.kt)("p",null,"Please put this information in a new ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/getsolus/packages/issues/new?assignees=&labels=Package+Request%2CPriority%3A+Wishlist&projects=&template=request-new-package.yml&title=What%27s+the+package+name%3F"},"issue"),"."))}g.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[8026],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>f});var a=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}return r}function s(e){for(var t=1;t=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var p=a.createContext({}),l=function(e){var t=a.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):s(s({},t),e)),r},u=function(e){var t=l(e.components);return a.createElement(p.Provider,{value:t},e.children)},c="mdxType",g={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var r=e.components,n=e.mdxType,o=e.originalType,p=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),c=l(r),d=n,f=c["".concat(p,".").concat(d)]||c[d]||g[d]||o;return r?a.createElement(f,s(s({ref:t},u),{},{components:r})):a.createElement(f,s({ref:t},u))}));function f(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var o=r.length,s=new Array(o);s[0]=d;var i={};for(var p in t)hasOwnProperty.call(t,p)&&(i[p]=t[p]);i.originalType=e,i[c]="string"==typeof e?e:n,s[1]=i;for(var l=2;l{r.r(t),r.d(t,{assets:()=>p,contentTitle:()=>s,default:()=>g,frontMatter:()=>o,metadata:()=>i,toc:()=>l});var a=r(7462),n=(r(7294),r(3905));const o={title:"Requesting a Package",summary:"Requesting a new package"},s="Requesting A Package",i={unversionedId:"packaging/procedures/request-a-package",id:"packaging/procedures/request-a-package",title:"Requesting a Package",description:"Packages are how users install Software in Solus, however if we are missing one you can let us know using our Task Tracker.",source:"@site/docs/packaging/procedures/request-a-package.md",sourceDirName:"packaging/procedures",slug:"/packaging/procedures/request-a-package",permalink:"/docs/packaging/procedures/request-a-package",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/procedures/request-a-package.md",tags:[],version:"current",lastUpdatedAt:1695222528,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Requesting a Package",summary:"Requesting a new package"},sidebar:"packagingSidebar",previous:{title:"Requesting a Package Update",permalink:"/docs/packaging/procedures/request-a-package-update"},next:{title:"Your First Package Update",permalink:"/docs/packaging/your-first-package-update"}},p={},l=[],u={toc:l},c="wrapper";function g(e){let{components:t,...r}=e;return(0,n.kt)(c,(0,a.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"requesting-a-package"},"Requesting A Package"),(0,n.kt)("p",null,"Packages are how users install Software in Solus, however if we are missing one you can let us know using our Task Tracker."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Please ",(0,n.kt)("a",{parentName:"strong",href:"https://github.com/getsolus/packages/issues?q=label%3A%22Package+Request%22"},"look to see if an issue has been filed")," for the software or library you require"),". If there isn't an existing request, you can use the template below for requesting packages to be added to the Solus Package Repository. The Third Party Repository has been deprecated and will not be accepting any new packages."),(0,n.kt)("p",null,"You will be asked in the form to provide the following information, please provide as much as possible:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Name"),(0,n.kt)("li",{parentName:"ul"},"Homepage"),(0,n.kt)("li",{parentName:"ul"},"Why should this be included in the repository? If we already offer similar software in our repository ",(0,n.kt)("strong",{parentName:"li"},"or third party"),", please provide information on what your proposed software does that our existing offerings don't (",(0,n.kt)("em",{parentName:"li"},"differentiators"),")."),(0,n.kt)("li",{parentName:"ul"},"Is it Open Source (yes/no)"),(0,n.kt)("li",{parentName:"ul"},"If no: Are we allowed to distribute it?"),(0,n.kt)("li",{parentName:"ul"},"Who and how many users do you anticipate will use this software?"),(0,n.kt)("li",{parentName:"ul"},"Link to source tarball/zip file. master.zip files ",(0,n.kt)("strong",{parentName:"li"},"are not permitted"),'. We require versioned tarballs, for example: "1.2.3.tar.gz" or "packagename-1.2.3".')),(0,n.kt)("p",null,"Please put this information in a new ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/getsolus/packages/issues/new?assignees=&labels=Package+Request%2CPriority%3A+Wishlist&projects=&template=request-new-package.yml&title=What%27s+the+package+name%3F"},"issue"),"."))}g.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/8e886580.31bc524e.js b/assets/js/8e886580.c11a7914.js similarity index 98% rename from assets/js/8e886580.31bc524e.js rename to assets/js/8e886580.c11a7914.js index 895d8cab7..e75862f03 100644 --- a/assets/js/8e886580.31bc524e.js +++ b/assets/js/8e886580.c11a7914.js @@ -1 +1 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[4978],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>f});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=r.createContext({}),u=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},p=function(e){var t=u(e.components);return r.createElement(l.Provider,{value:t},e.children)},d="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),d=u(n),m=o,f=d["".concat(l,".").concat(m)]||d[m]||c[m]||a;return n?r.createElement(f,i(i({ref:t},p),{},{components:n})):r.createElement(f,i({ref:t},p))}));function f(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=m;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[d]="string"==typeof e?e:o,i[1]=s;for(var u=2;u{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>c,frontMatter:()=>a,metadata:()=>s,toc:()=>u});var r=n(7462),o=(n(7294),n(3905));const a={title:"Rust",summary:"A quick guide to getting set up for Rust development on Solus"},i="Rust",s={unversionedId:"user/software/development/rust",id:"user/software/development/rust",title:"Rust",description:"There are two ways to install Rust. This article explains how they differ and which one should be used, according to users' needs.",source:"@site/docs/user/software/development/rust.md",sourceDirName:"user/software/development",slug:"/user/software/development/rust",permalink:"/docs/user/software/development/rust",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/development/rust.md",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Rust",summary:"A quick guide to getting set up for Rust development on Solus"},sidebar:"userSidebar",previous:{title:"R and Rstudio",permalink:"/docs/user/software/development/r-and-rstudio"},next:{title:"Web Development",permalink:"/docs/user/software/development/web"}},l={},u=[],p={toc:u},d="wrapper";function c(e){let{components:t,...n}=e;return(0,o.kt)(d,(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"rust"},"Rust"),(0,o.kt)("p",null,"There are two ways to install Rust. This article explains how they differ and which one should be used, according to users' needs."),(0,o.kt)("p",null,"Rust can be obtained by:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Installing the ",(0,o.kt)("inlineCode",{parentName:"li"},"rustup")," package, then installing any Rust target and/or tool using ",(0,o.kt)("inlineCode",{parentName:"li"},"rustup")," itself"),(0,o.kt)("li",{parentName:"ul"},"Installing the ",(0,o.kt)("inlineCode",{parentName:"li"},"rust")," package")),(0,o.kt)("p",null,"Users should prefer the ",(0,o.kt)("inlineCode",{parentName:"p"},"rustup")," way, since it gives the freedom to install any tools and targets, including nightly versions and debugging utilities, although it may require editing the ",(0,o.kt)("inlineCode",{parentName:"p"},"PATH")," variable depending on your shell setup. According to the official Rust ",(0,o.kt)("a",{parentName:"p",href:"https://www.rust-lang.org/tools/install"},"installation guide"),":"),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"It is customary for Rust developers to include ",(0,o.kt)("inlineCode",{parentName:"p"},"~/.cargo/bin")," in their ",(0,o.kt)("inlineCode",{parentName:"p"},"PATH "),"environment variable. During installation rustup will attempt to configure the ",(0,o.kt)("inlineCode",{parentName:"p"},"PATH"),". Because of differences between platforms, command shells, and bugs in rustup, the modifications to ",(0,o.kt)("inlineCode",{parentName:"p"},"PATH")," may not take effect until the console is restarted, or the user is logged out, or it may not succeed at all.")),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"rust")," package, in fact, is present in the Solus repository for building packages that depend on it and it is not intended to be used by the final user, although it is possible and supported. Users that want to use the ",(0,o.kt)("inlineCode",{parentName:"p"},"rust")," package for their projects will be limited to the targets and tools that Solus needs to support, namely x86_64 and i686 Linux targets and ",(0,o.kt)("inlineCode",{parentName:"p"},"cargo"),". On the other hand, the ",(0,o.kt)("inlineCode",{parentName:"p"},"rust")," package is ready to use after its installation with no extra configurations."),(0,o.kt)("p",null,"Either way, it is also recommended to install our ",(0,o.kt)("inlineCode",{parentName:"p"},"system.devel")," component, which is typically required for compiling. See our documentation for it ",(0,o.kt)("a",{parentName:"p",href:"/docs/user/software/development"},"here"),"."),(0,o.kt)("p",null,"As a final note, it is possible to ",(0,o.kt)("a",{parentName:"p",href:"https://rust-lang.github.io/rustup/installation/package-managers.html"},"configure")," ",(0,o.kt)("inlineCode",{parentName:"p"},"rustup")," to use the system toolchain. This setup is ",(0,o.kt)("strong",{parentName:"p"},"discouraged")," unless aimed at developing applications targeting Solus itself."))}c.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[4978],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>f});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=r.createContext({}),u=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},p=function(e){var t=u(e.components);return r.createElement(l.Provider,{value:t},e.children)},d="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),d=u(n),m=o,f=d["".concat(l,".").concat(m)]||d[m]||c[m]||a;return n?r.createElement(f,i(i({ref:t},p),{},{components:n})):r.createElement(f,i({ref:t},p))}));function f(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=m;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[d]="string"==typeof e?e:o,i[1]=s;for(var u=2;u{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>c,frontMatter:()=>a,metadata:()=>s,toc:()=>u});var r=n(7462),o=(n(7294),n(3905));const a={title:"Rust",summary:"A quick guide to getting set up for Rust development on Solus"},i="Rust",s={unversionedId:"user/software/development/rust",id:"user/software/development/rust",title:"Rust",description:"There are two ways to install Rust. This article explains how they differ and which one should be used, according to users' needs.",source:"@site/docs/user/software/development/rust.md",sourceDirName:"user/software/development",slug:"/user/software/development/rust",permalink:"/docs/user/software/development/rust",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/development/rust.md",tags:[],version:"current",lastUpdatedAt:1695222528,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Rust",summary:"A quick guide to getting set up for Rust development on Solus"},sidebar:"userSidebar",previous:{title:"R and Rstudio",permalink:"/docs/user/software/development/r-and-rstudio"},next:{title:"Web Development",permalink:"/docs/user/software/development/web"}},l={},u=[],p={toc:u},d="wrapper";function c(e){let{components:t,...n}=e;return(0,o.kt)(d,(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"rust"},"Rust"),(0,o.kt)("p",null,"There are two ways to install Rust. This article explains how they differ and which one should be used, according to users' needs."),(0,o.kt)("p",null,"Rust can be obtained by:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Installing the ",(0,o.kt)("inlineCode",{parentName:"li"},"rustup")," package, then installing any Rust target and/or tool using ",(0,o.kt)("inlineCode",{parentName:"li"},"rustup")," itself"),(0,o.kt)("li",{parentName:"ul"},"Installing the ",(0,o.kt)("inlineCode",{parentName:"li"},"rust")," package")),(0,o.kt)("p",null,"Users should prefer the ",(0,o.kt)("inlineCode",{parentName:"p"},"rustup")," way, since it gives the freedom to install any tools and targets, including nightly versions and debugging utilities, although it may require editing the ",(0,o.kt)("inlineCode",{parentName:"p"},"PATH")," variable depending on your shell setup. According to the official Rust ",(0,o.kt)("a",{parentName:"p",href:"https://www.rust-lang.org/tools/install"},"installation guide"),":"),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"It is customary for Rust developers to include ",(0,o.kt)("inlineCode",{parentName:"p"},"~/.cargo/bin")," in their ",(0,o.kt)("inlineCode",{parentName:"p"},"PATH "),"environment variable. During installation rustup will attempt to configure the ",(0,o.kt)("inlineCode",{parentName:"p"},"PATH"),". Because of differences between platforms, command shells, and bugs in rustup, the modifications to ",(0,o.kt)("inlineCode",{parentName:"p"},"PATH")," may not take effect until the console is restarted, or the user is logged out, or it may not succeed at all.")),(0,o.kt)("p",null,"The ",(0,o.kt)("inlineCode",{parentName:"p"},"rust")," package, in fact, is present in the Solus repository for building packages that depend on it and it is not intended to be used by the final user, although it is possible and supported. Users that want to use the ",(0,o.kt)("inlineCode",{parentName:"p"},"rust")," package for their projects will be limited to the targets and tools that Solus needs to support, namely x86_64 and i686 Linux targets and ",(0,o.kt)("inlineCode",{parentName:"p"},"cargo"),". On the other hand, the ",(0,o.kt)("inlineCode",{parentName:"p"},"rust")," package is ready to use after its installation with no extra configurations."),(0,o.kt)("p",null,"Either way, it is also recommended to install our ",(0,o.kt)("inlineCode",{parentName:"p"},"system.devel")," component, which is typically required for compiling. See our documentation for it ",(0,o.kt)("a",{parentName:"p",href:"/docs/user/software/development"},"here"),"."),(0,o.kt)("p",null,"As a final note, it is possible to ",(0,o.kt)("a",{parentName:"p",href:"https://rust-lang.github.io/rustup/installation/package-managers.html"},"configure")," ",(0,o.kt)("inlineCode",{parentName:"p"},"rustup")," to use the system toolchain. This setup is ",(0,o.kt)("strong",{parentName:"p"},"discouraged")," unless aimed at developing applications targeting Solus itself."))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/9284d474.3a00d7d6.js b/assets/js/9284d474.e6173745.js similarity index 99% rename from assets/js/9284d474.3a00d7d6.js rename to assets/js/9284d474.e6173745.js index f3dc00f06..e676ae21e 100644 --- a/assets/js/9284d474.3a00d7d6.js +++ b/assets/js/9284d474.e6173745.js @@ -1 +1 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[7626],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>g});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=r.createContext({}),u=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},d=function(e){var t=u(e.components);return r.createElement(s.Provider,{value:t},e.children)},c="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,i=e.originalType,s=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),c=u(n),m=a,g=c["".concat(s,".").concat(m)]||c[m]||p[m]||i;return n?r.createElement(g,o(o({ref:t},d),{},{components:n})):r.createElement(g,o({ref:t},d))}));function g(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=n.length,o=new Array(i);o[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[c]="string"==typeof e?e:a,o[1]=l;for(var u=2;u{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>o,default:()=>p,frontMatter:()=>i,metadata:()=>l,toc:()=>u});var r=n(7462),a=(n(7294),n(3905));const i={title:"Gaming",summary:"Instructions for installing various gaming software on Solus"},o="Gaming",l={unversionedId:"user/software/gaming/index",id:"user/software/gaming/index",title:"Gaming",description:"Heroes of Newerth",source:"@site/docs/user/software/gaming/index.md",sourceDirName:"user/software/gaming",slug:"/user/software/gaming/",permalink:"/docs/user/software/gaming/",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/gaming/index.md",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Gaming",summary:"Instructions for installing various gaming software on Solus"},sidebar:"userSidebar",previous:{title:"Web Development",permalink:"/docs/user/software/development/web"},next:{title:"Localization",permalink:"/docs/category/localization"}},s={},u=[{value:"Heroes of Newerth",id:"heroes-of-newerth",level:2},{value:"Lutris",id:"lutris",level:2},{value:"About",id:"about",level:3},{value:"Minecraft",id:"minecraft",level:2},{value:"Installation",id:"installation",level:3},{value:"Retroarch",id:"retroarch",level:2},{value:"Installing the assets",id:"installing-the-assets",level:3},{value:"Steam",id:"steam",level:2},{value:"NVIDIA",id:"nvidia",level:3}],d={toc:u},c="wrapper";function p(e){let{components:t,...i}=e;return(0,a.kt)(c,(0,r.Z)({},d,i,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"gaming"},"Gaming"),(0,a.kt)("h2",{id:"heroes-of-newerth"},"Heroes of Newerth"),(0,a.kt)("p",null,'First, install the latest version of HoN by downloading it and running "HoNClient.sh".'),(0,a.kt)("p",null,"Assuming that you install to ~/HoN (default), you only need to run two commands:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg it gconf libgcrypt11 libglu\n")),(0,a.kt)("p",null,"That installs all of the dependencies that HoN needs."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"rm ~/HoN/libs-x86_64/{libcurl.so.4,libfreetype.so.6,libgcc_s.so.1,libgcrypt.so.11,libspeexdsp.so.1,libspeex.so.1,libstdc++.so.6,libudev.so.0}\n")),(0,a.kt)("p",null,"This removes all the libraries that conflict with the ones in Solus."),(0,a.kt)("h2",{id:"lutris"},"Lutris"),(0,a.kt)("p",null,"Lutris is currently available via the Solus repository, as the ",(0,a.kt)("inlineCode",{parentName:"p"},"lutris")," package."),(0,a.kt)("h3",{id:"about"},"About"),(0,a.kt)("p",null,"Lutris is an open gaming platform for Linux. It helps you install and manage your games in a unified interface. Their goal is to support every game which runs on Linux, from native to Windows games (via Wine) to emulators and browser games. The desktop application and the website are libre software, contributions are welcome!"),(0,a.kt)("p",null,"For more information you can visit their website at ",(0,a.kt)("a",{parentName:"p",href:"https://lutris.net"},"lutris.net"),". You can also see their list of games ",(0,a.kt)("a",{parentName:"p",href:"https://lutris.net/games/"},"here"),"."),(0,a.kt)("h2",{id:"minecraft"},"Minecraft"),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"https://minecraft.net"},"Minecraft"),' is a sandbox independent video game originally created by Swedish programmer Markus "Notch" Persson and later developed and published by the Swedish company Mojang.'),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"Minecraft Screenshot",src:n(5528).Z,width:"1920",height:"1080"})),(0,a.kt)("h3",{id:"installation"},"Installation"),(0,a.kt)("p",null,"Install dependencies and download Minecraft:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg it gconf binutils\nwget https://launcher.mojang.com/download/Minecraft.deb\n")),(0,a.kt)("p",null,"Extract files and remove old archive:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo ar xf Minecraft.deb\nsudo tar xf data.tar.xz -C /\nsudo rm control.tar.xz data.tar.xz debian-binary Minecraft.deb\n")),(0,a.kt)("p",null,"Integrate the installed files into your system:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo usysconf run -f\n")),(0,a.kt)("h2",{id:"retroarch"},"Retroarch"),(0,a.kt)("p",null,"Retroarch is a frontend for emulators, game engines and media players. It has all you need to run classic games through its polished graphical interface."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"Retroarch Screenshot",src:n(963).Z,width:"960",height:"746"})),(0,a.kt)("h3",{id:"installing-the-assets"},"Installing the assets"),(0,a.kt)("p",null,'The assets are not packaged with Retroarch itself and have to be downloaded from inside the program. This can easily be done by going into the Online Updater from the Main Menu and selecting "Update Assets".'),(0,a.kt)("h2",{id:"steam"},"Steam"),(0,a.kt)("p",null,"Steam is currently available via the Solus repository, as the ",(0,a.kt)("inlineCode",{parentName:"p"},"steam")," package."),(0,a.kt)("h3",{id:"nvidia"},"NVIDIA"),(0,a.kt)("p",null,"For systems running NVIDIA graphics hardware, you will need to install the corresponding 32bit video driver for your card, listed below:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Current Gen: ",(0,a.kt)("inlineCode",{parentName:"li"},"nvidia-glx-driver-32bit")),(0,a.kt)("li",{parentName:"ul"},"470 series: ",(0,a.kt)("inlineCode",{parentName:"li"},"nvidia-470-glx-driver-32bit"))),(0,a.kt)("admonition",{type:"info"},(0,a.kt)("p",{parentName:"admonition"},'You can use our "Hardware Drivers" utility to find the right driver for your system.')))}p.isMDXComponent=!0},5528:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/minecraft-7079f00591b397a6d96d8b3603f5d05f.jpg"},963:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/retroarch-9d687fb4c01f4d4f393f10b277b10e9c.jpg"}}]); \ No newline at end of file +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[7626],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>g});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=r.createContext({}),u=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},d=function(e){var t=u(e.components);return r.createElement(s.Provider,{value:t},e.children)},c="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,i=e.originalType,s=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),c=u(n),m=a,g=c["".concat(s,".").concat(m)]||c[m]||p[m]||i;return n?r.createElement(g,o(o({ref:t},d),{},{components:n})):r.createElement(g,o({ref:t},d))}));function g(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=n.length,o=new Array(i);o[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[c]="string"==typeof e?e:a,o[1]=l;for(var u=2;u{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>o,default:()=>p,frontMatter:()=>i,metadata:()=>l,toc:()=>u});var r=n(7462),a=(n(7294),n(3905));const i={title:"Gaming",summary:"Instructions for installing various gaming software on Solus"},o="Gaming",l={unversionedId:"user/software/gaming/index",id:"user/software/gaming/index",title:"Gaming",description:"Heroes of Newerth",source:"@site/docs/user/software/gaming/index.md",sourceDirName:"user/software/gaming",slug:"/user/software/gaming/",permalink:"/docs/user/software/gaming/",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/gaming/index.md",tags:[],version:"current",lastUpdatedAt:1695222528,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Gaming",summary:"Instructions for installing various gaming software on Solus"},sidebar:"userSidebar",previous:{title:"Web Development",permalink:"/docs/user/software/development/web"},next:{title:"Localization",permalink:"/docs/category/localization"}},s={},u=[{value:"Heroes of Newerth",id:"heroes-of-newerth",level:2},{value:"Lutris",id:"lutris",level:2},{value:"About",id:"about",level:3},{value:"Minecraft",id:"minecraft",level:2},{value:"Installation",id:"installation",level:3},{value:"Retroarch",id:"retroarch",level:2},{value:"Installing the assets",id:"installing-the-assets",level:3},{value:"Steam",id:"steam",level:2},{value:"NVIDIA",id:"nvidia",level:3}],d={toc:u},c="wrapper";function p(e){let{components:t,...i}=e;return(0,a.kt)(c,(0,r.Z)({},d,i,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"gaming"},"Gaming"),(0,a.kt)("h2",{id:"heroes-of-newerth"},"Heroes of Newerth"),(0,a.kt)("p",null,'First, install the latest version of HoN by downloading it and running "HoNClient.sh".'),(0,a.kt)("p",null,"Assuming that you install to ~/HoN (default), you only need to run two commands:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg it gconf libgcrypt11 libglu\n")),(0,a.kt)("p",null,"That installs all of the dependencies that HoN needs."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"rm ~/HoN/libs-x86_64/{libcurl.so.4,libfreetype.so.6,libgcc_s.so.1,libgcrypt.so.11,libspeexdsp.so.1,libspeex.so.1,libstdc++.so.6,libudev.so.0}\n")),(0,a.kt)("p",null,"This removes all the libraries that conflict with the ones in Solus."),(0,a.kt)("h2",{id:"lutris"},"Lutris"),(0,a.kt)("p",null,"Lutris is currently available via the Solus repository, as the ",(0,a.kt)("inlineCode",{parentName:"p"},"lutris")," package."),(0,a.kt)("h3",{id:"about"},"About"),(0,a.kt)("p",null,"Lutris is an open gaming platform for Linux. It helps you install and manage your games in a unified interface. Their goal is to support every game which runs on Linux, from native to Windows games (via Wine) to emulators and browser games. The desktop application and the website are libre software, contributions are welcome!"),(0,a.kt)("p",null,"For more information you can visit their website at ",(0,a.kt)("a",{parentName:"p",href:"https://lutris.net"},"lutris.net"),". You can also see their list of games ",(0,a.kt)("a",{parentName:"p",href:"https://lutris.net/games/"},"here"),"."),(0,a.kt)("h2",{id:"minecraft"},"Minecraft"),(0,a.kt)("p",null,(0,a.kt)("a",{parentName:"p",href:"https://minecraft.net"},"Minecraft"),' is a sandbox independent video game originally created by Swedish programmer Markus "Notch" Persson and later developed and published by the Swedish company Mojang.'),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"Minecraft Screenshot",src:n(5528).Z,width:"1920",height:"1080"})),(0,a.kt)("h3",{id:"installation"},"Installation"),(0,a.kt)("p",null,"Install dependencies and download Minecraft:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg it gconf binutils\nwget https://launcher.mojang.com/download/Minecraft.deb\n")),(0,a.kt)("p",null,"Extract files and remove old archive:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo ar xf Minecraft.deb\nsudo tar xf data.tar.xz -C /\nsudo rm control.tar.xz data.tar.xz debian-binary Minecraft.deb\n")),(0,a.kt)("p",null,"Integrate the installed files into your system:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo usysconf run -f\n")),(0,a.kt)("h2",{id:"retroarch"},"Retroarch"),(0,a.kt)("p",null,"Retroarch is a frontend for emulators, game engines and media players. It has all you need to run classic games through its polished graphical interface."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"Retroarch Screenshot",src:n(963).Z,width:"960",height:"746"})),(0,a.kt)("h3",{id:"installing-the-assets"},"Installing the assets"),(0,a.kt)("p",null,'The assets are not packaged with Retroarch itself and have to be downloaded from inside the program. This can easily be done by going into the Online Updater from the Main Menu and selecting "Update Assets".'),(0,a.kt)("h2",{id:"steam"},"Steam"),(0,a.kt)("p",null,"Steam is currently available via the Solus repository, as the ",(0,a.kt)("inlineCode",{parentName:"p"},"steam")," package."),(0,a.kt)("h3",{id:"nvidia"},"NVIDIA"),(0,a.kt)("p",null,"For systems running NVIDIA graphics hardware, you will need to install the corresponding 32bit video driver for your card, listed below:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Current Gen: ",(0,a.kt)("inlineCode",{parentName:"li"},"nvidia-glx-driver-32bit")),(0,a.kt)("li",{parentName:"ul"},"470 series: ",(0,a.kt)("inlineCode",{parentName:"li"},"nvidia-470-glx-driver-32bit"))),(0,a.kt)("admonition",{type:"info"},(0,a.kt)("p",{parentName:"admonition"},'You can use our "Hardware Drivers" utility to find the right driver for your system.')))}p.isMDXComponent=!0},5528:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/minecraft-7079f00591b397a6d96d8b3603f5d05f.jpg"},963:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/retroarch-9d687fb4c01f4d4f393f10b277b10e9c.jpg"}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.89c611e0.js b/assets/js/935f2afb.89c611e0.js new file mode 100644 index 000000000..c77aa3002 --- /dev/null +++ b/assets/js/935f2afb.89c611e0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[53],{1109:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"userSidebar":[{"type":"link","label":"Welcome","href":"/docs/user/intro","docId":"user/intro"},{"type":"category","label":"Quick Start","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Boot Management","href":"/docs/user/quick-start/boot-management","docId":"user/quick-start/boot-management"},{"type":"link","label":"Default Applications","href":"/docs/user/quick-start/default-applications","docId":"user/quick-start/default-applications"},{"type":"category","label":"Preparing to Install","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Disk Partitioning","href":"/docs/user/quick-start/installation/disks","docId":"user/quick-start/installation/disks"},{"type":"link","label":"Booting with Secure Boot Enabled","href":"/docs/user/quick-start/installation/secure-boot","docId":"user/quick-start/installation/secure-boot"}],"href":"/docs/user/quick-start/installation/"},{"type":"category","label":"Software Center","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"eopkg","href":"/docs/user/quick-start/package-management/eopkg","docId":"user/quick-start/package-management/eopkg"}],"href":"/docs/user/quick-start/package-management/"}],"href":"/docs/category/quick-start"},{"type":"category","label":"Contributing","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Community Guidelines","href":"/docs/user/contributing/community-guidelines","docId":"user/contributing/community-guidelines"},{"type":"link","label":"Getting Involved","href":"/docs/user/contributing/getting-involved","docId":"user/contributing/getting-involved"},{"type":"link","label":"Testing an ISO","href":"/docs/user/contributing/testing-an-iso","docId":"user/contributing/testing-an-iso"}],"href":"/docs/category/contributing"},{"type":"category","label":"Editions","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Budgie","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Configuration","href":"/docs/user/editions/budgie/configuration","docId":"user/editions/budgie/configuration"},{"type":"link","label":"Tips and Tricks","href":"/docs/user/editions/budgie/tips-and-tricks","docId":"user/editions/budgie/tips-and-tricks"}],"href":"/docs/user/editions/budgie/"},{"type":"category","label":"GNOME","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Configuration","href":"/docs/user/editions/gnome/configuration","docId":"user/editions/gnome/configuration"},{"type":"link","label":"Tips and Tricks","href":"/docs/user/editions/gnome/tips-and-tricks","docId":"user/editions/gnome/tips-and-tricks"}],"href":"/docs/user/editions/gnome/"},{"type":"category","label":"MATE","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Configuration","href":"/docs/user/editions/mate/configuration","docId":"user/editions/mate/configuration"},{"type":"link","label":"Tips and Tricks","href":"/docs/user/editions/mate/tips-and-tricks","docId":"user/editions/mate/tips-and-tricks"}],"href":"/docs/user/editions/mate/"},{"type":"category","label":"Plasma","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Configuration","href":"/docs/user/editions/plasma/configuration","docId":"user/editions/plasma/configuration"},{"type":"link","label":"Tips and Tricks","href":"/docs/user/editions/plasma/tips-and-tricks","docId":"user/editions/plasma/tips-and-tricks"}],"href":"/docs/user/editions/plasma/"}],"href":"/docs/user/editions/"},{"type":"category","label":"Hardware","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Compatibility","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Laptops","href":"/docs/user/hardware/compatibility/laptops","docId":"user/hardware/compatibility/laptops"},{"type":"link","label":"WiFi","href":"/docs/user/hardware/compatibility/wifi","docId":"user/hardware/compatibility/wifi"}],"href":"/docs/category/compatibility"},{"type":"category","label":"Mobile","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Android","href":"/docs/user/hardware/mobile/android","docId":"user/hardware/mobile/android"},{"type":"link","label":"Apple","href":"/docs/user/hardware/mobile/apple","docId":"user/hardware/mobile/apple"}],"href":"/docs/category/mobile"},{"type":"category","label":"Peripherals","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Mice and Touchpads","href":"/docs/user/hardware/peripherals/mice-and-touchpads","docId":"user/hardware/peripherals/mice-and-touchpads"},{"type":"link","label":"MIDI Keyboards","href":"/docs/user/hardware/peripherals/midi-keyboard","docId":"user/hardware/peripherals/midi-keyboard"},{"type":"link","label":"Printers and Scanners","href":"/docs/user/hardware/peripherals/printers-and-scanners","docId":"user/hardware/peripherals/printers-and-scanners"}],"href":"/docs/category/peripherals"}],"href":"/docs/user/hardware/"},{"type":"category","label":"Package Management","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Basics to Package Management","href":"/docs/user/package-management/basics","docId":"user/package-management/basics"},{"type":"link","label":"History and Software Rollback","href":"/docs/user/package-management/history-and-rollback","docId":"user/package-management/history-and-rollback"},{"type":"link","label":"Repository Management","href":"/docs/user/package-management/repo-management","docId":"user/package-management/repo-management"}],"href":"/docs/category/package-management"},{"type":"category","label":"Software","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Command Line","href":"/docs/user/software/command-line/","docId":"user/software/command-line/index"},{"type":"link","label":"Desktops","href":"/docs/user/software/desktops/","docId":"user/software/desktops/index"},{"type":"category","label":"Development","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Android","href":"/docs/user/software/development/android","docId":"user/software/development/android"},{"type":"link","label":"Containers","href":"/docs/user/software/development/containers","docId":"user/software/development/containers"},{"type":"link","label":"Java","href":"/docs/user/software/development/java","docId":"user/software/development/java"},{"type":"link","label":"PostgreSQL","href":"/docs/user/software/development/postgresql","docId":"user/software/development/postgresql"},{"type":"link","label":"R and Rstudio","href":"/docs/user/software/development/r-and-rstudio","docId":"user/software/development/r-and-rstudio"},{"type":"link","label":"Rust","href":"/docs/user/software/development/rust","docId":"user/software/development/rust"},{"type":"link","label":"Web Development","href":"/docs/user/software/development/web","docId":"user/software/development/web"}],"href":"/docs/user/software/development/"},{"type":"link","label":"Gaming","href":"/docs/user/software/gaming/","docId":"user/software/gaming/index"},{"type":"category","label":"Localization","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"IBus","href":"/docs/user/software/localization/ibus","docId":"user/software/localization/ibus"}],"href":"/docs/category/localization"},{"type":"category","label":"Networking","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Samba File Sharing","href":"/docs/user/software/networking/samba","docId":"user/software/networking/samba"},{"type":"link","label":"TigerVNC","href":"/docs/user/software/networking/tigervnc","docId":"user/software/networking/tigervnc"},{"type":"link","label":"Wireshark","href":"/docs/user/software/networking/wireshark","docId":"user/software/networking/wireshark"},{"type":"link","label":"XRDP","href":"/docs/user/software/networking/xrdp","docId":"user/software/networking/xrdp"}],"href":"/docs/category/networking"},{"type":"link","label":"Sound","href":"/docs/user/software/sound/","docId":"user/software/sound/index"},{"type":"link","label":"Third Party","href":"/docs/user/software/third-party/","docId":"user/software/third-party/index"},{"type":"category","label":"Utilities","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"KSysGuard","href":"/docs/user/software/utilities/ksysguard","docId":"user/software/utilities/ksysguard"},{"type":"link","label":"KDE Wallet","href":"/docs/user/software/utilities/kwallet","docId":"user/software/utilities/kwallet"}],"href":"/docs/category/utilities"},{"type":"category","label":"Virtualization","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"VirtualBox","href":"/docs/user/software/virtualization/virtualbox","docId":"user/software/virtualization/virtualbox"}],"href":"/docs/category/virtualization"},{"type":"category","label":"Web","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Open Broadcaster Software (OBS)","href":"/docs/user/software/web/obs","docId":"user/software/web/obs"}],"href":"/docs/category/web"}],"href":"/docs/category/software"},{"type":"category","label":"Troubleshooting","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Boot Rescue","href":"/docs/user/troubleshooting/boot-rescue","docId":"user/troubleshooting/boot-rescue"},{"type":"link","label":"Installation Issues","href":"/docs/user/troubleshooting/installation","docId":"user/troubleshooting/installation"}],"href":"/docs/user/troubleshooting/"}],"packagingSidebar":[{"type":"link","label":"Packaging Overview","href":"/docs/packaging/","docId":"packaging/index"},{"type":"link","label":"Prepare for Packaging","href":"/docs/packaging/prepare-for-packaging","docId":"packaging/prepare-for-packaging"},{"type":"link","label":"Update Your Development Environment","href":"/docs/packaging/update-dev-environment","docId":"packaging/update-dev-environment"},{"type":"link","label":"Creating a New Package","href":"/docs/packaging/creating-a-new-package","docId":"packaging/creating-a-new-package"},{"type":"link","label":"Updating an Existing Package","href":"/docs/packaging/updating-an-existing-package","docId":"packaging/updating-an-existing-package"},{"type":"link","label":"Testing a Package","href":"/docs/packaging/testing-a-package","docId":"packaging/testing-a-package"},{"type":"link","label":"Submitting a Pull Request for Review","href":"/docs/packaging/submitting-a-pull-request","docId":"packaging/submitting-a-pull-request"},{"type":"link","label":"Packaging Changes","href":"/docs/packaging/packaging-changes","docId":"packaging/packaging-changes"},{"type":"category","label":"Advanced Configuration","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Eopkg Configuration","href":"/docs/packaging/advanced-config/eopkg-configuration","docId":"packaging/advanced-config/eopkg-configuration"},{"type":"link","label":"Local Repository","href":"/docs/packaging/advanced-config/local-repository","docId":"packaging/advanced-config/local-repository"}],"href":"/docs/category/advanced-configuration"},{"type":"link","label":"Git Basics","href":"/docs/packaging/git-basics","docId":"packaging/git-basics"},{"type":"link","label":"Package YAML","href":"/docs/packaging/package.yml","docId":"packaging/package.yml"},{"type":"link","label":"Packaging Practices","href":"/docs/packaging/packaging-practices","docId":"packaging/packaging-practices"},{"type":"category","label":"Procedures","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Maintainership","href":"/docs/packaging/procedures/maintainership","docId":"packaging/procedures/maintainership"},{"type":"link","label":"Package Inclusion Policy","href":"/docs/packaging/procedures/package-inclusion","docId":"packaging/procedures/package-inclusion"},{"type":"link","label":"Release Processes","href":"/docs/packaging/procedures/release-processes","docId":"packaging/procedures/release-processes"},{"type":"link","label":"Requesting a Package Update","href":"/docs/packaging/procedures/request-a-package-update","docId":"packaging/procedures/request-a-package-update"},{"type":"link","label":"Requesting a Package","href":"/docs/packaging/procedures/request-a-package","docId":"packaging/procedures/request-a-package"}],"href":"/docs/category/procedures"},{"type":"link","label":"Your First Package Update","href":"/docs/packaging/your-first-package-update","docId":"packaging/your-first-package-update"}]},"docs":{"packaging/advanced-config/eopkg-configuration":{"id":"packaging/advanced-config/eopkg-configuration","title":"Eopkg Configuration","description":"The eopkg configuration file changes how eopkg works. The first section in the config has settings for the process of building a package. The second section allows you to configure the directories that eopkg uses for various operations. Lastly, the general section contains settings for the general operation of eopkg.","sidebar":"packagingSidebar"},"packaging/advanced-config/local-repository":{"id":"packaging/advanced-config/local-repository","title":"Local Repository","description":"This guide walks you through the steps necessary to tell solbuild how to utilise locally built .eopkg\'s that are not yet in the Solus repository.","sidebar":"packagingSidebar"},"packaging/creating-a-new-package":{"id":"packaging/creating-a-new-package","title":"Creating a New Package","description":"This page will take you through the steps required to build a new package for the Solus package repositories. For this example, we will use the command line utility tree, which is already packaged for Solus, but we will pretend like it\'s not.","sidebar":"packagingSidebar"},"packaging/git-basics":{"id":"packaging/git-basics","title":"Git Basics","description":"Working with branches","sidebar":"packagingSidebar"},"packaging/index":{"id":"packaging/index","title":"Packaging Overview","description":"This is the overall workflow for creating or updating a package.","sidebar":"packagingSidebar"},"packaging/package.yml":{"id":"packaging/package.yml","title":"Package YAML","description":"Each package is generated from a single build file named package.yml. This file is sometimes also called a \\"recipe\\" since it provides steps for building a package. It provides all of the required metadata for the package manager, plus the packaging steps involved to produce a package. This file follows the YAML specification.","sidebar":"packagingSidebar"},"packaging/packaging-changes":{"id":"packaging/packaging-changes","title":"Packaging Changes","description":"This page is meant to serve as a changelog of sorts for the Solus packaging environment and the packaging instructions. Refer to specific help pages for more details.","sidebar":"packagingSidebar"},"packaging/packaging-practices":{"id":"packaging/packaging-practices","title":"Packaging Practices","description":"The primary goal of ypkg is ease of maintenance. In order to do so we ensure packages in the binary repository adhere to a strict set of conventions and practices.","sidebar":"packagingSidebar"},"packaging/prepare-for-packaging":{"id":"packaging/prepare-for-packaging","title":"Prepare for Packaging","description":"Switch to the Unstable Repository","sidebar":"packagingSidebar"},"packaging/procedures/maintainership":{"id":"packaging/procedures/maintainership","title":"Maintainership","description":"The role of a maintainer is to update package(s) on a regular basis, while following Solus packaging and consistency standards.","sidebar":"packagingSidebar"},"packaging/procedures/package-inclusion":{"id":"packaging/procedures/package-inclusion","title":"Package Inclusion Policy","description":"This policy sets forth the criteria for a package to be accepted for inclusion into the Solus repositories or rejected.","sidebar":"packagingSidebar"},"packaging/procedures/release-processes":{"id":"packaging/procedures/release-processes","title":"Release Processes","description":"This post is intended as both information to users, and guidelines for developers and contributors of Solus. Solus employs a formal architecture to enable the curated rolling release model, which is made possible through the use of ferryd, solbuild and a split-repository model.","sidebar":"packagingSidebar"},"packaging/procedures/request-a-package":{"id":"packaging/procedures/request-a-package","title":"Requesting a Package","description":"Packages are how users install Software in Solus, however if we are missing one you can let us know using our Task Tracker.","sidebar":"packagingSidebar"},"packaging/procedures/request-a-package-update":{"id":"packaging/procedures/request-a-package-update","title":"Requesting a Package Update","description":"Packages updates are typically provided by the community or dedicated package maintainers. If we are not shipping the latest stable release of a package, however, you can let us know.","sidebar":"packagingSidebar"},"packaging/submitting-a-pull-request":{"id":"packaging/submitting-a-pull-request","title":"Submitting a Pull Request for Review","description":"Please refrain from submitting a pull request for the following instances:","sidebar":"packagingSidebar"},"packaging/testing-a-package":{"id":"packaging/testing-a-package","title":"Testing a Package","description":"After building a package, it must be tested against the unstable repo before a pull request can be submitted. Each pull request requires you to explain how you tested the package to make sure things work as expected.","sidebar":"packagingSidebar"},"packaging/update-dev-environment":{"id":"packaging/update-dev-environment","title":"Update Your Development Environment","description":"Update the development tools and the system","sidebar":"packagingSidebar"},"packaging/updating-an-existing-package":{"id":"packaging/updating-an-existing-package","title":"Updating an Existing Package","description":"This article will go over updating a package that is already in the Solus package repositories.","sidebar":"packagingSidebar"},"packaging/your-first-package-update":{"id":"packaging/your-first-package-update","title":"Your First Package Update","description":"This page will guide you through the steps required to build your first package. This is really a test to make sure that your build environment is set up correctly. You will clone an existing package, build it, then install it, and finally remove it.","sidebar":"packagingSidebar"},"user/contributing/community-guidelines":{"id":"user/contributing/community-guidelines","title":"Community Guidelines","description":"The Solus Project enforces a set of community guidelines to maintain a family-friendly, respectful, and professional environment.","sidebar":"userSidebar"},"user/contributing/getting-involved":{"id":"user/contributing/getting-involved","title":"Getting Involved","description":"Solus is a big undertaking, and as such there are many ways in which your involvement can help us. Naturally, that means there are also many ways in which you can help out.","sidebar":"userSidebar"},"user/contributing/testing-an-iso":{"id":"user/contributing/testing-an-iso","title":"Testing an ISO","description":"A handy checklist anyone can use for testing an ISO.","sidebar":"userSidebar"},"user/editions/budgie/configuration":{"id":"user/editions/budgie/configuration","title":"Configuration","description":"Date and Time","sidebar":"userSidebar"},"user/editions/budgie/index":{"id":"user/editions/budgie/index","title":"Budgie","description":"TODO: Add Budgie branding image","sidebar":"userSidebar"},"user/editions/budgie/tips-and-tricks":{"id":"user/editions/budgie/tips-and-tricks","title":"Tips and Tricks","description":"Budgie Shortcuts","sidebar":"userSidebar"},"user/editions/gnome/configuration":{"id":"user/editions/gnome/configuration","title":"Configuration","description":"Date and Time","sidebar":"userSidebar"},"user/editions/gnome/index":{"id":"user/editions/gnome/index","title":"GNOME","description":"GNOME Shell is provided by default with the GNOME Edition of Solus. They describe it as:","sidebar":"userSidebar"},"user/editions/gnome/tips-and-tricks":{"id":"user/editions/gnome/tips-and-tricks","title":"Tips and Tricks","description":"GNOME Keyboard Shortcuts","sidebar":"userSidebar"},"user/editions/index":{"id":"user/editions/index","title":"Editions","description":"","sidebar":"userSidebar"},"user/editions/mate/configuration":{"id":"user/editions/mate/configuration","title":"Configuration","description":"Date and Time","sidebar":"userSidebar"},"user/editions/mate/index":{"id":"user/editions/mate/index","title":"MATE","description":"MATE Desktop is provided by the MATE Edition of Solus. They describe it as:","sidebar":"userSidebar"},"user/editions/mate/tips-and-tricks":{"id":"user/editions/mate/tips-and-tricks","title":"Tips and Tricks","description":"MATE Keyboard Shortcuts","sidebar":"userSidebar"},"user/editions/plasma/configuration":{"id":"user/editions/plasma/configuration","title":"Configuration","description":"Opening System Settings","sidebar":"userSidebar"},"user/editions/plasma/index":{"id":"user/editions/plasma/index","title":"Plasma","description":"Solus Plasma","sidebar":"userSidebar"},"user/editions/plasma/tips-and-tricks":{"id":"user/editions/plasma/tips-and-tricks","title":"Tips and Tricks","description":"Keyboard Shortcuts","sidebar":"userSidebar"},"user/hardware/compatibility/laptops":{"id":"user/hardware/compatibility/laptops","title":"Laptops","description":"The following laptops have been tested and/or suggested to function correctly by our users.","sidebar":"userSidebar"},"user/hardware/compatibility/wifi":{"id":"user/hardware/compatibility/wifi","title":"WiFi","description":"The following wireless chipsets have been tested and/or suggested to function correctly by our users.","sidebar":"userSidebar"},"user/hardware/index":{"id":"user/hardware/index","title":"Hardware","description":"Preinstalled Drivers","sidebar":"userSidebar"},"user/hardware/mobile/android":{"id":"user/hardware/mobile/android","title":"Android","description":"For the most part, Android devices will work out of the box on Solus. The experience is similar to on other operating systems.","sidebar":"userSidebar"},"user/hardware/mobile/apple":{"id":"user/hardware/mobile/apple","title":"Apple","description":"Solus provides iOS support via libimobiledevice and libgpod.","sidebar":"userSidebar"},"user/hardware/peripherals/mice-and-touchpads":{"id":"user/hardware/peripherals/mice-and-touchpads","title":"Mice and Touchpads","description":"Asus, Logitech, Roccat, SteelSeries","sidebar":"userSidebar"},"user/hardware/peripherals/midi-keyboard":{"id":"user/hardware/peripherals/midi-keyboard","title":"MIDI Keyboards","description":"These instructions will guide you through how to set up and use a USB-connected MIDI Keyboard on Solus. This will easily let you use the keyboard to play music with a wide set of instruments.","sidebar":"userSidebar"},"user/hardware/peripherals/printers-and-scanners":{"id":"user/hardware/peripherals/printers-and-scanners","title":"Printers and Scanners","description":"Drivers","sidebar":"userSidebar"},"user/intro":{"id":"user/intro","title":"Welcome","description":"Solus is committed to helping our users get the most out of their systems. The Help Center has been put together to introduce Solus users to our ecosystem and guide them through some of the most common tasks they might need help with.","sidebar":"userSidebar"},"user/package-management/basics":{"id":"user/package-management/basics","title":"Basics to Package Management","description":"Solus uses the eopkg package management system to deliver software to the end-user.","sidebar":"userSidebar"},"user/package-management/history-and-rollback":{"id":"user/package-management/history-and-rollback","title":"History and Software Rollback","description":"Solus provides a history and rollback feature via its package manager, eopkg. This feature allows you to see when your repository was last updated, actions such as installation, removal, and upgrading of software.","sidebar":"userSidebar"},"user/package-management/repo-management":{"id":"user/package-management/repo-management","title":"Repository Management","description":"While Solus currently only provides two repositories, stable (shannon) and unstable, our package manager does support actively using multiple repositories on your system. This is useful if you are using a vendor-provided repository.","sidebar":"userSidebar"},"user/quick-start/boot-management":{"id":"user/quick-start/boot-management","title":"Boot Management","description":"Solus leverages clr-boot-manager from the ClearLinux project to manage its boot process.","sidebar":"userSidebar"},"user/quick-start/default-applications":{"id":"user/quick-start/default-applications","title":"Default Applications","description":"Each version of Solus comes with a pre-installed collection of desktop applications that can help you perform common tasks.","sidebar":"userSidebar"},"user/quick-start/installation/disks":{"id":"user/quick-start/installation/disks","title":"Disk Partitioning","description":"Solus provides multiple ways you can install onto your system.","sidebar":"userSidebar"},"user/quick-start/installation/index":{"id":"user/quick-start/installation/index","title":"Preparing to Install","description":"The first step to installing Solus is acquiring the correct media. The Solus Project provides ISO images, which contain the contents of Solus for installing.","sidebar":"userSidebar"},"user/quick-start/installation/secure-boot":{"id":"user/quick-start/installation/secure-boot","title":"Booting with Secure Boot Enabled","description":"Since Solus 4.4 secure boot is now supported. When you first boot the ISO, and, if you have secure boot enabled in your UEFI firmware; you will have to perform the one-time-step of manually enrolling the Solus certificate. The following guide will walk you through this. If you already have Solus installed and wish to enable secure boot, skip ahead here.","sidebar":"userSidebar"},"user/quick-start/package-management/eopkg":{"id":"user/quick-start/package-management/eopkg","title":"eopkg","description":"Solus uses the eopkg package management system to deliver software to the end-user. It is actively developed by Solus, for Solus. We hope you enjoy the simplicity it offers for day-to-day use. For power users, there\'s plenty for you too!","sidebar":"userSidebar"},"user/quick-start/package-management/index":{"id":"user/quick-start/package-management/index","title":"Software Center","description":"You can install software ranging from Google Chrome to LibreOffice, as well as updating software, via our Software Center.","sidebar":"userSidebar"},"user/software/command-line/index":{"id":"user/software/command-line/index","title":"Command Line","description":"Changing Shell","sidebar":"userSidebar"},"user/software/desktops/index":{"id":"user/software/desktops/index","title":"Desktops","description":"Solus offers a multitude of desktop environments, ranging from the feature-rich and modern Budgie to the traditional MATE experience. It is recommended to use the ISO for a specific desktop environment but it is possible to install them afterwards if you wish to do try one out.","sidebar":"userSidebar"},"user/software/development/android":{"id":"user/software/development/android","title":"Android","description":"This article covers building the Android Open Source Project (AOSP) on Solus, the instructions can also be tweaked to also install forks of Android such as LineageOS.","sidebar":"userSidebar"},"user/software/development/containers":{"id":"user/software/development/containers","title":"Containers","description":"Containers are a popular method to run and configure applications in a confined environment without directly installing the application and all it\'s dependencies. Solus provides the following container technologies:","sidebar":"userSidebar"},"user/software/development/index":{"id":"user/software/development/index","title":"Development","description":"Base Development Tools","sidebar":"userSidebar"},"user/software/development/java":{"id":"user/software/development/java","title":"Java","description":"This article covers obtaining open source Java (otherwise known as OpenJDK). In this article, two abbreviations will be used to refer to components of the Java software suite:","sidebar":"userSidebar"},"user/software/development/postgresql":{"id":"user/software/development/postgresql","title":"PostgreSQL","description":"PostgreSQL is an open source object-relational database system. The postgresql package in Solus includes the PostgreSQL library, client and server.","sidebar":"userSidebar"},"user/software/development/r-and-rstudio":{"id":"user/software/development/r-and-rstudio","title":"R and Rstudio","description":"Covers the basics of how to install R and Rstudio on Solus and also covers how to install required dependencies for installing additional CRAN libraries.","sidebar":"userSidebar"},"user/software/development/rust":{"id":"user/software/development/rust","title":"Rust","description":"There are two ways to install Rust. This article explains how they differ and which one should be used, according to users\' needs.","sidebar":"userSidebar"},"user/software/development/web":{"id":"user/software/development/web","title":"Web Development","description":"Many of the Solus contributors over the years have been involved in Web development of some kind. We try our best to provide up-to-date and stable versions of all of the most frequently used tools. This list features how to get started with some of the most popular web tools on Solus.","sidebar":"userSidebar"},"user/software/gaming/index":{"id":"user/software/gaming/index","title":"Gaming","description":"Heroes of Newerth","sidebar":"userSidebar"},"user/software/localization/ibus":{"id":"user/software/localization/ibus","title":"IBus","description":"Configuration","sidebar":"userSidebar"},"user/software/networking/samba":{"id":"user/software/networking/samba","title":"Samba File Sharing","description":"Samba is the standard Windows interoperability suite of programs for Linux and Unix. Among other things, it allows Linux, macOS and Windows users to share files via the Server Message Block (SMB) protocol.","sidebar":"userSidebar"},"user/software/networking/tigervnc":{"id":"user/software/networking/tigervnc","title":"TigerVNC","description":"TigerVNC is a high-performance implementation of the VNC protocol, which allows you to control/view desktops remotely over the internet.","sidebar":"userSidebar"},"user/software/networking/wireshark":{"id":"user/software/networking/wireshark","title":"Wireshark","description":"Wireshark is a widely-used network protocol analyzer that lets you see what\u2019s happening on a network at a microscopic level.","sidebar":"userSidebar"},"user/software/networking/xrdp":{"id":"user/software/networking/xrdp","title":"XRDP","description":"xrdp provides a graphical login to remote machines using Microsoft Remote Desktop Protocol (RDP). xrdp accepts connections from a variety of RDP clients: FreeRDP, rdesktop, NeutrinoRDP and Microsoft Remote Desktop Client (for Windows, Mac OS, iOS and Android).","sidebar":"userSidebar"},"user/software/sound/index":{"id":"user/software/sound/index","title":"Sound","description":"Solus comes with PulseAudio configured by default.","sidebar":"userSidebar"},"user/software/third-party/index":{"id":"user/software/third-party/index","title":"Third Party","description":"The following applications are provided via our 3rd Party Repository to facilitate the installation and usage of them. These applications cannot be included in the primary repository due to licensing issues.","sidebar":"userSidebar"},"user/software/utilities/ksysguard":{"id":"user/software/utilities/ksysguard","title":"KSysGuard","description":"KSysGuard KSysGuard, also known as KDE System Guard and KDE System Monitor, is designed to make simple process control available to a user without needing to do any special setup.","sidebar":"userSidebar"},"user/software/utilities/kwallet":{"id":"user/software/utilities/kwallet","title":"KDE Wallet","description":"In KDE Plasma, the KDE Wallet is responsible for securely storing and supplying user credentials to the various KDE applications that request them.","sidebar":"userSidebar"},"user/software/virtualization/virtualbox":{"id":"user/software/virtualization/virtualbox","title":"VirtualBox","description":"VirtualBox is an x86 and x86_64 virtualization software package developed by Oracle.","sidebar":"userSidebar"},"user/software/web/obs":{"id":"user/software/web/obs","title":"Open Broadcaster Software (OBS)","description":"This article covers the installation of OBS Studio as well as the use of third-party plugins.","sidebar":"userSidebar"},"user/troubleshooting/boot-rescue":{"id":"user/troubleshooting/boot-rescue","title":"Boot Rescue","description":"In this document, we will walk through restoring the ability to boot Solus.","sidebar":"userSidebar"},"user/troubleshooting/index":{"id":"user/troubleshooting/index","title":"Troubleshooting","description":"This guide provides some basic troubleshooting instructions for when you have an issue in Solus. Before reporting bugs, it is important to validate your Solus installation doesn\'t suffer from missing files or disk corruption. Also ensuring the system is fully up to date as the bug may have already been fixed.","sidebar":"userSidebar"},"user/troubleshooting/installation":{"id":"user/troubleshooting/installation","title":"Installation Issues","description":"This article covers various issues that you may come across during installation of Solus.","sidebar":"userSidebar"}}}')}}]); \ No newline at end of file diff --git a/assets/js/935f2afb.adda72a5.js b/assets/js/935f2afb.adda72a5.js deleted file mode 100644 index 261386e6a..000000000 --- a/assets/js/935f2afb.adda72a5.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[53],{1109:e=>{e.exports=JSON.parse('{"pluginId":"default","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"userSidebar":[{"type":"link","label":"Welcome","href":"/docs/user/intro","docId":"user/intro"},{"type":"category","label":"Quick Start","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Boot Management","href":"/docs/user/quick-start/boot-management","docId":"user/quick-start/boot-management"},{"type":"link","label":"Default Applications","href":"/docs/user/quick-start/default-applications","docId":"user/quick-start/default-applications"},{"type":"category","label":"Preparing to Install","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Disk Partitioning","href":"/docs/user/quick-start/installation/disks","docId":"user/quick-start/installation/disks"},{"type":"link","label":"Booting with Secure Boot Enabled","href":"/docs/user/quick-start/installation/secure-boot","docId":"user/quick-start/installation/secure-boot"}],"href":"/docs/user/quick-start/installation/"},{"type":"category","label":"Software Center","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"eopkg","href":"/docs/user/quick-start/package-management/eopkg","docId":"user/quick-start/package-management/eopkg"}],"href":"/docs/user/quick-start/package-management/"}],"href":"/docs/category/quick-start"},{"type":"category","label":"Contributing","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Community Guidelines","href":"/docs/user/contributing/community-guidelines","docId":"user/contributing/community-guidelines"},{"type":"link","label":"Getting Involved","href":"/docs/user/contributing/getting-involved","docId":"user/contributing/getting-involved"},{"type":"link","label":"Testing an ISO","href":"/docs/user/contributing/testing-an-iso","docId":"user/contributing/testing-an-iso"}],"href":"/docs/category/contributing"},{"type":"category","label":"Editions","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Budgie","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Configuration","href":"/docs/user/editions/budgie/configuration","docId":"user/editions/budgie/configuration"},{"type":"link","label":"Tips and Tricks","href":"/docs/user/editions/budgie/tips-and-tricks","docId":"user/editions/budgie/tips-and-tricks"}],"href":"/docs/user/editions/budgie/"},{"type":"category","label":"GNOME","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Configuration","href":"/docs/user/editions/gnome/configuration","docId":"user/editions/gnome/configuration"},{"type":"link","label":"Tips and Tricks","href":"/docs/user/editions/gnome/tips-and-tricks","docId":"user/editions/gnome/tips-and-tricks"}],"href":"/docs/user/editions/gnome/"},{"type":"category","label":"MATE","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Configuration","href":"/docs/user/editions/mate/configuration","docId":"user/editions/mate/configuration"},{"type":"link","label":"Tips and Tricks","href":"/docs/user/editions/mate/tips-and-tricks","docId":"user/editions/mate/tips-and-tricks"}],"href":"/docs/user/editions/mate/"},{"type":"category","label":"Plasma","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Configuration","href":"/docs/user/editions/plasma/configuration","docId":"user/editions/plasma/configuration"},{"type":"link","label":"Tips and Tricks","href":"/docs/user/editions/plasma/tips-and-tricks","docId":"user/editions/plasma/tips-and-tricks"}],"href":"/docs/user/editions/plasma/"}],"href":"/docs/user/editions/"},{"type":"category","label":"Hardware","collapsible":true,"collapsed":true,"items":[{"type":"category","label":"Compatibility","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Laptops","href":"/docs/user/hardware/compatibility/laptops","docId":"user/hardware/compatibility/laptops"},{"type":"link","label":"WiFi","href":"/docs/user/hardware/compatibility/wifi","docId":"user/hardware/compatibility/wifi"}],"href":"/docs/category/compatibility"},{"type":"category","label":"Mobile","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Android","href":"/docs/user/hardware/mobile/android","docId":"user/hardware/mobile/android"},{"type":"link","label":"Apple","href":"/docs/user/hardware/mobile/apple","docId":"user/hardware/mobile/apple"}],"href":"/docs/category/mobile"},{"type":"category","label":"Peripherals","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Mice and Touchpads","href":"/docs/user/hardware/peripherals/mice-and-touchpads","docId":"user/hardware/peripherals/mice-and-touchpads"},{"type":"link","label":"MIDI Keyboards","href":"/docs/user/hardware/peripherals/midi-keyboard","docId":"user/hardware/peripherals/midi-keyboard"},{"type":"link","label":"Printers and Scanners","href":"/docs/user/hardware/peripherals/printers-and-scanners","docId":"user/hardware/peripherals/printers-and-scanners"}],"href":"/docs/category/peripherals"}],"href":"/docs/user/hardware/"},{"type":"category","label":"Package Management","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Basics to Package Management","href":"/docs/user/package-management/basics","docId":"user/package-management/basics"},{"type":"link","label":"History and Software Rollback","href":"/docs/user/package-management/history-and-rollback","docId":"user/package-management/history-and-rollback"},{"type":"link","label":"Repository Management","href":"/docs/user/package-management/repo-management","docId":"user/package-management/repo-management"}],"href":"/docs/category/package-management"},{"type":"category","label":"Software","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Command Line","href":"/docs/user/software/command-line/","docId":"user/software/command-line/index"},{"type":"link","label":"Desktops","href":"/docs/user/software/desktops/","docId":"user/software/desktops/index"},{"type":"category","label":"Development","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Android","href":"/docs/user/software/development/android","docId":"user/software/development/android"},{"type":"link","label":"Containers","href":"/docs/user/software/development/containers","docId":"user/software/development/containers"},{"type":"link","label":"Java","href":"/docs/user/software/development/java","docId":"user/software/development/java"},{"type":"link","label":"PostgreSQL","href":"/docs/user/software/development/postgresql","docId":"user/software/development/postgresql"},{"type":"link","label":"R and Rstudio","href":"/docs/user/software/development/r-and-rstudio","docId":"user/software/development/r-and-rstudio"},{"type":"link","label":"Rust","href":"/docs/user/software/development/rust","docId":"user/software/development/rust"},{"type":"link","label":"Web Development","href":"/docs/user/software/development/web","docId":"user/software/development/web"}],"href":"/docs/user/software/development/"},{"type":"link","label":"Gaming","href":"/docs/user/software/gaming/","docId":"user/software/gaming/index"},{"type":"category","label":"Localization","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"IBus","href":"/docs/user/software/localization/ibus","docId":"user/software/localization/ibus"}],"href":"/docs/category/localization"},{"type":"category","label":"Networking","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Samba File Sharing","href":"/docs/user/software/networking/samba","docId":"user/software/networking/samba"},{"type":"link","label":"TigerVNC","href":"/docs/user/software/networking/tigervnc","docId":"user/software/networking/tigervnc"},{"type":"link","label":"Wireshark","href":"/docs/user/software/networking/wireshark","docId":"user/software/networking/wireshark"},{"type":"link","label":"XRDP","href":"/docs/user/software/networking/xrdp","docId":"user/software/networking/xrdp"}],"href":"/docs/category/networking"},{"type":"link","label":"Sound","href":"/docs/user/software/sound/","docId":"user/software/sound/index"},{"type":"link","label":"Third Party","href":"/docs/user/software/third-party/","docId":"user/software/third-party/index"},{"type":"category","label":"Utilities","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"KSysGuard","href":"/docs/user/software/utilities/ksysguard","docId":"user/software/utilities/ksysguard"},{"type":"link","label":"KDE Wallet","href":"/docs/user/software/utilities/kwallet","docId":"user/software/utilities/kwallet"}],"href":"/docs/category/utilities"},{"type":"category","label":"Virtualization","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"VirtualBox","href":"/docs/user/software/virtualization/virtualbox","docId":"user/software/virtualization/virtualbox"}],"href":"/docs/category/virtualization"},{"type":"category","label":"Web","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Open Broadcaster Software (OBS)","href":"/docs/user/software/web/obs","docId":"user/software/web/obs"}],"href":"/docs/category/web"}],"href":"/docs/category/software"},{"type":"category","label":"Troubleshooting","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Boot Rescue","href":"/docs/user/troubleshooting/boot-rescue","docId":"user/troubleshooting/boot-rescue"},{"type":"link","label":"Installation Issues","href":"/docs/user/troubleshooting/installation","docId":"user/troubleshooting/installation"}],"href":"/docs/user/troubleshooting/"}],"packagingSidebar":[{"type":"link","label":"Packaging Overview","href":"/docs/packaging/","docId":"packaging/index"},{"type":"link","label":"Prepare for Packaging","href":"/docs/packaging/prepare-for-packaging","docId":"packaging/prepare-for-packaging"},{"type":"link","label":"Update Your Development Environment","href":"/docs/packaging/update-dev-environment","docId":"packaging/update-dev-environment"},{"type":"link","label":"Creating a New Package","href":"/docs/packaging/creating-a-new-package","docId":"packaging/creating-a-new-package"},{"type":"link","label":"Updating an Existing Package","href":"/docs/packaging/updating-an-existing-package","docId":"packaging/updating-an-existing-package"},{"type":"link","label":"Testing a Package","href":"/docs/packaging/testing-a-package","docId":"packaging/testing-a-package"},{"type":"link","label":"Submitting a Pull Request for Review","href":"/docs/packaging/submitting-a-pull-request","docId":"packaging/submitting-a-pull-request"},{"type":"link","label":"Packaging Changes","href":"/docs/packaging/packaging-changes","docId":"packaging/packaging-changes"},{"type":"category","label":"Advanced Configuration","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Eopkg Configuration","href":"/docs/packaging/advanced-config/eopkg-configuration","docId":"packaging/advanced-config/eopkg-configuration"},{"type":"link","label":"Local Repository","href":"/docs/packaging/advanced-config/local-repository","docId":"packaging/advanced-config/local-repository"}],"href":"/docs/category/advanced-configuration"},{"type":"link","label":"Git Basics","href":"/docs/packaging/git-basics","docId":"packaging/git-basics"},{"type":"link","label":"Package YAML","href":"/docs/packaging/package.yml","docId":"packaging/package.yml"},{"type":"link","label":"Packaging Practices","href":"/docs/packaging/packaging-practices","docId":"packaging/packaging-practices"},{"type":"category","label":"Procedures","collapsible":true,"collapsed":true,"items":[{"type":"link","label":"Diff to Pull Request","href":"/docs/packaging/procedures/diff-to-pull-request","docId":"packaging/procedures/diff-to-pull-request"},{"type":"link","label":"Maintainership","href":"/docs/packaging/procedures/maintainership","docId":"packaging/procedures/maintainership"},{"type":"link","label":"Migrating Existing Repos to GitHub","href":"/docs/packaging/procedures/migrate-repos-to-github","docId":"packaging/procedures/migrate-repos-to-github"},{"type":"link","label":"Package Inclusion Policy","href":"/docs/packaging/procedures/package-inclusion","docId":"packaging/procedures/package-inclusion"},{"type":"link","label":"Release Processes","href":"/docs/packaging/procedures/release-processes","docId":"packaging/procedures/release-processes"},{"type":"link","label":"Requesting a Package Update","href":"/docs/packaging/procedures/request-a-package-update","docId":"packaging/procedures/request-a-package-update"},{"type":"link","label":"Requesting a Package","href":"/docs/packaging/procedures/request-a-package","docId":"packaging/procedures/request-a-package"}],"href":"/docs/category/procedures"},{"type":"link","label":"Your First Package Update","href":"/docs/packaging/your-first-package-update","docId":"packaging/your-first-package-update"}]},"docs":{"packaging/advanced-config/eopkg-configuration":{"id":"packaging/advanced-config/eopkg-configuration","title":"Eopkg Configuration","description":"The eopkg configuration file changes how eopkg works. The first section in the config has settings for the process of building a package. The second section allows you to configure the directories that eopkg uses for various operations. Lastly, the general section contains settings for the general operation of eopkg.","sidebar":"packagingSidebar"},"packaging/advanced-config/local-repository":{"id":"packaging/advanced-config/local-repository","title":"Local Repository","description":"This guide walks you through the steps necessary to tell solbuild how to utilise locally built .eopkg\'s that are not yet in the Solus repository.","sidebar":"packagingSidebar"},"packaging/creating-a-new-package":{"id":"packaging/creating-a-new-package","title":"Creating a New Package","description":"This page will take you through the steps required to build a new package for the Solus package repositories. For this example, we will use the command line utility tree, which is already packaged for Solus, but we will pretend like it\'s not.","sidebar":"packagingSidebar"},"packaging/git-basics":{"id":"packaging/git-basics","title":"Git Basics","description":"Working with branches","sidebar":"packagingSidebar"},"packaging/index":{"id":"packaging/index","title":"Packaging Overview","description":"This is the overall workflow for creating or updating a package.","sidebar":"packagingSidebar"},"packaging/package.yml":{"id":"packaging/package.yml","title":"Package YAML","description":"Each package is generated from a single build file named package.yml. This file is sometimes also called a \\"recipe\\" since it provides steps for building a package. It provides all of the required metadata for the package manager, plus the packaging steps involved to produce a package. This file follows the YAML specification.","sidebar":"packagingSidebar"},"packaging/packaging-changes":{"id":"packaging/packaging-changes","title":"Packaging Changes","description":"This page is meant to serve as a changelog of sorts for the Solus packaging environment and the packaging instructions. Refer to specific help pages for more details.","sidebar":"packagingSidebar"},"packaging/packaging-practices":{"id":"packaging/packaging-practices","title":"Packaging Practices","description":"The primary goal of ypkg is ease of maintenance. In order to do so we ensure packages in the binary repository adhere to a strict set of conventions and practices.","sidebar":"packagingSidebar"},"packaging/prepare-for-packaging":{"id":"packaging/prepare-for-packaging","title":"Prepare for Packaging","description":"Switch to the Unstable Repository","sidebar":"packagingSidebar"},"packaging/procedures/diff-to-pull-request":{"id":"packaging/procedures/diff-to-pull-request","title":"Diff to Pull Request","description":"All but a few open package diffs on Phabricator were merged before the migration to GitHub. But what about the ones that weren\'t merged? Luckily, it should be a pretty straightforward process to turn your changes into a Pull Request on GitHub.","sidebar":"packagingSidebar"},"packaging/procedures/maintainership":{"id":"packaging/procedures/maintainership","title":"Maintainership","description":"The role of a maintainer is to update package(s) on a regular basis, while following Solus packaging and consistency standards.","sidebar":"packagingSidebar"},"packaging/procedures/migrate-repos-to-github":{"id":"packaging/procedures/migrate-repos-to-github","title":"Migrating Existing Repos to GitHub","description":"This is intended for people who have cloned package repos from Phabricator in the past. The information below will help you migrate your common repo and existing repo clones to work with our GitHub.","sidebar":"packagingSidebar"},"packaging/procedures/package-inclusion":{"id":"packaging/procedures/package-inclusion","title":"Package Inclusion Policy","description":"This policy sets forth the criteria for a package to be accepted for inclusion into the Solus repositories or rejected.","sidebar":"packagingSidebar"},"packaging/procedures/release-processes":{"id":"packaging/procedures/release-processes","title":"Release Processes","description":"This post is intended as both information to users, and guidelines for developers and contributors of Solus. Solus employs a formal architecture to enable the curated rolling release model, which is made possible through the use of ferryd, solbuild and a split-repository model.","sidebar":"packagingSidebar"},"packaging/procedures/request-a-package":{"id":"packaging/procedures/request-a-package","title":"Requesting a Package","description":"Packages are how users install Software in Solus, however if we are missing one you can let us know using our Task Tracker.","sidebar":"packagingSidebar"},"packaging/procedures/request-a-package-update":{"id":"packaging/procedures/request-a-package-update","title":"Requesting a Package Update","description":"Packages updates are typically provided by the community or dedicated package maintainers. If we are not shipping the latest stable release of a package, however, you can let us know.","sidebar":"packagingSidebar"},"packaging/submitting-a-pull-request":{"id":"packaging/submitting-a-pull-request","title":"Submitting a Pull Request for Review","description":"Please refrain from submitting a pull request for the following instances:","sidebar":"packagingSidebar"},"packaging/testing-a-package":{"id":"packaging/testing-a-package","title":"Testing a Package","description":"After building a package, it must be tested against the unstable repo before a pull request can be submitted. Each pull request requires you to explain how you tested the package to make sure things work as expected.","sidebar":"packagingSidebar"},"packaging/update-dev-environment":{"id":"packaging/update-dev-environment","title":"Update Your Development Environment","description":"Update the development tools and the system","sidebar":"packagingSidebar"},"packaging/updating-an-existing-package":{"id":"packaging/updating-an-existing-package","title":"Updating an Existing Package","description":"This article will go over updating a package that is already in the Solus package repositories.","sidebar":"packagingSidebar"},"packaging/your-first-package-update":{"id":"packaging/your-first-package-update","title":"Your First Package Update","description":"This page will guide you through the steps required to build your first package. This is really a test to make sure that your build environment is set up correctly. You will clone an existing package, build it, then install it, and finally remove it.","sidebar":"packagingSidebar"},"user/contributing/community-guidelines":{"id":"user/contributing/community-guidelines","title":"Community Guidelines","description":"The Solus Project enforces a set of community guidelines to maintain a family-friendly, respectful, and professional environment.","sidebar":"userSidebar"},"user/contributing/getting-involved":{"id":"user/contributing/getting-involved","title":"Getting Involved","description":"Solus is a big undertaking, and as such there are many ways in which your involvement can help us. Naturally, that means there are also many ways in which you can help out.","sidebar":"userSidebar"},"user/contributing/testing-an-iso":{"id":"user/contributing/testing-an-iso","title":"Testing an ISO","description":"A handy checklist anyone can use for testing an ISO.","sidebar":"userSidebar"},"user/editions/budgie/configuration":{"id":"user/editions/budgie/configuration","title":"Configuration","description":"Date and Time","sidebar":"userSidebar"},"user/editions/budgie/index":{"id":"user/editions/budgie/index","title":"Budgie","description":"TODO: Add Budgie branding image","sidebar":"userSidebar"},"user/editions/budgie/tips-and-tricks":{"id":"user/editions/budgie/tips-and-tricks","title":"Tips and Tricks","description":"Budgie Shortcuts","sidebar":"userSidebar"},"user/editions/gnome/configuration":{"id":"user/editions/gnome/configuration","title":"Configuration","description":"Date and Time","sidebar":"userSidebar"},"user/editions/gnome/index":{"id":"user/editions/gnome/index","title":"GNOME","description":"GNOME Shell is provided by default with the GNOME Edition of Solus. They describe it as:","sidebar":"userSidebar"},"user/editions/gnome/tips-and-tricks":{"id":"user/editions/gnome/tips-and-tricks","title":"Tips and Tricks","description":"GNOME Keyboard Shortcuts","sidebar":"userSidebar"},"user/editions/index":{"id":"user/editions/index","title":"Editions","description":"","sidebar":"userSidebar"},"user/editions/mate/configuration":{"id":"user/editions/mate/configuration","title":"Configuration","description":"Date and Time","sidebar":"userSidebar"},"user/editions/mate/index":{"id":"user/editions/mate/index","title":"MATE","description":"MATE Desktop is provided by the MATE Edition of Solus. They describe it as:","sidebar":"userSidebar"},"user/editions/mate/tips-and-tricks":{"id":"user/editions/mate/tips-and-tricks","title":"Tips and Tricks","description":"MATE Keyboard Shortcuts","sidebar":"userSidebar"},"user/editions/plasma/configuration":{"id":"user/editions/plasma/configuration","title":"Configuration","description":"Opening System Settings","sidebar":"userSidebar"},"user/editions/plasma/index":{"id":"user/editions/plasma/index","title":"Plasma","description":"Solus Plasma","sidebar":"userSidebar"},"user/editions/plasma/tips-and-tricks":{"id":"user/editions/plasma/tips-and-tricks","title":"Tips and Tricks","description":"Keyboard Shortcuts","sidebar":"userSidebar"},"user/hardware/compatibility/laptops":{"id":"user/hardware/compatibility/laptops","title":"Laptops","description":"The following laptops have been tested and/or suggested to function correctly by our users.","sidebar":"userSidebar"},"user/hardware/compatibility/wifi":{"id":"user/hardware/compatibility/wifi","title":"WiFi","description":"The following wireless chipsets have been tested and/or suggested to function correctly by our users.","sidebar":"userSidebar"},"user/hardware/index":{"id":"user/hardware/index","title":"Hardware","description":"Preinstalled Drivers","sidebar":"userSidebar"},"user/hardware/mobile/android":{"id":"user/hardware/mobile/android","title":"Android","description":"For the most part, Android devices will work out of the box on Solus. The experience is similar to on other operating systems.","sidebar":"userSidebar"},"user/hardware/mobile/apple":{"id":"user/hardware/mobile/apple","title":"Apple","description":"Solus provides iOS support via libimobiledevice and libgpod.","sidebar":"userSidebar"},"user/hardware/peripherals/mice-and-touchpads":{"id":"user/hardware/peripherals/mice-and-touchpads","title":"Mice and Touchpads","description":"Asus, Logitech, Roccat, SteelSeries","sidebar":"userSidebar"},"user/hardware/peripherals/midi-keyboard":{"id":"user/hardware/peripherals/midi-keyboard","title":"MIDI Keyboards","description":"These instructions will guide you through how to set up and use a USB-connected MIDI Keyboard on Solus. This will easily let you use the keyboard to play music with a wide set of instruments.","sidebar":"userSidebar"},"user/hardware/peripherals/printers-and-scanners":{"id":"user/hardware/peripherals/printers-and-scanners","title":"Printers and Scanners","description":"Drivers","sidebar":"userSidebar"},"user/intro":{"id":"user/intro","title":"Welcome","description":"Solus is committed to helping our users get the most out of their systems. The Help Center has been put together to introduce Solus users to our ecosystem and guide them through some of the most common tasks they might need help with.","sidebar":"userSidebar"},"user/package-management/basics":{"id":"user/package-management/basics","title":"Basics to Package Management","description":"Solus uses the eopkg package management system to deliver software to the end-user.","sidebar":"userSidebar"},"user/package-management/history-and-rollback":{"id":"user/package-management/history-and-rollback","title":"History and Software Rollback","description":"Solus provides a history and rollback feature via its package manager, eopkg. This feature allows you to see when your repository was last updated, actions such as installation, removal, and upgrading of software.","sidebar":"userSidebar"},"user/package-management/repo-management":{"id":"user/package-management/repo-management","title":"Repository Management","description":"While Solus currently only provides two repositories, stable (shannon) and unstable, our package manager does support actively using multiple repositories on your system. This is useful if you are using a vendor-provided repository.","sidebar":"userSidebar"},"user/quick-start/boot-management":{"id":"user/quick-start/boot-management","title":"Boot Management","description":"Solus leverages clr-boot-manager from the ClearLinux project to manage its boot process.","sidebar":"userSidebar"},"user/quick-start/default-applications":{"id":"user/quick-start/default-applications","title":"Default Applications","description":"Each version of Solus comes with a pre-installed collection of desktop applications that can help you perform common tasks.","sidebar":"userSidebar"},"user/quick-start/installation/disks":{"id":"user/quick-start/installation/disks","title":"Disk Partitioning","description":"Solus provides multiple ways you can install onto your system.","sidebar":"userSidebar"},"user/quick-start/installation/index":{"id":"user/quick-start/installation/index","title":"Preparing to Install","description":"The first step to installing Solus is acquiring the correct media. The Solus Project provides ISO images, which contain the contents of Solus for installing.","sidebar":"userSidebar"},"user/quick-start/installation/secure-boot":{"id":"user/quick-start/installation/secure-boot","title":"Booting with Secure Boot Enabled","description":"Since Solus 4.4 secure boot is now supported. When you first boot the ISO, and, if you have secure boot enabled in your UEFI firmware; you will have to perform the one-time-step of manually enrolling the Solus certificate. The following guide will walk you through this. If you already have Solus installed and wish to enable secure boot, skip ahead here.","sidebar":"userSidebar"},"user/quick-start/package-management/eopkg":{"id":"user/quick-start/package-management/eopkg","title":"eopkg","description":"Solus uses the eopkg package management system to deliver software to the end-user. It is actively developed by Solus, for Solus. We hope you enjoy the simplicity it offers for day-to-day use. For power users, there\'s plenty for you too!","sidebar":"userSidebar"},"user/quick-start/package-management/index":{"id":"user/quick-start/package-management/index","title":"Software Center","description":"You can install software ranging from Google Chrome to LibreOffice, as well as updating software, via our Software Center.","sidebar":"userSidebar"},"user/software/command-line/index":{"id":"user/software/command-line/index","title":"Command Line","description":"Changing Shell","sidebar":"userSidebar"},"user/software/desktops/index":{"id":"user/software/desktops/index","title":"Desktops","description":"Solus offers a multitude of desktop environments, ranging from the feature-rich and modern Budgie to the traditional MATE experience. It is recommended to use the ISO for a specific desktop environment but it is possible to install them afterwards if you wish to do try one out.","sidebar":"userSidebar"},"user/software/development/android":{"id":"user/software/development/android","title":"Android","description":"This article covers building the Android Open Source Project (AOSP) on Solus, the instructions can also be tweaked to also install forks of Android such as LineageOS.","sidebar":"userSidebar"},"user/software/development/containers":{"id":"user/software/development/containers","title":"Containers","description":"Containers are a popular method to run and configure applications in a confined environment without directly installing the application and all it\'s dependencies. Solus provides the following container technologies:","sidebar":"userSidebar"},"user/software/development/index":{"id":"user/software/development/index","title":"Development","description":"Base Development Tools","sidebar":"userSidebar"},"user/software/development/java":{"id":"user/software/development/java","title":"Java","description":"This article covers obtaining open source Java (otherwise known as OpenJDK). In this article, two abbreviations will be used to refer to components of the Java software suite:","sidebar":"userSidebar"},"user/software/development/postgresql":{"id":"user/software/development/postgresql","title":"PostgreSQL","description":"PostgreSQL is an open source object-relational database system. The postgresql package in Solus includes the PostgreSQL library, client and server.","sidebar":"userSidebar"},"user/software/development/r-and-rstudio":{"id":"user/software/development/r-and-rstudio","title":"R and Rstudio","description":"Covers the basics of how to install R and Rstudio on Solus and also covers how to install required dependencies for installing additional CRAN libraries.","sidebar":"userSidebar"},"user/software/development/rust":{"id":"user/software/development/rust","title":"Rust","description":"There are two ways to install Rust. This article explains how they differ and which one should be used, according to users\' needs.","sidebar":"userSidebar"},"user/software/development/web":{"id":"user/software/development/web","title":"Web Development","description":"Many of the Solus contributors over the years have been involved in Web development of some kind. We try our best to provide up-to-date and stable versions of all of the most frequently used tools. This list features how to get started with some of the most popular web tools on Solus.","sidebar":"userSidebar"},"user/software/gaming/index":{"id":"user/software/gaming/index","title":"Gaming","description":"Heroes of Newerth","sidebar":"userSidebar"},"user/software/localization/ibus":{"id":"user/software/localization/ibus","title":"IBus","description":"Configuration","sidebar":"userSidebar"},"user/software/networking/samba":{"id":"user/software/networking/samba","title":"Samba File Sharing","description":"Samba is the standard Windows interoperability suite of programs for Linux and Unix. Among other things, it allows Linux, macOS and Windows users to share files via the Server Message Block (SMB) protocol.","sidebar":"userSidebar"},"user/software/networking/tigervnc":{"id":"user/software/networking/tigervnc","title":"TigerVNC","description":"TigerVNC is a high-performance implementation of the VNC protocol, which allows you to control/view desktops remotely over the internet.","sidebar":"userSidebar"},"user/software/networking/wireshark":{"id":"user/software/networking/wireshark","title":"Wireshark","description":"Wireshark is a widely-used network protocol analyzer that lets you see what\u2019s happening on a network at a microscopic level.","sidebar":"userSidebar"},"user/software/networking/xrdp":{"id":"user/software/networking/xrdp","title":"XRDP","description":"xrdp provides a graphical login to remote machines using Microsoft Remote Desktop Protocol (RDP). xrdp accepts connections from a variety of RDP clients: FreeRDP, rdesktop, NeutrinoRDP and Microsoft Remote Desktop Client (for Windows, Mac OS, iOS and Android).","sidebar":"userSidebar"},"user/software/sound/index":{"id":"user/software/sound/index","title":"Sound","description":"Solus comes with PulseAudio configured by default.","sidebar":"userSidebar"},"user/software/third-party/index":{"id":"user/software/third-party/index","title":"Third Party","description":"The following applications are provided via our 3rd Party Repository to facilitate the installation and usage of them. These applications cannot be included in the primary repository due to licensing issues.","sidebar":"userSidebar"},"user/software/utilities/ksysguard":{"id":"user/software/utilities/ksysguard","title":"KSysGuard","description":"KSysGuard KSysGuard, also known as KDE System Guard and KDE System Monitor, is designed to make simple process control available to a user without needing to do any special setup.","sidebar":"userSidebar"},"user/software/utilities/kwallet":{"id":"user/software/utilities/kwallet","title":"KDE Wallet","description":"In KDE Plasma, the KDE Wallet is responsible for securely storing and supplying user credentials to the various KDE applications that request them.","sidebar":"userSidebar"},"user/software/virtualization/virtualbox":{"id":"user/software/virtualization/virtualbox","title":"VirtualBox","description":"VirtualBox is an x86 and x86_64 virtualization software package developed by Oracle.","sidebar":"userSidebar"},"user/software/web/obs":{"id":"user/software/web/obs","title":"Open Broadcaster Software (OBS)","description":"This article covers the installation of OBS Studio as well as the use of third-party plugins.","sidebar":"userSidebar"},"user/troubleshooting/boot-rescue":{"id":"user/troubleshooting/boot-rescue","title":"Boot Rescue","description":"In this document, we will walk through restoring the ability to boot Solus.","sidebar":"userSidebar"},"user/troubleshooting/index":{"id":"user/troubleshooting/index","title":"Troubleshooting","description":"This guide provides some basic troubleshooting instructions for when you have an issue in Solus. Before reporting bugs, it is important to validate your Solus installation doesn\'t suffer from missing files or disk corruption. Also ensuring the system is fully up to date as the bug may have already been fixed.","sidebar":"userSidebar"},"user/troubleshooting/installation":{"id":"user/troubleshooting/installation","title":"Installation Issues","description":"This article covers various issues that you may come across during installation of Solus.","sidebar":"userSidebar"}}}')}}]); \ No newline at end of file diff --git a/assets/js/947d9ca4.9785f005.js b/assets/js/947d9ca4.150e443b.js similarity index 99% rename from assets/js/947d9ca4.9785f005.js rename to assets/js/947d9ca4.150e443b.js index 870148787..97e8bd415 100644 --- a/assets/js/947d9ca4.9785f005.js +++ b/assets/js/947d9ca4.150e443b.js @@ -1 +1 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[1944],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>h});var a=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=a.createContext({}),d=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},p=function(e){var t=d(e.components);return a.createElement(l.Provider,{value:t},e.children)},u="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,r=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=d(n),m=o,h=u["".concat(l,".").concat(m)]||u[m]||c[m]||r;return n?a.createElement(h,i(i({ref:t},p),{},{components:n})):a.createElement(h,i({ref:t},p))}));function h(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=n.length,i=new Array(r);i[0]=m;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[u]="string"==typeof e?e:o,i[1]=s;for(var d=2;d{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>c,frontMatter:()=>r,metadata:()=>s,toc:()=>d});var a=n(7462),o=(n(7294),n(3905));const r={title:"Web Development",summary:"Solus specific help for different web development tools"},i="Web Development",s={unversionedId:"user/software/development/web",id:"user/software/development/web",title:"Web Development",description:"Many of the Solus contributors over the years have been involved in Web development of some kind. We try our best to provide up-to-date and stable versions of all of the most frequently used tools. This list features how to get started with some of the most popular web tools on Solus.",source:"@site/docs/user/software/development/web.md",sourceDirName:"user/software/development",slug:"/user/software/development/web",permalink:"/docs/user/software/development/web",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/development/web.md",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Web Development",summary:"Solus specific help for different web development tools"},sidebar:"userSidebar",previous:{title:"Rust",permalink:"/docs/user/software/development/rust"},next:{title:"Gaming",permalink:"/docs/user/software/gaming/"}},l={},d=[{value:"caddy",id:"caddy",level:2},{value:"Installation",id:"installation",level:3},{value:"Usage",id:"usage",level:3},{value:"Configuration",id:"configuration",level:4},{value:"Management",id:"management",level:4},{value:"httpd (Apache)",id:"httpd-apache",level:2},{value:"Installation",id:"installation-1",level:3},{value:"Usage",id:"usage-1",level:3},{value:"Configuration and DocumentRoot",id:"configuration-and-documentroot",level:4},{value:"PHP Support",id:"php-support",level:4},{value:"Management",id:"management-1",level:4},{value:"nginx",id:"nginx",level:2},{value:"Installation",id:"installation-2",level:3},{value:"Usage",id:"usage-2",level:3},{value:"Configuration",id:"configuration-1",level:4},{value:"Management",id:"management-2",level:4}],p={toc:d},u="wrapper";function c(e){let{components:t,...n}=e;return(0,o.kt)(u,(0,a.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"web-development"},"Web Development"),(0,o.kt)("p",null,"Many of the Solus contributors over the years have been involved in Web development of some kind. We try our best to provide up-to-date and stable versions of all of the most frequently used tools. This list features how to get started with some of the most popular web tools on Solus."),(0,o.kt)("h1",{id:"servers"},"Servers"),(0,o.kt)("h2",{id:"caddy"},"caddy"),(0,o.kt)("p",null,"Solus provides the caddy web server and proxy to users and developers who want to test their web applications before setting them to production."),(0,o.kt)("p",null,"Remember that Solus is not a server operating system: any usage outside local testing is discouraged."),(0,o.kt)("h3",{id:"installation"},"Installation"),(0,o.kt)("p",null,"caddy is available in the ",(0,o.kt)("inlineCode",{parentName:"p"},"caddy")," package. It can be installed from the ",(0,o.kt)("a",{parentName:"p",href:"/docs/user/package-management/basics#installing-software"},"Software Center")," or via terminal:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg install caddy\n")),(0,o.kt)("h3",{id:"usage"},"Usage"),(0,o.kt)("h4",{id:"configuration"},"Configuration"),(0,o.kt)("p",null,"caddy, like many other packages in the Solus repository, is ",(0,o.kt)("a",{parentName:"p",href:"https://clearlinux.org/features/stateless"},"stateless"),". That means the package gets installed with a vendored configuration out-of-the-box which can be customized, or even overridden, by a privileged user."),(0,o.kt)("p",null,"caddy can use any valid configuration by reloading it via the cli. For automatic HTTPS users may need to generate their own certs and to add them at their ",(0,o.kt)("inlineCode",{parentName:"p"},"Caddyfile"),"s. For PHP FastCGI support ",(0,o.kt)("inlineCode",{parentName:"p"},"php")," needs to be also installed and with the ",(0,o.kt)("inlineCode",{parentName:"p"},"php-fpm")," service also running. Reloading with the ",(0,o.kt)("inlineCode",{parentName:"p"},"/usr/share/caddy/Caddyfile")," reverts caddy to its original settings. More documentation about caddy is available at their ",(0,o.kt)("a",{parentName:"p",href:"https://caddyserver.com/docs/"},"website"),"."),(0,o.kt)("h4",{id:"management"},"Management"),(0,o.kt)("p",null,"Basic caddy management is done via ",(0,o.kt)("inlineCode",{parentName:"p"},"systemd")," and the cli, using the following commands:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"sudo systemctl enable --now caddy # To enable nginx on startup and run it immediately.\ncaddy reload --config /etc/caddy/Caddyfile # To reload caddy with an specified configuration.\nsudo systemctl stop caddy # To stop caddy.\n")),(0,o.kt)("p",null,"More details about ",(0,o.kt)("inlineCode",{parentName:"p"},"systemctl")," are available ",(0,o.kt)("a",{parentName:"p",href:"https://www.freedesktop.org/software/systemd/man/systemctl.html"},"at this address"),"."),(0,o.kt)("h2",{id:"httpd-apache"},"httpd (Apache)"),(0,o.kt)("p",null,"Solus provides httpd (otherwise referred to as Apache) web server for web developers to test locally before uploading their work."),(0,o.kt)("h3",{id:"installation-1"},"Installation"),(0,o.kt)("p",null,"httpd can be installed either from the Software Center or via terminal:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg install httpd\n")),(0,o.kt)("h3",{id:"usage-1"},"Usage"),(0,o.kt)("h4",{id:"configuration-and-documentroot"},"Configuration and DocumentRoot"),(0,o.kt)("p",null,"Unlike most other operating systems, the httpd provided in Solus is ",(0,o.kt)("a",{parentName:"p",href:"https://clearlinux.org/features/stateless"},"stateless"),", enabling us to provide out-of-the-box vendor configuration via ",(0,o.kt)("inlineCode",{parentName:"p"},"/usr/share/defaults/httpd/"),", while still enabling the system administrator (",(0,o.kt)("em",{parentName:"p"},"or a user with the appropriate permissions"),") to override the vendor configuration via the system-wide configuration location, ",(0,o.kt)("inlineCode",{parentName:"p"},"/etc"),"."),(0,o.kt)("p",null,"Therefore, to make modifications to httpd's configuration, you must first create the directories ",(0,o.kt)("inlineCode",{parentName:"p"},"/etc/httpd/conf.d/")," and create your own ","*",".conf files, which will override the vendor-provided configuration files."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Note:")," Modification of the ",(0,o.kt)("strong",{parentName:"p"},"vendor")," configuration files may result in your changes being overwritten during the next update to httpd."),(0,o.kt)("p",null,"By default, httpd's DocumentRoot is set to ",(0,o.kt)("inlineCode",{parentName:"p"},"/var/www/"),", thus files you desire to be accessible via your httpd server must be copied to that location."),(0,o.kt)("h4",{id:"php-support"},"PHP Support"),(0,o.kt)("p",null,"To get PHP working, install it from the Software Center or via terminal:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg install php\n")),(0,o.kt)("p",null,"Because PHP is loaded via FPM and FastCGI and not via an Apache module, to enable PHP you must create a new file, ",(0,o.kt)("inlineCode",{parentName:"p"},"/etc/httpd/conf.d/php.conf"),", with the following lines:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},'LoadModule proxy_module lib64/httpd/mod_proxy.so\nLoadModule proxy_fcgi_module lib64/httpd/mod_proxy_fcgi.so\n\nSetHandler "proxy:fcgi://127.0.0.1:9000"\n\n\nDirectoryIndex index.php index.html\n\n')),(0,o.kt)("p",null,"Now, to load the changes, run:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"sudo systemctl restart httpd && sudo systemctl restart php-fpm\n")),(0,o.kt)("h4",{id:"management-1"},"Management"),(0,o.kt)("p",null,"Managing httpd is done via systemd, using the following commands:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"sudo systemctl enable httpd # Enable on startup\nsudo systemctl start httpd # Start the web server\nsudo systemctl stop httpd # Stop the web server\n")),(0,o.kt)("h2",{id:"nginx"},"nginx"),(0,o.kt)("p",null,"Solus provides the nginx web server and proxy to users and developers who want to test their web applications before setting them to production."),(0,o.kt)("p",null,"Remember that Solus is not a server operating system: any usage outside the local testing is discouraged."),(0,o.kt)("h3",{id:"installation-2"},"Installation"),(0,o.kt)("p",null,"nginx is available in the ",(0,o.kt)("inlineCode",{parentName:"p"},"nginx")," package. It can be installed from the ",(0,o.kt)("a",{parentName:"p",href:"/docs/user/package-management/basics#installing-software"},"Software Center")," or via terminal:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg install nginx\n")),(0,o.kt)("h3",{id:"usage-2"},"Usage"),(0,o.kt)("h4",{id:"configuration-1"},"Configuration"),(0,o.kt)("p",null,"nginx, as many other packages in the Solus repository, is ",(0,o.kt)("a",{parentName:"p",href:"https://clearlinux.org/features/stateless"},"stateless"),". That means the package gets installed with a vendored configuration out-of-the-box which can be customized, or even overridden, by a privileged user. The default location for nginx config files is in ",(0,o.kt)("inlineCode",{parentName:"p"},"/usr/share/defaults/nginx/")),(0,o.kt)("p",null,"nginx on Solus is designed to read users' configuration files from ",(0,o.kt)("inlineCode",{parentName:"p"},"/etc/nginx/conf.d/")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"/etc/nginx/sites-enabled"),". You may copy the default config files from ",(0,o.kt)("inlineCode",{parentName:"p"},"/usr/share/defaults/nginx/")," and modify them to suit your needs. It is also possible to manually create these directories and put personal files in there to customize nginx's behavior. To revert back to the original settings, just delete ",(0,o.kt)("inlineCode",{parentName:"p"},"/etc/nginx/"),"."),(0,o.kt)("h4",{id:"management-2"},"Management"),(0,o.kt)("p",null,"Basic nginx management is done via systemd, using the following commands:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"sudo systemctl enable --now nginx # To enable nginx on startup and run it immediately.\nsudo systemctl stop nginx # To stop nginx.\n")),(0,o.kt)("p",null,"More details about ",(0,o.kt)("inlineCode",{parentName:"p"},"systemctl")," are available ",(0,o.kt)("a",{parentName:"p",href:"https://www.freedesktop.org/software/systemd/man/systemctl.html"},"at this address"),"."))}c.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[1944],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>h});var a=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=a.createContext({}),d=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},p=function(e){var t=d(e.components);return a.createElement(l.Provider,{value:t},e.children)},u="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,r=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=d(n),m=o,h=u["".concat(l,".").concat(m)]||u[m]||c[m]||r;return n?a.createElement(h,i(i({ref:t},p),{},{components:n})):a.createElement(h,i({ref:t},p))}));function h(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=n.length,i=new Array(r);i[0]=m;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[u]="string"==typeof e?e:o,i[1]=s;for(var d=2;d{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>c,frontMatter:()=>r,metadata:()=>s,toc:()=>d});var a=n(7462),o=(n(7294),n(3905));const r={title:"Web Development",summary:"Solus specific help for different web development tools"},i="Web Development",s={unversionedId:"user/software/development/web",id:"user/software/development/web",title:"Web Development",description:"Many of the Solus contributors over the years have been involved in Web development of some kind. We try our best to provide up-to-date and stable versions of all of the most frequently used tools. This list features how to get started with some of the most popular web tools on Solus.",source:"@site/docs/user/software/development/web.md",sourceDirName:"user/software/development",slug:"/user/software/development/web",permalink:"/docs/user/software/development/web",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/development/web.md",tags:[],version:"current",lastUpdatedAt:1695222528,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Web Development",summary:"Solus specific help for different web development tools"},sidebar:"userSidebar",previous:{title:"Rust",permalink:"/docs/user/software/development/rust"},next:{title:"Gaming",permalink:"/docs/user/software/gaming/"}},l={},d=[{value:"caddy",id:"caddy",level:2},{value:"Installation",id:"installation",level:3},{value:"Usage",id:"usage",level:3},{value:"Configuration",id:"configuration",level:4},{value:"Management",id:"management",level:4},{value:"httpd (Apache)",id:"httpd-apache",level:2},{value:"Installation",id:"installation-1",level:3},{value:"Usage",id:"usage-1",level:3},{value:"Configuration and DocumentRoot",id:"configuration-and-documentroot",level:4},{value:"PHP Support",id:"php-support",level:4},{value:"Management",id:"management-1",level:4},{value:"nginx",id:"nginx",level:2},{value:"Installation",id:"installation-2",level:3},{value:"Usage",id:"usage-2",level:3},{value:"Configuration",id:"configuration-1",level:4},{value:"Management",id:"management-2",level:4}],p={toc:d},u="wrapper";function c(e){let{components:t,...n}=e;return(0,o.kt)(u,(0,a.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"web-development"},"Web Development"),(0,o.kt)("p",null,"Many of the Solus contributors over the years have been involved in Web development of some kind. We try our best to provide up-to-date and stable versions of all of the most frequently used tools. This list features how to get started with some of the most popular web tools on Solus."),(0,o.kt)("h1",{id:"servers"},"Servers"),(0,o.kt)("h2",{id:"caddy"},"caddy"),(0,o.kt)("p",null,"Solus provides the caddy web server and proxy to users and developers who want to test their web applications before setting them to production."),(0,o.kt)("p",null,"Remember that Solus is not a server operating system: any usage outside local testing is discouraged."),(0,o.kt)("h3",{id:"installation"},"Installation"),(0,o.kt)("p",null,"caddy is available in the ",(0,o.kt)("inlineCode",{parentName:"p"},"caddy")," package. It can be installed from the ",(0,o.kt)("a",{parentName:"p",href:"/docs/user/package-management/basics#installing-software"},"Software Center")," or via terminal:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg install caddy\n")),(0,o.kt)("h3",{id:"usage"},"Usage"),(0,o.kt)("h4",{id:"configuration"},"Configuration"),(0,o.kt)("p",null,"caddy, like many other packages in the Solus repository, is ",(0,o.kt)("a",{parentName:"p",href:"https://clearlinux.org/features/stateless"},"stateless"),". That means the package gets installed with a vendored configuration out-of-the-box which can be customized, or even overridden, by a privileged user."),(0,o.kt)("p",null,"caddy can use any valid configuration by reloading it via the cli. For automatic HTTPS users may need to generate their own certs and to add them at their ",(0,o.kt)("inlineCode",{parentName:"p"},"Caddyfile"),"s. For PHP FastCGI support ",(0,o.kt)("inlineCode",{parentName:"p"},"php")," needs to be also installed and with the ",(0,o.kt)("inlineCode",{parentName:"p"},"php-fpm")," service also running. Reloading with the ",(0,o.kt)("inlineCode",{parentName:"p"},"/usr/share/caddy/Caddyfile")," reverts caddy to its original settings. More documentation about caddy is available at their ",(0,o.kt)("a",{parentName:"p",href:"https://caddyserver.com/docs/"},"website"),"."),(0,o.kt)("h4",{id:"management"},"Management"),(0,o.kt)("p",null,"Basic caddy management is done via ",(0,o.kt)("inlineCode",{parentName:"p"},"systemd")," and the cli, using the following commands:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"sudo systemctl enable --now caddy # To enable nginx on startup and run it immediately.\ncaddy reload --config /etc/caddy/Caddyfile # To reload caddy with an specified configuration.\nsudo systemctl stop caddy # To stop caddy.\n")),(0,o.kt)("p",null,"More details about ",(0,o.kt)("inlineCode",{parentName:"p"},"systemctl")," are available ",(0,o.kt)("a",{parentName:"p",href:"https://www.freedesktop.org/software/systemd/man/systemctl.html"},"at this address"),"."),(0,o.kt)("h2",{id:"httpd-apache"},"httpd (Apache)"),(0,o.kt)("p",null,"Solus provides httpd (otherwise referred to as Apache) web server for web developers to test locally before uploading their work."),(0,o.kt)("h3",{id:"installation-1"},"Installation"),(0,o.kt)("p",null,"httpd can be installed either from the Software Center or via terminal:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg install httpd\n")),(0,o.kt)("h3",{id:"usage-1"},"Usage"),(0,o.kt)("h4",{id:"configuration-and-documentroot"},"Configuration and DocumentRoot"),(0,o.kt)("p",null,"Unlike most other operating systems, the httpd provided in Solus is ",(0,o.kt)("a",{parentName:"p",href:"https://clearlinux.org/features/stateless"},"stateless"),", enabling us to provide out-of-the-box vendor configuration via ",(0,o.kt)("inlineCode",{parentName:"p"},"/usr/share/defaults/httpd/"),", while still enabling the system administrator (",(0,o.kt)("em",{parentName:"p"},"or a user with the appropriate permissions"),") to override the vendor configuration via the system-wide configuration location, ",(0,o.kt)("inlineCode",{parentName:"p"},"/etc"),"."),(0,o.kt)("p",null,"Therefore, to make modifications to httpd's configuration, you must first create the directories ",(0,o.kt)("inlineCode",{parentName:"p"},"/etc/httpd/conf.d/")," and create your own ","*",".conf files, which will override the vendor-provided configuration files."),(0,o.kt)("p",null,(0,o.kt)("strong",{parentName:"p"},"Note:")," Modification of the ",(0,o.kt)("strong",{parentName:"p"},"vendor")," configuration files may result in your changes being overwritten during the next update to httpd."),(0,o.kt)("p",null,"By default, httpd's DocumentRoot is set to ",(0,o.kt)("inlineCode",{parentName:"p"},"/var/www/"),", thus files you desire to be accessible via your httpd server must be copied to that location."),(0,o.kt)("h4",{id:"php-support"},"PHP Support"),(0,o.kt)("p",null,"To get PHP working, install it from the Software Center or via terminal:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg install php\n")),(0,o.kt)("p",null,"Because PHP is loaded via FPM and FastCGI and not via an Apache module, to enable PHP you must create a new file, ",(0,o.kt)("inlineCode",{parentName:"p"},"/etc/httpd/conf.d/php.conf"),", with the following lines:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},'LoadModule proxy_module lib64/httpd/mod_proxy.so\nLoadModule proxy_fcgi_module lib64/httpd/mod_proxy_fcgi.so\n\nSetHandler "proxy:fcgi://127.0.0.1:9000"\n\n\nDirectoryIndex index.php index.html\n\n')),(0,o.kt)("p",null,"Now, to load the changes, run:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"sudo systemctl restart httpd && sudo systemctl restart php-fpm\n")),(0,o.kt)("h4",{id:"management-1"},"Management"),(0,o.kt)("p",null,"Managing httpd is done via systemd, using the following commands:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"sudo systemctl enable httpd # Enable on startup\nsudo systemctl start httpd # Start the web server\nsudo systemctl stop httpd # Stop the web server\n")),(0,o.kt)("h2",{id:"nginx"},"nginx"),(0,o.kt)("p",null,"Solus provides the nginx web server and proxy to users and developers who want to test their web applications before setting them to production."),(0,o.kt)("p",null,"Remember that Solus is not a server operating system: any usage outside the local testing is discouraged."),(0,o.kt)("h3",{id:"installation-2"},"Installation"),(0,o.kt)("p",null,"nginx is available in the ",(0,o.kt)("inlineCode",{parentName:"p"},"nginx")," package. It can be installed from the ",(0,o.kt)("a",{parentName:"p",href:"/docs/user/package-management/basics#installing-software"},"Software Center")," or via terminal:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg install nginx\n")),(0,o.kt)("h3",{id:"usage-2"},"Usage"),(0,o.kt)("h4",{id:"configuration-1"},"Configuration"),(0,o.kt)("p",null,"nginx, as many other packages in the Solus repository, is ",(0,o.kt)("a",{parentName:"p",href:"https://clearlinux.org/features/stateless"},"stateless"),". That means the package gets installed with a vendored configuration out-of-the-box which can be customized, or even overridden, by a privileged user. The default location for nginx config files is in ",(0,o.kt)("inlineCode",{parentName:"p"},"/usr/share/defaults/nginx/")),(0,o.kt)("p",null,"nginx on Solus is designed to read users' configuration files from ",(0,o.kt)("inlineCode",{parentName:"p"},"/etc/nginx/conf.d/")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"/etc/nginx/sites-enabled"),". You may copy the default config files from ",(0,o.kt)("inlineCode",{parentName:"p"},"/usr/share/defaults/nginx/")," and modify them to suit your needs. It is also possible to manually create these directories and put personal files in there to customize nginx's behavior. To revert back to the original settings, just delete ",(0,o.kt)("inlineCode",{parentName:"p"},"/etc/nginx/"),"."),(0,o.kt)("h4",{id:"management-2"},"Management"),(0,o.kt)("p",null,"Basic nginx management is done via systemd, using the following commands:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"sudo systemctl enable --now nginx # To enable nginx on startup and run it immediately.\nsudo systemctl stop nginx # To stop nginx.\n")),(0,o.kt)("p",null,"More details about ",(0,o.kt)("inlineCode",{parentName:"p"},"systemctl")," are available ",(0,o.kt)("a",{parentName:"p",href:"https://www.freedesktop.org/software/systemd/man/systemctl.html"},"at this address"),"."))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/9485dea6.43fdc4f0.js b/assets/js/9485dea6.6cf47957.js similarity index 99% rename from assets/js/9485dea6.43fdc4f0.js rename to assets/js/9485dea6.6cf47957.js index 838b7c199..4c61ce4ea 100644 --- a/assets/js/9485dea6.43fdc4f0.js +++ b/assets/js/9485dea6.6cf47957.js @@ -1 +1 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[2358],{3905:(e,t,r)=>{r.d(t,{Zo:()=>s,kt:()=>d});var l=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function n(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,l)}return r}function i(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(l=0;l=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var u=l.createContext({}),p=function(e){var t=l.useContext(u),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},s=function(e){var t=p(e.components);return l.createElement(u.Provider,{value:t},e.children)},c="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return l.createElement(l.Fragment,{},t)}},k=l.forwardRef((function(e,t){var r=e.components,a=e.mdxType,n=e.originalType,u=e.parentName,s=o(e,["components","mdxType","originalType","parentName"]),c=p(r),k=a,d=c["".concat(u,".").concat(k)]||c[k]||m[k]||n;return r?l.createElement(d,i(i({ref:t},s),{},{components:r})):l.createElement(d,i({ref:t},s))}));function d(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var n=r.length,i=new Array(n);i[0]=k;var o={};for(var u in t)hasOwnProperty.call(t,u)&&(o[u]=t[u]);o.originalType=e,o[c]="string"==typeof e?e:a,i[1]=o;for(var p=2;p{r.r(t),r.d(t,{assets:()=>u,contentTitle:()=>i,default:()=>m,frontMatter:()=>n,metadata:()=>o,toc:()=>p});var l=r(7462),a=(r(7294),r(3905));const n={title:"WiFi",summary:null},i="WiFi",o={unversionedId:"user/hardware/compatibility/wifi",id:"user/hardware/compatibility/wifi",title:"WiFi",description:"The following wireless chipsets have been tested and/or suggested to function correctly by our users.",source:"@site/docs/user/hardware/compatibility/wifi.md",sourceDirName:"user/hardware/compatibility",slug:"/user/hardware/compatibility/wifi",permalink:"/docs/user/hardware/compatibility/wifi",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/hardware/compatibility/wifi.md",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"WiFi",summary:null},sidebar:"userSidebar",previous:{title:"Laptops",permalink:"/docs/user/hardware/compatibility/laptops"},next:{title:"Mobile",permalink:"/docs/category/mobile"}},u={},p=[{value:"Atheros",id:"atheros",level:2},{value:"Broadcom",id:"broadcom",level:2},{value:"Netgear",id:"netgear",level:2},{value:"Intel",id:"intel",level:2},{value:"Ralink",id:"ralink",level:2},{value:"Realtek",id:"realtek",level:2}],s={toc:p},c="wrapper";function m(e){let{components:t,...r}=e;return(0,a.kt)(c,(0,l.Z)({},s,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"wifi"},"WiFi"),(0,a.kt)("p",null,"The following wireless chipsets have been tested and/or suggested to function correctly by our users."),(0,a.kt)("p",null,"This list should not suggest that ",(0,a.kt)("em",{parentName:"p"},"only"),"- such devices listed below are compatible with Solus, as there may be devices not listed below that are in fact compatible."),(0,a.kt)("h2",{id:"atheros"},"Atheros"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Atheros AR5B97"),(0,a.kt)("li",{parentName:"ul"},"Atheros AR242x"),(0,a.kt)("li",{parentName:"ul"},"Atheros AR542x"),(0,a.kt)("li",{parentName:"ul"},"Atheros AR928X"),(0,a.kt)("li",{parentName:"ul"},"Atheros AR8161"),(0,a.kt)("li",{parentName:"ul"},"Atheros AR9285"),(0,a.kt)("li",{parentName:"ul"},"Atheros AR9287"),(0,a.kt)("li",{parentName:"ul"},"Atheros AR9462"),(0,a.kt)("li",{parentName:"ul"},"Atheros AR9485"),(0,a.kt)("li",{parentName:"ul"},"Atheros AR9485WB-EG"),(0,a.kt)("li",{parentName:"ul"},"Atheros QCA9565 / AR9565")),(0,a.kt)("h2",{id:"broadcom"},"Broadcom"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Broadcom BCM4312"),(0,a.kt)("li",{parentName:"ul"},"Broadcom BCM4313"),(0,a.kt)("li",{parentName:"ul"},"Broadcom BCM4322"),(0,a.kt)("li",{parentName:"ul"},"Broadcom BCM4324"),(0,a.kt)("li",{parentName:"ul"},"Broadcom BCM4331"),(0,a.kt)("li",{parentName:"ul"},"Broadcom BCM4365"),(0,a.kt)("li",{parentName:"ul"},"Broadcom BCM57785")),(0,a.kt)("h2",{id:"netgear"},"Netgear"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Netgear WPN111")),(0,a.kt)("h2",{id:"intel"},"Intel"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Intel AC3160"),(0,a.kt)("li",{parentName:"ul"},"Intel AC7265"),(0,a.kt)("li",{parentName:"ul"},"Intel Centrino Advanced-N 6200"),(0,a.kt)("li",{parentName:"ul"},"Intel Centrino Advanced-N 6205"),(0,a.kt)("li",{parentName:"ul"},"Intel Centrino Advanced-N 6235"),(0,a.kt)("li",{parentName:"ul"},"Intel Centrino Ultimate-N 6300"),(0,a.kt)("li",{parentName:"ul"},"Intel Centrino Wireless-N 2230"),(0,a.kt)("li",{parentName:"ul"},"Intel PRO/Wireless 3945ABG"),(0,a.kt)("li",{parentName:"ul"},"Intel PRO/Wireless 4965 AG or AGN"),(0,a.kt)("li",{parentName:"ul"},"Intel Ultimate N WiFi Link 5300"),(0,a.kt)("li",{parentName:"ul"},"Intel WiFi Link 5100"),(0,a.kt)("li",{parentName:"ul"},"Intel Wireless 8265 / 8275")),(0,a.kt)("h2",{id:"ralink"},"Ralink"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Ralink RT5390"),(0,a.kt)("li",{parentName:"ul"},"Ralink RT3070")),(0,a.kt)("h2",{id:"realtek"},"Realtek"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Realtek RTL8101E/RTL8102E"),(0,a.kt)("li",{parentName:"ul"},"Realtek RTL8111/8168B"),(0,a.kt)("li",{parentName:"ul"},"Realtek RTL8169"),(0,a.kt)("li",{parentName:"ul"},"Realtek RTL8179"),(0,a.kt)("li",{parentName:"ul"},"Realtek RTL8187SE"),(0,a.kt)("li",{parentName:"ul"},"Realtek RTL8188CE"),(0,a.kt)("li",{parentName:"ul"},"Realtek RTL8188CUS"),(0,a.kt)("li",{parentName:"ul"},"Realtek RTL8191SEvB"),(0,a.kt)("li",{parentName:"ul"},"Realtek RTL8192ce"),(0,a.kt)("li",{parentName:"ul"},"Realtek RTL8723BE"),(0,a.kt)("li",{parentName:"ul"},"Realtek RTL8723DE"),(0,a.kt)("li",{parentName:"ul"},"Realtek RTL8821CD")))}m.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[2358],{3905:(e,t,r)=>{r.d(t,{Zo:()=>s,kt:()=>d});var l=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function n(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);t&&(l=l.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,l)}return r}function i(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(l=0;l=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var u=l.createContext({}),p=function(e){var t=l.useContext(u),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},s=function(e){var t=p(e.components);return l.createElement(u.Provider,{value:t},e.children)},c="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return l.createElement(l.Fragment,{},t)}},k=l.forwardRef((function(e,t){var r=e.components,a=e.mdxType,n=e.originalType,u=e.parentName,s=o(e,["components","mdxType","originalType","parentName"]),c=p(r),k=a,d=c["".concat(u,".").concat(k)]||c[k]||m[k]||n;return r?l.createElement(d,i(i({ref:t},s),{},{components:r})):l.createElement(d,i({ref:t},s))}));function d(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var n=r.length,i=new Array(n);i[0]=k;var o={};for(var u in t)hasOwnProperty.call(t,u)&&(o[u]=t[u]);o.originalType=e,o[c]="string"==typeof e?e:a,i[1]=o;for(var p=2;p{r.r(t),r.d(t,{assets:()=>u,contentTitle:()=>i,default:()=>m,frontMatter:()=>n,metadata:()=>o,toc:()=>p});var l=r(7462),a=(r(7294),r(3905));const n={title:"WiFi",summary:null},i="WiFi",o={unversionedId:"user/hardware/compatibility/wifi",id:"user/hardware/compatibility/wifi",title:"WiFi",description:"The following wireless chipsets have been tested and/or suggested to function correctly by our users.",source:"@site/docs/user/hardware/compatibility/wifi.md",sourceDirName:"user/hardware/compatibility",slug:"/user/hardware/compatibility/wifi",permalink:"/docs/user/hardware/compatibility/wifi",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/hardware/compatibility/wifi.md",tags:[],version:"current",lastUpdatedAt:1695222528,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"WiFi",summary:null},sidebar:"userSidebar",previous:{title:"Laptops",permalink:"/docs/user/hardware/compatibility/laptops"},next:{title:"Mobile",permalink:"/docs/category/mobile"}},u={},p=[{value:"Atheros",id:"atheros",level:2},{value:"Broadcom",id:"broadcom",level:2},{value:"Netgear",id:"netgear",level:2},{value:"Intel",id:"intel",level:2},{value:"Ralink",id:"ralink",level:2},{value:"Realtek",id:"realtek",level:2}],s={toc:p},c="wrapper";function m(e){let{components:t,...r}=e;return(0,a.kt)(c,(0,l.Z)({},s,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"wifi"},"WiFi"),(0,a.kt)("p",null,"The following wireless chipsets have been tested and/or suggested to function correctly by our users."),(0,a.kt)("p",null,"This list should not suggest that ",(0,a.kt)("em",{parentName:"p"},"only"),"- such devices listed below are compatible with Solus, as there may be devices not listed below that are in fact compatible."),(0,a.kt)("h2",{id:"atheros"},"Atheros"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Atheros AR5B97"),(0,a.kt)("li",{parentName:"ul"},"Atheros AR242x"),(0,a.kt)("li",{parentName:"ul"},"Atheros AR542x"),(0,a.kt)("li",{parentName:"ul"},"Atheros AR928X"),(0,a.kt)("li",{parentName:"ul"},"Atheros AR8161"),(0,a.kt)("li",{parentName:"ul"},"Atheros AR9285"),(0,a.kt)("li",{parentName:"ul"},"Atheros AR9287"),(0,a.kt)("li",{parentName:"ul"},"Atheros AR9462"),(0,a.kt)("li",{parentName:"ul"},"Atheros AR9485"),(0,a.kt)("li",{parentName:"ul"},"Atheros AR9485WB-EG"),(0,a.kt)("li",{parentName:"ul"},"Atheros QCA9565 / AR9565")),(0,a.kt)("h2",{id:"broadcom"},"Broadcom"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Broadcom BCM4312"),(0,a.kt)("li",{parentName:"ul"},"Broadcom BCM4313"),(0,a.kt)("li",{parentName:"ul"},"Broadcom BCM4322"),(0,a.kt)("li",{parentName:"ul"},"Broadcom BCM4324"),(0,a.kt)("li",{parentName:"ul"},"Broadcom BCM4331"),(0,a.kt)("li",{parentName:"ul"},"Broadcom BCM4365"),(0,a.kt)("li",{parentName:"ul"},"Broadcom BCM57785")),(0,a.kt)("h2",{id:"netgear"},"Netgear"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Netgear WPN111")),(0,a.kt)("h2",{id:"intel"},"Intel"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Intel AC3160"),(0,a.kt)("li",{parentName:"ul"},"Intel AC7265"),(0,a.kt)("li",{parentName:"ul"},"Intel Centrino Advanced-N 6200"),(0,a.kt)("li",{parentName:"ul"},"Intel Centrino Advanced-N 6205"),(0,a.kt)("li",{parentName:"ul"},"Intel Centrino Advanced-N 6235"),(0,a.kt)("li",{parentName:"ul"},"Intel Centrino Ultimate-N 6300"),(0,a.kt)("li",{parentName:"ul"},"Intel Centrino Wireless-N 2230"),(0,a.kt)("li",{parentName:"ul"},"Intel PRO/Wireless 3945ABG"),(0,a.kt)("li",{parentName:"ul"},"Intel PRO/Wireless 4965 AG or AGN"),(0,a.kt)("li",{parentName:"ul"},"Intel Ultimate N WiFi Link 5300"),(0,a.kt)("li",{parentName:"ul"},"Intel WiFi Link 5100"),(0,a.kt)("li",{parentName:"ul"},"Intel Wireless 8265 / 8275")),(0,a.kt)("h2",{id:"ralink"},"Ralink"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Ralink RT5390"),(0,a.kt)("li",{parentName:"ul"},"Ralink RT3070")),(0,a.kt)("h2",{id:"realtek"},"Realtek"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"Realtek RTL8101E/RTL8102E"),(0,a.kt)("li",{parentName:"ul"},"Realtek RTL8111/8168B"),(0,a.kt)("li",{parentName:"ul"},"Realtek RTL8169"),(0,a.kt)("li",{parentName:"ul"},"Realtek RTL8179"),(0,a.kt)("li",{parentName:"ul"},"Realtek RTL8187SE"),(0,a.kt)("li",{parentName:"ul"},"Realtek RTL8188CE"),(0,a.kt)("li",{parentName:"ul"},"Realtek RTL8188CUS"),(0,a.kt)("li",{parentName:"ul"},"Realtek RTL8191SEvB"),(0,a.kt)("li",{parentName:"ul"},"Realtek RTL8192ce"),(0,a.kt)("li",{parentName:"ul"},"Realtek RTL8723BE"),(0,a.kt)("li",{parentName:"ul"},"Realtek RTL8723DE"),(0,a.kt)("li",{parentName:"ul"},"Realtek RTL8821CD")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/96af6484.562a2145.js b/assets/js/96af6484.3ccdd597.js similarity index 99% rename from assets/js/96af6484.562a2145.js rename to assets/js/96af6484.3ccdd597.js index c806a4d2d..e2d424bf8 100644 --- a/assets/js/96af6484.562a2145.js +++ b/assets/js/96af6484.3ccdd597.js @@ -1 +1 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[6225],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>f});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function o(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var l=n.createContext({}),c=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},p=function(e){var t=c(e.components);return n.createElement(l.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},h=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,i=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=c(r),h=a,f=u["".concat(l,".").concat(h)]||u[h]||d[h]||i;return r?n.createElement(f,o(o({ref:t},p),{},{components:r})):n.createElement(f,o({ref:t},p))}));function f(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=r.length,o=new Array(i);o[0]=h;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[u]="string"==typeof e?e:a,o[1]=s;for(var c=2;c{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>d,frontMatter:()=>i,metadata:()=>s,toc:()=>c});var n=r(7462),a=(r(7294),r(3905));const i={title:"Mice and Touchpads",summary:"Guide to using and configuring input devices on Solus"},o="Mice and Touchpads",s={unversionedId:"user/hardware/peripherals/mice-and-touchpads",id:"user/hardware/peripherals/mice-and-touchpads",title:"Mice and Touchpads",description:"Asus, Logitech, Roccat, SteelSeries",source:"@site/docs/user/hardware/peripherals/mice-and-touchpads.md",sourceDirName:"user/hardware/peripherals",slug:"/user/hardware/peripherals/mice-and-touchpads",permalink:"/docs/user/hardware/peripherals/mice-and-touchpads",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/hardware/peripherals/mice-and-touchpads.md",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Mice and Touchpads",summary:"Guide to using and configuring input devices on Solus"},sidebar:"userSidebar",previous:{title:"Peripherals",permalink:"/docs/category/peripherals"},next:{title:"MIDI Keyboards",permalink:"/docs/user/hardware/peripherals/midi-keyboard"}},l={},c=[{value:"Asus, Logitech, Roccat, SteelSeries",id:"asus-logitech-roccat-steelseries",level:2},{value:"Razer",id:"razer",level:2},{value:"Synaptics",id:"synaptics",level:2},{value:"Setup",id:"setup",level:3},{value:"Revert Configuration",id:"revert-configuration",level:3}],p={toc:c},u="wrapper";function d(e){let{components:t,...r}=e;return(0,a.kt)(u,(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"mice-and-touchpads"},"Mice and Touchpads"),(0,a.kt)("h2",{id:"asus-logitech-roccat-steelseries"},"Asus, Logitech, Roccat, SteelSeries"),(0,a.kt)("p",null,"TODO: Quick tutorial on installing ",(0,a.kt)("inlineCode",{parentName:"p"},"piper")," with a screenshot. And point them at the official documentation."),(0,a.kt)("h2",{id:"razer"},"Razer"),(0,a.kt)("p",null,"TODO: Quick tutorial on installing ",(0,a.kt)("inlineCode",{parentName:"p"},"polychromatic")," with a screenshot. And point them at the official documentation."),(0,a.kt)("h2",{id:"synaptics"},"Synaptics"),(0,a.kt)("p",null,"These instructions describe how to use the the synaptics driver instead of the default libinput driver to manage your touchpad. You might try this if:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"libinput doesn't allow for two-finger scrolling"),(0,a.kt)("li",{parentName:"ul"},"libinput doesn't supports edge scrolling or vice versa"),(0,a.kt)("li",{parentName:"ul"},"You want to take advantage of the extended configurability of the synaptics driver")),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"NOTE:")," The synaptics driver will only be used for your touchpad and libinput will be used for all other input devices."),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"NOTE:")," That the synaptics driver is in maintenance mode and libinput is the preferred driver and also sees active development."),(0,a.kt)("h3",{id:"setup"},"Setup"),(0,a.kt)("p",null,"To get started open up a terminal and install the synaptics driver."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg it xorg-driver-input-synaptics\n")),(0,a.kt)("p",null,"Then, copy the default synaptics config file to the ",(0,a.kt)("inlineCode",{parentName:"p"},"/etc/")," directory."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo cp /usr/share/X11/xorg.conf.d/50-synaptics.conf /etc/X11/xorg.conf.d/90-synaptics.conf\n")),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"NOTE:")," The /etc/ directory has a higher priority over the default config location and will ensure the synaptics driver gets loaded first, additionally by copying to /etc/ first it will avoid a three-way merge issue if you wish the edit the config file directly."),(0,a.kt)("p",null,"Reboot your machine then verify the synaptics driver is in use:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"cat /var/log/Xorg.0.log | grep \"Using input driver 'synaptics' for\"\n")),(0,a.kt)("p",null,"If it returns a result, then success! The synaptics driver is in use instead of libinput for your Touchpad."),(0,a.kt)("h3",{id:"revert-configuration"},"Revert Configuration"),(0,a.kt)("p",null,"If you wish to switch back to using libinput:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},"sudo rm /etc/X11/xorg.conf.d/90-synaptics.conf\nsudo eopkg rm xorg-driver-input-synaptics\n")))}d.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[6225],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>f});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function o(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var l=n.createContext({}),c=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},p=function(e){var t=c(e.components);return n.createElement(l.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},h=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,i=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=c(r),h=a,f=u["".concat(l,".").concat(h)]||u[h]||d[h]||i;return r?n.createElement(f,o(o({ref:t},p),{},{components:r})):n.createElement(f,o({ref:t},p))}));function f(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=r.length,o=new Array(i);o[0]=h;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[u]="string"==typeof e?e:a,o[1]=s;for(var c=2;c{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>d,frontMatter:()=>i,metadata:()=>s,toc:()=>c});var n=r(7462),a=(r(7294),r(3905));const i={title:"Mice and Touchpads",summary:"Guide to using and configuring input devices on Solus"},o="Mice and Touchpads",s={unversionedId:"user/hardware/peripherals/mice-and-touchpads",id:"user/hardware/peripherals/mice-and-touchpads",title:"Mice and Touchpads",description:"Asus, Logitech, Roccat, SteelSeries",source:"@site/docs/user/hardware/peripherals/mice-and-touchpads.md",sourceDirName:"user/hardware/peripherals",slug:"/user/hardware/peripherals/mice-and-touchpads",permalink:"/docs/user/hardware/peripherals/mice-and-touchpads",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/hardware/peripherals/mice-and-touchpads.md",tags:[],version:"current",lastUpdatedAt:1695222528,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Mice and Touchpads",summary:"Guide to using and configuring input devices on Solus"},sidebar:"userSidebar",previous:{title:"Peripherals",permalink:"/docs/category/peripherals"},next:{title:"MIDI Keyboards",permalink:"/docs/user/hardware/peripherals/midi-keyboard"}},l={},c=[{value:"Asus, Logitech, Roccat, SteelSeries",id:"asus-logitech-roccat-steelseries",level:2},{value:"Razer",id:"razer",level:2},{value:"Synaptics",id:"synaptics",level:2},{value:"Setup",id:"setup",level:3},{value:"Revert Configuration",id:"revert-configuration",level:3}],p={toc:c},u="wrapper";function d(e){let{components:t,...r}=e;return(0,a.kt)(u,(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"mice-and-touchpads"},"Mice and Touchpads"),(0,a.kt)("h2",{id:"asus-logitech-roccat-steelseries"},"Asus, Logitech, Roccat, SteelSeries"),(0,a.kt)("p",null,"TODO: Quick tutorial on installing ",(0,a.kt)("inlineCode",{parentName:"p"},"piper")," with a screenshot. And point them at the official documentation."),(0,a.kt)("h2",{id:"razer"},"Razer"),(0,a.kt)("p",null,"TODO: Quick tutorial on installing ",(0,a.kt)("inlineCode",{parentName:"p"},"polychromatic")," with a screenshot. And point them at the official documentation."),(0,a.kt)("h2",{id:"synaptics"},"Synaptics"),(0,a.kt)("p",null,"These instructions describe how to use the the synaptics driver instead of the default libinput driver to manage your touchpad. You might try this if:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"libinput doesn't allow for two-finger scrolling"),(0,a.kt)("li",{parentName:"ul"},"libinput doesn't supports edge scrolling or vice versa"),(0,a.kt)("li",{parentName:"ul"},"You want to take advantage of the extended configurability of the synaptics driver")),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"NOTE:")," The synaptics driver will only be used for your touchpad and libinput will be used for all other input devices."),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"NOTE:")," That the synaptics driver is in maintenance mode and libinput is the preferred driver and also sees active development."),(0,a.kt)("h3",{id:"setup"},"Setup"),(0,a.kt)("p",null,"To get started open up a terminal and install the synaptics driver."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg it xorg-driver-input-synaptics\n")),(0,a.kt)("p",null,"Then, copy the default synaptics config file to the ",(0,a.kt)("inlineCode",{parentName:"p"},"/etc/")," directory."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo cp /usr/share/X11/xorg.conf.d/50-synaptics.conf /etc/X11/xorg.conf.d/90-synaptics.conf\n")),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"NOTE:")," The /etc/ directory has a higher priority over the default config location and will ensure the synaptics driver gets loaded first, additionally by copying to /etc/ first it will avoid a three-way merge issue if you wish the edit the config file directly."),(0,a.kt)("p",null,"Reboot your machine then verify the synaptics driver is in use:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"cat /var/log/Xorg.0.log | grep \"Using input driver 'synaptics' for\"\n")),(0,a.kt)("p",null,"If it returns a result, then success! The synaptics driver is in use instead of libinput for your Touchpad."),(0,a.kt)("h3",{id:"revert-configuration"},"Revert Configuration"),(0,a.kt)("p",null,"If you wish to switch back to using libinput:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},"sudo rm /etc/X11/xorg.conf.d/90-synaptics.conf\nsudo eopkg rm xorg-driver-input-synaptics\n")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/97c623e4.76315bc7.js b/assets/js/97c623e4.22441dd2.js similarity index 98% rename from assets/js/97c623e4.76315bc7.js rename to assets/js/97c623e4.22441dd2.js index 4b7f017d3..1304f2df5 100644 --- a/assets/js/97c623e4.76315bc7.js +++ b/assets/js/97c623e4.22441dd2.js @@ -1 +1 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[6427],{3905:(e,t,a)=>{a.d(t,{Zo:()=>l,kt:()=>k});var r=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function p(e){for(var t=1;t=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var i=r.createContext({}),c=function(e){var t=r.useContext(i),a=t;return e&&(a="function"==typeof e?e(t):p(p({},t),e)),a},l=function(e){var t=c(e.components);return r.createElement(i.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},g=r.forwardRef((function(e,t){var a=e.components,n=e.mdxType,o=e.originalType,i=e.parentName,l=s(e,["components","mdxType","originalType","parentName"]),u=c(a),g=n,k=u["".concat(i,".").concat(g)]||u[g]||d[g]||o;return a?r.createElement(k,p(p({ref:t},l),{},{components:a})):r.createElement(k,p({ref:t},l))}));function k(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var o=a.length,p=new Array(o);p[0]=g;var s={};for(var i in t)hasOwnProperty.call(t,i)&&(s[i]=t[i]);s.originalType=e,s[u]="string"==typeof e?e:n,p[1]=s;for(var c=2;c{a.r(t),a.d(t,{assets:()=>i,contentTitle:()=>p,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>c});var r=a(7462),n=(a(7294),a(3905));const o={title:"Requesting a Package Update",summary:"Boohoo, your favorite package is outdated!"},p="Requesting A Package Update",s={unversionedId:"packaging/procedures/request-a-package-update",id:"packaging/procedures/request-a-package-update",title:"Requesting a Package Update",description:"Packages updates are typically provided by the community or dedicated package maintainers. If we are not shipping the latest stable release of a package, however, you can let us know.",source:"@site/docs/packaging/procedures/request-a-package-update.md",sourceDirName:"packaging/procedures",slug:"/packaging/procedures/request-a-package-update",permalink:"/docs/packaging/procedures/request-a-package-update",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/procedures/request-a-package-update.md",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Requesting a Package Update",summary:"Boohoo, your favorite package is outdated!"},sidebar:"packagingSidebar",previous:{title:"Release Processes",permalink:"/docs/packaging/procedures/release-processes"},next:{title:"Requesting a Package",permalink:"/docs/packaging/procedures/request-a-package"}},i={},c=[],l={toc:c},u="wrapper";function d(e){let{components:t,...a}=e;return(0,n.kt)(u,(0,r.Z)({},l,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"requesting-a-package-update"},"Requesting A Package Update"),(0,n.kt)("p",null,"Packages updates are typically provided by the community or dedicated package maintainers. If we are not shipping the latest stable release of a package, however, you can let us know."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"First, please ",(0,n.kt)("a",{parentName:"strong",href:"https://github.com/getsolus/packages/labels/Package%20Request"},"look to see if an update request has already been filed")," for the software or library you require"),"."),(0,n.kt)("p",null,"If there isn't an existing request, you can use the link below to request a package update. Note that updates solely for a new version number, platform-specific updates (such as to macOS or Windows) which aren't relevant, or solely translation updates, are generally not accepted or not prioritized."),(0,n.kt)("p",null,"You will be asked in the form to provide the following information:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Title: ",(0,n.kt)("inlineCode",{parentName:"li"},"Update $packagename to $version")," (Example: ",(0,n.kt)("inlineCode",{parentName:"li"},"Update nano to 2.9.7"),")"),(0,n.kt)("li",{parentName:"ul"},"Description: Explanation as to the value-add of updating this package."),(0,n.kt)("li",{parentName:"ul"},"Link to source tarball/zip file. Note: master.zip files ",(0,n.kt)("strong",{parentName:"li"},"are not permitted"),'. We require versioned tarballs, for example: "1.2.3.tar.gz".')),(0,n.kt)("p",null,"Please put this into a new ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/getsolus/packages/issues/new?assignees=&labels=Package+Request&projects=&template=request-package-update.yaml"},"issue"),"."))}d.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[6427],{3905:(e,t,a)=>{a.d(t,{Zo:()=>l,kt:()=>k});var r=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function p(e){for(var t=1;t=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var i=r.createContext({}),c=function(e){var t=r.useContext(i),a=t;return e&&(a="function"==typeof e?e(t):p(p({},t),e)),a},l=function(e){var t=c(e.components);return r.createElement(i.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},g=r.forwardRef((function(e,t){var a=e.components,n=e.mdxType,o=e.originalType,i=e.parentName,l=s(e,["components","mdxType","originalType","parentName"]),u=c(a),g=n,k=u["".concat(i,".").concat(g)]||u[g]||d[g]||o;return a?r.createElement(k,p(p({ref:t},l),{},{components:a})):r.createElement(k,p({ref:t},l))}));function k(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var o=a.length,p=new Array(o);p[0]=g;var s={};for(var i in t)hasOwnProperty.call(t,i)&&(s[i]=t[i]);s.originalType=e,s[u]="string"==typeof e?e:n,p[1]=s;for(var c=2;c{a.r(t),a.d(t,{assets:()=>i,contentTitle:()=>p,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>c});var r=a(7462),n=(a(7294),a(3905));const o={title:"Requesting a Package Update",summary:"Boohoo, your favorite package is outdated!"},p="Requesting A Package Update",s={unversionedId:"packaging/procedures/request-a-package-update",id:"packaging/procedures/request-a-package-update",title:"Requesting a Package Update",description:"Packages updates are typically provided by the community or dedicated package maintainers. If we are not shipping the latest stable release of a package, however, you can let us know.",source:"@site/docs/packaging/procedures/request-a-package-update.md",sourceDirName:"packaging/procedures",slug:"/packaging/procedures/request-a-package-update",permalink:"/docs/packaging/procedures/request-a-package-update",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/procedures/request-a-package-update.md",tags:[],version:"current",lastUpdatedAt:1695222528,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Requesting a Package Update",summary:"Boohoo, your favorite package is outdated!"},sidebar:"packagingSidebar",previous:{title:"Release Processes",permalink:"/docs/packaging/procedures/release-processes"},next:{title:"Requesting a Package",permalink:"/docs/packaging/procedures/request-a-package"}},i={},c=[],l={toc:c},u="wrapper";function d(e){let{components:t,...a}=e;return(0,n.kt)(u,(0,r.Z)({},l,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"requesting-a-package-update"},"Requesting A Package Update"),(0,n.kt)("p",null,"Packages updates are typically provided by the community or dedicated package maintainers. If we are not shipping the latest stable release of a package, however, you can let us know."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"First, please ",(0,n.kt)("a",{parentName:"strong",href:"https://github.com/getsolus/packages/labels/Package%20Request"},"look to see if an update request has already been filed")," for the software or library you require"),"."),(0,n.kt)("p",null,"If there isn't an existing request, you can use the link below to request a package update. Note that updates solely for a new version number, platform-specific updates (such as to macOS or Windows) which aren't relevant, or solely translation updates, are generally not accepted or not prioritized."),(0,n.kt)("p",null,"You will be asked in the form to provide the following information:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Title: ",(0,n.kt)("inlineCode",{parentName:"li"},"Update $packagename to $version")," (Example: ",(0,n.kt)("inlineCode",{parentName:"li"},"Update nano to 2.9.7"),")"),(0,n.kt)("li",{parentName:"ul"},"Description: Explanation as to the value-add of updating this package."),(0,n.kt)("li",{parentName:"ul"},"Link to source tarball/zip file. Note: master.zip files ",(0,n.kt)("strong",{parentName:"li"},"are not permitted"),'. We require versioned tarballs, for example: "1.2.3.tar.gz".')),(0,n.kt)("p",null,"Please put this into a new ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/getsolus/packages/issues/new?assignees=&labels=Package+Request&projects=&template=request-package-update.yaml"},"issue"),"."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/99bedda9.677079a2.js b/assets/js/99bedda9.7ed71c6d.js similarity index 99% rename from assets/js/99bedda9.677079a2.js rename to assets/js/99bedda9.7ed71c6d.js index c305b7d53..3cbc087d0 100644 --- a/assets/js/99bedda9.677079a2.js +++ b/assets/js/99bedda9.7ed71c6d.js @@ -1 +1 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[8639],{3905:(e,r,t)=>{t.d(r,{Zo:()=>p,kt:()=>h});var a=t(7294);function n(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function i(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);r&&(a=a.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,a)}return t}function l(e){for(var r=1;r=0||(n[t]=e[t]);return n}(e,r);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(n[t]=e[t])}return n}var d=a.createContext({}),s=function(e){var r=a.useContext(d),t=r;return e&&(t="function"==typeof e?e(r):l(l({},r),e)),t},p=function(e){var r=s(e.components);return a.createElement(d.Provider,{value:r},e.children)},u="mdxType",c={inlineCode:"code",wrapper:function(e){var r=e.children;return a.createElement(a.Fragment,{},r)}},m=a.forwardRef((function(e,r){var t=e.components,n=e.mdxType,i=e.originalType,d=e.parentName,p=o(e,["components","mdxType","originalType","parentName"]),u=s(t),m=n,h=u["".concat(d,".").concat(m)]||u[m]||c[m]||i;return t?a.createElement(h,l(l({ref:r},p),{},{components:t})):a.createElement(h,l({ref:r},p))}));function h(e,r){var t=arguments,n=r&&r.mdxType;if("string"==typeof e||n){var i=t.length,l=new Array(i);l[0]=m;var o={};for(var d in r)hasOwnProperty.call(r,d)&&(o[d]=r[d]);o.originalType=e,o[u]="string"==typeof e?e:n,l[1]=o;for(var s=2;s{t.r(r),t.d(r,{assets:()=>d,contentTitle:()=>l,default:()=>c,frontMatter:()=>i,metadata:()=>o,toc:()=>s});var a=t(7462),n=(t(7294),t(3905));const i={title:"Hardware",summary:"Guide to using additional hardware on Solus"},l="Hardware",o={unversionedId:"user/hardware/index",id:"user/hardware/index",title:"Hardware",description:"Preinstalled Drivers",source:"@site/docs/user/hardware/index.md",sourceDirName:"user/hardware",slug:"/user/hardware/",permalink:"/docs/user/hardware/",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/hardware/index.md",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Hardware",summary:"Guide to using additional hardware on Solus"},sidebar:"userSidebar",previous:{title:"Tips and Tricks",permalink:"/docs/user/editions/plasma/tips-and-tricks"},next:{title:"Compatibility",permalink:"/docs/category/compatibility"}},d={},s=[{value:"Preinstalled Drivers",id:"preinstalled-drivers",level:2},{value:"GPUs",id:"gpus",level:3},{value:"Proprietary Drivers",id:"proprietary-drivers",level:2},{value:"Supported Drivers",id:"supported-drivers",level:3}],p={toc:s},u="wrapper";function c(e){let{components:r,...i}=e;return(0,n.kt)(u,(0,a.Z)({},p,i,{components:r,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"hardware"},"Hardware"),(0,n.kt)("h2",{id:"preinstalled-drivers"},"Preinstalled Drivers"),(0,n.kt)("p",null,"The vast majority of hardware on Linux is supported by driver modules included with the Linux Kernel. This includes things like:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"CPUs (AMD, Intel)"),(0,n.kt)("li",{parentName:"ul"},"Networking"),(0,n.kt)("li",{parentName:"ul"},"PCI and PCI Express"),(0,n.kt)("li",{parentName:"ul"},"Storage"),(0,n.kt)("li",{parentName:"ul"},"USB")),(0,n.kt)("p",null,"The purpose of this documentation is to help you find drivers for hardware that is not directly supported or requires additional configuration to be used on Solus."),(0,n.kt)("h3",{id:"gpus"},"GPUs"),(0,n.kt)("p",null,"The situations with GPU drivers on Linux is a little complicated. Each driver is actually broken up into multiple pieces:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Direct Rendering Manager (DRM)"),(0,n.kt)("br",{parentName:"li"}),"This is the part of the driver provided by the Linux Kernel and provides just enough functionality to allow other drivers to access the hardware and render to a connected display.",(0,n.kt)("br",{parentName:"li"}),"Linux provides support for AMD, Intel, and Nvidia GPUs in this basic capacity."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"OpenGL Driver"),(0,n.kt)("br",{parentName:"li"}),"This part of the driver is needed for OpenGL applications. AMD and Intel are fully supported on Linux through Mesa, and do not need further drivers."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Vulkan Driver"),(0,n.kt)("br",{parentName:"li"}),"This part of the driver is needed for Vulkan applications. AMD and Intel are fully supported on Linux through Mesa, and do not need further drivers."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Xorg Driver"),(0,n.kt)("br",{parentName:"li"}),"In order to expose certain features to the Xorg Server, AMD and Intel have additional drivers which may be needed for things like variable refresh rate or multiple display support.")),(0,n.kt)("p",null,"Unfortunately for Nvidia users, the situation gets a little complicated. Linux has two sets of drivers for Nvidia GPUs:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Nouveau"),(0,n.kt)("br",{parentName:"li"}),"This is the open-source driver for Nvidia GPUs. It consists of a DRM Driver provided by the Linux Kernel, OpenGL Drivers (nvc0, nv50) from Mesa, and an Xorg Driver (xorg-driver-video-nouveau).",(0,n.kt)("br",{parentName:"li"}),"Device support for these drivers has historically lagged behind the Nvidia proprietary drivers and likely will not support newer hardware and does not include Vulkan support.",(0,n.kt)("br",{parentName:"li"}),"Performance of this driver also typically lags behind the proprietary drivers."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Nvidia Proprietary Drivers"),"\nThis is the closed-source driver provided directly from Nvidia. It consists of a DRM driver module for the kernel, OpenGL and Vulkan drivers for rendering, and additional drivers for extended features of the hardware.",(0,n.kt)("br",{parentName:"li"}),"Device support for these drivers is very good for newer hardware, but older devices will eventually become unsupported and require the Nouveau drivers instead.",(0,n.kt)("br",{parentName:"li"}),"Performance of this driver is typically the best available and is therefore highly desirable to gamers and content creators.")),(0,n.kt)("h2",{id:"proprietary-drivers"},"Proprietary Drivers"),(0,n.kt)("p",null,"Installing proprietary drivers may improve performance or certain features, however they are usually not necessary for normal daily usage. Solus provides a utility for installing drivers for detected hardware."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"DoFlicky Screenshot",src:t(2202).Z,width:"497",height:"321"})),(0,n.kt)("p",null,"If there are proprietary drivers that can be installed, they will show up in the box below the description. You can click the item you wish to install and click Install. If you are installing NVIDIA drivers, you may find it to be desirable to install the 32-bit driver as well, in the event you wish to use Steam or WINE."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Note:")," A reboot will be required to use the newly installed driver."),(0,n.kt)("h3",{id:"supported-drivers"},"Supported Drivers"),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:null},"Vendor"),(0,n.kt)("th",{parentName:"tr",align:null},"Drivers"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Asus"),(0,n.kt)("td",{parentName:"tr",align:null},"piper")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Broadcom"),(0,n.kt)("td",{parentName:"tr",align:null},"broadcom-sta")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Logitech"),(0,n.kt)("td",{parentName:"tr",align:null},"piper")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Nvidia"),(0,n.kt)("td",{parentName:"tr",align:null},"470, Main Series")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Razer"),(0,n.kt)("td",{parentName:"tr",align:null},"openrazer")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Roccat"),(0,n.kt)("td",{parentName:"tr",align:null},"piper")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"SteelSeries"),(0,n.kt)("td",{parentName:"tr",align:null},"piper")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"VMWare"),(0,n.kt)("td",{parentName:"tr",align:null},"open-vm-tools")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"XBox"),(0,n.kt)("td",{parentName:"tr",align:null},"xone")))))}c.isMDXComponent=!0},2202:(e,r,t)=>{t.d(r,{Z:()=>a});const a=t.p+"assets/images/doflicky-574dff562b460c3839fb6d47c7fa2d25.jpg"}}]); \ No newline at end of file +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[8639],{3905:(e,r,t)=>{t.d(r,{Zo:()=>p,kt:()=>h});var a=t(7294);function n(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function i(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);r&&(a=a.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,a)}return t}function l(e){for(var r=1;r=0||(n[t]=e[t]);return n}(e,r);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(n[t]=e[t])}return n}var d=a.createContext({}),s=function(e){var r=a.useContext(d),t=r;return e&&(t="function"==typeof e?e(r):l(l({},r),e)),t},p=function(e){var r=s(e.components);return a.createElement(d.Provider,{value:r},e.children)},u="mdxType",c={inlineCode:"code",wrapper:function(e){var r=e.children;return a.createElement(a.Fragment,{},r)}},m=a.forwardRef((function(e,r){var t=e.components,n=e.mdxType,i=e.originalType,d=e.parentName,p=o(e,["components","mdxType","originalType","parentName"]),u=s(t),m=n,h=u["".concat(d,".").concat(m)]||u[m]||c[m]||i;return t?a.createElement(h,l(l({ref:r},p),{},{components:t})):a.createElement(h,l({ref:r},p))}));function h(e,r){var t=arguments,n=r&&r.mdxType;if("string"==typeof e||n){var i=t.length,l=new Array(i);l[0]=m;var o={};for(var d in r)hasOwnProperty.call(r,d)&&(o[d]=r[d]);o.originalType=e,o[u]="string"==typeof e?e:n,l[1]=o;for(var s=2;s{t.r(r),t.d(r,{assets:()=>d,contentTitle:()=>l,default:()=>c,frontMatter:()=>i,metadata:()=>o,toc:()=>s});var a=t(7462),n=(t(7294),t(3905));const i={title:"Hardware",summary:"Guide to using additional hardware on Solus"},l="Hardware",o={unversionedId:"user/hardware/index",id:"user/hardware/index",title:"Hardware",description:"Preinstalled Drivers",source:"@site/docs/user/hardware/index.md",sourceDirName:"user/hardware",slug:"/user/hardware/",permalink:"/docs/user/hardware/",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/hardware/index.md",tags:[],version:"current",lastUpdatedAt:1695222528,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Hardware",summary:"Guide to using additional hardware on Solus"},sidebar:"userSidebar",previous:{title:"Tips and Tricks",permalink:"/docs/user/editions/plasma/tips-and-tricks"},next:{title:"Compatibility",permalink:"/docs/category/compatibility"}},d={},s=[{value:"Preinstalled Drivers",id:"preinstalled-drivers",level:2},{value:"GPUs",id:"gpus",level:3},{value:"Proprietary Drivers",id:"proprietary-drivers",level:2},{value:"Supported Drivers",id:"supported-drivers",level:3}],p={toc:s},u="wrapper";function c(e){let{components:r,...i}=e;return(0,n.kt)(u,(0,a.Z)({},p,i,{components:r,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"hardware"},"Hardware"),(0,n.kt)("h2",{id:"preinstalled-drivers"},"Preinstalled Drivers"),(0,n.kt)("p",null,"The vast majority of hardware on Linux is supported by driver modules included with the Linux Kernel. This includes things like:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"CPUs (AMD, Intel)"),(0,n.kt)("li",{parentName:"ul"},"Networking"),(0,n.kt)("li",{parentName:"ul"},"PCI and PCI Express"),(0,n.kt)("li",{parentName:"ul"},"Storage"),(0,n.kt)("li",{parentName:"ul"},"USB")),(0,n.kt)("p",null,"The purpose of this documentation is to help you find drivers for hardware that is not directly supported or requires additional configuration to be used on Solus."),(0,n.kt)("h3",{id:"gpus"},"GPUs"),(0,n.kt)("p",null,"The situations with GPU drivers on Linux is a little complicated. Each driver is actually broken up into multiple pieces:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Direct Rendering Manager (DRM)"),(0,n.kt)("br",{parentName:"li"}),"This is the part of the driver provided by the Linux Kernel and provides just enough functionality to allow other drivers to access the hardware and render to a connected display.",(0,n.kt)("br",{parentName:"li"}),"Linux provides support for AMD, Intel, and Nvidia GPUs in this basic capacity."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"OpenGL Driver"),(0,n.kt)("br",{parentName:"li"}),"This part of the driver is needed for OpenGL applications. AMD and Intel are fully supported on Linux through Mesa, and do not need further drivers."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Vulkan Driver"),(0,n.kt)("br",{parentName:"li"}),"This part of the driver is needed for Vulkan applications. AMD and Intel are fully supported on Linux through Mesa, and do not need further drivers."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Xorg Driver"),(0,n.kt)("br",{parentName:"li"}),"In order to expose certain features to the Xorg Server, AMD and Intel have additional drivers which may be needed for things like variable refresh rate or multiple display support.")),(0,n.kt)("p",null,"Unfortunately for Nvidia users, the situation gets a little complicated. Linux has two sets of drivers for Nvidia GPUs:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Nouveau"),(0,n.kt)("br",{parentName:"li"}),"This is the open-source driver for Nvidia GPUs. It consists of a DRM Driver provided by the Linux Kernel, OpenGL Drivers (nvc0, nv50) from Mesa, and an Xorg Driver (xorg-driver-video-nouveau).",(0,n.kt)("br",{parentName:"li"}),"Device support for these drivers has historically lagged behind the Nvidia proprietary drivers and likely will not support newer hardware and does not include Vulkan support.",(0,n.kt)("br",{parentName:"li"}),"Performance of this driver also typically lags behind the proprietary drivers."),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("strong",{parentName:"li"},"Nvidia Proprietary Drivers"),"\nThis is the closed-source driver provided directly from Nvidia. It consists of a DRM driver module for the kernel, OpenGL and Vulkan drivers for rendering, and additional drivers for extended features of the hardware.",(0,n.kt)("br",{parentName:"li"}),"Device support for these drivers is very good for newer hardware, but older devices will eventually become unsupported and require the Nouveau drivers instead.",(0,n.kt)("br",{parentName:"li"}),"Performance of this driver is typically the best available and is therefore highly desirable to gamers and content creators.")),(0,n.kt)("h2",{id:"proprietary-drivers"},"Proprietary Drivers"),(0,n.kt)("p",null,"Installing proprietary drivers may improve performance or certain features, however they are usually not necessary for normal daily usage. Solus provides a utility for installing drivers for detected hardware."),(0,n.kt)("p",null,(0,n.kt)("img",{alt:"DoFlicky Screenshot",src:t(2202).Z,width:"497",height:"321"})),(0,n.kt)("p",null,"If there are proprietary drivers that can be installed, they will show up in the box below the description. You can click the item you wish to install and click Install. If you are installing NVIDIA drivers, you may find it to be desirable to install the 32-bit driver as well, in the event you wish to use Steam or WINE."),(0,n.kt)("p",null,(0,n.kt)("strong",{parentName:"p"},"Note:")," A reboot will be required to use the newly installed driver."),(0,n.kt)("h3",{id:"supported-drivers"},"Supported Drivers"),(0,n.kt)("table",null,(0,n.kt)("thead",{parentName:"table"},(0,n.kt)("tr",{parentName:"thead"},(0,n.kt)("th",{parentName:"tr",align:null},"Vendor"),(0,n.kt)("th",{parentName:"tr",align:null},"Drivers"))),(0,n.kt)("tbody",{parentName:"table"},(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Asus"),(0,n.kt)("td",{parentName:"tr",align:null},"piper")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Broadcom"),(0,n.kt)("td",{parentName:"tr",align:null},"broadcom-sta")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Logitech"),(0,n.kt)("td",{parentName:"tr",align:null},"piper")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Nvidia"),(0,n.kt)("td",{parentName:"tr",align:null},"470, Main Series")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Razer"),(0,n.kt)("td",{parentName:"tr",align:null},"openrazer")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"Roccat"),(0,n.kt)("td",{parentName:"tr",align:null},"piper")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"SteelSeries"),(0,n.kt)("td",{parentName:"tr",align:null},"piper")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"VMWare"),(0,n.kt)("td",{parentName:"tr",align:null},"open-vm-tools")),(0,n.kt)("tr",{parentName:"tbody"},(0,n.kt)("td",{parentName:"tr",align:null},"XBox"),(0,n.kt)("td",{parentName:"tr",align:null},"xone")))))}c.isMDXComponent=!0},2202:(e,r,t)=>{t.d(r,{Z:()=>a});const a=t.p+"assets/images/doflicky-574dff562b460c3839fb6d47c7fa2d25.jpg"}}]); \ No newline at end of file diff --git a/assets/js/a05bfad9.15135640.js b/assets/js/a05bfad9.00edc6aa.js similarity index 98% rename from assets/js/a05bfad9.15135640.js rename to assets/js/a05bfad9.00edc6aa.js index e13c71ec6..30bf531bc 100644 --- a/assets/js/a05bfad9.15135640.js +++ b/assets/js/a05bfad9.00edc6aa.js @@ -1 +1 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[885],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>g});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var s=n.createContext({}),p=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},u=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},d="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,i=e.originalType,s=e.parentName,u=o(e,["components","mdxType","originalType","parentName"]),d=p(r),m=a,g=d["".concat(s,".").concat(m)]||d[m]||c[m]||i;return r?n.createElement(g,l(l({ref:t},u),{},{components:r})):n.createElement(g,l({ref:t},u))}));function g(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=r.length,l=new Array(i);l[0]=m;var o={};for(var s in t)hasOwnProperty.call(t,s)&&(o[s]=t[s]);o.originalType=e,o[d]="string"==typeof e?e:a,l[1]=o;for(var p=2;p{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>c,frontMatter:()=>i,metadata:()=>o,toc:()=>p});var n=r(7462),a=(r(7294),r(3905));const i={title:"Tips and Tricks",summary:"Tips and Tricks for Budgie users"},l="Tips and Tricks",o={unversionedId:"user/editions/budgie/tips-and-tricks",id:"user/editions/budgie/tips-and-tricks",title:"Tips and Tricks",description:"Budgie Shortcuts",source:"@site/docs/user/editions/budgie/tips-and-tricks.md",sourceDirName:"user/editions/budgie",slug:"/user/editions/budgie/tips-and-tricks",permalink:"/docs/user/editions/budgie/tips-and-tricks",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/editions/budgie/tips-and-tricks.md",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Tips and Tricks",summary:"Tips and Tricks for Budgie users"},sidebar:"userSidebar",previous:{title:"Configuration",permalink:"/docs/user/editions/budgie/configuration"},next:{title:"GNOME",permalink:"/docs/user/editions/gnome/"}},s={},p=[{value:"Budgie Shortcuts",id:"budgie-shortcuts",level:2},{value:"Restoring Panel Defaults",id:"restoring-panel-defaults",level:2}],u={toc:p},d="wrapper";function c(e){let{components:t,...r}=e;return(0,a.kt)(d,(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"tips-and-tricks"},"Tips and Tricks"),(0,a.kt)("h2",{id:"budgie-shortcuts"},"Budgie Shortcuts"),(0,a.kt)("p",null,"Budgie provides multiple shortcuts to make navigating around Budgie faster and easier."),(0,a.kt)("table",null,(0,a.kt)("thead",{parentName:"table"},(0,a.kt)("tr",{parentName:"thead"},(0,a.kt)("th",{parentName:"tr",align:null},"Keyboard Shortcut"),(0,a.kt)("th",{parentName:"tr",align:null},"Action"))),(0,a.kt)("tbody",{parentName:"table"},(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Alt + F2"),(0,a.kt)("td",{parentName:"tr",align:null},"Open Budgie Run dialog")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Alt + F4"),(0,a.kt)("td",{parentName:"tr",align:null},"Kill the active window on the desktop")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Alt + Tab"),(0,a.kt)("td",{parentName:"tr",align:null},"Open application switcher overlay")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Shift + Alt + Tab"),(0,a.kt)("td",{parentName:"tr",align:null},"Open application switcher, switch to previous applications")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Super (",(0,a.kt)("em",{parentName:"td"},"also Super + S"),")"),(0,a.kt)("td",{parentName:"tr",align:null},"Open Budgie Menu")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Super + A"),(0,a.kt)("td",{parentName:"tr",align:null},"Open Applets section of Raven")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Super + L"),(0,a.kt)("td",{parentName:"tr",align:null},"Lock the screen")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Super + N"),(0,a.kt)("td",{parentName:"tr",align:null},"Open Notifications section of Raven")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Super + Space (",(0,a.kt)("em",{parentName:"td"},"also Alt + Shift"),")"),(0,a.kt)("td",{parentName:"tr",align:null},"Switch keyboard layouts")))),(0,a.kt)("h2",{id:"restoring-panel-defaults"},"Restoring Panel Defaults"),(0,a.kt)("p",null,"To restore Budgie's default panel settings, run the command below"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"budgie-panel --reset --replace &\n")),(0,a.kt)("p",null,"After this you can press CTRL + D to close the terminal without closing the Budgie Panel process."),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"TODO: There's got to be more that we can add here")))}c.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[885],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>g});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function l(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var s=n.createContext({}),p=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):l(l({},t),e)),r},u=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},d="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,i=e.originalType,s=e.parentName,u=o(e,["components","mdxType","originalType","parentName"]),d=p(r),m=a,g=d["".concat(s,".").concat(m)]||d[m]||c[m]||i;return r?n.createElement(g,l(l({ref:t},u),{},{components:r})):n.createElement(g,l({ref:t},u))}));function g(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=r.length,l=new Array(i);l[0]=m;var o={};for(var s in t)hasOwnProperty.call(t,s)&&(o[s]=t[s]);o.originalType=e,o[d]="string"==typeof e?e:a,l[1]=o;for(var p=2;p{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>c,frontMatter:()=>i,metadata:()=>o,toc:()=>p});var n=r(7462),a=(r(7294),r(3905));const i={title:"Tips and Tricks",summary:"Tips and Tricks for Budgie users"},l="Tips and Tricks",o={unversionedId:"user/editions/budgie/tips-and-tricks",id:"user/editions/budgie/tips-and-tricks",title:"Tips and Tricks",description:"Budgie Shortcuts",source:"@site/docs/user/editions/budgie/tips-and-tricks.md",sourceDirName:"user/editions/budgie",slug:"/user/editions/budgie/tips-and-tricks",permalink:"/docs/user/editions/budgie/tips-and-tricks",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/editions/budgie/tips-and-tricks.md",tags:[],version:"current",lastUpdatedAt:1695222528,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Tips and Tricks",summary:"Tips and Tricks for Budgie users"},sidebar:"userSidebar",previous:{title:"Configuration",permalink:"/docs/user/editions/budgie/configuration"},next:{title:"GNOME",permalink:"/docs/user/editions/gnome/"}},s={},p=[{value:"Budgie Shortcuts",id:"budgie-shortcuts",level:2},{value:"Restoring Panel Defaults",id:"restoring-panel-defaults",level:2}],u={toc:p},d="wrapper";function c(e){let{components:t,...r}=e;return(0,a.kt)(d,(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"tips-and-tricks"},"Tips and Tricks"),(0,a.kt)("h2",{id:"budgie-shortcuts"},"Budgie Shortcuts"),(0,a.kt)("p",null,"Budgie provides multiple shortcuts to make navigating around Budgie faster and easier."),(0,a.kt)("table",null,(0,a.kt)("thead",{parentName:"table"},(0,a.kt)("tr",{parentName:"thead"},(0,a.kt)("th",{parentName:"tr",align:null},"Keyboard Shortcut"),(0,a.kt)("th",{parentName:"tr",align:null},"Action"))),(0,a.kt)("tbody",{parentName:"table"},(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Alt + F2"),(0,a.kt)("td",{parentName:"tr",align:null},"Open Budgie Run dialog")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Alt + F4"),(0,a.kt)("td",{parentName:"tr",align:null},"Kill the active window on the desktop")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Alt + Tab"),(0,a.kt)("td",{parentName:"tr",align:null},"Open application switcher overlay")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Shift + Alt + Tab"),(0,a.kt)("td",{parentName:"tr",align:null},"Open application switcher, switch to previous applications")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Super (",(0,a.kt)("em",{parentName:"td"},"also Super + S"),")"),(0,a.kt)("td",{parentName:"tr",align:null},"Open Budgie Menu")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Super + A"),(0,a.kt)("td",{parentName:"tr",align:null},"Open Applets section of Raven")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Super + L"),(0,a.kt)("td",{parentName:"tr",align:null},"Lock the screen")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Super + N"),(0,a.kt)("td",{parentName:"tr",align:null},"Open Notifications section of Raven")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"Super + Space (",(0,a.kt)("em",{parentName:"td"},"also Alt + Shift"),")"),(0,a.kt)("td",{parentName:"tr",align:null},"Switch keyboard layouts")))),(0,a.kt)("h2",{id:"restoring-panel-defaults"},"Restoring Panel Defaults"),(0,a.kt)("p",null,"To restore Budgie's default panel settings, run the command below"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"budgie-panel --reset --replace &\n")),(0,a.kt)("p",null,"After this you can press CTRL + D to close the terminal without closing the Budgie Panel process."),(0,a.kt)("blockquote",null,(0,a.kt)("p",{parentName:"blockquote"},"TODO: There's got to be more that we can add here")))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/a398ef57.f60a77ac.js b/assets/js/a398ef57.50d529ba.js similarity index 98% rename from assets/js/a398ef57.f60a77ac.js rename to assets/js/a398ef57.50d529ba.js index 6830a865d..5922c65d3 100644 --- a/assets/js/a398ef57.f60a77ac.js +++ b/assets/js/a398ef57.50d529ba.js @@ -1 +1 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[2586],{3905:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>f});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var p=n.createContext({}),s=function(e){var t=n.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},c=function(e){var t=s(e.components);return n.createElement(p.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,p=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=s(r),m=a,f=u["".concat(p,".").concat(m)]||u[m]||d[m]||o;return r?n.createElement(f,i(i({ref:t},c),{},{components:r})):n.createElement(f,i({ref:t},c))}));function f(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,i=new Array(o);i[0]=m;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l[u]="string"==typeof e?e:a,i[1]=l;for(var s=2;s{r.r(t),r.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>s});var n=r(7462),a=(r(7294),r(3905));const o={title:"Apple",summary:"Quick guide to working with Apple devices on Solus"},i="Apple",l={unversionedId:"user/hardware/mobile/apple",id:"user/hardware/mobile/apple",title:"Apple",description:"Solus provides iOS support via libimobiledevice and libgpod.",source:"@site/docs/user/hardware/mobile/apple.md",sourceDirName:"user/hardware/mobile",slug:"/user/hardware/mobile/apple",permalink:"/docs/user/hardware/mobile/apple",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/hardware/mobile/apple.md",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Apple",summary:"Quick guide to working with Apple devices on Solus"},sidebar:"userSidebar",previous:{title:"Android",permalink:"/docs/user/hardware/mobile/android"},next:{title:"Peripherals",permalink:"/docs/category/peripherals"}},p={},s=[{value:"Installation",id:"installation",level:2},{value:"File Management",id:"file-management",level:2}],c={toc:s},u="wrapper";function d(e){let{components:t,...r}=e;return(0,a.kt)(u,(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"apple"},"Apple"),(0,a.kt)("p",null,"Solus provides iOS support via ",(0,a.kt)("a",{parentName:"p",href:"https://www.libimobiledevice.org/"},"libimobiledevice")," and ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/fadingred/libgpod/"},"libgpod"),"."),(0,a.kt)("p",null,"Please note that the below mentioned installation instructions do not guarantee functional iOS features such as content synchronization (music) or file copying."),(0,a.kt)("p",null,"This support can be exposed via your file manager (such as Nautilus) upon connecting your iOS device or music players such as Rhythmbox."),(0,a.kt)("h2",{id:"installation"},"Installation"),(0,a.kt)("p",null,"To ensure you have the required software for iOS support, install ",(0,a.kt)("inlineCode",{parentName:"p"},"libideviceactivation")," via the Software Center or terminal:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg install libideviceactivation\n")),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"NOTE:")," It is recommended that you reboot your system after this installation."),(0,a.kt)("h2",{id:"file-management"},"File Management"),(0,a.kt)("p",null,"TODO: Tutorial on file access and syncing"))}d.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[2586],{3905:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>f});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var p=n.createContext({}),s=function(e){var t=n.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},c=function(e){var t=s(e.components);return n.createElement(p.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,p=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=s(r),m=a,f=u["".concat(p,".").concat(m)]||u[m]||d[m]||o;return r?n.createElement(f,i(i({ref:t},c),{},{components:r})):n.createElement(f,i({ref:t},c))}));function f(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,i=new Array(o);i[0]=m;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l[u]="string"==typeof e?e:a,i[1]=l;for(var s=2;s{r.r(t),r.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>d,frontMatter:()=>o,metadata:()=>l,toc:()=>s});var n=r(7462),a=(r(7294),r(3905));const o={title:"Apple",summary:"Quick guide to working with Apple devices on Solus"},i="Apple",l={unversionedId:"user/hardware/mobile/apple",id:"user/hardware/mobile/apple",title:"Apple",description:"Solus provides iOS support via libimobiledevice and libgpod.",source:"@site/docs/user/hardware/mobile/apple.md",sourceDirName:"user/hardware/mobile",slug:"/user/hardware/mobile/apple",permalink:"/docs/user/hardware/mobile/apple",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/hardware/mobile/apple.md",tags:[],version:"current",lastUpdatedAt:1695222528,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Apple",summary:"Quick guide to working with Apple devices on Solus"},sidebar:"userSidebar",previous:{title:"Android",permalink:"/docs/user/hardware/mobile/android"},next:{title:"Peripherals",permalink:"/docs/category/peripherals"}},p={},s=[{value:"Installation",id:"installation",level:2},{value:"File Management",id:"file-management",level:2}],c={toc:s},u="wrapper";function d(e){let{components:t,...r}=e;return(0,a.kt)(u,(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"apple"},"Apple"),(0,a.kt)("p",null,"Solus provides iOS support via ",(0,a.kt)("a",{parentName:"p",href:"https://www.libimobiledevice.org/"},"libimobiledevice")," and ",(0,a.kt)("a",{parentName:"p",href:"https://github.com/fadingred/libgpod/"},"libgpod"),"."),(0,a.kt)("p",null,"Please note that the below mentioned installation instructions do not guarantee functional iOS features such as content synchronization (music) or file copying."),(0,a.kt)("p",null,"This support can be exposed via your file manager (such as Nautilus) upon connecting your iOS device or music players such as Rhythmbox."),(0,a.kt)("h2",{id:"installation"},"Installation"),(0,a.kt)("p",null,"To ensure you have the required software for iOS support, install ",(0,a.kt)("inlineCode",{parentName:"p"},"libideviceactivation")," via the Software Center or terminal:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg install libideviceactivation\n")),(0,a.kt)("p",null,(0,a.kt)("strong",{parentName:"p"},"NOTE:")," It is recommended that you reboot your system after this installation."),(0,a.kt)("h2",{id:"file-management"},"File Management"),(0,a.kt)("p",null,"TODO: Tutorial on file access and syncing"))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/a9e19215.4eaf6825.js b/assets/js/a9e19215.ce4fad62.js similarity index 98% rename from assets/js/a9e19215.4eaf6825.js rename to assets/js/a9e19215.ce4fad62.js index 2113bb613..3d92de638 100644 --- a/assets/js/a9e19215.4eaf6825.js +++ b/assets/js/a9e19215.ce4fad62.js @@ -1 +1 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[333],{3905:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),p=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},c=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},d="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),d=p(r),m=o,f=d["".concat(s,".").concat(m)]||d[m]||u[m]||a;return r?n.createElement(f,i(i({ref:t},c),{},{components:r})):n.createElement(f,i({ref:t},c))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[d]="string"==typeof e?e:o,i[1]=l;for(var p=2;p{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>u,frontMatter:()=>a,metadata:()=>l,toc:()=>p});var n=r(7462),o=(r(7294),r(3905));const a={title:"XRDP",summary:"User guide for XRDP on Solus"},i="XRDP",l={unversionedId:"user/software/networking/xrdp",id:"user/software/networking/xrdp",title:"XRDP",description:"xrdp provides a graphical login to remote machines using Microsoft Remote Desktop Protocol (RDP). xrdp accepts connections from a variety of RDP clients: FreeRDP, rdesktop, NeutrinoRDP and Microsoft Remote Desktop Client (for Windows, Mac OS, iOS and Android).",source:"@site/docs/user/software/networking/xrdp.md",sourceDirName:"user/software/networking",slug:"/user/software/networking/xrdp",permalink:"/docs/user/software/networking/xrdp",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/networking/xrdp.md",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"XRDP",summary:"User guide for XRDP on Solus"},sidebar:"userSidebar",previous:{title:"Wireshark",permalink:"/docs/user/software/networking/wireshark"},next:{title:"Sound",permalink:"/docs/user/software/sound/"}},s={},p=[{value:"Installation",id:"installation",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Start / Stop xrdp",id:"start--stop-xrdp",level:2}],c={toc:p},d="wrapper";function u(e){let{components:t,...r}=e;return(0,o.kt)(d,(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"xrdp"},"XRDP"),(0,o.kt)("p",null,"xrdp provides a graphical login to remote machines using Microsoft Remote Desktop Protocol (RDP). xrdp accepts connections from a variety of RDP clients: FreeRDP, rdesktop, NeutrinoRDP and Microsoft Remote Desktop Client (for Windows, Mac OS, iOS and Android)."),(0,o.kt)("h2",{id:"installation"},"Installation"),(0,o.kt)("p",null,"Solus has an xrdp integration package for each Desktop Environment that will install the correct configuration for that DE. Install the respective package for your DE."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"xrdp-budgie-integration")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"xrdp-gnome-integration")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"xrdp-mate-integration")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"xrdp-plasma-integration"))),(0,o.kt)("p",null,"This package will also install the ",(0,o.kt)("inlineCode",{parentName:"p"},"xrdp")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"xorgxrdp")," packages."),(0,o.kt)("h2",{id:"configuration"},"Configuration"),(0,o.kt)("p",null,"The following file needs to be created, if it doesn't already exist, with the following contents."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"cat /etc/X11/Xwrapper.config\n\nallowed_users=anybody\n")),(0,o.kt)("h2",{id:"start--stop-xrdp"},"Start / Stop xrdp"),(0,o.kt)("p",null,"Please note that xrdp does NOT run on system boot by default. It needs to be manually started/configured to start automatically:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"# Start xrdp manually\nsudo systemctl start xrdp\n\n# Configure xrdp to start automatically on each boot and immediately start the service\nsudo systemctl enable --now xrdp\n\n# Check whether xrdp is running\nsudo systemctl status xrdp\n\n# Restart xrdp manually\nsudo systemctl restart xrdp\n\n# Stop xrdp manually\nsudo systemctl stop xrdp\n\n# Configure xrdp to not start automatically on each boot and immediately stop the service\nsudo systemctl disable --now xrdp\n")))}u.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[333],{3905:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var s=n.createContext({}),p=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},c=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},d="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),d=p(r),m=o,f=d["".concat(s,".").concat(m)]||d[m]||u[m]||a;return r?n.createElement(f,i(i({ref:t},c),{},{components:r})):n.createElement(f,i({ref:t},c))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[d]="string"==typeof e?e:o,i[1]=l;for(var p=2;p{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>u,frontMatter:()=>a,metadata:()=>l,toc:()=>p});var n=r(7462),o=(r(7294),r(3905));const a={title:"XRDP",summary:"User guide for XRDP on Solus"},i="XRDP",l={unversionedId:"user/software/networking/xrdp",id:"user/software/networking/xrdp",title:"XRDP",description:"xrdp provides a graphical login to remote machines using Microsoft Remote Desktop Protocol (RDP). xrdp accepts connections from a variety of RDP clients: FreeRDP, rdesktop, NeutrinoRDP and Microsoft Remote Desktop Client (for Windows, Mac OS, iOS and Android).",source:"@site/docs/user/software/networking/xrdp.md",sourceDirName:"user/software/networking",slug:"/user/software/networking/xrdp",permalink:"/docs/user/software/networking/xrdp",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/networking/xrdp.md",tags:[],version:"current",lastUpdatedAt:1695222528,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"XRDP",summary:"User guide for XRDP on Solus"},sidebar:"userSidebar",previous:{title:"Wireshark",permalink:"/docs/user/software/networking/wireshark"},next:{title:"Sound",permalink:"/docs/user/software/sound/"}},s={},p=[{value:"Installation",id:"installation",level:2},{value:"Configuration",id:"configuration",level:2},{value:"Start / Stop xrdp",id:"start--stop-xrdp",level:2}],c={toc:p},d="wrapper";function u(e){let{components:t,...r}=e;return(0,o.kt)(d,(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"xrdp"},"XRDP"),(0,o.kt)("p",null,"xrdp provides a graphical login to remote machines using Microsoft Remote Desktop Protocol (RDP). xrdp accepts connections from a variety of RDP clients: FreeRDP, rdesktop, NeutrinoRDP and Microsoft Remote Desktop Client (for Windows, Mac OS, iOS and Android)."),(0,o.kt)("h2",{id:"installation"},"Installation"),(0,o.kt)("p",null,"Solus has an xrdp integration package for each Desktop Environment that will install the correct configuration for that DE. Install the respective package for your DE."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"xrdp-budgie-integration")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"xrdp-gnome-integration")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"xrdp-mate-integration")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"xrdp-plasma-integration"))),(0,o.kt)("p",null,"This package will also install the ",(0,o.kt)("inlineCode",{parentName:"p"},"xrdp")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"xorgxrdp")," packages."),(0,o.kt)("h2",{id:"configuration"},"Configuration"),(0,o.kt)("p",null,"The following file needs to be created, if it doesn't already exist, with the following contents."),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"cat /etc/X11/Xwrapper.config\n\nallowed_users=anybody\n")),(0,o.kt)("h2",{id:"start--stop-xrdp"},"Start / Stop xrdp"),(0,o.kt)("p",null,"Please note that xrdp does NOT run on system boot by default. It needs to be manually started/configured to start automatically:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"# Start xrdp manually\nsudo systemctl start xrdp\n\n# Configure xrdp to start automatically on each boot and immediately start the service\nsudo systemctl enable --now xrdp\n\n# Check whether xrdp is running\nsudo systemctl status xrdp\n\n# Restart xrdp manually\nsudo systemctl restart xrdp\n\n# Stop xrdp manually\nsudo systemctl stop xrdp\n\n# Configure xrdp to not start automatically on each boot and immediately stop the service\nsudo systemctl disable --now xrdp\n")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/b4302412.3f071b86.js b/assets/js/b4302412.b850d2c4.js similarity index 98% rename from assets/js/b4302412.3f071b86.js rename to assets/js/b4302412.b850d2c4.js index 031bc2422..c058d20a3 100644 --- a/assets/js/b4302412.3f071b86.js +++ b/assets/js/b4302412.b850d2c4.js @@ -1 +1 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[2081],{3905:(e,t,r)=>{r.d(t,{Zo:()=>l,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function s(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c=n.createContext({}),u=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):s(s({},t),e)),r},l=function(e){var t=u(e.components);return n.createElement(c.Provider,{value:t},e.children)},p="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,i=e.originalType,c=e.parentName,l=a(e,["components","mdxType","originalType","parentName"]),p=u(r),m=o,f=p["".concat(c,".").concat(m)]||p[m]||d[m]||i;return r?n.createElement(f,s(s({ref:t},l),{},{components:r})):n.createElement(f,s({ref:t},l))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=r.length,s=new Array(i);s[0]=m;var a={};for(var c in t)hasOwnProperty.call(t,c)&&(a[c]=t[c]);a.originalType=e,a[p]="string"==typeof e?e:o,s[1]=a;for(var u=2;u{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>d,frontMatter:()=>i,metadata:()=>a,toc:()=>u});var n=r(7462),o=(r(7294),r(3905));const i={title:"Tips and Tricks",summary:"Useful tips and tricks for GNOME users"},s="Tips and Tricks",a={unversionedId:"user/editions/gnome/tips-and-tricks",id:"user/editions/gnome/tips-and-tricks",title:"Tips and Tricks",description:"GNOME Keyboard Shortcuts",source:"@site/docs/user/editions/gnome/tips-and-tricks.md",sourceDirName:"user/editions/gnome",slug:"/user/editions/gnome/tips-and-tricks",permalink:"/docs/user/editions/gnome/tips-and-tricks",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/editions/gnome/tips-and-tricks.md",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Tips and Tricks",summary:"Useful tips and tricks for GNOME users"},sidebar:"userSidebar",previous:{title:"Configuration",permalink:"/docs/user/editions/gnome/configuration"},next:{title:"MATE",permalink:"/docs/user/editions/mate/"}},c={},u=[{value:"GNOME Keyboard Shortcuts",id:"gnome-keyboard-shortcuts",level:2},{value:"GNOME Hot Corners",id:"gnome-hot-corners",level:2}],l={toc:u},p="wrapper";function d(e){let{components:t,...r}=e;return(0,o.kt)(p,(0,n.Z)({},l,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"tips-and-tricks"},"Tips and Tricks"),(0,o.kt)("h2",{id:"gnome-keyboard-shortcuts"},"GNOME Keyboard Shortcuts"),(0,o.kt)("p",null,"TODO: Provide a quick guide to these shortcuts like we did for Budgie"),(0,o.kt)("h2",{id:"gnome-hot-corners"},"GNOME Hot Corners"),(0,o.kt)("p",null,"TODO: Since Hot Corners aren't easily discoverable, maybe a quick intro to using them"),(0,o.kt)("p",null,"TODO: I'm sure there are other things that GNOME users can point out"))}d.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[2081],{3905:(e,t,r)=>{r.d(t,{Zo:()=>l,kt:()=>f});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function s(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c=n.createContext({}),u=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):s(s({},t),e)),r},l=function(e){var t=u(e.components);return n.createElement(c.Provider,{value:t},e.children)},p="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,i=e.originalType,c=e.parentName,l=a(e,["components","mdxType","originalType","parentName"]),p=u(r),m=o,f=p["".concat(c,".").concat(m)]||p[m]||d[m]||i;return r?n.createElement(f,s(s({ref:t},l),{},{components:r})):n.createElement(f,s({ref:t},l))}));function f(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=r.length,s=new Array(i);s[0]=m;var a={};for(var c in t)hasOwnProperty.call(t,c)&&(a[c]=t[c]);a.originalType=e,a[p]="string"==typeof e?e:o,s[1]=a;for(var u=2;u{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>d,frontMatter:()=>i,metadata:()=>a,toc:()=>u});var n=r(7462),o=(r(7294),r(3905));const i={title:"Tips and Tricks",summary:"Useful tips and tricks for GNOME users"},s="Tips and Tricks",a={unversionedId:"user/editions/gnome/tips-and-tricks",id:"user/editions/gnome/tips-and-tricks",title:"Tips and Tricks",description:"GNOME Keyboard Shortcuts",source:"@site/docs/user/editions/gnome/tips-and-tricks.md",sourceDirName:"user/editions/gnome",slug:"/user/editions/gnome/tips-and-tricks",permalink:"/docs/user/editions/gnome/tips-and-tricks",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/editions/gnome/tips-and-tricks.md",tags:[],version:"current",lastUpdatedAt:1695222528,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Tips and Tricks",summary:"Useful tips and tricks for GNOME users"},sidebar:"userSidebar",previous:{title:"Configuration",permalink:"/docs/user/editions/gnome/configuration"},next:{title:"MATE",permalink:"/docs/user/editions/mate/"}},c={},u=[{value:"GNOME Keyboard Shortcuts",id:"gnome-keyboard-shortcuts",level:2},{value:"GNOME Hot Corners",id:"gnome-hot-corners",level:2}],l={toc:u},p="wrapper";function d(e){let{components:t,...r}=e;return(0,o.kt)(p,(0,n.Z)({},l,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"tips-and-tricks"},"Tips and Tricks"),(0,o.kt)("h2",{id:"gnome-keyboard-shortcuts"},"GNOME Keyboard Shortcuts"),(0,o.kt)("p",null,"TODO: Provide a quick guide to these shortcuts like we did for Budgie"),(0,o.kt)("h2",{id:"gnome-hot-corners"},"GNOME Hot Corners"),(0,o.kt)("p",null,"TODO: Since Hot Corners aren't easily discoverable, maybe a quick intro to using them"),(0,o.kt)("p",null,"TODO: I'm sure there are other things that GNOME users can point out"))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/b4d4ace7.d984a3d9.js b/assets/js/b4d4ace7.bfe1ff06.js similarity index 56% rename from assets/js/b4d4ace7.d984a3d9.js rename to assets/js/b4d4ace7.bfe1ff06.js index e6397a0aa..bc33a8ffd 100644 --- a/assets/js/b4d4ace7.d984a3d9.js +++ b/assets/js/b4d4ace7.bfe1ff06.js @@ -1 +1 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[1554],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>h});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function l(e){for(var t=1;t=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var s=n.createContext({}),u=function(e){var t=n.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):l(l({},t),e)),a},c=function(e){var t=u(e.components);return n.createElement(s.Provider,{value:t},e.children)},p="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,i=e.originalType,s=e.parentName,c=o(e,["components","mdxType","originalType","parentName"]),p=u(a),d=r,h=p["".concat(s,".").concat(d)]||p[d]||m[d]||i;return a?n.createElement(h,l(l({ref:t},c),{},{components:a})):n.createElement(h,l({ref:t},c))}));function h(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var i=a.length,l=new Array(i);l[0]=d;var o={};for(var s in t)hasOwnProperty.call(t,s)&&(o[s]=t[s]);o.originalType=e,o[p]="string"==typeof e?e:r,l[1]=o;for(var u=2;u{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>m,frontMatter:()=>i,metadata:()=>o,toc:()=>u});var n=a(7462),r=(a(7294),a(3905));const i={title:"Submitting a Pull Request for Review",summary:"Submitting a Pull Request for Review",sidebar_position:6},l="Submitting a Pull Request for Review",o={unversionedId:"packaging/submitting-a-pull-request",id:"packaging/submitting-a-pull-request",title:"Submitting a Pull Request for Review",description:"Please refrain from submitting a pull request for the following instances:",source:"@site/docs/packaging/submitting-a-pull-request.md",sourceDirName:"packaging",slug:"/packaging/submitting-a-pull-request",permalink:"/docs/packaging/submitting-a-pull-request",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/submitting-a-pull-request.md",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",sidebarPosition:6,frontMatter:{title:"Submitting a Pull Request for Review",summary:"Submitting a Pull Request for Review",sidebar_position:6},sidebar:"packagingSidebar",previous:{title:"Testing a Package",permalink:"/docs/packaging/testing-a-package"},next:{title:"Packaging Changes",permalink:"/docs/packaging/packaging-changes"}},s={},u=[{value:"Final Branch Review",id:"final-branch-review",level:2},{value:"Creating the Pull Request",id:"creating-the-pull-request",level:2},{value:"Amending a New Pull Request",id:"amending-a-new-pull-request",level:2},{value:"Updating a Pull Request That Has Changes Requested",id:"updating-a-pull-request-that-has-changes-requested",level:2},{value:"After the Pull Request is Accepted",id:"after-the-pull-request-is-accepted",level:2}],c={toc:u},p="wrapper";function m(e){let{components:t,...a}=e;return(0,r.kt)(p,(0,n.Z)({},c,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"submitting-a-pull-request-for-review"},"Submitting a Pull Request for Review"),(0,r.kt)("p",null,"Please refrain from submitting a pull request for the following instances:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"For a package that is yet to be accepted for inclusion by a member of the Solus Staff team. Search ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/getsolus/packages/issues?q=label%3A%22Package+Request%22"},"open package requests")," to see if there is an open request for the package.\nWe welcome you to politely reach out via the package request issue or our Support room on ",(0,r.kt)("a",{parentName:"li",href:"/docs/user/contributing/getting-involved#matrix-chat"},"Matrix")," if you deem the review of the request to be time-sensitive in nature."),(0,r.kt)("li",{parentName:"ul"},"If your pull request is a Work In Progress / WIP. Pull requests that are completed or are marked as ",(0,r.kt)("em",{parentName:"li"},"request for comments")," (RFC) are accepted. For RFC request please ensure your patch title contains ",(0,r.kt)("inlineCode",{parentName:"li"},"[RFC]")," and is marked as 'draft'. WIP patches clutter the issue tracker and make patch review by Solus Staff more time consuming and introduces unnecessary work.")),(0,r.kt)("h2",{id:"final-branch-review"},"Final Branch Review"),(0,r.kt)("p",null,"At minimum, your pull request will include changes for the following files:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"package.yml")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"pspec_*.xml"))),(0,r.kt)("p",null,"It will also include these files:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"Makefile")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"MAINTAINERS.md"))),(0,r.kt)("p",null,"Double check the ",(0,r.kt)("inlineCode",{parentName:"p"},"package.yml")," to make sure the builddeps are in the right order, and that it otherwise adheres to the ",(0,r.kt)("a",{parentName:"p",href:"/docs/packaging/package.yml"},"standards")," Solus has set."),(0,r.kt)("p",null,"If any additional files were required for the build, then you must also include the ",(0,r.kt)("inlineCode",{parentName:"p"},"files/")," directory. See ",(0,r.kt)("a",{parentName:"p",href:"/docs/packaging/packaging-practices"},"Packaging Practices")," for more detail."),(0,r.kt)("p",null,"Many package builds may result in the automatic generation of an ABI report. These files start with ",(0,r.kt)("inlineCode",{parentName:"p"},"abi_*")," and must also be included, as they allow simple tracking of changes to symbols and dependencies."),(0,r.kt)("p",null,"Take a final look over your commit message to make sure it has all the necessary information, and that the formatting is good. You can use this, which will show the most recent commit:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"git log -1\n")),(0,r.kt)("h2",{id:"creating-the-pull-request"},"Creating the Pull Request"),(0,r.kt)("p",null,"In the package folder, run ",(0,r.kt)("inlineCode",{parentName:"p"},"git push"),"."),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"If you've created your own branch, as recommended, the cli tool will show you a new command to create and push to a remote branch matching the local one. Run this.")),(0,r.kt)("p",null,"Once the commit is successfully pushed, you'll notice that a URL will be provided that will immediately allow you to create a pull request with your changes."),(0,r.kt)("p",null,"Run ",(0,r.kt)("inlineCode",{parentName:"p"},"git status")," one last time to make sure your branch is clean. If it is, open the link, double check everything, and create the pull request!"),(0,r.kt)("h2",{id:"amending-a-new-pull-request"},"Amending a New Pull Request"),(0,r.kt)("p",null,"There may be times you need to make minor changes after submitting the pull request. For instance, you see something that needs correcting. You may update your pull request with a new commit and push, as with any other change. We recommend keeping this to a minimum after submitting your PR so that reviewers aren't working with old information."),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"Previously, with Phabricator, we required amending your commit. This is no longer necessary and is not recommended.")),(0,r.kt)("h2",{id:"updating-a-pull-request-that-has-changes-requested"},"Updating a Pull Request That Has Changes Requested"),(0,r.kt)("p",null,"Your pull request will be reviewed, and changes may be requested. This is normal. It's to ensure the quality of the packages in our repository and to make sure each PR adheres to our standards."),(0,r.kt)("p",null,'Make any relevant changes to your local branch. Add or remove files as needed, and commit. In the new commit message, describe the changes you\'ve made between the last revision and the new one.\nEx: "Updated the build order in package.yml as requested".'),(0,r.kt)("p",null,"This helps reviewers see what you've changed, to streamline the process of getting your work merged."),(0,r.kt)("p",null,"Submit the updated commit with ",(0,r.kt)("inlineCode",{parentName:"p"},"git push"),". The web interface will automatically update with the latest changes."),(0,r.kt)("h2",{id:"after-the-pull-request-is-accepted"},"After the Pull Request is Accepted"),(0,r.kt)("p",null,"Once your pull request is accepted and merged, someone on the Solus Team will issue a build. Your new / updated package will be published to the unstable repos."),(0,r.kt)("p",null,"At this point you may ",(0,r.kt)("a",{parentName:"p",href:"git-basics#deleting-your-branch-after-a-pull-request-is-merged"},"delete the local and remote branches")," for this pull request."))}m.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[1554],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>h});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function l(e){for(var t=1;t=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var s=n.createContext({}),u=function(e){var t=n.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):l(l({},t),e)),a},c=function(e){var t=u(e.components);return n.createElement(s.Provider,{value:t},e.children)},p="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,i=e.originalType,s=e.parentName,c=o(e,["components","mdxType","originalType","parentName"]),p=u(a),d=r,h=p["".concat(s,".").concat(d)]||p[d]||m[d]||i;return a?n.createElement(h,l(l({ref:t},c),{},{components:a})):n.createElement(h,l({ref:t},c))}));function h(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var i=a.length,l=new Array(i);l[0]=d;var o={};for(var s in t)hasOwnProperty.call(t,s)&&(o[s]=t[s]);o.originalType=e,o[p]="string"==typeof e?e:r,l[1]=o;for(var u=2;u{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>m,frontMatter:()=>i,metadata:()=>o,toc:()=>u});var n=a(7462),r=(a(7294),a(3905));const i={title:"Submitting a Pull Request for Review",summary:"Submitting a Pull Request for Review",sidebar_position:6},l="Submitting a Pull Request for Review",o={unversionedId:"packaging/submitting-a-pull-request",id:"packaging/submitting-a-pull-request",title:"Submitting a Pull Request for Review",description:"Please refrain from submitting a pull request for the following instances:",source:"@site/docs/packaging/submitting-a-pull-request.md",sourceDirName:"packaging",slug:"/packaging/submitting-a-pull-request",permalink:"/docs/packaging/submitting-a-pull-request",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/submitting-a-pull-request.md",tags:[],version:"current",lastUpdatedAt:1695222528,formattedLastUpdatedAt:"Sep 20, 2023",sidebarPosition:6,frontMatter:{title:"Submitting a Pull Request for Review",summary:"Submitting a Pull Request for Review",sidebar_position:6},sidebar:"packagingSidebar",previous:{title:"Testing a Package",permalink:"/docs/packaging/testing-a-package"},next:{title:"Packaging Changes",permalink:"/docs/packaging/packaging-changes"}},s={},u=[{value:"Final Branch Review",id:"final-branch-review",level:2},{value:"Creating the Pull Request",id:"creating-the-pull-request",level:2},{value:"Amending a New Pull Request",id:"amending-a-new-pull-request",level:2},{value:"Updating a Pull Request That Has Changes Requested",id:"updating-a-pull-request-that-has-changes-requested",level:2},{value:"After the Pull Request is Accepted",id:"after-the-pull-request-is-accepted",level:2}],c={toc:u},p="wrapper";function m(e){let{components:t,...a}=e;return(0,r.kt)(p,(0,n.Z)({},c,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"submitting-a-pull-request-for-review"},"Submitting a Pull Request for Review"),(0,r.kt)("p",null,"Please refrain from submitting a pull request for the following instances:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},"For a package that is yet to be accepted for inclusion by a member of the Solus Staff team. Search ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/getsolus/packages/issues?q=label%3A%22Package+Request%22"},"open package requests")," to see if there is an open request for the package.\nWe welcome you to politely reach out via the package request issue or our Support room on ",(0,r.kt)("a",{parentName:"li",href:"/docs/user/contributing/getting-involved#matrix-chat"},"Matrix")," if you deem the review of the request to be time-sensitive in nature."),(0,r.kt)("li",{parentName:"ul"},"If your pull request is a Work In Progress / WIP. Pull requests that are completed or are marked as ",(0,r.kt)("em",{parentName:"li"},"request for comments")," (RFC) are accepted. For RFC request please ensure your patch title contains ",(0,r.kt)("inlineCode",{parentName:"li"},"[RFC]")," and is marked as 'draft'. WIP patches clutter the issue tracker and make patch review by Solus Staff more time consuming and introduces unnecessary work.")),(0,r.kt)("h2",{id:"final-branch-review"},"Final Branch Review"),(0,r.kt)("p",null,"At minimum, your pull request will include changes for the following files:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"package.yml")),(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"pspec_*.xml"))),(0,r.kt)("p",null,"It may also include these files:"),(0,r.kt)("ul",null,(0,r.kt)("li",{parentName:"ul"},(0,r.kt)("inlineCode",{parentName:"li"},"MAINTAINERS.md"))),(0,r.kt)("p",null,"Double check the ",(0,r.kt)("inlineCode",{parentName:"p"},"package.yml")," to make sure the builddeps are in the right order, and that it otherwise adheres to the ",(0,r.kt)("a",{parentName:"p",href:"/docs/packaging/package.yml"},"standards")," Solus has set."),(0,r.kt)("p",null,"If any additional files were required for the build, then you must also include the ",(0,r.kt)("inlineCode",{parentName:"p"},"files/")," directory. See ",(0,r.kt)("a",{parentName:"p",href:"/docs/packaging/packaging-practices"},"Packaging Practices")," for more detail."),(0,r.kt)("p",null,"Many package builds may result in the automatic generation of an ABI report. These files start with ",(0,r.kt)("inlineCode",{parentName:"p"},"abi_*")," and must also be included, as they allow simple tracking of changes to symbols and dependencies."),(0,r.kt)("p",null,"Take a final look over your commit message to make sure it has all the necessary information, and that the formatting is good. You can use this, which will show the most recent commit:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"git log -1\n")),(0,r.kt)("h2",{id:"creating-the-pull-request"},"Creating the Pull Request"),(0,r.kt)("p",null,"In the package folder, run ",(0,r.kt)("inlineCode",{parentName:"p"},"git push"),"."),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"If you've created your own branch, as recommended, the cli tool will show you a new command to create and push to a remote branch matching the local one. Run this.")),(0,r.kt)("p",null,"Once the commit is successfully pushed, you'll notice that a URL will be provided that will immediately allow you to create a pull request with your changes."),(0,r.kt)("p",null,"Run ",(0,r.kt)("inlineCode",{parentName:"p"},"git status")," one last time to make sure your branch is clean. If it is, open the link, double check everything, and create the pull request!"),(0,r.kt)("h2",{id:"amending-a-new-pull-request"},"Amending a New Pull Request"),(0,r.kt)("p",null,"There may be times you need to make minor changes after submitting the pull request. For instance, you see something that needs correcting. You may update your pull request with a new commit and push, as with any other change. We recommend keeping this to a minimum after submitting your PR so that reviewers aren't working with old information."),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"Previously, with Phabricator, we required amending your commit. This is no longer necessary and is not recommended.")),(0,r.kt)("h2",{id:"updating-a-pull-request-that-has-changes-requested"},"Updating a Pull Request That Has Changes Requested"),(0,r.kt)("p",null,"Your pull request will be reviewed, and changes may be requested. This is normal. It's to ensure the quality of the packages in our repository and to make sure each PR adheres to our standards."),(0,r.kt)("p",null,'Make any relevant changes to your local branch. Add or remove files as needed, and commit. In the new commit message, describe the changes you\'ve made between the last revision and the new one.\nEx: "Updated the build order in package.yml as requested".'),(0,r.kt)("p",null,"This helps reviewers see what you've changed, to streamline the process of getting your work merged."),(0,r.kt)("p",null,"Submit the updated commit with ",(0,r.kt)("inlineCode",{parentName:"p"},"git push"),". The web interface will automatically update with the latest changes."),(0,r.kt)("h2",{id:"after-the-pull-request-is-accepted"},"After the Pull Request is Accepted"),(0,r.kt)("p",null,"Once your pull request is accepted and merged, someone on the Solus Team will issue a build. Your new / updated package will be published to the unstable repos."),(0,r.kt)("p",null,"At this point you may ",(0,r.kt)("a",{parentName:"p",href:"git-basics#deleting-your-branch-after-a-pull-request-is-merged"},"delete the local and remote branches")," for this pull request."))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/baf1b6e8.4353b3e5.js b/assets/js/baf1b6e8.97d73802.js similarity index 99% rename from assets/js/baf1b6e8.4353b3e5.js rename to assets/js/baf1b6e8.97d73802.js index 8832aa6e2..26f973077 100644 --- a/assets/js/baf1b6e8.4353b3e5.js +++ b/assets/js/baf1b6e8.97d73802.js @@ -1 +1 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[9677],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>f});var a=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=a.createContext({}),p=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},u=function(e){var t=p(e.components);return a.createElement(l.Provider,{value:t},e.children)},d="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,r=e.originalType,l=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),d=p(n),m=o,f=d["".concat(l,".").concat(m)]||d[m]||c[m]||r;return n?a.createElement(f,i(i({ref:t},u),{},{components:n})):a.createElement(f,i({ref:t},u))}));function f(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=n.length,i=new Array(r);i[0]=m;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[d]="string"==typeof e?e:o,i[1]=s;for(var p=2;p{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>c,frontMatter:()=>r,metadata:()=>s,toc:()=>p});var a=n(7462),o=(n(7294),n(3905));const r={title:"Java",summary:"A quick guide to Java development on Solus"},i="Java",s={unversionedId:"user/software/development/java",id:"user/software/development/java",title:"Java",description:"This article covers obtaining open source Java (otherwise known as OpenJDK). In this article, two abbreviations will be used to refer to components of the Java software suite:",source:"@site/docs/user/software/development/java.md",sourceDirName:"user/software/development",slug:"/user/software/development/java",permalink:"/docs/user/software/development/java",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/development/java.md",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Java",summary:"A quick guide to Java development on Solus"},sidebar:"userSidebar",previous:{title:"Containers",permalink:"/docs/user/software/development/containers"},next:{title:"PostgreSQL",permalink:"/docs/user/software/development/postgresql"}},l={},p=[{value:"Installing OpenJDK",id:"installing-openjdk",level:2},{value:"OpenJDK 11",id:"openjdk-11",level:3},{value:"OpenJDK 8",id:"openjdk-8",level:3},{value:"Running Java Applications",id:"running-java-applications",level:2}],u={toc:p},d="wrapper";function c(e){let{components:t,...n}=e;return(0,o.kt)(d,(0,a.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"java"},"Java"),(0,o.kt)("p",null,"This article covers obtaining open source Java (otherwise known as OpenJDK). In this article, two abbreviations will be used to refer to components of the Java software suite:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"JRE (Java Runtime Environment)"),(0,o.kt)("li",{parentName:"ul"},"JDK (Java Development Kit)")),(0,o.kt)("h2",{id:"installing-openjdk"},"Installing OpenJDK"),(0,o.kt)("p",null,"Solus currently offers two Java versions in the repository, and these versions can be installed alongside one another. For ease of maintenance, Solus only includes LTS versions of OpenJDK. Those who require the absolute newest version of the JDK, or other non-LTS versions, should look to other methods of installation (such as ",(0,o.kt)("a",{parentName:"p",href:"https://sdkman.io/"},"sdkman"),")."),(0,o.kt)("h3",{id:"openjdk-11"},"OpenJDK 11"),(0,o.kt)("p",null,"OpenJDK 11 is included in the repository as ",(0,o.kt)("inlineCode",{parentName:"p"},"openjdk-11"),". It includes the JRE, the JDK, and OpenJFX, all in one package. The majority of Java packages in Solus currently use OpenJDK 11, and this is the recommended version if you need Java but aren't sure which version you should install. If the software you use doesn't work with OpenJDK 11, you should use OpenJDK 8 instead."),(0,o.kt)("p",null,"Once ",(0,o.kt)("inlineCode",{parentName:"p"},"openjdk-11")," is installed, you'll be able to find all of its components at ",(0,o.kt)("inlineCode",{parentName:"p"},"/usr/lib64/openjdk-11"),". This is the path you should set ",(0,o.kt)("inlineCode",{parentName:"p"},"JAVA_HOME")," to for use with Java software not packaged by Solus if you want them to use JDK 11."),(0,o.kt)("h3",{id:"openjdk-8"},"OpenJDK 8"),(0,o.kt)("p",null,"OpenJDK 8 is included in the repository as ",(0,o.kt)("inlineCode",{parentName:"p"},"openjdk-8")," for the JRE and JDK, and ",(0,o.kt)("inlineCode",{parentName:"p"},"openjfx-8")," for the implementation of JavaFX. Once it's installed, its components can be found at ",(0,o.kt)("inlineCode",{parentName:"p"},"/usr/lib64/openjdk-8"),". This is the path you should set ",(0,o.kt)("inlineCode",{parentName:"p"},"JAVA_HOME")," to for use with Java software not packaged by Solus if you want them to use JDK 8."),(0,o.kt)("h2",{id:"running-java-applications"},"Running Java Applications"),(0,o.kt)("p",null,"Once a Java version has been installed, you might notice that running jar files in the terminal via ",(0,o.kt)("inlineCode",{parentName:"p"},"java -jar foo.jar")," doesn't work. This is because Solus uses a stateless configuration for its Java packages so as to avoid conflicts between different installed versions, and thus there is no ",(0,o.kt)("inlineCode",{parentName:"p"},"java")," command on the ",(0,o.kt)("inlineCode",{parentName:"p"},"PATH")," by default. To amend this, there are multiple possible solutions, each of which should be used for certain scenarios."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Create a .desktop file and specify ",(0,o.kt)("inlineCode",{parentName:"li"},"env JAVA_HOME=/path/to/jdk")," in ",(0,o.kt)("inlineCode",{parentName:"li"},"Exec")," (best for GUIs)"),(0,o.kt)("li",{parentName:"ul"},"Create a script that sets ",(0,o.kt)("inlineCode",{parentName:"li"},"JAVA_HOME")," before running the application"),(0,o.kt)("li",{parentName:"ul"},"Symlink the ",(0,o.kt)("inlineCode",{parentName:"li"},"java")," executable from within ",(0,o.kt)("inlineCode",{parentName:"li"},"/path/to/jdk/bin")," into ",(0,o.kt)("inlineCode",{parentName:"li"},"/usr/bin")),(0,o.kt)("li",{parentName:"ul"},"Add ",(0,o.kt)("inlineCode",{parentName:"li"},"/path/to/jdk/bin")," to your PATH")))}c.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[9677],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>f});var a=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=a.createContext({}),p=function(e){var t=a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},u=function(e){var t=p(e.components);return a.createElement(l.Provider,{value:t},e.children)},d="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,r=e.originalType,l=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),d=p(n),m=o,f=d["".concat(l,".").concat(m)]||d[m]||c[m]||r;return n?a.createElement(f,i(i({ref:t},u),{},{components:n})):a.createElement(f,i({ref:t},u))}));function f(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=n.length,i=new Array(r);i[0]=m;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[d]="string"==typeof e?e:o,i[1]=s;for(var p=2;p{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>c,frontMatter:()=>r,metadata:()=>s,toc:()=>p});var a=n(7462),o=(n(7294),n(3905));const r={title:"Java",summary:"A quick guide to Java development on Solus"},i="Java",s={unversionedId:"user/software/development/java",id:"user/software/development/java",title:"Java",description:"This article covers obtaining open source Java (otherwise known as OpenJDK). In this article, two abbreviations will be used to refer to components of the Java software suite:",source:"@site/docs/user/software/development/java.md",sourceDirName:"user/software/development",slug:"/user/software/development/java",permalink:"/docs/user/software/development/java",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/development/java.md",tags:[],version:"current",lastUpdatedAt:1695222528,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Java",summary:"A quick guide to Java development on Solus"},sidebar:"userSidebar",previous:{title:"Containers",permalink:"/docs/user/software/development/containers"},next:{title:"PostgreSQL",permalink:"/docs/user/software/development/postgresql"}},l={},p=[{value:"Installing OpenJDK",id:"installing-openjdk",level:2},{value:"OpenJDK 11",id:"openjdk-11",level:3},{value:"OpenJDK 8",id:"openjdk-8",level:3},{value:"Running Java Applications",id:"running-java-applications",level:2}],u={toc:p},d="wrapper";function c(e){let{components:t,...n}=e;return(0,o.kt)(d,(0,a.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"java"},"Java"),(0,o.kt)("p",null,"This article covers obtaining open source Java (otherwise known as OpenJDK). In this article, two abbreviations will be used to refer to components of the Java software suite:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"JRE (Java Runtime Environment)"),(0,o.kt)("li",{parentName:"ul"},"JDK (Java Development Kit)")),(0,o.kt)("h2",{id:"installing-openjdk"},"Installing OpenJDK"),(0,o.kt)("p",null,"Solus currently offers two Java versions in the repository, and these versions can be installed alongside one another. For ease of maintenance, Solus only includes LTS versions of OpenJDK. Those who require the absolute newest version of the JDK, or other non-LTS versions, should look to other methods of installation (such as ",(0,o.kt)("a",{parentName:"p",href:"https://sdkman.io/"},"sdkman"),")."),(0,o.kt)("h3",{id:"openjdk-11"},"OpenJDK 11"),(0,o.kt)("p",null,"OpenJDK 11 is included in the repository as ",(0,o.kt)("inlineCode",{parentName:"p"},"openjdk-11"),". It includes the JRE, the JDK, and OpenJFX, all in one package. The majority of Java packages in Solus currently use OpenJDK 11, and this is the recommended version if you need Java but aren't sure which version you should install. If the software you use doesn't work with OpenJDK 11, you should use OpenJDK 8 instead."),(0,o.kt)("p",null,"Once ",(0,o.kt)("inlineCode",{parentName:"p"},"openjdk-11")," is installed, you'll be able to find all of its components at ",(0,o.kt)("inlineCode",{parentName:"p"},"/usr/lib64/openjdk-11"),". This is the path you should set ",(0,o.kt)("inlineCode",{parentName:"p"},"JAVA_HOME")," to for use with Java software not packaged by Solus if you want them to use JDK 11."),(0,o.kt)("h3",{id:"openjdk-8"},"OpenJDK 8"),(0,o.kt)("p",null,"OpenJDK 8 is included in the repository as ",(0,o.kt)("inlineCode",{parentName:"p"},"openjdk-8")," for the JRE and JDK, and ",(0,o.kt)("inlineCode",{parentName:"p"},"openjfx-8")," for the implementation of JavaFX. Once it's installed, its components can be found at ",(0,o.kt)("inlineCode",{parentName:"p"},"/usr/lib64/openjdk-8"),". This is the path you should set ",(0,o.kt)("inlineCode",{parentName:"p"},"JAVA_HOME")," to for use with Java software not packaged by Solus if you want them to use JDK 8."),(0,o.kt)("h2",{id:"running-java-applications"},"Running Java Applications"),(0,o.kt)("p",null,"Once a Java version has been installed, you might notice that running jar files in the terminal via ",(0,o.kt)("inlineCode",{parentName:"p"},"java -jar foo.jar")," doesn't work. This is because Solus uses a stateless configuration for its Java packages so as to avoid conflicts between different installed versions, and thus there is no ",(0,o.kt)("inlineCode",{parentName:"p"},"java")," command on the ",(0,o.kt)("inlineCode",{parentName:"p"},"PATH")," by default. To amend this, there are multiple possible solutions, each of which should be used for certain scenarios."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Create a .desktop file and specify ",(0,o.kt)("inlineCode",{parentName:"li"},"env JAVA_HOME=/path/to/jdk")," in ",(0,o.kt)("inlineCode",{parentName:"li"},"Exec")," (best for GUIs)"),(0,o.kt)("li",{parentName:"ul"},"Create a script that sets ",(0,o.kt)("inlineCode",{parentName:"li"},"JAVA_HOME")," before running the application"),(0,o.kt)("li",{parentName:"ul"},"Symlink the ",(0,o.kt)("inlineCode",{parentName:"li"},"java")," executable from within ",(0,o.kt)("inlineCode",{parentName:"li"},"/path/to/jdk/bin")," into ",(0,o.kt)("inlineCode",{parentName:"li"},"/usr/bin")),(0,o.kt)("li",{parentName:"ul"},"Add ",(0,o.kt)("inlineCode",{parentName:"li"},"/path/to/jdk/bin")," to your PATH")))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/bb4d5b57.3f98d2b3.js b/assets/js/bb4d5b57.8d4c5c0a.js similarity index 99% rename from assets/js/bb4d5b57.3f98d2b3.js rename to assets/js/bb4d5b57.8d4c5c0a.js index 40308b9aa..6eb67a5bb 100644 --- a/assets/js/bb4d5b57.3f98d2b3.js +++ b/assets/js/bb4d5b57.8d4c5c0a.js @@ -1 +1 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[5139],{3905:(e,n,t)=>{t.d(n,{Zo:()=>u,kt:()=>f});var o=t(7294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);n&&(o=o.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,o)}return t}function a(e){for(var n=1;n=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var d=o.createContext({}),s=function(e){var n=o.useContext(d),t=n;return e&&(t="function"==typeof e?e(n):a(a({},n),e)),t},u=function(e){var n=s(e.components);return o.createElement(d.Provider,{value:n},e.children)},p="mdxType",c={inlineCode:"code",wrapper:function(e){var n=e.children;return o.createElement(o.Fragment,{},n)}},m=o.forwardRef((function(e,n){var t=e.components,r=e.mdxType,i=e.originalType,d=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),p=s(t),m=r,f=p["".concat(d,".").concat(m)]||p[m]||c[m]||i;return t?o.createElement(f,a(a({ref:n},u),{},{components:t})):o.createElement(f,a({ref:n},u))}));function f(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var i=t.length,a=new Array(i);a[0]=m;var l={};for(var d in n)hasOwnProperty.call(n,d)&&(l[d]=n[d]);l.originalType=e,l[p]="string"==typeof e?e:r,a[1]=l;for(var s=2;s{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>a,default:()=>c,frontMatter:()=>i,metadata:()=>l,toc:()=>s});var o=t(7462),r=(t(7294),t(3905));const i={title:"Android",summary:"A quick guide to getting set up for Android development on Solus"},a="Building Android\u2122 on Solus",l={unversionedId:"user/software/development/android",id:"user/software/development/android",title:"Android",description:"This article covers building the Android Open Source Project (AOSP) on Solus, the instructions can also be tweaked to also install forks of Android such as LineageOS.",source:"@site/docs/user/software/development/android.md",sourceDirName:"user/software/development",slug:"/user/software/development/android",permalink:"/docs/user/software/development/android",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/development/android.md",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Android",summary:"A quick guide to getting set up for Android development on Solus"},sidebar:"userSidebar",previous:{title:"Development",permalink:"/docs/user/software/development/"},next:{title:"Containers",permalink:"/docs/user/software/development/containers"}},d={},s=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Installing Build Dependencies",id:"installing-build-dependencies",level:3},{value:"Installing the repo Tool",id:"installing-the-repo-tool",level:3},{value:"Downloading the Source Code",id:"downloading-the-source-code",level:2},{value:"Building Android",id:"building-android",level:2},{value:"More Information",id:"more-information",level:2}],u={toc:s},p="wrapper";function c(e){let{components:n,...t}=e;return(0,r.kt)(p,(0,o.Z)({},u,t,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"building-android-on-solus"},"Building Android\u2122 on Solus"),(0,r.kt)("p",null,"This article covers building the ",(0,r.kt)("a",{parentName:"p",href:"https://www.android.com/"},"Android Open Source Project")," (AOSP) on Solus, the instructions can also be tweaked to also install forks of Android such as ",(0,r.kt)("a",{parentName:"p",href:"https://lineageos.org/"},"LineageOS"),"."),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"Note that Solus is not an officially supported Linux distribution for building Android.")),(0,r.kt)("h2",{id:"prerequisites"},"Prerequisites"),(0,r.kt)("p",null,"Before we can start we need to setup our build environment ready for building Android. You'll need a minimum of ",(0,r.kt)("inlineCode",{parentName:"p"},"100GB")," of free space to download and compile Android."),(0,r.kt)("h3",{id:"installing-build-dependencies"},"Installing Build Dependencies"),(0,r.kt)("p",null,"Android 7 (Nougat) and Android 8 (Oreo) require OpenJDK 8. Android 5 (Lollipop) and Android 6 (Marshmallow) require OpenJDK 7 which is not currently in the repository."),(0,r.kt)("p",null,"To install OpenJDK 8 run:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg it openjdk-8-devel\n")),(0,r.kt)("p",null,"Next we need to install packages from the ",(0,r.kt)("inlineCode",{parentName:"p"},"system.devel")," component, these provide common build tools for general software development."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg it -c system.devel\n")),(0,r.kt)("p",null,"Now we'll need to install the rest of the required build dependencies."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg it curl-devel git gnupg gperf libgcc-32bit libxslt-devel lzop ncurses-32bit-devel ncurses-devel readline-32bit-devel rsync schedtool sdl1-devel squashfs-tools unzip vboot-utils vim wxwidgets-devel zip zlib-32bit-devel\n")),(0,r.kt)("p",null,"Not a build dependency, but you'll definitely want ADB and Fastboot capabilities if you're developing for AOSP."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg it android-tools\n")),(0,r.kt)("h3",{id:"installing-the-repo-tool"},"Installing the ",(0,r.kt)("inlineCode",{parentName:"h3"},"repo")," Tool"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"repo")," is a tool from Google to manage multiple git repositories. We'll need to install it to download the Android source code."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"mkdir ~/bin\ncurl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo\nchmod a+x ~/bin/repo\n")),(0,r.kt)("p",null,"We now need to export ",(0,r.kt)("inlineCode",{parentName:"p"},"~/bin")," to our PATH so we can run ",(0,r.kt)("inlineCode",{parentName:"p"},"repo")," from any directory. Paste the following into your ",(0,r.kt)("inlineCode",{parentName:"p"},"~/.bashrc")," file."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'if [ -d "$HOME/bin" ] ; then\n PATH="$HOME/bin:$PATH"\nfi\n')),(0,r.kt)("p",null,"Run ",(0,r.kt)("inlineCode",{parentName:"p"},"source ~/.bashrc")," for the changes to apply."),(0,r.kt)("p",null,"Now our build environment is prepared, we can download the source code."),(0,r.kt)("h2",{id:"downloading-the-source-code"},"Downloading the Source Code"),(0,r.kt)("p",null,"First we need to create a directory where we want to download Android."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"mkdir ~/android && cd ~/android\n")),(0,r.kt)("p",null,"Next we'll need to initialize the repository with what version of Android you want to build. You can find a list of versions you can checkout ",(0,r.kt)("a",{parentName:"p",href:"https://source.android.com/source/build-numbers#source-code-tags-and-builds"},"here"),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"repo init -u https://android.googlesource.com/platform/manifest -b android-8.0.0_r34\n")),(0,r.kt)("p",null,"Now we can finally download the source code, this will take a long time and depends on the speed of your internet connection. The ",(0,r.kt)("inlineCode",{parentName:"p"},"-j")," option downloads as many repos simultaneously as you have processor cores, and, the ",(0,r.kt)("inlineCode",{parentName:"p"},"-c")," option only downloads the current branch."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"repo sync -j `nproc` -c\n")),(0,r.kt)("p",null,(0,r.kt)("em",{parentName:"p"},"If you have a slow or unreliable internet connection using ",(0,r.kt)("inlineCode",{parentName:"em"},"j 1")," may be more reliable.")),(0,r.kt)("h2",{id:"building-android"},"Building Android"),(0,r.kt)("p",null,"Once the source has finished downloading we can build Android. The following commands will not build android for any specific device. For building Android specifically for your device you'll need to find additional instructions."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"source build/envsetup.sh\nlunch full-eng\nmake -j`nproc`\n")),(0,r.kt)("h2",{id:"more-information"},"More Information"),(0,r.kt)("p",null,"Google has provided build instructions for building AOSP on Ubuntu and MacOS, you may find additional useful information there, not stated here."),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"https://source.android.com/docs/setup/start/requirements"},"https://source.android.com/docs/setup/start/requirements")),(0,r.kt)("p",null,"If your device is supported by LineageOS you can choose your device and follow the device specific build instructions at the LineageOS Wiki."),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"https://wiki.lineageos.org/devices/"},"https://wiki.lineageos.org/devices/")))}c.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[5139],{3905:(e,n,t)=>{t.d(n,{Zo:()=>u,kt:()=>f});var o=t(7294);function r(e,n,t){return n in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function i(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);n&&(o=o.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,o)}return t}function a(e){for(var n=1;n=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var d=o.createContext({}),s=function(e){var n=o.useContext(d),t=n;return e&&(t="function"==typeof e?e(n):a(a({},n),e)),t},u=function(e){var n=s(e.components);return o.createElement(d.Provider,{value:n},e.children)},p="mdxType",c={inlineCode:"code",wrapper:function(e){var n=e.children;return o.createElement(o.Fragment,{},n)}},m=o.forwardRef((function(e,n){var t=e.components,r=e.mdxType,i=e.originalType,d=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),p=s(t),m=r,f=p["".concat(d,".").concat(m)]||p[m]||c[m]||i;return t?o.createElement(f,a(a({ref:n},u),{},{components:t})):o.createElement(f,a({ref:n},u))}));function f(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var i=t.length,a=new Array(i);a[0]=m;var l={};for(var d in n)hasOwnProperty.call(n,d)&&(l[d]=n[d]);l.originalType=e,l[p]="string"==typeof e?e:r,a[1]=l;for(var s=2;s{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>a,default:()=>c,frontMatter:()=>i,metadata:()=>l,toc:()=>s});var o=t(7462),r=(t(7294),t(3905));const i={title:"Android",summary:"A quick guide to getting set up for Android development on Solus"},a="Building Android\u2122 on Solus",l={unversionedId:"user/software/development/android",id:"user/software/development/android",title:"Android",description:"This article covers building the Android Open Source Project (AOSP) on Solus, the instructions can also be tweaked to also install forks of Android such as LineageOS.",source:"@site/docs/user/software/development/android.md",sourceDirName:"user/software/development",slug:"/user/software/development/android",permalink:"/docs/user/software/development/android",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/development/android.md",tags:[],version:"current",lastUpdatedAt:1695222528,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Android",summary:"A quick guide to getting set up for Android development on Solus"},sidebar:"userSidebar",previous:{title:"Development",permalink:"/docs/user/software/development/"},next:{title:"Containers",permalink:"/docs/user/software/development/containers"}},d={},s=[{value:"Prerequisites",id:"prerequisites",level:2},{value:"Installing Build Dependencies",id:"installing-build-dependencies",level:3},{value:"Installing the repo Tool",id:"installing-the-repo-tool",level:3},{value:"Downloading the Source Code",id:"downloading-the-source-code",level:2},{value:"Building Android",id:"building-android",level:2},{value:"More Information",id:"more-information",level:2}],u={toc:s},p="wrapper";function c(e){let{components:n,...t}=e;return(0,r.kt)(p,(0,o.Z)({},u,t,{components:n,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"building-android-on-solus"},"Building Android\u2122 on Solus"),(0,r.kt)("p",null,"This article covers building the ",(0,r.kt)("a",{parentName:"p",href:"https://www.android.com/"},"Android Open Source Project")," (AOSP) on Solus, the instructions can also be tweaked to also install forks of Android such as ",(0,r.kt)("a",{parentName:"p",href:"https://lineageos.org/"},"LineageOS"),"."),(0,r.kt)("admonition",{type:"note"},(0,r.kt)("p",{parentName:"admonition"},"Note that Solus is not an officially supported Linux distribution for building Android.")),(0,r.kt)("h2",{id:"prerequisites"},"Prerequisites"),(0,r.kt)("p",null,"Before we can start we need to setup our build environment ready for building Android. You'll need a minimum of ",(0,r.kt)("inlineCode",{parentName:"p"},"100GB")," of free space to download and compile Android."),(0,r.kt)("h3",{id:"installing-build-dependencies"},"Installing Build Dependencies"),(0,r.kt)("p",null,"Android 7 (Nougat) and Android 8 (Oreo) require OpenJDK 8. Android 5 (Lollipop) and Android 6 (Marshmallow) require OpenJDK 7 which is not currently in the repository."),(0,r.kt)("p",null,"To install OpenJDK 8 run:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg it openjdk-8-devel\n")),(0,r.kt)("p",null,"Next we need to install packages from the ",(0,r.kt)("inlineCode",{parentName:"p"},"system.devel")," component, these provide common build tools for general software development."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg it -c system.devel\n")),(0,r.kt)("p",null,"Now we'll need to install the rest of the required build dependencies."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg it curl-devel git gnupg gperf libgcc-32bit libxslt-devel lzop ncurses-32bit-devel ncurses-devel readline-32bit-devel rsync schedtool sdl1-devel squashfs-tools unzip vboot-utils vim wxwidgets-devel zip zlib-32bit-devel\n")),(0,r.kt)("p",null,"Not a build dependency, but you'll definitely want ADB and Fastboot capabilities if you're developing for AOSP."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg it android-tools\n")),(0,r.kt)("h3",{id:"installing-the-repo-tool"},"Installing the ",(0,r.kt)("inlineCode",{parentName:"h3"},"repo")," Tool"),(0,r.kt)("p",null,(0,r.kt)("inlineCode",{parentName:"p"},"repo")," is a tool from Google to manage multiple git repositories. We'll need to install it to download the Android source code."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"mkdir ~/bin\ncurl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo\nchmod a+x ~/bin/repo\n")),(0,r.kt)("p",null,"We now need to export ",(0,r.kt)("inlineCode",{parentName:"p"},"~/bin")," to our PATH so we can run ",(0,r.kt)("inlineCode",{parentName:"p"},"repo")," from any directory. Paste the following into your ",(0,r.kt)("inlineCode",{parentName:"p"},"~/.bashrc")," file."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},'if [ -d "$HOME/bin" ] ; then\n PATH="$HOME/bin:$PATH"\nfi\n')),(0,r.kt)("p",null,"Run ",(0,r.kt)("inlineCode",{parentName:"p"},"source ~/.bashrc")," for the changes to apply."),(0,r.kt)("p",null,"Now our build environment is prepared, we can download the source code."),(0,r.kt)("h2",{id:"downloading-the-source-code"},"Downloading the Source Code"),(0,r.kt)("p",null,"First we need to create a directory where we want to download Android."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"mkdir ~/android && cd ~/android\n")),(0,r.kt)("p",null,"Next we'll need to initialize the repository with what version of Android you want to build. You can find a list of versions you can checkout ",(0,r.kt)("a",{parentName:"p",href:"https://source.android.com/source/build-numbers#source-code-tags-and-builds"},"here"),"."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"repo init -u https://android.googlesource.com/platform/manifest -b android-8.0.0_r34\n")),(0,r.kt)("p",null,"Now we can finally download the source code, this will take a long time and depends on the speed of your internet connection. The ",(0,r.kt)("inlineCode",{parentName:"p"},"-j")," option downloads as many repos simultaneously as you have processor cores, and, the ",(0,r.kt)("inlineCode",{parentName:"p"},"-c")," option only downloads the current branch."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"repo sync -j `nproc` -c\n")),(0,r.kt)("p",null,(0,r.kt)("em",{parentName:"p"},"If you have a slow or unreliable internet connection using ",(0,r.kt)("inlineCode",{parentName:"em"},"j 1")," may be more reliable.")),(0,r.kt)("h2",{id:"building-android"},"Building Android"),(0,r.kt)("p",null,"Once the source has finished downloading we can build Android. The following commands will not build android for any specific device. For building Android specifically for your device you'll need to find additional instructions."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"source build/envsetup.sh\nlunch full-eng\nmake -j`nproc`\n")),(0,r.kt)("h2",{id:"more-information"},"More Information"),(0,r.kt)("p",null,"Google has provided build instructions for building AOSP on Ubuntu and MacOS, you may find additional useful information there, not stated here."),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"https://source.android.com/docs/setup/start/requirements"},"https://source.android.com/docs/setup/start/requirements")),(0,r.kt)("p",null,"If your device is supported by LineageOS you can choose your device and follow the device specific build instructions at the LineageOS Wiki."),(0,r.kt)("p",null,(0,r.kt)("a",{parentName:"p",href:"https://wiki.lineageos.org/devices/"},"https://wiki.lineageos.org/devices/")))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/be4ac66b.0f726a9a.js b/assets/js/be4ac66b.302c3329.js similarity index 99% rename from assets/js/be4ac66b.0f726a9a.js rename to assets/js/be4ac66b.302c3329.js index 0a5f26c97..9ec528d06 100644 --- a/assets/js/be4ac66b.0f726a9a.js +++ b/assets/js/be4ac66b.302c3329.js @@ -1 +1 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[4869],{3905:(e,t,l)=>{l.d(t,{Zo:()=>k,kt:()=>d});var a=l(7294);function n(e,t,l){return t in e?Object.defineProperty(e,t,{value:l,enumerable:!0,configurable:!0,writable:!0}):e[t]=l,e}function i(e,t){var l=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),l.push.apply(l,a)}return l}function r(e){for(var t=1;t=0||(n[l]=e[l]);return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,l)&&(n[l]=e[l])}return n}var u=a.createContext({}),p=function(e){var t=a.useContext(u),l=t;return e&&(l="function"==typeof e?e(t):r(r({},t),e)),l},k=function(e){var t=p(e.components);return a.createElement(u.Provider,{value:t},e.children)},s="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},N=a.forwardRef((function(e,t){var l=e.components,n=e.mdxType,i=e.originalType,u=e.parentName,k=o(e,["components","mdxType","originalType","parentName"]),s=p(l),N=n,d=s["".concat(u,".").concat(N)]||s[N]||m[N]||i;return l?a.createElement(d,r(r({ref:t},k),{},{components:l})):a.createElement(d,r({ref:t},k))}));function d(e,t){var l=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var i=l.length,r=new Array(i);r[0]=N;var o={};for(var u in t)hasOwnProperty.call(t,u)&&(o[u]=t[u]);o.originalType=e,o[s]="string"==typeof e?e:n,r[1]=o;for(var p=2;p{l.r(t),l.d(t,{assets:()=>u,contentTitle:()=>r,default:()=>m,frontMatter:()=>i,metadata:()=>o,toc:()=>p});var a=l(7462),n=(l(7294),l(3905));const i={title:"Laptops",summary:"List of known-working laptop hardware from various vendors"},r="Laptops",o={unversionedId:"user/hardware/compatibility/laptops",id:"user/hardware/compatibility/laptops",title:"Laptops",description:"The following laptops have been tested and/or suggested to function correctly by our users.",source:"@site/docs/user/hardware/compatibility/laptops.md",sourceDirName:"user/hardware/compatibility",slug:"/user/hardware/compatibility/laptops",permalink:"/docs/user/hardware/compatibility/laptops",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/hardware/compatibility/laptops.md",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Laptops",summary:"List of known-working laptop hardware from various vendors"},sidebar:"userSidebar",previous:{title:"Compatibility",permalink:"/docs/category/compatibility"},next:{title:"WiFi",permalink:"/docs/user/hardware/compatibility/wifi"}},u={},p=[{value:"Acer",id:"acer",level:2},{value:"Alienware",id:"alienware",level:2},{value:"Apple",id:"apple",level:2},{value:"Asus",id:"asus",level:2},{value:"Dell",id:"dell",level:2},{value:"eMachines",id:"emachines",level:2},{value:"Fujitsu",id:"fujitsu",level:2},{value:"Gigabyte",id:"gigabyte",level:2},{value:"Google",id:"google",level:2},{value:"HP",id:"hp",level:2},{value:"Lenovo",id:"lenovo",level:2},{value:"MSI",id:"msi",level:2},{value:"Samsung",id:"samsung",level:2},{value:"Schenker",id:"schenker",level:2},{value:"Sony",id:"sony",level:2},{value:"System76",id:"system76",level:2},{value:"Toshiba",id:"toshiba",level:2}],k={toc:p},s="wrapper";function m(e){let{components:t,...l}=e;return(0,n.kt)(s,(0,a.Z)({},k,l,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"laptops"},"Laptops"),(0,n.kt)("p",null,"The following laptops have been tested and/or suggested to function correctly by our users."),(0,n.kt)("p",null,"This list should not suggest that ",(0,n.kt)("em",{parentName:"p"},"only")," such devices listed below are compatible with Solus, as there may be devices not listed below that are in fact compatible."),(0,n.kt)("h2",{id:"acer"},"Acer"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Acer Aspire 1825PTZ"),(0,n.kt)("li",{parentName:"ul"},"Acer Aspire 4830T"),(0,n.kt)("li",{parentName:"ul"},"Acer Aspire 5750G"),(0,n.kt)("li",{parentName:"ul"},"Acer Aspire 7551"),(0,n.kt)("li",{parentName:"ul"},"Acer Aspire E5-473-370Z"),(0,n.kt)("li",{parentName:"ul"},"Acer Aspire E5-573G"),(0,n.kt)("li",{parentName:"ul"},"Acer Aspire E5-575G"),(0,n.kt)("li",{parentName:"ul"},"Acer Aspire ES 15 (ES1-572-5025)"),(0,n.kt)("li",{parentName:"ul"},"Acer Aspire ES 17 (ES1-731G-P1MC)"),(0,n.kt)("li",{parentName:"ul"},"Acer Aspire V3-112P"),(0,n.kt)("li",{parentName:"ul"},"Acer Aspire V3-571G"),(0,n.kt)("li",{parentName:"ul"},"Acer Aspire V5-121"),(0,n.kt)("li",{parentName:"ul"},"Acer C710 Chromebook"),(0,n.kt)("li",{parentName:"ul"},"Acer C720-2848 Chromebook"),(0,n.kt)("li",{parentName:"ul"},"Acer TravelMate X349-G2-M")),(0,n.kt)("h2",{id:"alienware"},"Alienware"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Alienware 14"),(0,n.kt)("li",{parentName:"ul"},"Alienware 17 R3"),(0,n.kt)("li",{parentName:"ul"},"Alienware 17 R4")),(0,n.kt)("h2",{id:"apple"},"Apple"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Apple Macbook (late 2008)"),(0,n.kt)("li",{parentName:"ul"},"Apple MacBookPro8,3")),(0,n.kt)("h2",{id:"asus"},"Asus"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Asus EEE-PC 1001PX"),(0,n.kt)("li",{parentName:"ul"},"Asus EEE-PC 1011PX"),(0,n.kt)("li",{parentName:"ul"},"Asus K401UQK"),(0,n.kt)("li",{parentName:"ul"},"Asus K53U"),(0,n.kt)("li",{parentName:"ul"},"Asus K55VM"),(0,n.kt)("li",{parentName:"ul"},"Asus K401UQK"),(0,n.kt)("li",{parentName:"ul"},"Asus M50VM"),(0,n.kt)("li",{parentName:"ul"},"Asus N501JW"),(0,n.kt)("li",{parentName:"ul"},"Asus Pro50SR"),(0,n.kt)("li",{parentName:"ul"},"Asus ROG G750JZA"),(0,n.kt)("li",{parentName:"ul"},"Asus VivoBook 15 K505ZA",(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},"Must use BIOS revision 306 for functional touchpad."))),(0,n.kt)("li",{parentName:"ul"},"Asus VivoBook 15 X505ZA",(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},"Must use BIOS revision 306 for functional touchpad."))),(0,n.kt)("li",{parentName:"ul"},"Asus VivoBook 15 X505ZA-BQ171T",(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},"Must use BIOS revision 306 for functional touchpad."))),(0,n.kt)("li",{parentName:"ul"},"Asus VivoBook Pro N61JA"),(0,n.kt)("li",{parentName:"ul"},"Asus VivoBook Pro N61Jv"),(0,n.kt)("li",{parentName:"ul"},"Asus X200MA"),(0,n.kt)("li",{parentName:"ul"},"Asus X201EV"),(0,n.kt)("li",{parentName:"ul"},"Asus X540L"),(0,n.kt)("li",{parentName:"ul"},"Asus X55"),(0,n.kt)("li",{parentName:"ul"},"Asus X550LD"),(0,n.kt)("li",{parentName:"ul"},"Asus X551CAP"),(0,n.kt)("li",{parentName:"ul"},"Asus ZenBook UX31A"),(0,n.kt)("li",{parentName:"ul"},"Asus ZenBook UX305FA")),(0,n.kt)("h2",{id:"dell"},"Dell"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Dell Inspiron 14 3442"),(0,n.kt)("li",{parentName:"ul"},"Dell Inspiron 14 3452"),(0,n.kt)("li",{parentName:"ul"},"Dell Inspiron 15 7579"),(0,n.kt)("li",{parentName:"ul"},"Dell Inspiron 15R N5010"),(0,n.kt)("li",{parentName:"ul"},"Dell Inspiron 15R N5110"),(0,n.kt)("li",{parentName:"ul"},"Dell Inspiron 1110"),(0,n.kt)("li",{parentName:"ul"},"Dell Inspiron 5050"),(0,n.kt)("li",{parentName:"ul"},"Dell Inspiron 7548"),(0,n.kt)("li",{parentName:"ul"},"Dell Latitude D830"),(0,n.kt)("li",{parentName:"ul"},"Dell Latitude E4310"),(0,n.kt)("li",{parentName:"ul"},"Dell Latitude E5440"),(0,n.kt)("li",{parentName:"ul"},"Dell Latitude E5510"),(0,n.kt)("li",{parentName:"ul"},"Dell Latitude E6230"),(0,n.kt)("li",{parentName:"ul"},"Dell Latitude E6320"),(0,n.kt)("li",{parentName:"ul"},"Dell Latitude E6410"),(0,n.kt)("li",{parentName:"ul"},"Dell Latitude E6420"),(0,n.kt)("li",{parentName:"ul"},"Dell Latitude E6430"),(0,n.kt)("li",{parentName:"ul"},"Dell Latitude E6530"),(0,n.kt)("li",{parentName:"ul"},"Dell Precision 7520"),(0,n.kt)("li",{parentName:"ul"},"Dell Precision M6500"),(0,n.kt)("li",{parentName:"ul"},"Dell Vostro 1700"),(0,n.kt)("li",{parentName:"ul"},"Dell XPS 15 9560")),(0,n.kt)("h2",{id:"emachines"},"eMachines"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"eMachines E728")),(0,n.kt)("h2",{id:"fujitsu"},"Fujitsu"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Fujitsu Lifebook A531"),(0,n.kt)("li",{parentName:"ul"},"Fujitsu Lifebook T900")),(0,n.kt)("h2",{id:"gigabyte"},"Gigabyte"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Gigabyte Aero 14K")),(0,n.kt)("h2",{id:"google"},"Google"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Google Chromebook CR48")),(0,n.kt)("h2",{id:"hp"},"HP"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"HP 240 G3"),(0,n.kt)("li",{parentName:"ul"},"HP Compaq 6730B"),(0,n.kt)("li",{parentName:"ul"},"HP Compaq NC6400"),(0,n.kt)("li",{parentName:"ul"},"HP Compaq Presario CQ61"),(0,n.kt)("li",{parentName:"ul"},"HP EliteBook 8440P"),(0,n.kt)("li",{parentName:"ul"},"HP EliteBook 8460p"),(0,n.kt)("li",{parentName:"ul"},"HP EliteBook 8740w"),(0,n.kt)("li",{parentName:"ul"},"HP EliteBook 8760w"),(0,n.kt)("li",{parentName:"ul"},"HP Envy TS M6"),(0,n.kt)("li",{parentName:"ul"},"HP Pavilion 15-E042SO"),(0,n.kt)("li",{parentName:"ul"},"HP Pavilion DV6"),(0,n.kt)("li",{parentName:"ul"},"HP Pavilion DV6Z-6c00"),(0,n.kt)("li",{parentName:"ul"},"HP Pavilion DV6Z-6100"),(0,n.kt)("li",{parentName:"ul"},"HP Pavilion DV7"),(0,n.kt)("li",{parentName:"ul"},"HP Pavilion DV2700"),(0,n.kt)("li",{parentName:"ul"},"HP Pavilion x360 Convertible"),(0,n.kt)("li",{parentName:"ul"},"HP Presario V6000"),(0,n.kt)("li",{parentName:"ul"},"HP Probook 6360b"),(0,n.kt)("li",{parentName:"ul"},"HP ProBook 6450b")),(0,n.kt)("h2",{id:"lenovo"},"Lenovo"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Lenovo 3000 V200"),(0,n.kt)("li",{parentName:"ul"},"Lenovo B41-80"),(0,n.kt)("li",{parentName:"ul"},"Lenovo B50-50"),(0,n.kt)("li",{parentName:"ul"},"Lenovo G50-80"),(0,n.kt)("li",{parentName:"ul"},"Lenovo G510"),(0,n.kt)("li",{parentName:"ul"},"Lenovo IdeaPad S145-15API"),(0,n.kt)("li",{parentName:"ul"},"Lenovo IdeaPad S400U"),(0,n.kt)("li",{parentName:"ul"},"Lenovo IdeaPad U310 Touch"),(0,n.kt)("li",{parentName:"ul"},"Lenovo IdeaPad Z370"),(0,n.kt)("li",{parentName:"ul"},"Lenovo IdeaPad Z585"),(0,n.kt)("li",{parentName:"ul"},"Lenovo ThinkPad 13"),(0,n.kt)("li",{parentName:"ul"},"Lenovo ThinkPad A485 (with latest BIOS update)"),(0,n.kt)("li",{parentName:"ul"},"Lenovo ThinkPad E450"),(0,n.kt)("li",{parentName:"ul"},"Lenovo ThinkPad E550"),(0,n.kt)("li",{parentName:"ul"},"Lenovo ThinkPad Edge E545"),(0,n.kt)("li",{parentName:"ul"},"Lenovo Thinkpad L412"),(0,n.kt)("li",{parentName:"ul"},"Lenovo ThinkPad L440"),(0,n.kt)("li",{parentName:"ul"},"Lenovo ThinkPad L512"),(0,n.kt)("li",{parentName:"ul"},"Lenovo ThinkPad R60e"),(0,n.kt)("li",{parentName:"ul"},"Lenovo ThinkPad S5-S540"),(0,n.kt)("li",{parentName:"ul"},"Lenovo ThinkPad SL510"),(0,n.kt)("li",{parentName:"ul"},"Lenovo Thinkpad T400 (2767V2W)"),(0,n.kt)("li",{parentName:"ul"},"Lenovo ThinkPad T410i"),(0,n.kt)("li",{parentName:"ul"},"Lenovo ThinkPad T420"),(0,n.kt)("li",{parentName:"ul"},"Lenovo ThinkPad T430"),(0,n.kt)("li",{parentName:"ul"},"Lenovo ThinkPad T440"),(0,n.kt)("li",{parentName:"ul"},"Lenovo ThinkPad T440s"),(0,n.kt)("li",{parentName:"ul"},"Lenovo ThinkPad T470"),(0,n.kt)("li",{parentName:"ul"},"Lenovo ThinkPad T470s"),(0,n.kt)("li",{parentName:"ul"},"Lenovo ThinkPad T490s"),(0,n.kt)("li",{parentName:"ul"},"Lenovo ThinkPad T560"),(0,n.kt)("li",{parentName:"ul"},"Lenovo ThinkPad T570"),(0,n.kt)("li",{parentName:"ul"},"Lenovo ThinkPad W520 4270CTO"),(0,n.kt)("li",{parentName:"ul"},"Lenovo ThinkPad X1 Carbon 3rd Edition"),(0,n.kt)("li",{parentName:"ul"},"Lenovo ThinkPad X1 Carbon 4th Edition"),(0,n.kt)("li",{parentName:"ul"},"Lenovo ThinkPad X61"),(0,n.kt)("li",{parentName:"ul"},"Lenovo ThinkPad X200T"),(0,n.kt)("li",{parentName:"ul"},"Lenovo ThinkPad X201"),(0,n.kt)("li",{parentName:"ul"},"Lenovo ThinkPad X220"),(0,n.kt)("li",{parentName:"ul"},"Lenovo ThinkPad X230"),(0,n.kt)("li",{parentName:"ul"},"Lenovo ThinkPad X280"),(0,n.kt)("li",{parentName:"ul"},"Lenovo Yoga 2 11"),(0,n.kt)("li",{parentName:"ul"},"Lenovo Z50-70")),(0,n.kt)("h2",{id:"msi"},"MSI"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"MSI GE70")),(0,n.kt)("h2",{id:"samsung"},"Samsung"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Samsung NP270E5E-X02PL"),(0,n.kt)("li",{parentName:"ul"},"Samsung NP300E4C-AD5BR"),(0,n.kt)("li",{parentName:"ul"},"Samsung NP355E5C"),(0,n.kt)("li",{parentName:"ul"},"Samsung NP365E5C-S04US"),(0,n.kt)("li",{parentName:"ul"},"Samsung NP900X3G"),(0,n.kt)("li",{parentName:"ul"},"Samsung NP900X4C-AU05")),(0,n.kt)("h2",{id:"schenker"},"Schenker"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Schenker XMG A506-VE")),(0,n.kt)("h2",{id:"sony"},"Sony"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Sony VAIO Pro 13"),(0,n.kt)("li",{parentName:"ul"},"Sony VAIO S Series 13"),(0,n.kt)("li",{parentName:"ul"},"Sony VAIO VPCEC3M1E")),(0,n.kt)("h2",{id:"system76"},"System76"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"System76 Gazelle Professional")),(0,n.kt)("h2",{id:"toshiba"},"Toshiba"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Toshiba Portege R930"),(0,n.kt)("li",{parentName:"ul"},"Toshiba Qosmio X305"),(0,n.kt)("li",{parentName:"ul"},"Toshiba Qosmio X875"),(0,n.kt)("li",{parentName:"ul"},"Toshiba Satellite A660"),(0,n.kt)("li",{parentName:"ul"},"Toshiba Satellite C50D-A-125"),(0,n.kt)("li",{parentName:"ul"},"Toshiba Satellite C55D"),(0,n.kt)("li",{parentName:"ul"},"Toshiba Satellite C640"),(0,n.kt)("li",{parentName:"ul"},"Toshiba Satellite C665D"),(0,n.kt)("li",{parentName:"ul"},"Toshiba Satellite L300D"),(0,n.kt)("li",{parentName:"ul"},"Toshiba Satellite L455D"),(0,n.kt)("li",{parentName:"ul"},"Toshiba Satellite L850-B218"),(0,n.kt)("li",{parentName:"ul"},"Toshiba Satellite L855D"),(0,n.kt)("li",{parentName:"ul"},"Toshiba Tecra A11")))}m.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[4869],{3905:(e,t,l)=>{l.d(t,{Zo:()=>k,kt:()=>d});var a=l(7294);function n(e,t,l){return t in e?Object.defineProperty(e,t,{value:l,enumerable:!0,configurable:!0,writable:!0}):e[t]=l,e}function i(e,t){var l=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),l.push.apply(l,a)}return l}function r(e){for(var t=1;t=0||(n[l]=e[l]);return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,l)&&(n[l]=e[l])}return n}var u=a.createContext({}),p=function(e){var t=a.useContext(u),l=t;return e&&(l="function"==typeof e?e(t):r(r({},t),e)),l},k=function(e){var t=p(e.components);return a.createElement(u.Provider,{value:t},e.children)},s="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},N=a.forwardRef((function(e,t){var l=e.components,n=e.mdxType,i=e.originalType,u=e.parentName,k=o(e,["components","mdxType","originalType","parentName"]),s=p(l),N=n,d=s["".concat(u,".").concat(N)]||s[N]||m[N]||i;return l?a.createElement(d,r(r({ref:t},k),{},{components:l})):a.createElement(d,r({ref:t},k))}));function d(e,t){var l=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var i=l.length,r=new Array(i);r[0]=N;var o={};for(var u in t)hasOwnProperty.call(t,u)&&(o[u]=t[u]);o.originalType=e,o[s]="string"==typeof e?e:n,r[1]=o;for(var p=2;p{l.r(t),l.d(t,{assets:()=>u,contentTitle:()=>r,default:()=>m,frontMatter:()=>i,metadata:()=>o,toc:()=>p});var a=l(7462),n=(l(7294),l(3905));const i={title:"Laptops",summary:"List of known-working laptop hardware from various vendors"},r="Laptops",o={unversionedId:"user/hardware/compatibility/laptops",id:"user/hardware/compatibility/laptops",title:"Laptops",description:"The following laptops have been tested and/or suggested to function correctly by our users.",source:"@site/docs/user/hardware/compatibility/laptops.md",sourceDirName:"user/hardware/compatibility",slug:"/user/hardware/compatibility/laptops",permalink:"/docs/user/hardware/compatibility/laptops",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/hardware/compatibility/laptops.md",tags:[],version:"current",lastUpdatedAt:1695222528,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Laptops",summary:"List of known-working laptop hardware from various vendors"},sidebar:"userSidebar",previous:{title:"Compatibility",permalink:"/docs/category/compatibility"},next:{title:"WiFi",permalink:"/docs/user/hardware/compatibility/wifi"}},u={},p=[{value:"Acer",id:"acer",level:2},{value:"Alienware",id:"alienware",level:2},{value:"Apple",id:"apple",level:2},{value:"Asus",id:"asus",level:2},{value:"Dell",id:"dell",level:2},{value:"eMachines",id:"emachines",level:2},{value:"Fujitsu",id:"fujitsu",level:2},{value:"Gigabyte",id:"gigabyte",level:2},{value:"Google",id:"google",level:2},{value:"HP",id:"hp",level:2},{value:"Lenovo",id:"lenovo",level:2},{value:"MSI",id:"msi",level:2},{value:"Samsung",id:"samsung",level:2},{value:"Schenker",id:"schenker",level:2},{value:"Sony",id:"sony",level:2},{value:"System76",id:"system76",level:2},{value:"Toshiba",id:"toshiba",level:2}],k={toc:p},s="wrapper";function m(e){let{components:t,...l}=e;return(0,n.kt)(s,(0,a.Z)({},k,l,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"laptops"},"Laptops"),(0,n.kt)("p",null,"The following laptops have been tested and/or suggested to function correctly by our users."),(0,n.kt)("p",null,"This list should not suggest that ",(0,n.kt)("em",{parentName:"p"},"only")," such devices listed below are compatible with Solus, as there may be devices not listed below that are in fact compatible."),(0,n.kt)("h2",{id:"acer"},"Acer"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Acer Aspire 1825PTZ"),(0,n.kt)("li",{parentName:"ul"},"Acer Aspire 4830T"),(0,n.kt)("li",{parentName:"ul"},"Acer Aspire 5750G"),(0,n.kt)("li",{parentName:"ul"},"Acer Aspire 7551"),(0,n.kt)("li",{parentName:"ul"},"Acer Aspire E5-473-370Z"),(0,n.kt)("li",{parentName:"ul"},"Acer Aspire E5-573G"),(0,n.kt)("li",{parentName:"ul"},"Acer Aspire E5-575G"),(0,n.kt)("li",{parentName:"ul"},"Acer Aspire ES 15 (ES1-572-5025)"),(0,n.kt)("li",{parentName:"ul"},"Acer Aspire ES 17 (ES1-731G-P1MC)"),(0,n.kt)("li",{parentName:"ul"},"Acer Aspire V3-112P"),(0,n.kt)("li",{parentName:"ul"},"Acer Aspire V3-571G"),(0,n.kt)("li",{parentName:"ul"},"Acer Aspire V5-121"),(0,n.kt)("li",{parentName:"ul"},"Acer C710 Chromebook"),(0,n.kt)("li",{parentName:"ul"},"Acer C720-2848 Chromebook"),(0,n.kt)("li",{parentName:"ul"},"Acer TravelMate X349-G2-M")),(0,n.kt)("h2",{id:"alienware"},"Alienware"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Alienware 14"),(0,n.kt)("li",{parentName:"ul"},"Alienware 17 R3"),(0,n.kt)("li",{parentName:"ul"},"Alienware 17 R4")),(0,n.kt)("h2",{id:"apple"},"Apple"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Apple Macbook (late 2008)"),(0,n.kt)("li",{parentName:"ul"},"Apple MacBookPro8,3")),(0,n.kt)("h2",{id:"asus"},"Asus"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Asus EEE-PC 1001PX"),(0,n.kt)("li",{parentName:"ul"},"Asus EEE-PC 1011PX"),(0,n.kt)("li",{parentName:"ul"},"Asus K401UQK"),(0,n.kt)("li",{parentName:"ul"},"Asus K53U"),(0,n.kt)("li",{parentName:"ul"},"Asus K55VM"),(0,n.kt)("li",{parentName:"ul"},"Asus K401UQK"),(0,n.kt)("li",{parentName:"ul"},"Asus M50VM"),(0,n.kt)("li",{parentName:"ul"},"Asus N501JW"),(0,n.kt)("li",{parentName:"ul"},"Asus Pro50SR"),(0,n.kt)("li",{parentName:"ul"},"Asus ROG G750JZA"),(0,n.kt)("li",{parentName:"ul"},"Asus VivoBook 15 K505ZA",(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},"Must use BIOS revision 306 for functional touchpad."))),(0,n.kt)("li",{parentName:"ul"},"Asus VivoBook 15 X505ZA",(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},"Must use BIOS revision 306 for functional touchpad."))),(0,n.kt)("li",{parentName:"ul"},"Asus VivoBook 15 X505ZA-BQ171T",(0,n.kt)("ul",{parentName:"li"},(0,n.kt)("li",{parentName:"ul"},"Must use BIOS revision 306 for functional touchpad."))),(0,n.kt)("li",{parentName:"ul"},"Asus VivoBook Pro N61JA"),(0,n.kt)("li",{parentName:"ul"},"Asus VivoBook Pro N61Jv"),(0,n.kt)("li",{parentName:"ul"},"Asus X200MA"),(0,n.kt)("li",{parentName:"ul"},"Asus X201EV"),(0,n.kt)("li",{parentName:"ul"},"Asus X540L"),(0,n.kt)("li",{parentName:"ul"},"Asus X55"),(0,n.kt)("li",{parentName:"ul"},"Asus X550LD"),(0,n.kt)("li",{parentName:"ul"},"Asus X551CAP"),(0,n.kt)("li",{parentName:"ul"},"Asus ZenBook UX31A"),(0,n.kt)("li",{parentName:"ul"},"Asus ZenBook UX305FA")),(0,n.kt)("h2",{id:"dell"},"Dell"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Dell Inspiron 14 3442"),(0,n.kt)("li",{parentName:"ul"},"Dell Inspiron 14 3452"),(0,n.kt)("li",{parentName:"ul"},"Dell Inspiron 15 7579"),(0,n.kt)("li",{parentName:"ul"},"Dell Inspiron 15R N5010"),(0,n.kt)("li",{parentName:"ul"},"Dell Inspiron 15R N5110"),(0,n.kt)("li",{parentName:"ul"},"Dell Inspiron 1110"),(0,n.kt)("li",{parentName:"ul"},"Dell Inspiron 5050"),(0,n.kt)("li",{parentName:"ul"},"Dell Inspiron 7548"),(0,n.kt)("li",{parentName:"ul"},"Dell Latitude D830"),(0,n.kt)("li",{parentName:"ul"},"Dell Latitude E4310"),(0,n.kt)("li",{parentName:"ul"},"Dell Latitude E5440"),(0,n.kt)("li",{parentName:"ul"},"Dell Latitude E5510"),(0,n.kt)("li",{parentName:"ul"},"Dell Latitude E6230"),(0,n.kt)("li",{parentName:"ul"},"Dell Latitude E6320"),(0,n.kt)("li",{parentName:"ul"},"Dell Latitude E6410"),(0,n.kt)("li",{parentName:"ul"},"Dell Latitude E6420"),(0,n.kt)("li",{parentName:"ul"},"Dell Latitude E6430"),(0,n.kt)("li",{parentName:"ul"},"Dell Latitude E6530"),(0,n.kt)("li",{parentName:"ul"},"Dell Precision 7520"),(0,n.kt)("li",{parentName:"ul"},"Dell Precision M6500"),(0,n.kt)("li",{parentName:"ul"},"Dell Vostro 1700"),(0,n.kt)("li",{parentName:"ul"},"Dell XPS 15 9560")),(0,n.kt)("h2",{id:"emachines"},"eMachines"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"eMachines E728")),(0,n.kt)("h2",{id:"fujitsu"},"Fujitsu"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Fujitsu Lifebook A531"),(0,n.kt)("li",{parentName:"ul"},"Fujitsu Lifebook T900")),(0,n.kt)("h2",{id:"gigabyte"},"Gigabyte"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Gigabyte Aero 14K")),(0,n.kt)("h2",{id:"google"},"Google"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Google Chromebook CR48")),(0,n.kt)("h2",{id:"hp"},"HP"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"HP 240 G3"),(0,n.kt)("li",{parentName:"ul"},"HP Compaq 6730B"),(0,n.kt)("li",{parentName:"ul"},"HP Compaq NC6400"),(0,n.kt)("li",{parentName:"ul"},"HP Compaq Presario CQ61"),(0,n.kt)("li",{parentName:"ul"},"HP EliteBook 8440P"),(0,n.kt)("li",{parentName:"ul"},"HP EliteBook 8460p"),(0,n.kt)("li",{parentName:"ul"},"HP EliteBook 8740w"),(0,n.kt)("li",{parentName:"ul"},"HP EliteBook 8760w"),(0,n.kt)("li",{parentName:"ul"},"HP Envy TS M6"),(0,n.kt)("li",{parentName:"ul"},"HP Pavilion 15-E042SO"),(0,n.kt)("li",{parentName:"ul"},"HP Pavilion DV6"),(0,n.kt)("li",{parentName:"ul"},"HP Pavilion DV6Z-6c00"),(0,n.kt)("li",{parentName:"ul"},"HP Pavilion DV6Z-6100"),(0,n.kt)("li",{parentName:"ul"},"HP Pavilion DV7"),(0,n.kt)("li",{parentName:"ul"},"HP Pavilion DV2700"),(0,n.kt)("li",{parentName:"ul"},"HP Pavilion x360 Convertible"),(0,n.kt)("li",{parentName:"ul"},"HP Presario V6000"),(0,n.kt)("li",{parentName:"ul"},"HP Probook 6360b"),(0,n.kt)("li",{parentName:"ul"},"HP ProBook 6450b")),(0,n.kt)("h2",{id:"lenovo"},"Lenovo"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Lenovo 3000 V200"),(0,n.kt)("li",{parentName:"ul"},"Lenovo B41-80"),(0,n.kt)("li",{parentName:"ul"},"Lenovo B50-50"),(0,n.kt)("li",{parentName:"ul"},"Lenovo G50-80"),(0,n.kt)("li",{parentName:"ul"},"Lenovo G510"),(0,n.kt)("li",{parentName:"ul"},"Lenovo IdeaPad S145-15API"),(0,n.kt)("li",{parentName:"ul"},"Lenovo IdeaPad S400U"),(0,n.kt)("li",{parentName:"ul"},"Lenovo IdeaPad U310 Touch"),(0,n.kt)("li",{parentName:"ul"},"Lenovo IdeaPad Z370"),(0,n.kt)("li",{parentName:"ul"},"Lenovo IdeaPad Z585"),(0,n.kt)("li",{parentName:"ul"},"Lenovo ThinkPad 13"),(0,n.kt)("li",{parentName:"ul"},"Lenovo ThinkPad A485 (with latest BIOS update)"),(0,n.kt)("li",{parentName:"ul"},"Lenovo ThinkPad E450"),(0,n.kt)("li",{parentName:"ul"},"Lenovo ThinkPad E550"),(0,n.kt)("li",{parentName:"ul"},"Lenovo ThinkPad Edge E545"),(0,n.kt)("li",{parentName:"ul"},"Lenovo Thinkpad L412"),(0,n.kt)("li",{parentName:"ul"},"Lenovo ThinkPad L440"),(0,n.kt)("li",{parentName:"ul"},"Lenovo ThinkPad L512"),(0,n.kt)("li",{parentName:"ul"},"Lenovo ThinkPad R60e"),(0,n.kt)("li",{parentName:"ul"},"Lenovo ThinkPad S5-S540"),(0,n.kt)("li",{parentName:"ul"},"Lenovo ThinkPad SL510"),(0,n.kt)("li",{parentName:"ul"},"Lenovo Thinkpad T400 (2767V2W)"),(0,n.kt)("li",{parentName:"ul"},"Lenovo ThinkPad T410i"),(0,n.kt)("li",{parentName:"ul"},"Lenovo ThinkPad T420"),(0,n.kt)("li",{parentName:"ul"},"Lenovo ThinkPad T430"),(0,n.kt)("li",{parentName:"ul"},"Lenovo ThinkPad T440"),(0,n.kt)("li",{parentName:"ul"},"Lenovo ThinkPad T440s"),(0,n.kt)("li",{parentName:"ul"},"Lenovo ThinkPad T470"),(0,n.kt)("li",{parentName:"ul"},"Lenovo ThinkPad T470s"),(0,n.kt)("li",{parentName:"ul"},"Lenovo ThinkPad T490s"),(0,n.kt)("li",{parentName:"ul"},"Lenovo ThinkPad T560"),(0,n.kt)("li",{parentName:"ul"},"Lenovo ThinkPad T570"),(0,n.kt)("li",{parentName:"ul"},"Lenovo ThinkPad W520 4270CTO"),(0,n.kt)("li",{parentName:"ul"},"Lenovo ThinkPad X1 Carbon 3rd Edition"),(0,n.kt)("li",{parentName:"ul"},"Lenovo ThinkPad X1 Carbon 4th Edition"),(0,n.kt)("li",{parentName:"ul"},"Lenovo ThinkPad X61"),(0,n.kt)("li",{parentName:"ul"},"Lenovo ThinkPad X200T"),(0,n.kt)("li",{parentName:"ul"},"Lenovo ThinkPad X201"),(0,n.kt)("li",{parentName:"ul"},"Lenovo ThinkPad X220"),(0,n.kt)("li",{parentName:"ul"},"Lenovo ThinkPad X230"),(0,n.kt)("li",{parentName:"ul"},"Lenovo ThinkPad X280"),(0,n.kt)("li",{parentName:"ul"},"Lenovo Yoga 2 11"),(0,n.kt)("li",{parentName:"ul"},"Lenovo Z50-70")),(0,n.kt)("h2",{id:"msi"},"MSI"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"MSI GE70")),(0,n.kt)("h2",{id:"samsung"},"Samsung"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Samsung NP270E5E-X02PL"),(0,n.kt)("li",{parentName:"ul"},"Samsung NP300E4C-AD5BR"),(0,n.kt)("li",{parentName:"ul"},"Samsung NP355E5C"),(0,n.kt)("li",{parentName:"ul"},"Samsung NP365E5C-S04US"),(0,n.kt)("li",{parentName:"ul"},"Samsung NP900X3G"),(0,n.kt)("li",{parentName:"ul"},"Samsung NP900X4C-AU05")),(0,n.kt)("h2",{id:"schenker"},"Schenker"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Schenker XMG A506-VE")),(0,n.kt)("h2",{id:"sony"},"Sony"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Sony VAIO Pro 13"),(0,n.kt)("li",{parentName:"ul"},"Sony VAIO S Series 13"),(0,n.kt)("li",{parentName:"ul"},"Sony VAIO VPCEC3M1E")),(0,n.kt)("h2",{id:"system76"},"System76"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"System76 Gazelle Professional")),(0,n.kt)("h2",{id:"toshiba"},"Toshiba"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Toshiba Portege R930"),(0,n.kt)("li",{parentName:"ul"},"Toshiba Qosmio X305"),(0,n.kt)("li",{parentName:"ul"},"Toshiba Qosmio X875"),(0,n.kt)("li",{parentName:"ul"},"Toshiba Satellite A660"),(0,n.kt)("li",{parentName:"ul"},"Toshiba Satellite C50D-A-125"),(0,n.kt)("li",{parentName:"ul"},"Toshiba Satellite C55D"),(0,n.kt)("li",{parentName:"ul"},"Toshiba Satellite C640"),(0,n.kt)("li",{parentName:"ul"},"Toshiba Satellite C665D"),(0,n.kt)("li",{parentName:"ul"},"Toshiba Satellite L300D"),(0,n.kt)("li",{parentName:"ul"},"Toshiba Satellite L455D"),(0,n.kt)("li",{parentName:"ul"},"Toshiba Satellite L850-B218"),(0,n.kt)("li",{parentName:"ul"},"Toshiba Satellite L855D"),(0,n.kt)("li",{parentName:"ul"},"Toshiba Tecra A11")))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/be79d003.aafcea05.js b/assets/js/be79d003.83b54d5b.js similarity index 98% rename from assets/js/be79d003.aafcea05.js rename to assets/js/be79d003.83b54d5b.js index 0e6c63e28..7af7555f3 100644 --- a/assets/js/be79d003.aafcea05.js +++ b/assets/js/be79d003.83b54d5b.js @@ -1 +1 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[6012],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>g});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function p(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var l=r.createContext({}),s=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):p(p({},t),e)),n},c=function(e){var t=s(e.components);return r.createElement(l.Provider,{value:t},e.children)},d="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,l=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),d=s(n),m=a,g=d["".concat(l,".").concat(m)]||d[m]||u[m]||o;return n?r.createElement(g,p(p({ref:t},c),{},{components:n})):r.createElement(g,p({ref:t},c))}));function g(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,p=new Array(o);p[0]=m;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i[d]="string"==typeof e?e:a,p[1]=i;for(var s=2;s{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>p,default:()=>u,frontMatter:()=>o,metadata:()=>i,toc:()=>s});var r=n(7462),a=(n(7294),n(3905));const o={title:"Update Your Development Environment",summary:"Update your development environment before working on a package",sidebar_position:2},p="Update Your Development Environment",i={unversionedId:"packaging/update-dev-environment",id:"packaging/update-dev-environment",title:"Update Your Development Environment",description:"Update the development tools and the system",source:"@site/docs/packaging/update-dev-environment.md",sourceDirName:"packaging",slug:"/packaging/update-dev-environment",permalink:"/docs/packaging/update-dev-environment",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/update-dev-environment.md",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",sidebarPosition:2,frontMatter:{title:"Update Your Development Environment",summary:"Update your development environment before working on a package",sidebar_position:2},sidebar:"packagingSidebar",previous:{title:"Prepare for Packaging",permalink:"/docs/packaging/prepare-for-packaging"},next:{title:"Creating a New Package",permalink:"/docs/packaging/creating-a-new-package"}},l={},s=[{value:"Update the development tools and the system",id:"update-the-development-tools-and-the-system",level:2}],c={toc:s},d="wrapper";function u(e){let{components:t,...n}=e;return(0,a.kt)(d,(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"update-your-development-environment"},"Update Your Development Environment"),(0,a.kt)("h2",{id:"update-the-development-tools-and-the-system"},"Update the development tools and the system"),(0,a.kt)("p",null,"Always make sure your development environment and system are up to date before beginning work on a package. First, update the development tools and system"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"Update common"),(0,a.kt)("li",{parentName:"ol"},"Update the solbuild base image ",(0,a.kt)("inlineCode",{parentName:"li"},"sudo solbuild update")),(0,a.kt)("li",{parentName:"ol"},"Update the system.")),(0,a.kt)("p",null,"The below assumes your Solus packaging directories are under ",(0,a.kt)("inlineCode",{parentName:"p"},"~/solus-builds")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"cd ~/solus-builds/common\ngit pull\nsudo solbuild update\nsudo eopkg up\n")),(0,a.kt)("p",null,"Next, you can either ",(0,a.kt)("a",{parentName:"p",href:"/docs/packaging/creating-a-new-package"},"Submit a New Package")," or ",(0,a.kt)("a",{parentName:"p",href:"/docs/packaging/updating-an-existing-package"},"Update an Existing Package")))}u.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[6012],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>g});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function p(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var l=r.createContext({}),s=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):p(p({},t),e)),n},c=function(e){var t=s(e.components);return r.createElement(l.Provider,{value:t},e.children)},d="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,l=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),d=s(n),m=a,g=d["".concat(l,".").concat(m)]||d[m]||u[m]||o;return n?r.createElement(g,p(p({ref:t},c),{},{components:n})):r.createElement(g,p({ref:t},c))}));function g(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,p=new Array(o);p[0]=m;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i[d]="string"==typeof e?e:a,p[1]=i;for(var s=2;s{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>p,default:()=>u,frontMatter:()=>o,metadata:()=>i,toc:()=>s});var r=n(7462),a=(n(7294),n(3905));const o={title:"Update Your Development Environment",summary:"Update your development environment before working on a package",sidebar_position:2},p="Update Your Development Environment",i={unversionedId:"packaging/update-dev-environment",id:"packaging/update-dev-environment",title:"Update Your Development Environment",description:"Update the development tools and the system",source:"@site/docs/packaging/update-dev-environment.md",sourceDirName:"packaging",slug:"/packaging/update-dev-environment",permalink:"/docs/packaging/update-dev-environment",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/update-dev-environment.md",tags:[],version:"current",lastUpdatedAt:1695222528,formattedLastUpdatedAt:"Sep 20, 2023",sidebarPosition:2,frontMatter:{title:"Update Your Development Environment",summary:"Update your development environment before working on a package",sidebar_position:2},sidebar:"packagingSidebar",previous:{title:"Prepare for Packaging",permalink:"/docs/packaging/prepare-for-packaging"},next:{title:"Creating a New Package",permalink:"/docs/packaging/creating-a-new-package"}},l={},s=[{value:"Update the development tools and the system",id:"update-the-development-tools-and-the-system",level:2}],c={toc:s},d="wrapper";function u(e){let{components:t,...n}=e;return(0,a.kt)(d,(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"update-your-development-environment"},"Update Your Development Environment"),(0,a.kt)("h2",{id:"update-the-development-tools-and-the-system"},"Update the development tools and the system"),(0,a.kt)("p",null,"Always make sure your development environment and system are up to date before beginning work on a package. First, update the development tools and system"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"Update common"),(0,a.kt)("li",{parentName:"ol"},"Update the solbuild base image ",(0,a.kt)("inlineCode",{parentName:"li"},"sudo solbuild update")),(0,a.kt)("li",{parentName:"ol"},"Update the system.")),(0,a.kt)("p",null,"The below assumes your Solus packaging directories are under ",(0,a.kt)("inlineCode",{parentName:"p"},"~/solus-builds")),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-bash"},"cd ~/solus-builds/common\ngit pull\nsudo solbuild update\nsudo eopkg up\n")),(0,a.kt)("p",null,"Next, you can either ",(0,a.kt)("a",{parentName:"p",href:"/docs/packaging/creating-a-new-package"},"Submit a New Package")," or ",(0,a.kt)("a",{parentName:"p",href:"/docs/packaging/updating-an-existing-package"},"Update an Existing Package")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/c50daad9.fb5ec8b4.js b/assets/js/c50daad9.fb5ec8b4.js deleted file mode 100644 index ed121b1e7..000000000 --- a/assets/js/c50daad9.fb5ec8b4.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[8012],{3905:(e,t,o)=>{o.d(t,{Zo:()=>u,kt:()=>d});var r=o(7294);function n(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function i(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,r)}return o}function a(e){for(var t=1;t=0||(n[o]=e[o]);return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(n[o]=e[o])}return n}var p=r.createContext({}),c=function(e){var t=r.useContext(p),o=t;return e&&(o="function"==typeof e?e(t):a(a({},t),e)),o},u=function(e){var t=c(e.components);return r.createElement(p.Provider,{value:t},e.children)},l="mdxType",g={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var o=e.components,n=e.mdxType,i=e.originalType,p=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),l=c(o),m=n,d=l["".concat(p,".").concat(m)]||l[m]||g[m]||i;return o?r.createElement(d,a(a({ref:t},u),{},{components:o})):r.createElement(d,a({ref:t},u))}));function d(e,t){var o=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var i=o.length,a=new Array(i);a[0]=m;var s={};for(var p in t)hasOwnProperty.call(t,p)&&(s[p]=t[p]);s.originalType=e,s[l]="string"==typeof e?e:n,a[1]=s;for(var c=2;c{o.r(t),o.d(t,{assets:()=>p,contentTitle:()=>a,default:()=>g,frontMatter:()=>i,metadata:()=>s,toc:()=>c});var r=o(7462),n=(o(7294),o(3905));const i={title:"Migrating Existing Repos to GitHub",summary:"Migrate Your Existing Repos From Phab to GitHub"},a="How To Migrate Pre-existing Repos and common to GitHub",s={unversionedId:"packaging/procedures/migrate-repos-to-github",id:"packaging/procedures/migrate-repos-to-github",title:"Migrating Existing Repos to GitHub",description:"This is intended for people who have cloned package repos from Phabricator in the past. The information below will help you migrate your common repo and existing repo clones to work with our GitHub.",source:"@site/docs/packaging/procedures/migrate-repos-to-github.md",sourceDirName:"packaging/procedures",slug:"/packaging/procedures/migrate-repos-to-github",permalink:"/docs/packaging/procedures/migrate-repos-to-github",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/procedures/migrate-repos-to-github.md",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Migrating Existing Repos to GitHub",summary:"Migrate Your Existing Repos From Phab to GitHub"},sidebar:"packagingSidebar",previous:{title:"Maintainership",permalink:"/docs/packaging/procedures/maintainership"},next:{title:"Package Inclusion Policy",permalink:"/docs/packaging/procedures/package-inclusion"}},p={},c=[],u={toc:c},l="wrapper";function g(e){let{components:t,...o}=e;return(0,n.kt)(l,(0,r.Z)({},u,o,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"how-to-migrate-pre-existing-repos-and-common-to-github"},"How To Migrate Pre-existing Repos and ",(0,n.kt)("inlineCode",{parentName:"h1"},"common")," to GitHub"),(0,n.kt)("admonition",{type:"info"},(0,n.kt)("p",{parentName:"admonition"},"This is intended for people who have cloned package repos from Phabricator in the past. The information below will help you migrate your ",(0,n.kt)("inlineCode",{parentName:"p"},"common")," repo and existing repo clones to work with our GitHub.")),(0,n.kt)("p",null,"This document assumes your packages are stored under the folder ",(0,n.kt)("inlineCode",{parentName:"p"},"~/solus-builds"),", adjust the commands to match the directory name on your system."),(0,n.kt)("p",null,"People who have set up repos before the migration to GitHub will have git remote URLs pointing to dev.getsol.us. To see if this is the case, change to the common directory, and run the following to double check:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"cd ~/solus-builds/common\n\u276f git remote -v\norigin https://dev.getsol.us/source/common.git (fetch)\norigin https://dev.getsol.us/source/common.git (push)\n\n")),(0,n.kt)("p",null,"You will need to make sure you are on the master branch and update the git remote URLs:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"cd ~/solus-builds/common\ngit switch master\ngit remote set-url origin https://github.com/getsolus/common\ngit remote set-url --push origin git@github.com:getsolus/common.git\ngit pull\ngit status\n")),(0,n.kt)("p",null,"The output should indicate you are up to date with origin/master and that your working tree is clean. If not, please reach out to the Solus Packaging team on ",(0,n.kt)("a",{parentName:"p",href:"/docs/user/contributing/getting-involved#matrix-chat"},"Matrix"),"."),(0,n.kt)("p",null,"Next, run this script to update all repos from Phab to GitHub:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"cd ..\n./common/switch_repo_domains\n")))}g.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/c55c138b.abba0708.js b/assets/js/c55c138b.5173adc3.js similarity index 99% rename from assets/js/c55c138b.abba0708.js rename to assets/js/c55c138b.5173adc3.js index 0f098d63f..ff9977bdc 100644 --- a/assets/js/c55c138b.abba0708.js +++ b/assets/js/c55c138b.5173adc3.js @@ -1 +1 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[7465],{3905:(e,a,t)=>{t.d(a,{Zo:()=>c,kt:()=>d});var n=t(7294);function i(e,a,t){return a in e?Object.defineProperty(e,a,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[a]=t,e}function r(e,a){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),t.push.apply(t,n)}return t}function o(e){for(var a=1;a=0||(i[t]=e[t]);return i}(e,a);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(i[t]=e[t])}return i}var s=n.createContext({}),p=function(e){var a=n.useContext(s),t=a;return e&&(t="function"==typeof e?e(a):o(o({},a),e)),t},c=function(e){var a=p(e.components);return n.createElement(s.Provider,{value:a},e.children)},g="mdxType",m={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},u=n.forwardRef((function(e,a){var t=e.components,i=e.mdxType,r=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),g=p(t),u=i,d=g["".concat(s,".").concat(u)]||g[u]||m[u]||r;return t?n.createElement(d,o(o({ref:a},c),{},{components:t})):n.createElement(d,o({ref:a},c))}));function d(e,a){var t=arguments,i=a&&a.mdxType;if("string"==typeof e||i){var r=t.length,o=new Array(r);o[0]=u;var l={};for(var s in a)hasOwnProperty.call(a,s)&&(l[s]=a[s]);l.originalType=e,l[g]="string"==typeof e?e:i,o[1]=l;for(var p=2;p{t.r(a),t.d(a,{assets:()=>s,contentTitle:()=>o,default:()=>m,frontMatter:()=>r,metadata:()=>l,toc:()=>p});var n=t(7462),i=(t(7294),t(3905));const r={title:"Packaging Changes",summary:"Changes to packaging environment and instructions",sidebar_position:7},o="Packaging Changes",l={unversionedId:"packaging/packaging-changes",id:"packaging/packaging-changes",title:"Packaging Changes",description:"This page is meant to serve as a changelog of sorts for the Solus packaging environment and the packaging instructions. Refer to specific help pages for more details.",source:"@site/docs/packaging/packaging-changes.md",sourceDirName:"packaging",slug:"/packaging/packaging-changes",permalink:"/docs/packaging/packaging-changes",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/packaging-changes.md",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",sidebarPosition:7,frontMatter:{title:"Packaging Changes",summary:"Changes to packaging environment and instructions",sidebar_position:7},sidebar:"packagingSidebar",previous:{title:"Submitting a Pull Request for Review",permalink:"/docs/packaging/submitting-a-pull-request"},next:{title:"Advanced Configuration",permalink:"/docs/category/advanced-configuration"}},s={},p=[{value:"Upcoming",id:"upcoming",level:2},{value:"Requiring homepage in package.yml",id:"requiring-homepage-in-packageyml",level:4},{value:"2023",id:"2023",level:2},{value:"September",id:"september",level:3},{value:"Switching From make to go-task",id:"switching-from-make-to-go-task",level:4},{value:"GitHub Monorepo Migration",id:"github-monorepo-migration",level:4},{value:"August",id:"august",level:3},{value:"Initial GitHub Migration from old Phabricator Dev Tracker",id:"initial-github-migration-from-old-phabricator-dev-tracker",level:4},{value:"April",id:"april",level:3},{value:"2022 and Earlier",id:"2022-and-earlier",level:2}],c={toc:p},g="wrapper";function m(e){let{components:a,...t}=e;return(0,i.kt)(g,(0,n.Z)({},c,t,{components:a,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"packaging-changes"},"Packaging Changes"),(0,i.kt)("p",null,"This page is meant to serve as a changelog of sorts for the Solus packaging environment and the packaging instructions. Refer to specific help pages for more details."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"This list is not exhaustive"),(0,i.kt)("li",{parentName:"ul"},"This list is in ",(0,i.kt)("em",{parentName:"li"},"reverse chronological order")," (newest first)")),(0,i.kt)("h2",{id:"upcoming"},"Upcoming"),(0,i.kt)("p",null,(0,i.kt)("em",{parentName:"p"},"These items are not mandatory yet, and are subject to change")),(0,i.kt)("h4",{id:"requiring-homepage-in-packageyml"},"Requiring ",(0,i.kt)("inlineCode",{parentName:"h4"},"homepage")," in ",(0,i.kt)("inlineCode",{parentName:"h4"},"package.yml")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"The ",(0,i.kt)("inlineCode",{parentName:"li"},"homepage")," key in ",(0,i.kt)("inlineCode",{parentName:"li"},"package.yml")," will become mandatory. If a package does not have a homepage, use the address for the upstream source."),(0,i.kt)("li",{parentName:"ul"},"We are exploring how to enforce this; for now we will ask nicely.")),(0,i.kt)("h2",{id:"2023"},"2023"),(0,i.kt)("h3",{id:"september"},"September"),(0,i.kt)("h4",{id:"switching-from-make-to-go-task"},"Switching From ",(0,i.kt)("inlineCode",{parentName:"h4"},"make")," to ",(0,i.kt)("inlineCode",{parentName:"h4"},"go-task")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"All packaging actions are now handled by ",(0,i.kt)("inlineCode",{parentName:"li"},"go-task")," rather than ",(0,i.kt)("inlineCode",{parentName:"li"},"make"),".",(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},"Building a package can be done using ",(0,i.kt)("inlineCode",{parentName:"li"},"go-task")," rather than ",(0,i.kt)("inlineCode",{parentName:"li"},"make"),"."),(0,i.kt)("li",{parentName:"ul"},"Commands are the same: ",(0,i.kt)("inlineCode",{parentName:"li"},"make local"),", for example, is replaced by ",(0,i.kt)("inlineCode",{parentName:"li"},"go-task local"),"."),(0,i.kt)("li",{parentName:"ul"},"You can see all available commands by either browsing to ",(0,i.kt)("inlineCode",{parentName:"li"},"Taskfile.yml")," in the ",(0,i.kt)("inlineCode",{parentName:"li"},"packages")," repo at ",(0,i.kt)("a",{parentName:"li",href:"https://github.com/getsolus/packages/blob/main/common/Taskfile.yml"},(0,i.kt)("inlineCode",{parentName:"a"},"common/Taskfile.yml"))," OR running ",(0,i.kt)("inlineCode",{parentName:"li"},"go-task -l")," somewhere in your updated clone of the packages git monorepo."))),(0,i.kt)("li",{parentName:"ul"},"Packagers should install ",(0,i.kt)("inlineCode",{parentName:"li"},"go-task")," on their machines if they have not already."),(0,i.kt)("li",{parentName:"ul"},"The ",(0,i.kt)("inlineCode",{parentName:"li"},"Makefile")," included with every package is no longer required. Please delete it from a package when updating, and do not include it when making the initial commit of a new package.")),(0,i.kt)("h4",{id:"github-monorepo-migration"},"GitHub Monorepo Migration"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Packages were moved from the initial multirepo setup to the ",(0,i.kt)("inlineCode",{parentName:"li"},"packages")," monorepo: ",(0,i.kt)("a",{parentName:"li",href:"https://github.com/getsolus/packages"},"github.com/getsolus/packages")," Now packagers only need to clone/fork one repository for all packages."),(0,i.kt)("li",{parentName:"ul"},"The recommended migration strategy is to fork this repository and start with a clean clone. Any local changes to packages should be moved over manually."),(0,i.kt)("li",{parentName:"ul"},"Packagers should now title commits like ",(0,i.kt)("inlineCode",{parentName:"li"},"packagename: Action"),"; for example: ",(0,i.kt)("inlineCode",{parentName:"li"},"nano: Update to 9.0"),". Generic titles like ",(0,i.kt)("inlineCode",{parentName:"li"},"Update to 9.0")," should not be used, except for rebuilds."),(0,i.kt)("li",{parentName:"ul"},"Packagers should use the pull request template for package updates, filling out the Summary and Test Plan sections as usual.")),(0,i.kt)("h3",{id:"august"},"August"),(0,i.kt)("h4",{id:"initial-github-migration-from-old-phabricator-dev-tracker"},"Initial GitHub Migration from old Phabricator Dev Tracker"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("em",{parentName:"li"},"This change was superseded by the later monorepo migration.")),(0,i.kt)("li",{parentName:"ul"},"The new multirepo setup for packages was under ",(0,i.kt)("inlineCode",{parentName:"li"},"github.com/solus-packages")," organization, packages were updated with PRs to individual repositories."),(0,i.kt)("li",{parentName:"ul"},"Issues were migrated to ",(0,i.kt)("inlineCode",{parentName:"li"},"github.com/getsolus/packages")," from Phabricator. ",(0,i.kt)("em",{parentName:"li"},"Closed issues were not migrated.")),(0,i.kt)("li",{parentName:"ul"},"A read-only instance of the old Dev Tracker is available at ",(0,i.kt)("a",{parentName:"li",href:"https://phab.getsol.us"},"phab.getsol.us"),". ",(0,i.kt)("em",{parentName:"li"},"This will eventually be shut down."))),(0,i.kt)("h3",{id:"april"},"April"),(0,i.kt)("p",null,"The repository index was moved to ",(0,i.kt)("inlineCode",{parentName:"p"},"cdn.getsol.us"),"."),(0,i.kt)("h2",{id:"2022-and-earlier"},"2022 and Earlier"),(0,i.kt)("p",null,"Not included in this list."))}m.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[7465],{3905:(e,a,t)=>{t.d(a,{Zo:()=>c,kt:()=>d});var n=t(7294);function i(e,a,t){return a in e?Object.defineProperty(e,a,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[a]=t,e}function r(e,a){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);a&&(n=n.filter((function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable}))),t.push.apply(t,n)}return t}function o(e){for(var a=1;a=0||(i[t]=e[t]);return i}(e,a);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(i[t]=e[t])}return i}var s=n.createContext({}),p=function(e){var a=n.useContext(s),t=a;return e&&(t="function"==typeof e?e(a):o(o({},a),e)),t},c=function(e){var a=p(e.components);return n.createElement(s.Provider,{value:a},e.children)},g="mdxType",m={inlineCode:"code",wrapper:function(e){var a=e.children;return n.createElement(n.Fragment,{},a)}},u=n.forwardRef((function(e,a){var t=e.components,i=e.mdxType,r=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),g=p(t),u=i,d=g["".concat(s,".").concat(u)]||g[u]||m[u]||r;return t?n.createElement(d,o(o({ref:a},c),{},{components:t})):n.createElement(d,o({ref:a},c))}));function d(e,a){var t=arguments,i=a&&a.mdxType;if("string"==typeof e||i){var r=t.length,o=new Array(r);o[0]=u;var l={};for(var s in a)hasOwnProperty.call(a,s)&&(l[s]=a[s]);l.originalType=e,l[g]="string"==typeof e?e:i,o[1]=l;for(var p=2;p{t.r(a),t.d(a,{assets:()=>s,contentTitle:()=>o,default:()=>m,frontMatter:()=>r,metadata:()=>l,toc:()=>p});var n=t(7462),i=(t(7294),t(3905));const r={title:"Packaging Changes",summary:"Changes to packaging environment and instructions",sidebar_position:7},o="Packaging Changes",l={unversionedId:"packaging/packaging-changes",id:"packaging/packaging-changes",title:"Packaging Changes",description:"This page is meant to serve as a changelog of sorts for the Solus packaging environment and the packaging instructions. Refer to specific help pages for more details.",source:"@site/docs/packaging/packaging-changes.md",sourceDirName:"packaging",slug:"/packaging/packaging-changes",permalink:"/docs/packaging/packaging-changes",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/packaging-changes.md",tags:[],version:"current",lastUpdatedAt:1695222528,formattedLastUpdatedAt:"Sep 20, 2023",sidebarPosition:7,frontMatter:{title:"Packaging Changes",summary:"Changes to packaging environment and instructions",sidebar_position:7},sidebar:"packagingSidebar",previous:{title:"Submitting a Pull Request for Review",permalink:"/docs/packaging/submitting-a-pull-request"},next:{title:"Advanced Configuration",permalink:"/docs/category/advanced-configuration"}},s={},p=[{value:"Upcoming",id:"upcoming",level:2},{value:"Requiring homepage in package.yml",id:"requiring-homepage-in-packageyml",level:4},{value:"2023",id:"2023",level:2},{value:"September",id:"september",level:3},{value:"Switching From make to go-task",id:"switching-from-make-to-go-task",level:4},{value:"GitHub Monorepo Migration",id:"github-monorepo-migration",level:4},{value:"August",id:"august",level:3},{value:"Initial GitHub Migration from old Phabricator Dev Tracker",id:"initial-github-migration-from-old-phabricator-dev-tracker",level:4},{value:"April",id:"april",level:3},{value:"2022 and Earlier",id:"2022-and-earlier",level:2}],c={toc:p},g="wrapper";function m(e){let{components:a,...t}=e;return(0,i.kt)(g,(0,n.Z)({},c,t,{components:a,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"packaging-changes"},"Packaging Changes"),(0,i.kt)("p",null,"This page is meant to serve as a changelog of sorts for the Solus packaging environment and the packaging instructions. Refer to specific help pages for more details."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"This list is not exhaustive"),(0,i.kt)("li",{parentName:"ul"},"This list is in ",(0,i.kt)("em",{parentName:"li"},"reverse chronological order")," (newest first)")),(0,i.kt)("h2",{id:"upcoming"},"Upcoming"),(0,i.kt)("p",null,(0,i.kt)("em",{parentName:"p"},"These items are not mandatory yet, and are subject to change")),(0,i.kt)("h4",{id:"requiring-homepage-in-packageyml"},"Requiring ",(0,i.kt)("inlineCode",{parentName:"h4"},"homepage")," in ",(0,i.kt)("inlineCode",{parentName:"h4"},"package.yml")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"The ",(0,i.kt)("inlineCode",{parentName:"li"},"homepage")," key in ",(0,i.kt)("inlineCode",{parentName:"li"},"package.yml")," will become mandatory. If a package does not have a homepage, use the address for the upstream source."),(0,i.kt)("li",{parentName:"ul"},"We are exploring how to enforce this; for now we will ask nicely.")),(0,i.kt)("h2",{id:"2023"},"2023"),(0,i.kt)("h3",{id:"september"},"September"),(0,i.kt)("h4",{id:"switching-from-make-to-go-task"},"Switching From ",(0,i.kt)("inlineCode",{parentName:"h4"},"make")," to ",(0,i.kt)("inlineCode",{parentName:"h4"},"go-task")),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"All packaging actions are now handled by ",(0,i.kt)("inlineCode",{parentName:"li"},"go-task")," rather than ",(0,i.kt)("inlineCode",{parentName:"li"},"make"),".",(0,i.kt)("ul",{parentName:"li"},(0,i.kt)("li",{parentName:"ul"},"Building a package can be done using ",(0,i.kt)("inlineCode",{parentName:"li"},"go-task")," rather than ",(0,i.kt)("inlineCode",{parentName:"li"},"make"),"."),(0,i.kt)("li",{parentName:"ul"},"Commands are the same: ",(0,i.kt)("inlineCode",{parentName:"li"},"make local"),", for example, is replaced by ",(0,i.kt)("inlineCode",{parentName:"li"},"go-task local"),"."),(0,i.kt)("li",{parentName:"ul"},"You can see all available commands by either browsing to ",(0,i.kt)("inlineCode",{parentName:"li"},"Taskfile.yml")," in the ",(0,i.kt)("inlineCode",{parentName:"li"},"packages")," repo at ",(0,i.kt)("a",{parentName:"li",href:"https://github.com/getsolus/packages/blob/main/common/Taskfile.yml"},(0,i.kt)("inlineCode",{parentName:"a"},"common/Taskfile.yml"))," OR running ",(0,i.kt)("inlineCode",{parentName:"li"},"go-task -l")," somewhere in your updated clone of the packages git monorepo."))),(0,i.kt)("li",{parentName:"ul"},"Packagers should install ",(0,i.kt)("inlineCode",{parentName:"li"},"go-task")," on their machines if they have not already."),(0,i.kt)("li",{parentName:"ul"},"The ",(0,i.kt)("inlineCode",{parentName:"li"},"Makefile")," included with every package is no longer required. Please delete it from a package when updating, and do not include it when making the initial commit of a new package.")),(0,i.kt)("h4",{id:"github-monorepo-migration"},"GitHub Monorepo Migration"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Packages were moved from the initial multirepo setup to the ",(0,i.kt)("inlineCode",{parentName:"li"},"packages")," monorepo: ",(0,i.kt)("a",{parentName:"li",href:"https://github.com/getsolus/packages"},"github.com/getsolus/packages")," Now packagers only need to clone/fork one repository for all packages."),(0,i.kt)("li",{parentName:"ul"},"The recommended migration strategy is to fork this repository and start with a clean clone. Any local changes to packages should be moved over manually."),(0,i.kt)("li",{parentName:"ul"},"Packagers should now title commits like ",(0,i.kt)("inlineCode",{parentName:"li"},"packagename: Action"),"; for example: ",(0,i.kt)("inlineCode",{parentName:"li"},"nano: Update to 9.0"),". Generic titles like ",(0,i.kt)("inlineCode",{parentName:"li"},"Update to 9.0")," should not be used, except for rebuilds."),(0,i.kt)("li",{parentName:"ul"},"Packagers should use the pull request template for package updates, filling out the Summary and Test Plan sections as usual.")),(0,i.kt)("h3",{id:"august"},"August"),(0,i.kt)("h4",{id:"initial-github-migration-from-old-phabricator-dev-tracker"},"Initial GitHub Migration from old Phabricator Dev Tracker"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("em",{parentName:"li"},"This change was superseded by the later monorepo migration.")),(0,i.kt)("li",{parentName:"ul"},"The new multirepo setup for packages was under ",(0,i.kt)("inlineCode",{parentName:"li"},"github.com/solus-packages")," organization, packages were updated with PRs to individual repositories."),(0,i.kt)("li",{parentName:"ul"},"Issues were migrated to ",(0,i.kt)("inlineCode",{parentName:"li"},"github.com/getsolus/packages")," from Phabricator. ",(0,i.kt)("em",{parentName:"li"},"Closed issues were not migrated.")),(0,i.kt)("li",{parentName:"ul"},"A read-only instance of the old Dev Tracker is available at ",(0,i.kt)("a",{parentName:"li",href:"https://phab.getsol.us"},"phab.getsol.us"),". ",(0,i.kt)("em",{parentName:"li"},"This will eventually be shut down."))),(0,i.kt)("h3",{id:"april"},"April"),(0,i.kt)("p",null,"The repository index was moved to ",(0,i.kt)("inlineCode",{parentName:"p"},"cdn.getsol.us"),"."),(0,i.kt)("h2",{id:"2022-and-earlier"},"2022 and Earlier"),(0,i.kt)("p",null,"Not included in this list."))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/c5de29d4.01d7dcec.js b/assets/js/c5de29d4.c4bbf0f0.js similarity index 82% rename from assets/js/c5de29d4.01d7dcec.js rename to assets/js/c5de29d4.c4bbf0f0.js index 7133b1ac4..feaa32525 100644 --- a/assets/js/c5de29d4.01d7dcec.js +++ b/assets/js/c5de29d4.c4bbf0f0.js @@ -1 +1 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[3851],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>k});var n=a(7294);function i(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function r(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function o(e){for(var t=1;t=0||(i[a]=e[a]);return i}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(i[a]=e[a])}return i}var s=n.createContext({}),p=function(e){var t=n.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):o(o({},t),e)),a},c=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},u="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var a=e.components,i=e.mdxType,r=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=p(a),d=i,k=u["".concat(s,".").concat(d)]||u[d]||m[d]||r;return a?n.createElement(k,o(o({ref:t},c),{},{components:a})):n.createElement(k,o({ref:t},c))}));function k(e,t){var a=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var r=a.length,o=new Array(r);o[0]=d;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[u]="string"==typeof e?e:i,o[1]=l;for(var p=2;p{a.d(t,{ZP:()=>l});var n=a(7462),i=(a(7294),a(3905));const r={toc:[]},o="wrapper";function l(e){let{components:t,...a}=e;return(0,i.kt)(o,(0,n.Z)({},r,a,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("p",{parentName:"admonition"},"The ",(0,i.kt)("inlineCode",{parentName:"p"}," --cleanup=scissors")," flag is necessary. By default, git treats lines starting with # as a comment, and removes them."),(0,i.kt)("p",{parentName:"admonition"},"If you would like to always use this flag without having to type it manually you can do so in one of two ways."),(0,i.kt)("ol",{parentName:"admonition"},(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("p",{parentName:"li"},"Set an alias in ",(0,i.kt)("a",{parentName:"p",href:"https://git-scm.com/docs/git-config#Documentation/git-config.txt-alias"},(0,i.kt)("inlineCode",{parentName:"a"},"~/.gitconfig"))," such as"),(0,i.kt)("pre",{parentName:"li"},(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"cs = commit --cleanup=scissors\n")),(0,i.kt)("p",{parentName:"li"},"You can then use ",(0,i.kt)("inlineCode",{parentName:"p"},"git cs")," which will do the same thing as ",(0,i.kt)("inlineCode",{parentName:"p"},"git commit --cleanup=scissors"),".")),(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("p",{parentName:"li"},"Set your git global config to always use the flag. To do so run"))),(0,i.kt)("pre",{parentName:"admonition"},(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"git config --global commit.cleanup scissors\n"))))}l.isMDXComponent=!0},3284:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>p,contentTitle:()=>l,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>c});var n=a(7462),i=(a(7294),a(3905)),r=a(436);const o={title:"Creating a New Package",summary:"Creating a Package For Inclusion in the Repositories",sidebar_position:3},l="Creating a New Package",s={unversionedId:"packaging/creating-a-new-package",id:"packaging/creating-a-new-package",title:"Creating a New Package",description:"This page will take you through the steps required to build a new package for the Solus package repositories. For this example, we will use the command line utility tree, which is already packaged for Solus, but we will pretend like it's not.",source:"@site/docs/packaging/creating-a-new-package.md",sourceDirName:"packaging",slug:"/packaging/creating-a-new-package",permalink:"/docs/packaging/creating-a-new-package",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/creating-a-new-package.md",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",sidebarPosition:3,frontMatter:{title:"Creating a New Package",summary:"Creating a Package For Inclusion in the Repositories",sidebar_position:3},sidebar:"packagingSidebar",previous:{title:"Update Your Development Environment",permalink:"/docs/packaging/update-dev-environment"},next:{title:"Updating an Existing Package",permalink:"/docs/packaging/updating-an-existing-package"}},p={},c=[{value:"Fork the getsolus/packages Repository / Update Your Fork",id:"fork-the-getsoluspackages-repository--update-your-fork",level:2},{value:"Create a Fork",id:"create-a-fork",level:3},{value:"Update a Fork",id:"update-a-fork",level:3},{value:"Clone the packages repo / update your clone",id:"clone-the-packages-repo--update-your-clone",level:2},{value:"Clone the repo",id:"clone-the-repo",level:3},{value:"Update an existing clone",id:"update-an-existing-clone",level:3},{value:"Create a New Package Directory",id:"create-a-new-package-directory",level:2},{value:"Create The MAINTAINERS.md File",id:"create-the-maintainersmd-file",level:2},{value:"Create the package.yml File",id:"create-the-packageyml-file",level:2},{value:"Build the Package",id:"build-the-package",level:2},{value:"Commit your Changes",id:"commit-your-changes",level:2},{value:"Commit message format for new packages",id:"commit-message-format-for-new-packages",level:3}],u={toc:c},m="wrapper";function d(e){let{components:t,...a}=e;return(0,i.kt)(m,(0,n.Z)({},u,a,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"creating-a-new-package"},"Creating a New Package"),(0,i.kt)("p",null,"This page will take you through the steps required to build a new package for the Solus package repositories. For this example, we will use the command line utility ",(0,i.kt)("a",{parentName:"p",href:"https://gitlab.com/OldManProgrammer/unix-tree"},"tree"),", which is already packaged for Solus, but we will pretend like it's not."),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("p",{parentName:"admonition"},(0,i.kt)("strong",{parentName:"p"},"Please ",(0,i.kt)("a",{parentName:"strong",href:"https://github.com/getsolus/packages/issues?q=label%3A%22Package+Request%22"},"look to see if an issue has been filed")," for the software or library you intend to package"),". If there is an existing request, please add a link to it in your pull request. Ex:"),(0,i.kt)("pre",{parentName:"admonition"},(0,i.kt)("code",{parentName:"pre"},"This PR resolves software request https://github.com/getsolus/packages/issues/123\n"))),(0,i.kt)("h2",{id:"fork-the-getsoluspackages-repository--update-your-fork"},"Fork the getsolus/packages Repository / Update Your Fork"),(0,i.kt)("h3",{id:"create-a-fork"},"Create a Fork"),(0,i.kt)("p",null,"If you had not yet done so already, fork the repo ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/getsolus/packages"},"getsolus/packages")," using the GitHub web UI or ",(0,i.kt)("a",{parentName:"p",href:"https://cli.github.com/manual/gh_repo_fork"},(0,i.kt)("inlineCode",{parentName:"a"},"gh")," cli tool")," from the ",(0,i.kt)("inlineCode",{parentName:"p"},"github-cli")," package. It will be forked to ",(0,i.kt)("inlineCode",{parentName:"p"},"github.com/yourgithubaccount/packages"),"."),(0,i.kt)("h3",{id:"update-a-fork"},"Update a Fork"),(0,i.kt)("p",null,"If you already have a fork of ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/getsolus/packages"},"getsolus/packages")," in GitHub, log into GitHub. Make sure you're looking at the ",(0,i.kt)("inlineCode",{parentName:"p"},"main"),' branch. Check to see that your fork is up to date with the main repo it was forked from. If your fork indicates it is behind, use the "Sync fork" button to bring it up to date.'),(0,i.kt)("h2",{id:"clone-the-packages-repo--update-your-clone"},"Clone the packages repo / update your clone"),(0,i.kt)("h3",{id:"clone-the-repo"},"Clone the repo"),(0,i.kt)("p",null,"From within your packaging directory, clone the fork. Then, change to this directory."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"cd ~/solus-builds\ngh repo clone yourgithubaccount/packages\ncd ~/solus-builds/packages\n")),(0,i.kt)("h3",{id:"update-an-existing-clone"},"Update an existing clone"),(0,i.kt)("p",null,"If you already have a local clone, you need to bring it up to date. To do this run:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"cd ~/solus-builds/packages\ngit switch main\ngit pull\n")),(0,i.kt)("h2",{id:"create-a-new-package-directory"},"Create a New Package Directory"),(0,i.kt)("p",null,"Create a new subdirectory for the new package. Use the package name as the directory name and create it in the appropriate prefix directory in ",(0,i.kt)("inlineCode",{parentName:"p"},"packages")," (usually the first letter of the package)."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"mkdir packages/t/tree\ncd packages/t/tree\n")),(0,i.kt)("p",null,"Now, create a new branch. This will allow you to more easily separate your work from any new changes made to the package repository, which will allow you to more easily rebase any changes if needed. To do so run:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"git switch -c your-branch\n")),(0,i.kt)("h2",{id:"create-the-maintainersmd-file"},"Create The ",(0,i.kt)("inlineCode",{parentName:"h2"},"MAINTAINERS.md")," File"),(0,i.kt)("p",null,"You must add a file called ",(0,i.kt)("inlineCode",{parentName:"p"},"MAINTAINERS.md")," using the template in ",(0,i.kt)("a",{parentName:"p",href:"/docs/packaging/procedures/maintainership"},"Maintainership"),". Solus uses this to track the primary maintainer(s) for each package."),(0,i.kt)("h2",{id:"create-the-packageyml-file"},"Create the ",(0,i.kt)("inlineCode",{parentName:"h2"},"package.yml")," File"),(0,i.kt)("p",null,"You will need a link to the most recent source tarball for this from the software's website."),(0,i.kt)("p",null,"Create a skeleton ",(0,i.kt)("inlineCode",{parentName:"p"},"package.yml")," file using the script ",(0,i.kt)("inlineCode",{parentName:"p"},"common/Scripts/yauto.py")," and the link for the tarball. For example:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"../common/Scripts/yauto.py https://gitlab.com/OldManProgrammer/unix-tree/-/archive/2.1.1/unix-tree-2.1.1.tar.gz\n")),(0,i.kt)("p",null,"Consider creating an alias for this script in your ",(0,i.kt)("inlineCode",{parentName:"p"},".bashrc")," file (or equivalent for your preferred shell)."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},'alias fetchYml="$HOME/solus-builds/common/Scripts/yauto.py"\n')),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("p",{parentName:"admonition"},"You can, of course, create your ",(0,i.kt)("inlineCode",{parentName:"p"},"package.yml")," file entirely from scratch, but the script will give you a better starting point. We recommend using the script.")),(0,i.kt)("p",null,"Now you should have a ",(0,i.kt)("inlineCode",{parentName:"p"},"package.yml")," file that looks something like this:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml"},"name : unix-tree\nversion : 2.1.1\nrelease : 1\nsource :\n - https://gitlab.com/OldManProgrammer/unix-tree/-/archive/2.1.1/unix-tree-2.1.1.tar.gz : bcd2a0327ad40592a9c43e09a4d2ef834e6f17aa9a59012a5fb1007950b5eced\nhomepage : PLEASE FILL ME IN\nlicense : GPL-2.0-or-later # CHECK ME\ncomponent : PLEASE FILL ME IN\nsummary : PLEASE FILL ME IN\ndescription: |\n PLEASE FILL ME IN\nbuilddeps :\nsetup : |\n %configure\nbuild : |\n %make\ninstall : |\n %make_install\n")),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"yauto.py")," script has filled many fields for us, but not all of them will be right, and some of them need to be filled in. Refer to the ",(0,i.kt)("a",{parentName:"p",href:"/docs/packaging/package.yml"},"package.yml page")," to see how each field should be used."),(0,i.kt)("p",null,"For this example, we need to fix the following:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"The name needs to be ",(0,i.kt)("inlineCode",{parentName:"li"},"tree"),", so update it."),(0,i.kt)("li",{parentName:"ul"},"The ",(0,i.kt)("inlineCode",{parentName:"li"},"license")," is correct, so we remove the comment."),(0,i.kt)("li",{parentName:"ul"},"Fill in ",(0,i.kt)("inlineCode",{parentName:"li"},"homepage"),", ",(0,i.kt)("inlineCode",{parentName:"li"},"component"),", ",(0,i.kt)("inlineCode",{parentName:"li"},"summary"),", and ",(0,i.kt)("inlineCode",{parentName:"li"},"description"),"."),(0,i.kt)("li",{parentName:"ul"},"Remove ",(0,i.kt)("inlineCode",{parentName:"li"},"builddeps"),". This package has no build dependencies beyond the ones already available for every package (the ",(0,i.kt)("inlineCode",{parentName:"li"},"system.devel")," packages)."),(0,i.kt)("li",{parentName:"ul"},"The ",(0,i.kt)("inlineCode",{parentName:"li"},"setup")," step is not required, remove it."),(0,i.kt)("li",{parentName:"ul"},"In the ",(0,i.kt)("inlineCode",{parentName:"li"},"install")," key, we can't use the ",(0,i.kt)("inlineCode",{parentName:"li"},"%make_install")," macro for this package. The files are installed in their correct locations individually.")),(0,i.kt)("p",null,"After updating the file, it will now look like:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml"},"name : tree\nversion : 2.1.1\nrelease : 1\nsource :\n - https://gitlab.com/OldManProgrammer/unix-tree/-/archive/2.1.1/unix-tree-2.1.1.tar.gz : bcd2a0327ad40592a9c43e09a4d2ef834e6f17aa9a59012a5fb1007950b5eced\nhomepage : https://gitlab.com/OldManProgrammer/unix-tree\nlicense : GPL-2.0-or-later\ncomponent : system.utils\nsummary : list contents of directories in a tree-like format.\ndescription: |\n Tree is a recursive directory listing command that produces a depth indented listing of files, which is colorized ala dircolors if the LS_COLORS environment variable is set and output is to tty\nbuild : |\n %make\ninstall : |\n install -Dm00664 $workdir/doc/tree.1 $installdir/usr/share/man/man1/tree.1\n install -Dm00755 $workdir/tree $installdir/usr/bin/tree\n")),(0,i.kt)("p",null,"To read more about finding and including dependencies and other parts of ",(0,i.kt)("inlineCode",{parentName:"p"},"package.yml")," please see ",(0,i.kt)("a",{parentName:"p",href:"/docs/packaging/packaging-practices"},"Packaging Practices"),"."),(0,i.kt)("p",null,"Understanding how to translate source code into a good ",(0,i.kt)("inlineCode",{parentName:"p"},"package.yml")," file is the heart of packaging. If you are stumped, or have questions, ",(0,i.kt)("strong",{parentName:"p"},"ask for help in our Solus Packaging room on ",(0,i.kt)("a",{parentName:"strong",href:"/docs/user/contributing/getting-involved#matrix-chat"},"Matrix"),".")),(0,i.kt)("h2",{id:"build-the-package"},"Build the Package"),(0,i.kt)("p",null,"Build the package with ",(0,i.kt)("inlineCode",{parentName:"p"},"go-task"),"\nOnce the build completes, your directory should now include the following files:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-text"},"\u251c\u2500\u2500 abi_used_libs\n\u251c\u2500\u2500 abi_used_symbols\n\u251c\u2500\u2500 Makefile\n\u251c\u2500\u2500 package.yml\n\u251c\u2500\u2500 pspec_x86_64.xml\n\u2514\u2500\u2500 tree-2.1.1-1-1-x86_64.eopkg\n")),(0,i.kt)("p",null,"All these files ",(0,i.kt)("em",{parentName:"p"},"except")," the ",(0,i.kt)("inlineCode",{parentName:"p"},"*eopkg")," file(s) should be included in your pull request. You will remove the ",(0,i.kt)("inlineCode",{parentName:"p"},".eopkg")," files after testing the package."),(0,i.kt)("p",null,"Once your package has built successfully, you will need to ",(0,i.kt)("a",{parentName:"p",href:"testing-a-package"},"test it"),"."),(0,i.kt)("h2",{id:"commit-your-changes"},"Commit your Changes"),(0,i.kt)("p",null,"Check the ",(0,i.kt)("a",{parentName:"p",href:"git-basics"},"changes in your files"),"."),(0,i.kt)("p",null,(0,i.kt)("a",{parentName:"p",href:"/docs/packaging/git-basics"},"Add / remove files as necessary to the commit"),". Then, ",(0,i.kt)("strong",{parentName:"p"},"check your branch"),"."),(0,i.kt)("p",null,"Run ",(0,i.kt)("inlineCode",{parentName:"p"},"git status"),". Make sure all the files you changed are staged, and that there are no untracked files. When all is well, run ",(0,i.kt)("inlineCode",{parentName:"p"},"git commit --cleanup=scissors"),"."),(0,i.kt)(r.ZP,{mdxType:"GitCommitCleanup"}),(0,i.kt)("h3",{id:"commit-message-format-for-new-packages"},"Commit message format for new packages"),(0,i.kt)("p",null,"There should be a summary line (with the package name), a blank line, and then the rest of the commit message."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"There should at the minimum be a summary and Test Plan."),(0,i.kt)("li",{parentName:"ul"},"Bullet point lists should start with a dash.")),(0,i.kt)("p",null,"Here is an example in our standard format (make sure to check the box in the checklist):"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"tree: initial inclusion in the repository\n\n## Summary\n\nAdd the tree package, which recursively lists directories in a tree like manner.\n\n## Test Plan\n\n- Launched the application\n- Exercised the UI\n- Exercised some feature\n\n## Checklist\n\n- [] Package was built and tested against unstable\n")),(0,i.kt)("p",null,"For more information on suitable commit messages, please check the ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/solus-project/tooling-central/blob/master/README.rst#using-git"},"tooling central documentation"),"."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"If you want to link this pull request to an existing package request, simply mention it in your commit message (use the full URL): ",(0,i.kt)("inlineCode",{parentName:"li"},"The inclusion of resolves https://github.com/getsolus/packages/issues/123")),(0,i.kt)("li",{parentName:"ul"},"If you need a change to depend on another change, mention it in the commit message too (use the full URL): ",(0,i.kt)("inlineCode",{parentName:"li"},"Depends on https://github.com/getsolus/packages/issues/234"))),(0,i.kt)("p",null,"Next, you'll ",(0,i.kt)("a",{parentName:"p",href:"/docs/packaging/submitting-a-pull-request"},"submit a pull request for review"),"."))}d.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[3851],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>k});var n=a(7294);function i(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function r(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function o(e){for(var t=1;t=0||(i[a]=e[a]);return i}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(i[a]=e[a])}return i}var s=n.createContext({}),p=function(e){var t=n.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):o(o({},t),e)),a},c=function(e){var t=p(e.components);return n.createElement(s.Provider,{value:t},e.children)},u="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var a=e.components,i=e.mdxType,r=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),u=p(a),d=i,k=u["".concat(s,".").concat(d)]||u[d]||m[d]||r;return a?n.createElement(k,o(o({ref:t},c),{},{components:a})):n.createElement(k,o({ref:t},c))}));function k(e,t){var a=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var r=a.length,o=new Array(r);o[0]=d;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[u]="string"==typeof e?e:i,o[1]=l;for(var p=2;p{a.d(t,{ZP:()=>l});var n=a(7462),i=(a(7294),a(3905));const r={toc:[]},o="wrapper";function l(e){let{components:t,...a}=e;return(0,i.kt)(o,(0,n.Z)({},r,a,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("p",{parentName:"admonition"},"The ",(0,i.kt)("inlineCode",{parentName:"p"}," --cleanup=scissors")," flag is necessary. By default, git treats lines starting with # as a comment, and removes them."),(0,i.kt)("p",{parentName:"admonition"},"If you would like to always use this flag without having to type it manually you can do so in one of two ways."),(0,i.kt)("ol",{parentName:"admonition"},(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("p",{parentName:"li"},"Set an alias in ",(0,i.kt)("a",{parentName:"p",href:"https://git-scm.com/docs/git-config#Documentation/git-config.txt-alias"},(0,i.kt)("inlineCode",{parentName:"a"},"~/.gitconfig"))," such as"),(0,i.kt)("pre",{parentName:"li"},(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"cs = commit --cleanup=scissors\n")),(0,i.kt)("p",{parentName:"li"},"You can then use ",(0,i.kt)("inlineCode",{parentName:"p"},"git cs")," which will do the same thing as ",(0,i.kt)("inlineCode",{parentName:"p"},"git commit --cleanup=scissors"),".")),(0,i.kt)("li",{parentName:"ol"},(0,i.kt)("p",{parentName:"li"},"Set your git global config to always use the flag. To do so run"))),(0,i.kt)("pre",{parentName:"admonition"},(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"git config --global commit.cleanup scissors\n"))))}l.isMDXComponent=!0},3284:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>p,contentTitle:()=>l,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>c});var n=a(7462),i=(a(7294),a(3905)),r=a(436);const o={title:"Creating a New Package",summary:"Creating a Package For Inclusion in the Repositories",sidebar_position:3},l="Creating a New Package",s={unversionedId:"packaging/creating-a-new-package",id:"packaging/creating-a-new-package",title:"Creating a New Package",description:"This page will take you through the steps required to build a new package for the Solus package repositories. For this example, we will use the command line utility tree, which is already packaged for Solus, but we will pretend like it's not.",source:"@site/docs/packaging/creating-a-new-package.md",sourceDirName:"packaging",slug:"/packaging/creating-a-new-package",permalink:"/docs/packaging/creating-a-new-package",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/creating-a-new-package.md",tags:[],version:"current",lastUpdatedAt:1695222528,formattedLastUpdatedAt:"Sep 20, 2023",sidebarPosition:3,frontMatter:{title:"Creating a New Package",summary:"Creating a Package For Inclusion in the Repositories",sidebar_position:3},sidebar:"packagingSidebar",previous:{title:"Update Your Development Environment",permalink:"/docs/packaging/update-dev-environment"},next:{title:"Updating an Existing Package",permalink:"/docs/packaging/updating-an-existing-package"}},p={},c=[{value:"Fork the getsolus/packages Repository / Update Your Fork",id:"fork-the-getsoluspackages-repository--update-your-fork",level:2},{value:"Create a Fork",id:"create-a-fork",level:3},{value:"Update a Fork",id:"update-a-fork",level:3},{value:"Clone the packages repo / update your clone",id:"clone-the-packages-repo--update-your-clone",level:2},{value:"Clone the repo",id:"clone-the-repo",level:3},{value:"Update an existing clone",id:"update-an-existing-clone",level:3},{value:"Create a New Package Directory",id:"create-a-new-package-directory",level:2},{value:"Create The MAINTAINERS.md File",id:"create-the-maintainersmd-file",level:2},{value:"Create the package.yml File",id:"create-the-packageyml-file",level:2},{value:"Build the Package",id:"build-the-package",level:2},{value:"Commit your Changes",id:"commit-your-changes",level:2},{value:"Commit message format for new packages",id:"commit-message-format-for-new-packages",level:3}],u={toc:c},m="wrapper";function d(e){let{components:t,...a}=e;return(0,i.kt)(m,(0,n.Z)({},u,a,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"creating-a-new-package"},"Creating a New Package"),(0,i.kt)("p",null,"This page will take you through the steps required to build a new package for the Solus package repositories. For this example, we will use the command line utility ",(0,i.kt)("a",{parentName:"p",href:"https://gitlab.com/OldManProgrammer/unix-tree"},"tree"),", which is already packaged for Solus, but we will pretend like it's not."),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("p",{parentName:"admonition"},(0,i.kt)("strong",{parentName:"p"},"Please ",(0,i.kt)("a",{parentName:"strong",href:"https://github.com/getsolus/packages/issues?q=label%3A%22Package+Request%22"},"look to see if an issue has been filed")," for the software or library you intend to package"),". If there is an existing request, please add a link to it in your pull request. Ex:"),(0,i.kt)("pre",{parentName:"admonition"},(0,i.kt)("code",{parentName:"pre"},"This PR resolves software request https://github.com/getsolus/packages/issues/123\n"))),(0,i.kt)("h2",{id:"fork-the-getsoluspackages-repository--update-your-fork"},"Fork the getsolus/packages Repository / Update Your Fork"),(0,i.kt)("h3",{id:"create-a-fork"},"Create a Fork"),(0,i.kt)("p",null,"If you had not yet done so already, fork the repo ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/getsolus/packages"},"getsolus/packages")," using the GitHub web UI or ",(0,i.kt)("a",{parentName:"p",href:"https://cli.github.com/manual/gh_repo_fork"},(0,i.kt)("inlineCode",{parentName:"a"},"gh")," cli tool")," from the ",(0,i.kt)("inlineCode",{parentName:"p"},"github-cli")," package. It will be forked to ",(0,i.kt)("inlineCode",{parentName:"p"},"github.com/yourgithubaccount/packages"),"."),(0,i.kt)("h3",{id:"update-a-fork"},"Update a Fork"),(0,i.kt)("p",null,"If you already have a fork of ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/getsolus/packages"},"getsolus/packages")," in GitHub, log into GitHub. Make sure you're looking at the ",(0,i.kt)("inlineCode",{parentName:"p"},"main"),' branch. Check to see that your fork is up to date with the main repo it was forked from. If your fork indicates it is behind, use the "Sync fork" button to bring it up to date.'),(0,i.kt)("h2",{id:"clone-the-packages-repo--update-your-clone"},"Clone the packages repo / update your clone"),(0,i.kt)("h3",{id:"clone-the-repo"},"Clone the repo"),(0,i.kt)("p",null,"From within your packaging directory, clone the fork. Then, change to this directory."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"cd ~/solus-builds\ngh repo clone yourgithubaccount/packages\ncd ~/solus-builds/packages\n")),(0,i.kt)("h3",{id:"update-an-existing-clone"},"Update an existing clone"),(0,i.kt)("p",null,"If you already have a local clone, you need to bring it up to date. To do this run:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"cd ~/solus-builds/packages\ngit switch main\ngit pull\n")),(0,i.kt)("h2",{id:"create-a-new-package-directory"},"Create a New Package Directory"),(0,i.kt)("p",null,"Create a new subdirectory for the new package. Use the package name as the directory name and create it in the appropriate prefix directory in ",(0,i.kt)("inlineCode",{parentName:"p"},"packages")," (usually the first letter of the package)."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"mkdir packages/t/tree\ncd packages/t/tree\n")),(0,i.kt)("p",null,"Now, create a new branch. This will allow you to more easily separate your work from any new changes made to the package repository, which will allow you to more easily rebase any changes if needed. To do so run:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"git switch -c your-branch\n")),(0,i.kt)("h2",{id:"create-the-maintainersmd-file"},"Create The ",(0,i.kt)("inlineCode",{parentName:"h2"},"MAINTAINERS.md")," File"),(0,i.kt)("p",null,"You must add a file called ",(0,i.kt)("inlineCode",{parentName:"p"},"MAINTAINERS.md")," using the template in ",(0,i.kt)("a",{parentName:"p",href:"/docs/packaging/procedures/maintainership"},"Maintainership"),". Solus uses this to track the primary maintainer(s) for each package."),(0,i.kt)("h2",{id:"create-the-packageyml-file"},"Create the ",(0,i.kt)("inlineCode",{parentName:"h2"},"package.yml")," File"),(0,i.kt)("p",null,"You will need a link to the most recent source tarball for this from the software's website."),(0,i.kt)("p",null,"Create a skeleton ",(0,i.kt)("inlineCode",{parentName:"p"},"package.yml")," file using the script ",(0,i.kt)("inlineCode",{parentName:"p"},"common/Scripts/yauto.py")," and the link for the tarball. For example:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},"../common/Scripts/yauto.py https://gitlab.com/OldManProgrammer/unix-tree/-/archive/2.1.1/unix-tree-2.1.1.tar.gz\n")),(0,i.kt)("p",null,"Consider creating an alias for this script in your ",(0,i.kt)("inlineCode",{parentName:"p"},".bashrc")," file (or equivalent for your preferred shell)."),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-bash"},'alias fetchYml="$HOME/solus-builds/common/Scripts/yauto.py"\n')),(0,i.kt)("admonition",{type:"note"},(0,i.kt)("p",{parentName:"admonition"},"You can, of course, create your ",(0,i.kt)("inlineCode",{parentName:"p"},"package.yml")," file entirely from scratch, but the script will give you a better starting point. We recommend using the script.")),(0,i.kt)("p",null,"Now you should have a ",(0,i.kt)("inlineCode",{parentName:"p"},"package.yml")," file that looks something like this:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml"},"name : unix-tree\nversion : 2.1.1\nrelease : 1\nsource :\n - https://gitlab.com/OldManProgrammer/unix-tree/-/archive/2.1.1/unix-tree-2.1.1.tar.gz : bcd2a0327ad40592a9c43e09a4d2ef834e6f17aa9a59012a5fb1007950b5eced\nhomepage : PLEASE FILL ME IN\nlicense : GPL-2.0-or-later # CHECK ME\ncomponent : PLEASE FILL ME IN\nsummary : PLEASE FILL ME IN\ndescription: |\n PLEASE FILL ME IN\nbuilddeps :\nsetup : |\n %configure\nbuild : |\n %make\ninstall : |\n %make_install\n")),(0,i.kt)("p",null,"The ",(0,i.kt)("inlineCode",{parentName:"p"},"yauto.py")," script has filled many fields for us, but not all of them will be right, and some of them need to be filled in. Refer to the ",(0,i.kt)("a",{parentName:"p",href:"/docs/packaging/package.yml"},"package.yml page")," to see how each field should be used."),(0,i.kt)("p",null,"For this example, we need to fix the following:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"The name needs to be ",(0,i.kt)("inlineCode",{parentName:"li"},"tree"),", so update it."),(0,i.kt)("li",{parentName:"ul"},"The ",(0,i.kt)("inlineCode",{parentName:"li"},"license")," is correct, so we remove the comment."),(0,i.kt)("li",{parentName:"ul"},"Fill in ",(0,i.kt)("inlineCode",{parentName:"li"},"homepage"),", ",(0,i.kt)("inlineCode",{parentName:"li"},"component"),", ",(0,i.kt)("inlineCode",{parentName:"li"},"summary"),", and ",(0,i.kt)("inlineCode",{parentName:"li"},"description"),"."),(0,i.kt)("li",{parentName:"ul"},"Remove ",(0,i.kt)("inlineCode",{parentName:"li"},"builddeps"),". This package has no build dependencies beyond the ones already available for every package (the ",(0,i.kt)("inlineCode",{parentName:"li"},"system.devel")," packages)."),(0,i.kt)("li",{parentName:"ul"},"The ",(0,i.kt)("inlineCode",{parentName:"li"},"setup")," step is not required, remove it."),(0,i.kt)("li",{parentName:"ul"},"In the ",(0,i.kt)("inlineCode",{parentName:"li"},"install")," key, we can't use the ",(0,i.kt)("inlineCode",{parentName:"li"},"%make_install")," macro for this package. The files are installed in their correct locations individually.")),(0,i.kt)("p",null,"After updating the file, it will now look like:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-yaml"},"name : tree\nversion : 2.1.1\nrelease : 1\nsource :\n - https://gitlab.com/OldManProgrammer/unix-tree/-/archive/2.1.1/unix-tree-2.1.1.tar.gz : bcd2a0327ad40592a9c43e09a4d2ef834e6f17aa9a59012a5fb1007950b5eced\nhomepage : https://gitlab.com/OldManProgrammer/unix-tree\nlicense : GPL-2.0-or-later\ncomponent : system.utils\nsummary : list contents of directories in a tree-like format.\ndescription: |\n Tree is a recursive directory listing command that produces a depth indented listing of files, which is colorized ala dircolors if the LS_COLORS environment variable is set and output is to tty\nbuild : |\n %make\ninstall : |\n install -Dm00664 $workdir/doc/tree.1 $installdir/usr/share/man/man1/tree.1\n install -Dm00755 $workdir/tree $installdir/usr/bin/tree\n")),(0,i.kt)("p",null,"To read more about finding and including dependencies and other parts of ",(0,i.kt)("inlineCode",{parentName:"p"},"package.yml")," please see ",(0,i.kt)("a",{parentName:"p",href:"/docs/packaging/packaging-practices"},"Packaging Practices"),"."),(0,i.kt)("p",null,"Understanding how to translate source code into a good ",(0,i.kt)("inlineCode",{parentName:"p"},"package.yml")," file is the heart of packaging. If you are stumped, or have questions, ",(0,i.kt)("strong",{parentName:"p"},"ask for help in our Solus Packaging room on ",(0,i.kt)("a",{parentName:"strong",href:"/docs/user/contributing/getting-involved#matrix-chat"},"Matrix"),".")),(0,i.kt)("h2",{id:"build-the-package"},"Build the Package"),(0,i.kt)("p",null,"Build the package with ",(0,i.kt)("inlineCode",{parentName:"p"},"go-task"),"\nOnce the build completes, your directory should now include the following files:"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre",className:"language-text"},"\u251c\u2500\u2500 abi_used_libs\n\u251c\u2500\u2500 abi_used_symbols\n\u251c\u2500\u2500 package.yml\n\u251c\u2500\u2500 pspec_x86_64.xml\n\u2514\u2500\u2500 tree-2.1.1-1-1-x86_64.eopkg\n")),(0,i.kt)("p",null,"All these files ",(0,i.kt)("em",{parentName:"p"},"except")," the ",(0,i.kt)("inlineCode",{parentName:"p"},"*eopkg")," file(s) should be included in your pull request. You will remove the ",(0,i.kt)("inlineCode",{parentName:"p"},".eopkg")," files after testing the package."),(0,i.kt)("p",null,"Once your package has built successfully, you will need to ",(0,i.kt)("a",{parentName:"p",href:"testing-a-package"},"test it"),"."),(0,i.kt)("h2",{id:"commit-your-changes"},"Commit your Changes"),(0,i.kt)("p",null,"Check the ",(0,i.kt)("a",{parentName:"p",href:"git-basics"},"changes in your files"),"."),(0,i.kt)("p",null,(0,i.kt)("a",{parentName:"p",href:"/docs/packaging/git-basics"},"Add / remove files as necessary to the commit"),". Then, ",(0,i.kt)("strong",{parentName:"p"},"check your branch"),"."),(0,i.kt)("p",null,"Run ",(0,i.kt)("inlineCode",{parentName:"p"},"git status"),". Make sure all the files you changed are staged, and that there are no untracked files. When all is well, run ",(0,i.kt)("inlineCode",{parentName:"p"},"git commit --cleanup=scissors"),"."),(0,i.kt)(r.ZP,{mdxType:"GitCommitCleanup"}),(0,i.kt)("h3",{id:"commit-message-format-for-new-packages"},"Commit message format for new packages"),(0,i.kt)("p",null,"There should be a summary line (with the package name), a blank line, and then the rest of the commit message."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"There should at the minimum be a summary and Test Plan."),(0,i.kt)("li",{parentName:"ul"},"Bullet point lists should start with a dash.")),(0,i.kt)("p",null,"Here is an example in our standard format (make sure to check the box in the checklist):"),(0,i.kt)("pre",null,(0,i.kt)("code",{parentName:"pre"},"tree: initial inclusion in the repository\n\n## Summary\n\nAdd the tree package, which recursively lists directories in a tree like manner.\n\n## Test Plan\n\n- Launched the application\n- Exercised the UI\n- Exercised some feature\n\n## Checklist\n\n- [] Package was built and tested against unstable\n")),(0,i.kt)("p",null,"For more information on suitable commit messages, please check the ",(0,i.kt)("a",{parentName:"p",href:"https://github.com/solus-project/tooling-central/blob/master/README.rst#using-git"},"tooling central documentation"),"."),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"If you want to link this pull request to an existing package request, simply mention it in your commit message (use the full URL): ",(0,i.kt)("inlineCode",{parentName:"li"},"The inclusion of resolves https://github.com/getsolus/packages/issues/123")),(0,i.kt)("li",{parentName:"ul"},"If you need a change to depend on another change, mention it in the commit message too (use the full URL): ",(0,i.kt)("inlineCode",{parentName:"li"},"Depends on https://github.com/getsolus/packages/issues/234"))),(0,i.kt)("p",null,"Next, you'll ",(0,i.kt)("a",{parentName:"p",href:"/docs/packaging/submitting-a-pull-request"},"submit a pull request for review"),"."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/c9c1a3f4.a4853454.js b/assets/js/c9c1a3f4.875a2ee7.js similarity index 99% rename from assets/js/c9c1a3f4.a4853454.js rename to assets/js/c9c1a3f4.875a2ee7.js index 03d870e90..ee3572a0f 100644 --- a/assets/js/c9c1a3f4.a4853454.js +++ b/assets/js/c9c1a3f4.875a2ee7.js @@ -1 +1 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[6121],{3905:(e,t,i)=>{i.d(t,{Zo:()=>u,kt:()=>p});var n=i(7294);function o(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function a(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function s(e){for(var t=1;t=0||(o[i]=e[i]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(o[i]=e[i])}return o}var r=n.createContext({}),d=function(e){var t=n.useContext(r),i=t;return e&&(i="function"==typeof e?e(t):s(s({},t),e)),i},u=function(e){var t=d(e.components);return n.createElement(r.Provider,{value:t},e.children)},c="mdxType",g={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},A=n.forwardRef((function(e,t){var i=e.components,o=e.mdxType,a=e.originalType,r=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),c=d(i),A=o,p=c["".concat(r,".").concat(A)]||c[A]||g[A]||a;return i?n.createElement(p,s(s({ref:t},u),{},{components:i})):n.createElement(p,s({ref:t},u))}));function p(e,t){var i=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=i.length,s=new Array(a);s[0]=A;var l={};for(var r in t)hasOwnProperty.call(t,r)&&(l[r]=t[r]);l.originalType=e,l[c]="string"==typeof e?e:o,s[1]=l;for(var d=2;d{i.r(t),i.d(t,{assets:()=>r,contentTitle:()=>s,default:()=>g,frontMatter:()=>a,metadata:()=>l,toc:()=>d});var n=i(7462),o=(i(7294),i(3905));const a={title:"Configuration",summary:"Help for configuring the Budgie desktop on Solus"},s="Configuration",l={unversionedId:"user/editions/budgie/configuration",id:"user/editions/budgie/configuration",title:"Configuration",description:"Date and Time",source:"@site/docs/user/editions/budgie/configuration.md",sourceDirName:"user/editions/budgie",slug:"/user/editions/budgie/configuration",permalink:"/docs/user/editions/budgie/configuration",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/editions/budgie/configuration.md",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Configuration",summary:"Help for configuring the Budgie desktop on Solus"},sidebar:"userSidebar",previous:{title:"Budgie",permalink:"/docs/user/editions/budgie/"},next:{title:"Tips and Tricks",permalink:"/docs/user/editions/budgie/tips-and-tricks"}},r={},d=[{value:"Date and Time",id:"date-and-time",level:2},{value:"Default Applications",id:"default-applications",level:2},{value:"Displays",id:"displays",level:2},{value:"Keyboard Layout",id:"keyboard-layout",level:2},{value:"Keyboard Layout Indicator",id:"keyboard-layout-indicator",level:3},{value:"IBus",id:"ibus",level:3},{value:"Language",id:"language",level:2},{value:"Mouse and Touchpad",id:"mouse-and-touchpad",level:2},{value:"Mouse",id:"mouse",level:3},{value:"Touchpad",id:"touchpad",level:3},{value:"Testing",id:"testing",level:3},{value:"Network",id:"network",level:2},{value:"Non-Hidden Network",id:"non-hidden-network",level:3},{value:"Hidden Network",id:"hidden-network",level:3},{value:"Sound and Sound Devices",id:"sound-and-sound-devices",level:2},{value:"Settings",id:"settings",level:3},{value:"Users",id:"users",level:2},{value:"Adding a User",id:"adding-a-user",level:3},{value:"Removing a User",id:"removing-a-user",level:3},{value:"Desktop Background",id:"desktop-background",level:2},{value:"Desktop Icons",id:"desktop-icons",level:2},{value:"Workspaces",id:"workspaces",level:2},{value:"Keyboard Shortcuts",id:"keyboard-shortcuts",level:3},{value:"Workspaces Configuration",id:"workspaces-configuration",level:3}],u={toc:d},c="wrapper";function g(e){let{components:t,...a}=e;return(0,o.kt)(c,(0,n.Z)({},u,a,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"configuration"},"Configuration"),(0,o.kt)("h1",{id:"system"},"System"),(0,o.kt)("h2",{id:"date-and-time"},"Date and Time"),(0,o.kt)("p",null,'In Budgie, the easiest way to access the date and time settings is by left clicking on the time in the bottom panel and clicking on "Time and date settings".'),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie Date and Time Right-Click",src:i(5622).Z,width:"209",height:"179"})),(0,o.kt)("p",null,'Alternatively, you can open the Settings Menu and then click on "Details" and then "Date & Time" in the System Settings section.'),(0,o.kt)("p",null,"You will be presented with the following window. This window provides you with the ability to enable / disable automatic date & time, automatic time zone changing, and the time format."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie Date and Time",src:i(4090).Z,width:"1028",height:"693"})),(0,o.kt)("p",null,'If you wish to change how the time is displayed in the bottom panel, left click on the time and click "Preferences". You can now show the date, seconds or use 24 hour time.'),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie Clock Applet",src:i(4734).Z,width:"416",height:"179"})),(0,o.kt)("h2",{id:"default-applications"},"Default Applications"),(0,o.kt)("p",null,'You can configure default applications in Budgie by opening the Budgie Menu and then clicking on "Details" in the System Settings category.'),(0,o.kt)("p",null,'Upon entering the Details section, click on "Default Applications" and then use the drop down boxes to select a different default application for each category. For most categories, you will need to have installed alternative applications before you can change the default settings. For instance, if you wish to change the default video player from GNOME MPV to VLC then you must first install VLC (available in the Software Center).'),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie Default Applications",src:i(8444).Z,width:"742",height:"517"})),(0,o.kt)("p",null,(0,o.kt)("em",{parentName:"p"},"Note: In the image above, we've changed the Web browser and Photo viewer.")),(0,o.kt)("p",null,'You can specify default applications for individual file types by right clicking on a file and then clicking on "Open With Other Application".'),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie Context Menu",src:i(3587).Z,width:"324",height:"417"})),(0,o.kt)("p",null,'Next, select the application you wish to use from the list. You may need to click "View All Applications" if you can\'t see the one you would like to use. Finish by clicking "Select". In the future, all files with the same file type will open with the same application.'),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie Application Selection",src:i(1683).Z,width:"426",height:"405"})),(0,o.kt)("h2",{id:"displays"},"Displays"),(0,o.kt)("p",null,'You can configure your display(s) in Budgie by opening the Budgie Menu and then clicking on "Displays" in the System Settings category.'),(0,o.kt)("p",null,"You will then be shown the following window."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie Displays Overview",src:i(7218).Z,width:"742",height:"345"})),(0,o.kt)("p",null,"Click on the individual display you wish to configure. You will now be able to select if you wish to use this monitor as the primary or secondary display, mirror it with another display, or turn it off. This window also gives you the size and aspect ratio, ability to rotate the display, and ability to change the resolution."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie Individual Display Settings",src:i(7773).Z,width:"741",height:"365"})),(0,o.kt)("p",null,"Going back to the Displays section, you also have the option to arrange your displays. Click the \u201cArrange Combined Displays\u201d button and then drag your displays so they are arranged to your liking."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie Arrange Displays",src:i(6715).Z,width:"742",height:"381"})),(0,o.kt)("p",null,'Click "Apply" once you are happy with your changes. You will be shown a message asking if the display looks OK, if it does, click on "Keep This Configuration".'),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie Confirm Display Settings",src:i(2677).Z,width:"466",height:"114"})),(0,o.kt)("h2",{id:"keyboard-layout"},"Keyboard Layout"),(0,o.kt)("p",null,'Using Budgie, you can change your keyboard layout by opening the Budgie Menu and then clicking on "Region and Language" in the System Settings category.'),(0,o.kt)("p",null,"You will now be shown the following dialog."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie Region and Languages",src:i(1178).Z,width:"742",height:"345"})),(0,o.kt)("p",null,"Click the ",(0,o.kt)("inlineCode",{parentName:"p"},"+")," button to add an input source (keyboard layout). You will be shown the following dialog."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie Add Input Source",src:i(4165).Z,width:"742",height:"410"})),(0,o.kt)("p",null,"Here you can select the language and then keyboard layout within each language section. If it does not appear in this list, click the ",(0,o.kt)("inlineCode",{parentName:"p"},"\u22ee")," button (three vertical dots). This will enable you to search for the keyboard layout you wish to use."),(0,o.kt)("p",null,'After choosing the keyboard layout, click "Done". You will be brought back to the following dialog with your new keyboard layout. In the image below, we are now using English (US), Finnish, and Swedish layout.'),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie New Layout Added",src:i(5226).Z,width:"742",height:"363"})),(0,o.kt)("p",null,"You can remove a keyboard layout by clicking on one of the items, for instance Swedish, then clicking the ",(0,o.kt)("inlineCode",{parentName:"p"},"-")," button."),(0,o.kt)("p",null,"If you wish to use multiple keyboard layouts, you can switch between them by using the keyboard shortcut ",(0,o.kt)("inlineCode",{parentName:"p"},"Super + Space")," or by adding the Keyboard Layout Indicator applet to your Budgie panel."),(0,o.kt)("h3",{id:"keyboard-layout-indicator"},"Keyboard Layout Indicator"),(0,o.kt)("p",null,"To add the Keyboard Layout Indicator to your panel, open Raven, either by clicking on its icon in the far right of the system tray or using the keyboard shortcut ",(0,o.kt)("inlineCode",{parentName:"p"},"Super + A"),". Now click the Raven settings cog icon."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Raven Settings Icon",src:i(8182).Z,width:"43",height:"49"})),(0,o.kt)("p",null,'Click the "Panel" button, then in the Applets section, click the ',(0,o.kt)("inlineCode",{parentName:"p"},"+")," button."),(0,o.kt)("p",null,"Find the Keyboard Layout Indicator entry and select it. Click the ",(0,o.kt)("inlineCode",{parentName:"p"},"+")," button at the top of the panel. This will add the Keyboard Layout Indicator to the center section, as shown below."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie Keyboard Layout Applet",src:i(9816).Z,width:"167",height:"143"})),(0,o.kt)("h3",{id:"ibus"},"IBus"),(0,o.kt)("p",null,"Budgie comes with IBus ready to go straight out of the box. If you need an additional IBus IME see: ",(0,o.kt)("a",{parentName:"p",href:"/docs/user/software/localization/ibus/"},"IBus")),(0,o.kt)("p",null,"You will now be able to switch between your keyboard layouts by using the keyboard shortcut ",(0,o.kt)("inlineCode",{parentName:"p"},"Super + Space")," or by using the Keyboard Layout Indicator applet."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie Keyboard Layout Applet: IBus",src:i(8896).Z,width:"169",height:"140"})),(0,o.kt)("h2",{id:"language"},"Language"),(0,o.kt)("p",null,'You can change your language in Budgie by opening the Budgie Menu and then clicking on "Region and Language" in the System Settings category.'),(0,o.kt)("p",null,"You will now be shown the following window. This window allows you to change your language, formatting for dates and times and the language of your keyboard."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie Region and Languages",src:i(1178).Z,width:"742",height:"345"})),(0,o.kt)("p",null,'Start by clicking "Language". This brings up a selection of languages to chose from.'),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie Selecting Language",src:i(4067).Z,width:"742",height:"489"})),(0,o.kt)("p",null,"If your language does not appear in the list, click the \u22ee button at the bottom (three vertical dots) to show all the available languages. You can use the search box to go directly to your choice or scroll down the list."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie Language Search",src:i(4738).Z,width:"742",height:"489"})),(0,o.kt)("p",null,'Once you have selected the language you wish to use, click "Done". You ',(0,o.kt)("em",{parentName:"p"},"may")," need to logout and login to your computer for it to take affect."),(0,o.kt)("h2",{id:"mouse-and-touchpad"},"Mouse and Touchpad"),(0,o.kt)("p",null,'You can configure the settings of your mouse and / or touchpad by opening the Budgie Menu and then clicking on "Mouse and Touchpad" in the System Settings category. You will see either settings for your mouse or trackpad, depending on the device.'),(0,o.kt)("h3",{id:"mouse"},"Mouse"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie Mouse Settings",src:i(6272).Z,width:"742",height:"585"})),(0,o.kt)("p",null,"For mice, you can set:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"The primary button (usually left click) to be left or right."),(0,o.kt)("li",{parentName:"ul"},"Mouse speed."),(0,o.kt)("li",{parentName:"ul"},'Enabling / disabling "natural scrolling" (reversed scrolling direction).')),(0,o.kt)("h3",{id:"touchpad"},"Touchpad"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie Touchpad Settings",src:i(7722).Z,width:"742",height:"585"})),(0,o.kt)("p",null,"For touchpads, you can set:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"The primary button (usually left click) to be left or right."),(0,o.kt)("li",{parentName:"ul"},"Enabling / disabling of the touchpad."),(0,o.kt)("li",{parentName:"ul"},'Enabling / disabling "natural scrolling" (reversed scrolling direction).'),(0,o.kt)("li",{parentName:"ul"},"Touchpad speed."),(0,o.kt)("li",{parentName:"ul"},"Enabling / disabling of Tap to Click.")),(0,o.kt)("h3",{id:"testing"},"Testing"),(0,o.kt)("p",null,'You can test your settings by clicking the "Test Your Settings" button in the top right of the window.'),(0,o.kt)("h2",{id:"network"},"Network"),(0,o.kt)("p",null,'To configure your network settings in Budgie, start by opening the Budgie Menu and then click on "Network" in the System Settings category.'),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie Network Overview",src:i(8399).Z,width:"742",height:"491"})),(0,o.kt)("p",null,"To configure wireless, go to the Wi-Fi section. If your wireless is currently turned off, click the toggle button, leave the Network section, and go back in."),(0,o.kt)("h3",{id:"non-hidden-network"},"Non-Hidden Network"),(0,o.kt)("p",null,"In the WiFi section of the Network settings window, click the access point you wish to connect to."),(0,o.kt)("p",null,'You may now be prompted to authenticate with the network. Type in your password and then click "Connect".'),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie Network Authentication",src:i(9656).Z,width:"742",height:"491"})),(0,o.kt)("p",null,"If your password is correct, you will now be authenticated with the network."),(0,o.kt)("h3",{id:"hidden-network"},"Hidden Network"),(0,o.kt)("p",null,"If you wish to connect to a hidden network, click \u201cConnect to Hidden Network...\u201d in the WiFi section of the Network settings window. It will show the following dialog, where you type the network name and type of security (if any)."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie Hidden Network",src:i(5320).Z,width:"741",height:"490"})),(0,o.kt)("p",null,"If the network is found and has a password, you will be prompted to authenticate with the network."),(0,o.kt)("h2",{id:"sound-and-sound-devices"},"Sound and Sound Devices"),(0,o.kt)("p",null,"To change the volume in Budgie, simply left click on the speaker icon in the system tray and drag the slider or use the plus and minus icons to reach your desired level."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie Volume Control",src:i(8355).Z,width:"117",height:"249"})),(0,o.kt)("h3",{id:"settings"},"Settings"),(0,o.kt)("p",null,"You can access sound settings via the Sound applet in Raven, the Notification and Widget Center. Open Raven, either by clicking on its icon in the far right of the system tray or using the keyboard shortcut ",(0,o.kt)("inlineCode",{parentName:"p"},"Super + A"),". The Sound applet allows you to enable, disable and alter input and output methods as well as providing a simple volume slider."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Raven Sound Applet",src:i(1145).Z,width:"299",height:"235"})),(0,o.kt)("p",null,'You can access further sound settings, including individual application volume controls, and a simple speaker test by opening the Budgie Menu and then clicking on "Sound" in the System Settings category.'),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie Sound Settings",src:i(315).Z,width:"742",height:"495"})),(0,o.kt)("h2",{id:"users"},"Users"),(0,o.kt)("p",null,'To add and remove users with Budgie, start by opening the Budgie Menu and then click on "Users" in the System Settings category.'),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie User Settings",src:i(9964).Z,width:"742",height:"453"})),(0,o.kt)("p",null,'To manage your own or other accounts, you first need to authenticate. Click the "Unlock" button in the top right corner and type your password. Note that you are required to be an administrator. If you\'re the only user on the system, then your account is an administrator by default.'),(0,o.kt)("p",null,'In the event the password provided is correct, the "Unlock" button will change to "Add User..."'),(0,o.kt)("h3",{id:"adding-a-user"},"Adding a User"),(0,o.kt)("p",null,'To add a user, click the "Add User..." button in the top right corner of the Users window.'),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie Add User Button",src:i(1494).Z,width:"225",height:"65"})),(0,o.kt)("p",null,"This will open the Add User window (shown below)."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie Add User Dialog",src:i(8645).Z,width:"466",height:"546"})),(0,o.kt)("p",null,'Fill in the required items and then finish adding the new user by clicking "Add" in the top right corner.'),(0,o.kt)("h3",{id:"removing-a-user"},"Removing a User"),(0,o.kt)("p",null,'To remove a user, open the Users window and then click on the user you wish to remove. Now click on the red "Remove User..." button in the bottom right corner.'),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie User List",src:i(6781).Z,width:"742",height:"592"})),(0,o.kt)("p",null,"Upon clicking to remove the user, you will be given the option to keep their files, delete their files, or cancel the removal of the user\u2019s account."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie Keep Files Prompt",src:i(6420).Z,width:"508",height:"162"})),(0,o.kt)("h1",{id:"user-interface"},"User Interface"),(0,o.kt)("h2",{id:"desktop-background"},"Desktop Background"),(0,o.kt)("p",null,'To change the desktop background in Budgie, simply right click anywhere on the desktop and select "Change background".'),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie Desktop Right-Click Menu",src:i(1901).Z,width:"313",height:"271"})),(0,o.kt)("p",null,'Alternatively, you can open the Settings Menu and then click "Background" in the System Settings category.'),(0,o.kt)("p",null,'You will have two options, Background and Lock Screen. Click "Background".'),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie Settings Background Section",src:i(4602).Z,width:"1031",height:"691"})),(0,o.kt)("p",null,'In this section, you can choose between Solus wallpapers, pictures in your Pictures folder, or solid colors. After choosing, click "Select".'),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie Background Selection",src:i(1014).Z,width:"1029",height:"688"})),(0,o.kt)("h2",{id:"desktop-icons"},"Desktop Icons"),(0,o.kt)("p",null,"With Budgie, start by opening Raven, either by clicking on its icon in the far right of the system tray or using the keyboard shortcut ",(0,o.kt)("inlineCode",{parentName:"p"},"Super + A"),". Next, click the cog icon for Budgie Settings."),(0,o.kt)("p",null,'Alternatively, you can open the Budgie Menu and then click "Desktop" in the System Settings category.'),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie Desktop Icons",src:i(1723).Z,width:"747",height:"437"})),(0,o.kt)("p",null,'You may now add things to your Desktop. This can be done by dragging an item onto the Desktop or by right clicking an icon and selecting Copy to / Move to Desktop. Alternatively, open the Budgie Menu and click on "Files" and then move the files you want to the Desktop folder (as shown in the image below). Please note, the Desktop folder is not visible in "Files" until you\'ve enabled the Desktop icons.'),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie Desktop Folder",src:i(1966).Z,width:"884",height:"415"})),(0,o.kt)("h2",{id:"workspaces"},"Workspaces"),(0,o.kt)("p",null,"Budgie enables the switching of workspaces via the Workspace Switcher. You can enable workspaces in Budgie by adding the Workspace Switcher applet to Raven."),(0,o.kt)("p",null,"Open Raven using the shortcut ",(0,o.kt)("inlineCode",{parentName:"p"},"Super + A")," or use your mouse to open Raven in the far right of the main Budgie panel."),(0,o.kt)("p",null,"Click the Raven settings 'cog' icon"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Raven Settings Icon",src:i(8182).Z,width:"43",height:"49"})),(0,o.kt)("p",null,'Alternatively, you can open the Budgie Menu and then click "Bottom Panel" in the System Settings category.'),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie Panel Menu",src:i(9178).Z,width:"748",height:"514"})),(0,o.kt)("p",null,"Find ",(0,o.kt)("inlineCode",{parentName:"p"},"Add applet")," and click the ",(0,o.kt)("inlineCode",{parentName:"p"},"+")," button. This will open menu to choose different applets, scroll down until you find ",(0,o.kt)("inlineCode",{parentName:"p"},"Workspace Switcher"),", select it and click ",(0,o.kt)("inlineCode",{parentName:"p"},"Add Applet")),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie Workspaces Applet",src:i(7037).Z,width:"746",height:"592"})),(0,o.kt)("p",null,"You should now see your workspaces available in the main Budgie panel."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie Workspaces",src:i(4366).Z,width:"1365",height:"184"})),(0,o.kt)("h3",{id:"keyboard-shortcuts"},"Keyboard Shortcuts"),(0,o.kt)("p",null,"Budgie provides a variety of keyboard shortcuts for workspaces."),(0,o.kt)("p",null,"To view these shortcuts open the Keyboard application and scroll to the Navigation section."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie Workspaces Keyboard Shortcuts",src:i(6456).Z,width:"979",height:"544"})),(0,o.kt)("h3",{id:"workspaces-configuration"},"Workspaces Configuration"),(0,o.kt)("p",null,"There are 4 workspaces available in Budgie by default. For adding an new Workspace, click on the ",(0,o.kt)("inlineCode",{parentName:"p"},"+")," button."),(0,o.kt)("p",null,"If you wish to remove or rename your workspace, right click on the desired workspace and select rename or remove."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie Remove or Rename Workspaces",src:i(5829).Z,width:"313",height:"176"})))}g.isMDXComponent=!0},4734:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-ClockApplet-6bc1972e2716e1351bdb633547cff870.jpg"},4165:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-add-input-source-d437c5e7831ecdb1e489aa21ac60d526.png"},1494:(e,t,i)=>{i.d(t,{Z:()=>n});const n="data:image/jpeg;base64,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"},8645:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-add-user-dialog-4a76a1d5811db1f477173c3c1fabb43a.jpg"},6715:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-arrange-displays-c6b7dca4d418eed7a79be42eabbab2d1.png"},1901:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-background-right-click-b341500dae578d40598142c89dbe4e59.jpg"},4602:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-background-section-69eb1e2f5a19d98fca59f58b34119497.jpg"},1014:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-background-selection-aba677cf789557772f7c0a6a38ba4fcb.jpg"},4090:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-configuring-date-and-time-9717a79514c1ac20ca40b9349197caa1.jpg"},8444:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-configuring-default-applications-c38e8846a0f5406e2a929ceed630e0ac.jpg"},1723:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-desktop-icons-9ea72a5f3d5c439784ab8a5a1b502b6e.jpg"},2677:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-display-confirm-a76d736f32f356662af758fb94f6aafc.jpg"},7218:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-displays-overview-6bbedd44653525b6c3aba838cf30349d.jpg"},7773:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-individual-display-settings-2d5ef78b2175bb97fc2e729a90ee5774.jpg"},6420:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-keep-files-prompt-5b7532e8ea1cf62ad466bf6d2eec702f.jpg"},8896:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-keyboard-layout-applet-ibus-306635b913e0265ce1f47e1098002e0c.jpg"},9816:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-keyboard-layout-applet-72529e32a2a024358816121178e99457.jpg"},6272:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-mouse-settings-4652630acfe19020bb0b29d0155bf012.jpg"},6781:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-multiple-user-settings-e0957ed6affeef47726232f6fa2c22a0.jpg"},1966:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-nautilus-desktop-folder-d8e82c2d25e2d637fc2f63e85241c255.jpg"},9656:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-network-authentication-976c81d75e055000d1146dfd8d26f45f.jpg"},5320:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-network-hidden-0567bce591f6219bb35378032a3db3e9.jpg"},8399:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-network-overview-56ca62f1ff834202f557968bddfe6ae8.jpg"},3587:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-open-with-right-click-f8c5019ecbc6f6cb589c6117c20c85b4.jpg"},1683:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-open-with-select-application-7c831e8489c82c5ac4df9f3bd5a85644.jpg"},9178:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-panel-menu-dac068635ab833342fb243124ddb8bd6.jpg"},5226:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-region-and-languages-newlang-4bb2078c2e13e3b57093c6b6c8b68695.jpg"},1178:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-region-and-languages-335dc9a1b149e6ee8b31960b2786e80f.jpg"},4738:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-selecting-language-search-0ef7ad4ad481eba3511f505c0d48dd64.png"},4067:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-selecting-language-1b584e15820bf752584efc6dd7b15aeb.png"},9964:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-single-user-settings-39514927d322f1eae5e257384a82106b.jpg"},315:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-sound-settings-83f0c82715b44956569594953085dad1.jpg"},5622:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-time-and-date-right-click-7ed500bff1d633e3502ab5a3adfcb766.jpg"},7722:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-touchpad-settings-ee9690f056a1ed39ebddd5cd61936608.jpg"},8355:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-volume-control-cf7733bc82bb3684cc809cf0ec743cef.jpg"},7037:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-workspace-applet-90e298d07b0e72d5061bae7e39fb599f.jpg"},5829:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-workspace-remove-360aa4ae2aeca87afb94c626feaefc32.jpg"},6456:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-workspace-shortcuts-gcc-3c1caf061457b4f8b324c1e344533009.jpg"},4366:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-workspaces-0396d63dbdbf2e4431b45d3a36f0bb55.jpg"},8182:(e,t,i)=>{i.d(t,{Z:()=>n});const n="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wgARCAAxACsDAREAAhEBAxEB/8QAGgAAAgMBAQAAAAAAAAAAAAAAAAEGBwgCBf/EABcBAQEBAQAAAAAAAAAAAAAAAAABAgP/2gAMAwEAAhADEAAAAYH25gAFdS8p7Zf3PVMbkP0IabI5bg1lmZ1kXtiOjTZHLcGsszOsi9cRvUI9sv7nqmdyHaIUgAU5WcoAO0gT/8QAIRAAAwABAwQDAAAAAAAAAAAAAwQFBgECEgAQERUgITD/2gAIAQEAAQUC+Yoj5gzMInevdxagOl48a9bOPOM0u7Mp58vOpBNsOHIG1Xa3WzjzjKrpTKeAr0aQg7AByFRVKt2FbfCGZm8717uUUC0tfvX9f//EABcRAQEBAQAAAAAAAAAAAAAAABEgMED/2gAIAQMBAT8BwKaKeD//xAAaEQACAwEBAAAAAAAAAAAAAAAAEQEQEiAw/9oACAECAQE/Ae2MfEmai5NVFoQvf//EACcQAAEEAgECBgMBAAAAAAAAAAIBAwQRABIhQWEQExQjMXEgIoEw/9oACAEBAAY/AvzZdbiOm26tAQjd4x6uHcnRPM9wvn+LjsdqG4qWqhXKa/ec+A73rfNZHdiCox9aEVSqrjDipHN4W11NxCql7JgOguwGOyL2x9+GJCya3+3Veq+A73rfNZHaiEpR9bElW7vnClJINkXC2NtBu17LgNAmoAOqJ2x9iGREyC1z0Xqniy03LdBtpbARKqxj1cypOieZ7ZfP8THX2pjiJaoFcJr9f7//xAAfEAACAQQDAQEAAAAAAAAAAAABEQAhMUGBECBRcZH/2gAIAQEAAT8h70UjgCa1uB5ZG7h/Izj8FrUONvTGIARFCDwpAlLesqHoKrAbGlFQQoQuEVX0RLdB8kGDLXlQvEGATXhzAKe9ZUHQVWA3NuIkgwxcso/hiy6D4AICXPKl+AcgGnNFI4Am97heGRu4fyJq/DS1Bjb0QiQksm5PUcPoOf/aAAwDAQACAAMAAAAQSSvVOHx8vx8dVLASV7SQ+//EABkRAQADAQEAAAAAAAAAAAAAAAEAEBEgMf/aAAgBAwEBPxDgvGAmOws8jhrTbPI6pL1gJrvR0X//xAAbEQEAAgMBAQAAAAAAAAAAAAABABEQICExMP/aAAgBAgEBPxDekXfICrvQI9gkvAQ7lK9ggqexKW5pF3yArz7/AP/EAB0QAQEBAQEAAwEBAAAAAAAAAAERIQAxECBBYVH/2gAIAQEAAT8Q+gV6HwnNT4RKpYo7Bi+cO00l7KP8Ln4zstPui/YjxlKg7ykjkCInone8kgaIB3hNBll47Tb4Kmb6ZRRlrz8n3YIwtqN0H81gYajlAPdEeoaTAs/oUod188LwCRgATegwWWXjtNvgqbnpsACyHPYMuEVgbVbqv5hZQlHKA+4AdQEmlL/QoU7j766fCc1PlEqEirlGp5y7DC3ki027+N71u+6PyC8bSld5I7lRVX9e36YeWt6vp+/n/9k="},1145:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/raven-sound-applet-84fdb76d11a39ca554f2bc756205d35e.jpg"}}]); \ No newline at end of file +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[6121],{3905:(e,t,i)=>{i.d(t,{Zo:()=>u,kt:()=>p});var n=i(7294);function o(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}function a(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function s(e){for(var t=1;t=0||(o[i]=e[i]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(o[i]=e[i])}return o}var r=n.createContext({}),d=function(e){var t=n.useContext(r),i=t;return e&&(i="function"==typeof e?e(t):s(s({},t),e)),i},u=function(e){var t=d(e.components);return n.createElement(r.Provider,{value:t},e.children)},c="mdxType",g={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},A=n.forwardRef((function(e,t){var i=e.components,o=e.mdxType,a=e.originalType,r=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),c=d(i),A=o,p=c["".concat(r,".").concat(A)]||c[A]||g[A]||a;return i?n.createElement(p,s(s({ref:t},u),{},{components:i})):n.createElement(p,s({ref:t},u))}));function p(e,t){var i=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=i.length,s=new Array(a);s[0]=A;var l={};for(var r in t)hasOwnProperty.call(t,r)&&(l[r]=t[r]);l.originalType=e,l[c]="string"==typeof e?e:o,s[1]=l;for(var d=2;d{i.r(t),i.d(t,{assets:()=>r,contentTitle:()=>s,default:()=>g,frontMatter:()=>a,metadata:()=>l,toc:()=>d});var n=i(7462),o=(i(7294),i(3905));const a={title:"Configuration",summary:"Help for configuring the Budgie desktop on Solus"},s="Configuration",l={unversionedId:"user/editions/budgie/configuration",id:"user/editions/budgie/configuration",title:"Configuration",description:"Date and Time",source:"@site/docs/user/editions/budgie/configuration.md",sourceDirName:"user/editions/budgie",slug:"/user/editions/budgie/configuration",permalink:"/docs/user/editions/budgie/configuration",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/editions/budgie/configuration.md",tags:[],version:"current",lastUpdatedAt:1695222528,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Configuration",summary:"Help for configuring the Budgie desktop on Solus"},sidebar:"userSidebar",previous:{title:"Budgie",permalink:"/docs/user/editions/budgie/"},next:{title:"Tips and Tricks",permalink:"/docs/user/editions/budgie/tips-and-tricks"}},r={},d=[{value:"Date and Time",id:"date-and-time",level:2},{value:"Default Applications",id:"default-applications",level:2},{value:"Displays",id:"displays",level:2},{value:"Keyboard Layout",id:"keyboard-layout",level:2},{value:"Keyboard Layout Indicator",id:"keyboard-layout-indicator",level:3},{value:"IBus",id:"ibus",level:3},{value:"Language",id:"language",level:2},{value:"Mouse and Touchpad",id:"mouse-and-touchpad",level:2},{value:"Mouse",id:"mouse",level:3},{value:"Touchpad",id:"touchpad",level:3},{value:"Testing",id:"testing",level:3},{value:"Network",id:"network",level:2},{value:"Non-Hidden Network",id:"non-hidden-network",level:3},{value:"Hidden Network",id:"hidden-network",level:3},{value:"Sound and Sound Devices",id:"sound-and-sound-devices",level:2},{value:"Settings",id:"settings",level:3},{value:"Users",id:"users",level:2},{value:"Adding a User",id:"adding-a-user",level:3},{value:"Removing a User",id:"removing-a-user",level:3},{value:"Desktop Background",id:"desktop-background",level:2},{value:"Desktop Icons",id:"desktop-icons",level:2},{value:"Workspaces",id:"workspaces",level:2},{value:"Keyboard Shortcuts",id:"keyboard-shortcuts",level:3},{value:"Workspaces Configuration",id:"workspaces-configuration",level:3}],u={toc:d},c="wrapper";function g(e){let{components:t,...a}=e;return(0,o.kt)(c,(0,n.Z)({},u,a,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"configuration"},"Configuration"),(0,o.kt)("h1",{id:"system"},"System"),(0,o.kt)("h2",{id:"date-and-time"},"Date and Time"),(0,o.kt)("p",null,'In Budgie, the easiest way to access the date and time settings is by left clicking on the time in the bottom panel and clicking on "Time and date settings".'),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie Date and Time Right-Click",src:i(5622).Z,width:"209",height:"179"})),(0,o.kt)("p",null,'Alternatively, you can open the Settings Menu and then click on "Details" and then "Date & Time" in the System Settings section.'),(0,o.kt)("p",null,"You will be presented with the following window. This window provides you with the ability to enable / disable automatic date & time, automatic time zone changing, and the time format."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie Date and Time",src:i(4090).Z,width:"1028",height:"693"})),(0,o.kt)("p",null,'If you wish to change how the time is displayed in the bottom panel, left click on the time and click "Preferences". You can now show the date, seconds or use 24 hour time.'),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie Clock Applet",src:i(4734).Z,width:"416",height:"179"})),(0,o.kt)("h2",{id:"default-applications"},"Default Applications"),(0,o.kt)("p",null,'You can configure default applications in Budgie by opening the Budgie Menu and then clicking on "Details" in the System Settings category.'),(0,o.kt)("p",null,'Upon entering the Details section, click on "Default Applications" and then use the drop down boxes to select a different default application for each category. For most categories, you will need to have installed alternative applications before you can change the default settings. For instance, if you wish to change the default video player from GNOME MPV to VLC then you must first install VLC (available in the Software Center).'),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie Default Applications",src:i(8444).Z,width:"742",height:"517"})),(0,o.kt)("p",null,(0,o.kt)("em",{parentName:"p"},"Note: In the image above, we've changed the Web browser and Photo viewer.")),(0,o.kt)("p",null,'You can specify default applications for individual file types by right clicking on a file and then clicking on "Open With Other Application".'),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie Context Menu",src:i(3587).Z,width:"324",height:"417"})),(0,o.kt)("p",null,'Next, select the application you wish to use from the list. You may need to click "View All Applications" if you can\'t see the one you would like to use. Finish by clicking "Select". In the future, all files with the same file type will open with the same application.'),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie Application Selection",src:i(1683).Z,width:"426",height:"405"})),(0,o.kt)("h2",{id:"displays"},"Displays"),(0,o.kt)("p",null,'You can configure your display(s) in Budgie by opening the Budgie Menu and then clicking on "Displays" in the System Settings category.'),(0,o.kt)("p",null,"You will then be shown the following window."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie Displays Overview",src:i(7218).Z,width:"742",height:"345"})),(0,o.kt)("p",null,"Click on the individual display you wish to configure. You will now be able to select if you wish to use this monitor as the primary or secondary display, mirror it with another display, or turn it off. This window also gives you the size and aspect ratio, ability to rotate the display, and ability to change the resolution."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie Individual Display Settings",src:i(7773).Z,width:"741",height:"365"})),(0,o.kt)("p",null,"Going back to the Displays section, you also have the option to arrange your displays. Click the \u201cArrange Combined Displays\u201d button and then drag your displays so they are arranged to your liking."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie Arrange Displays",src:i(6715).Z,width:"742",height:"381"})),(0,o.kt)("p",null,'Click "Apply" once you are happy with your changes. You will be shown a message asking if the display looks OK, if it does, click on "Keep This Configuration".'),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie Confirm Display Settings",src:i(2677).Z,width:"466",height:"114"})),(0,o.kt)("h2",{id:"keyboard-layout"},"Keyboard Layout"),(0,o.kt)("p",null,'Using Budgie, you can change your keyboard layout by opening the Budgie Menu and then clicking on "Region and Language" in the System Settings category.'),(0,o.kt)("p",null,"You will now be shown the following dialog."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie Region and Languages",src:i(1178).Z,width:"742",height:"345"})),(0,o.kt)("p",null,"Click the ",(0,o.kt)("inlineCode",{parentName:"p"},"+")," button to add an input source (keyboard layout). You will be shown the following dialog."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie Add Input Source",src:i(4165).Z,width:"742",height:"410"})),(0,o.kt)("p",null,"Here you can select the language and then keyboard layout within each language section. If it does not appear in this list, click the ",(0,o.kt)("inlineCode",{parentName:"p"},"\u22ee")," button (three vertical dots). This will enable you to search for the keyboard layout you wish to use."),(0,o.kt)("p",null,'After choosing the keyboard layout, click "Done". You will be brought back to the following dialog with your new keyboard layout. In the image below, we are now using English (US), Finnish, and Swedish layout.'),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie New Layout Added",src:i(5226).Z,width:"742",height:"363"})),(0,o.kt)("p",null,"You can remove a keyboard layout by clicking on one of the items, for instance Swedish, then clicking the ",(0,o.kt)("inlineCode",{parentName:"p"},"-")," button."),(0,o.kt)("p",null,"If you wish to use multiple keyboard layouts, you can switch between them by using the keyboard shortcut ",(0,o.kt)("inlineCode",{parentName:"p"},"Super + Space")," or by adding the Keyboard Layout Indicator applet to your Budgie panel."),(0,o.kt)("h3",{id:"keyboard-layout-indicator"},"Keyboard Layout Indicator"),(0,o.kt)("p",null,"To add the Keyboard Layout Indicator to your panel, open Raven, either by clicking on its icon in the far right of the system tray or using the keyboard shortcut ",(0,o.kt)("inlineCode",{parentName:"p"},"Super + A"),". Now click the Raven settings cog icon."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Raven Settings Icon",src:i(8182).Z,width:"43",height:"49"})),(0,o.kt)("p",null,'Click the "Panel" button, then in the Applets section, click the ',(0,o.kt)("inlineCode",{parentName:"p"},"+")," button."),(0,o.kt)("p",null,"Find the Keyboard Layout Indicator entry and select it. Click the ",(0,o.kt)("inlineCode",{parentName:"p"},"+")," button at the top of the panel. This will add the Keyboard Layout Indicator to the center section, as shown below."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie Keyboard Layout Applet",src:i(9816).Z,width:"167",height:"143"})),(0,o.kt)("h3",{id:"ibus"},"IBus"),(0,o.kt)("p",null,"Budgie comes with IBus ready to go straight out of the box. If you need an additional IBus IME see: ",(0,o.kt)("a",{parentName:"p",href:"/docs/user/software/localization/ibus/"},"IBus")),(0,o.kt)("p",null,"You will now be able to switch between your keyboard layouts by using the keyboard shortcut ",(0,o.kt)("inlineCode",{parentName:"p"},"Super + Space")," or by using the Keyboard Layout Indicator applet."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie Keyboard Layout Applet: IBus",src:i(8896).Z,width:"169",height:"140"})),(0,o.kt)("h2",{id:"language"},"Language"),(0,o.kt)("p",null,'You can change your language in Budgie by opening the Budgie Menu and then clicking on "Region and Language" in the System Settings category.'),(0,o.kt)("p",null,"You will now be shown the following window. This window allows you to change your language, formatting for dates and times and the language of your keyboard."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie Region and Languages",src:i(1178).Z,width:"742",height:"345"})),(0,o.kt)("p",null,'Start by clicking "Language". This brings up a selection of languages to chose from.'),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie Selecting Language",src:i(4067).Z,width:"742",height:"489"})),(0,o.kt)("p",null,"If your language does not appear in the list, click the \u22ee button at the bottom (three vertical dots) to show all the available languages. You can use the search box to go directly to your choice or scroll down the list."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie Language Search",src:i(4738).Z,width:"742",height:"489"})),(0,o.kt)("p",null,'Once you have selected the language you wish to use, click "Done". You ',(0,o.kt)("em",{parentName:"p"},"may")," need to logout and login to your computer for it to take affect."),(0,o.kt)("h2",{id:"mouse-and-touchpad"},"Mouse and Touchpad"),(0,o.kt)("p",null,'You can configure the settings of your mouse and / or touchpad by opening the Budgie Menu and then clicking on "Mouse and Touchpad" in the System Settings category. You will see either settings for your mouse or trackpad, depending on the device.'),(0,o.kt)("h3",{id:"mouse"},"Mouse"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie Mouse Settings",src:i(6272).Z,width:"742",height:"585"})),(0,o.kt)("p",null,"For mice, you can set:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"The primary button (usually left click) to be left or right."),(0,o.kt)("li",{parentName:"ul"},"Mouse speed."),(0,o.kt)("li",{parentName:"ul"},'Enabling / disabling "natural scrolling" (reversed scrolling direction).')),(0,o.kt)("h3",{id:"touchpad"},"Touchpad"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie Touchpad Settings",src:i(7722).Z,width:"742",height:"585"})),(0,o.kt)("p",null,"For touchpads, you can set:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"The primary button (usually left click) to be left or right."),(0,o.kt)("li",{parentName:"ul"},"Enabling / disabling of the touchpad."),(0,o.kt)("li",{parentName:"ul"},'Enabling / disabling "natural scrolling" (reversed scrolling direction).'),(0,o.kt)("li",{parentName:"ul"},"Touchpad speed."),(0,o.kt)("li",{parentName:"ul"},"Enabling / disabling of Tap to Click.")),(0,o.kt)("h3",{id:"testing"},"Testing"),(0,o.kt)("p",null,'You can test your settings by clicking the "Test Your Settings" button in the top right of the window.'),(0,o.kt)("h2",{id:"network"},"Network"),(0,o.kt)("p",null,'To configure your network settings in Budgie, start by opening the Budgie Menu and then click on "Network" in the System Settings category.'),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie Network Overview",src:i(8399).Z,width:"742",height:"491"})),(0,o.kt)("p",null,"To configure wireless, go to the Wi-Fi section. If your wireless is currently turned off, click the toggle button, leave the Network section, and go back in."),(0,o.kt)("h3",{id:"non-hidden-network"},"Non-Hidden Network"),(0,o.kt)("p",null,"In the WiFi section of the Network settings window, click the access point you wish to connect to."),(0,o.kt)("p",null,'You may now be prompted to authenticate with the network. Type in your password and then click "Connect".'),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie Network Authentication",src:i(9656).Z,width:"742",height:"491"})),(0,o.kt)("p",null,"If your password is correct, you will now be authenticated with the network."),(0,o.kt)("h3",{id:"hidden-network"},"Hidden Network"),(0,o.kt)("p",null,"If you wish to connect to a hidden network, click \u201cConnect to Hidden Network...\u201d in the WiFi section of the Network settings window. It will show the following dialog, where you type the network name and type of security (if any)."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie Hidden Network",src:i(5320).Z,width:"741",height:"490"})),(0,o.kt)("p",null,"If the network is found and has a password, you will be prompted to authenticate with the network."),(0,o.kt)("h2",{id:"sound-and-sound-devices"},"Sound and Sound Devices"),(0,o.kt)("p",null,"To change the volume in Budgie, simply left click on the speaker icon in the system tray and drag the slider or use the plus and minus icons to reach your desired level."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie Volume Control",src:i(8355).Z,width:"117",height:"249"})),(0,o.kt)("h3",{id:"settings"},"Settings"),(0,o.kt)("p",null,"You can access sound settings via the Sound applet in Raven, the Notification and Widget Center. Open Raven, either by clicking on its icon in the far right of the system tray or using the keyboard shortcut ",(0,o.kt)("inlineCode",{parentName:"p"},"Super + A"),". The Sound applet allows you to enable, disable and alter input and output methods as well as providing a simple volume slider."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Raven Sound Applet",src:i(1145).Z,width:"299",height:"235"})),(0,o.kt)("p",null,'You can access further sound settings, including individual application volume controls, and a simple speaker test by opening the Budgie Menu and then clicking on "Sound" in the System Settings category.'),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie Sound Settings",src:i(315).Z,width:"742",height:"495"})),(0,o.kt)("h2",{id:"users"},"Users"),(0,o.kt)("p",null,'To add and remove users with Budgie, start by opening the Budgie Menu and then click on "Users" in the System Settings category.'),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie User Settings",src:i(9964).Z,width:"742",height:"453"})),(0,o.kt)("p",null,'To manage your own or other accounts, you first need to authenticate. Click the "Unlock" button in the top right corner and type your password. Note that you are required to be an administrator. If you\'re the only user on the system, then your account is an administrator by default.'),(0,o.kt)("p",null,'In the event the password provided is correct, the "Unlock" button will change to "Add User..."'),(0,o.kt)("h3",{id:"adding-a-user"},"Adding a User"),(0,o.kt)("p",null,'To add a user, click the "Add User..." button in the top right corner of the Users window.'),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie Add User Button",src:i(1494).Z,width:"225",height:"65"})),(0,o.kt)("p",null,"This will open the Add User window (shown below)."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie Add User Dialog",src:i(8645).Z,width:"466",height:"546"})),(0,o.kt)("p",null,'Fill in the required items and then finish adding the new user by clicking "Add" in the top right corner.'),(0,o.kt)("h3",{id:"removing-a-user"},"Removing a User"),(0,o.kt)("p",null,'To remove a user, open the Users window and then click on the user you wish to remove. Now click on the red "Remove User..." button in the bottom right corner.'),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie User List",src:i(6781).Z,width:"742",height:"592"})),(0,o.kt)("p",null,"Upon clicking to remove the user, you will be given the option to keep their files, delete their files, or cancel the removal of the user\u2019s account."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie Keep Files Prompt",src:i(6420).Z,width:"508",height:"162"})),(0,o.kt)("h1",{id:"user-interface"},"User Interface"),(0,o.kt)("h2",{id:"desktop-background"},"Desktop Background"),(0,o.kt)("p",null,'To change the desktop background in Budgie, simply right click anywhere on the desktop and select "Change background".'),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie Desktop Right-Click Menu",src:i(1901).Z,width:"313",height:"271"})),(0,o.kt)("p",null,'Alternatively, you can open the Settings Menu and then click "Background" in the System Settings category.'),(0,o.kt)("p",null,'You will have two options, Background and Lock Screen. Click "Background".'),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie Settings Background Section",src:i(4602).Z,width:"1031",height:"691"})),(0,o.kt)("p",null,'In this section, you can choose between Solus wallpapers, pictures in your Pictures folder, or solid colors. After choosing, click "Select".'),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie Background Selection",src:i(1014).Z,width:"1029",height:"688"})),(0,o.kt)("h2",{id:"desktop-icons"},"Desktop Icons"),(0,o.kt)("p",null,"With Budgie, start by opening Raven, either by clicking on its icon in the far right of the system tray or using the keyboard shortcut ",(0,o.kt)("inlineCode",{parentName:"p"},"Super + A"),". Next, click the cog icon for Budgie Settings."),(0,o.kt)("p",null,'Alternatively, you can open the Budgie Menu and then click "Desktop" in the System Settings category.'),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie Desktop Icons",src:i(1723).Z,width:"747",height:"437"})),(0,o.kt)("p",null,'You may now add things to your Desktop. This can be done by dragging an item onto the Desktop or by right clicking an icon and selecting Copy to / Move to Desktop. Alternatively, open the Budgie Menu and click on "Files" and then move the files you want to the Desktop folder (as shown in the image below). Please note, the Desktop folder is not visible in "Files" until you\'ve enabled the Desktop icons.'),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie Desktop Folder",src:i(1966).Z,width:"884",height:"415"})),(0,o.kt)("h2",{id:"workspaces"},"Workspaces"),(0,o.kt)("p",null,"Budgie enables the switching of workspaces via the Workspace Switcher. You can enable workspaces in Budgie by adding the Workspace Switcher applet to Raven."),(0,o.kt)("p",null,"Open Raven using the shortcut ",(0,o.kt)("inlineCode",{parentName:"p"},"Super + A")," or use your mouse to open Raven in the far right of the main Budgie panel."),(0,o.kt)("p",null,"Click the Raven settings 'cog' icon"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Raven Settings Icon",src:i(8182).Z,width:"43",height:"49"})),(0,o.kt)("p",null,'Alternatively, you can open the Budgie Menu and then click "Bottom Panel" in the System Settings category.'),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie Panel Menu",src:i(9178).Z,width:"748",height:"514"})),(0,o.kt)("p",null,"Find ",(0,o.kt)("inlineCode",{parentName:"p"},"Add applet")," and click the ",(0,o.kt)("inlineCode",{parentName:"p"},"+")," button. This will open menu to choose different applets, scroll down until you find ",(0,o.kt)("inlineCode",{parentName:"p"},"Workspace Switcher"),", select it and click ",(0,o.kt)("inlineCode",{parentName:"p"},"Add Applet")),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie Workspaces Applet",src:i(7037).Z,width:"746",height:"592"})),(0,o.kt)("p",null,"You should now see your workspaces available in the main Budgie panel."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie Workspaces",src:i(4366).Z,width:"1365",height:"184"})),(0,o.kt)("h3",{id:"keyboard-shortcuts"},"Keyboard Shortcuts"),(0,o.kt)("p",null,"Budgie provides a variety of keyboard shortcuts for workspaces."),(0,o.kt)("p",null,"To view these shortcuts open the Keyboard application and scroll to the Navigation section."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie Workspaces Keyboard Shortcuts",src:i(6456).Z,width:"979",height:"544"})),(0,o.kt)("h3",{id:"workspaces-configuration"},"Workspaces Configuration"),(0,o.kt)("p",null,"There are 4 workspaces available in Budgie by default. For adding an new Workspace, click on the ",(0,o.kt)("inlineCode",{parentName:"p"},"+")," button."),(0,o.kt)("p",null,"If you wish to remove or rename your workspace, right click on the desired workspace and select rename or remove."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Budgie Remove or Rename Workspaces",src:i(5829).Z,width:"313",height:"176"})))}g.isMDXComponent=!0},4734:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-ClockApplet-6bc1972e2716e1351bdb633547cff870.jpg"},4165:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-add-input-source-d437c5e7831ecdb1e489aa21ac60d526.png"},1494:(e,t,i)=>{i.d(t,{Z:()=>n});const n="data:image/jpeg;base64,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"},8645:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-add-user-dialog-4a76a1d5811db1f477173c3c1fabb43a.jpg"},6715:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-arrange-displays-c6b7dca4d418eed7a79be42eabbab2d1.png"},1901:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-background-right-click-b341500dae578d40598142c89dbe4e59.jpg"},4602:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-background-section-69eb1e2f5a19d98fca59f58b34119497.jpg"},1014:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-background-selection-aba677cf789557772f7c0a6a38ba4fcb.jpg"},4090:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-configuring-date-and-time-9717a79514c1ac20ca40b9349197caa1.jpg"},8444:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-configuring-default-applications-c38e8846a0f5406e2a929ceed630e0ac.jpg"},1723:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-desktop-icons-9ea72a5f3d5c439784ab8a5a1b502b6e.jpg"},2677:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-display-confirm-a76d736f32f356662af758fb94f6aafc.jpg"},7218:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-displays-overview-6bbedd44653525b6c3aba838cf30349d.jpg"},7773:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-individual-display-settings-2d5ef78b2175bb97fc2e729a90ee5774.jpg"},6420:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-keep-files-prompt-5b7532e8ea1cf62ad466bf6d2eec702f.jpg"},8896:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-keyboard-layout-applet-ibus-306635b913e0265ce1f47e1098002e0c.jpg"},9816:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-keyboard-layout-applet-72529e32a2a024358816121178e99457.jpg"},6272:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-mouse-settings-4652630acfe19020bb0b29d0155bf012.jpg"},6781:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-multiple-user-settings-e0957ed6affeef47726232f6fa2c22a0.jpg"},1966:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-nautilus-desktop-folder-d8e82c2d25e2d637fc2f63e85241c255.jpg"},9656:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-network-authentication-976c81d75e055000d1146dfd8d26f45f.jpg"},5320:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-network-hidden-0567bce591f6219bb35378032a3db3e9.jpg"},8399:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-network-overview-56ca62f1ff834202f557968bddfe6ae8.jpg"},3587:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-open-with-right-click-f8c5019ecbc6f6cb589c6117c20c85b4.jpg"},1683:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-open-with-select-application-7c831e8489c82c5ac4df9f3bd5a85644.jpg"},9178:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-panel-menu-dac068635ab833342fb243124ddb8bd6.jpg"},5226:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-region-and-languages-newlang-4bb2078c2e13e3b57093c6b6c8b68695.jpg"},1178:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-region-and-languages-335dc9a1b149e6ee8b31960b2786e80f.jpg"},4738:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-selecting-language-search-0ef7ad4ad481eba3511f505c0d48dd64.png"},4067:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-selecting-language-1b584e15820bf752584efc6dd7b15aeb.png"},9964:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-single-user-settings-39514927d322f1eae5e257384a82106b.jpg"},315:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-sound-settings-83f0c82715b44956569594953085dad1.jpg"},5622:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-time-and-date-right-click-7ed500bff1d633e3502ab5a3adfcb766.jpg"},7722:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-touchpad-settings-ee9690f056a1ed39ebddd5cd61936608.jpg"},8355:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-volume-control-cf7733bc82bb3684cc809cf0ec743cef.jpg"},7037:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-workspace-applet-90e298d07b0e72d5061bae7e39fb599f.jpg"},5829:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-workspace-remove-360aa4ae2aeca87afb94c626feaefc32.jpg"},6456:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-workspace-shortcuts-gcc-3c1caf061457b4f8b324c1e344533009.jpg"},4366:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/budgie-workspaces-0396d63dbdbf2e4431b45d3a36f0bb55.jpg"},8182:(e,t,i)=>{i.d(t,{Z:()=>n});const n="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wgARCAAxACsDAREAAhEBAxEB/8QAGgAAAgMBAQAAAAAAAAAAAAAAAAEGBwgCBf/EABcBAQEBAQAAAAAAAAAAAAAAAAABAgP/2gAMAwEAAhADEAAAAYH25gAFdS8p7Zf3PVMbkP0IabI5bg1lmZ1kXtiOjTZHLcGsszOsi9cRvUI9sv7nqmdyHaIUgAU5WcoAO0gT/8QAIRAAAwABAwQDAAAAAAAAAAAAAwQFBgECEgAQERUgITD/2gAIAQEAAQUC+Yoj5gzMInevdxagOl48a9bOPOM0u7Mp58vOpBNsOHIG1Xa3WzjzjKrpTKeAr0aQg7AByFRVKt2FbfCGZm8717uUUC0tfvX9f//EABcRAQEBAQAAAAAAAAAAAAAAABEgMED/2gAIAQMBAT8BwKaKeD//xAAaEQACAwEBAAAAAAAAAAAAAAAAEQEQEiAw/9oACAECAQE/Ae2MfEmai5NVFoQvf//EACcQAAEEAgECBgMBAAAAAAAAAAIBAwQRABIhQWEQExQjMXEgIoEw/9oACAEBAAY/AvzZdbiOm26tAQjd4x6uHcnRPM9wvn+LjsdqG4qWqhXKa/ec+A73rfNZHdiCox9aEVSqrjDipHN4W11NxCql7JgOguwGOyL2x9+GJCya3+3Veq+A73rfNZHaiEpR9bElW7vnClJINkXC2NtBu17LgNAmoAOqJ2x9iGREyC1z0Xqniy03LdBtpbARKqxj1cypOieZ7ZfP8THX2pjiJaoFcJr9f7//xAAfEAACAQQDAQEAAAAAAAAAAAABEQAhMUGBECBRcZH/2gAIAQEAAT8h70UjgCa1uB5ZG7h/Izj8FrUONvTGIARFCDwpAlLesqHoKrAbGlFQQoQuEVX0RLdB8kGDLXlQvEGATXhzAKe9ZUHQVWA3NuIkgwxcso/hiy6D4AICXPKl+AcgGnNFI4Am97heGRu4fyJq/DS1Bjb0QiQksm5PUcPoOf/aAAwDAQACAAMAAAAQSSvVOHx8vx8dVLASV7SQ+//EABkRAQADAQEAAAAAAAAAAAAAAAEAEBEgMf/aAAgBAwEBPxDgvGAmOws8jhrTbPI6pL1gJrvR0X//xAAbEQEAAgMBAQAAAAAAAAAAAAABABEQICExMP/aAAgBAgEBPxDekXfICrvQI9gkvAQ7lK9ggqexKW5pF3yArz7/AP/EAB0QAQEBAQEAAwEBAAAAAAAAAAERIQAxECBBYVH/2gAIAQEAAT8Q+gV6HwnNT4RKpYo7Bi+cO00l7KP8Ln4zstPui/YjxlKg7ykjkCInone8kgaIB3hNBll47Tb4Kmb6ZRRlrz8n3YIwtqN0H81gYajlAPdEeoaTAs/oUod188LwCRgATegwWWXjtNvgqbnpsACyHPYMuEVgbVbqv5hZQlHKA+4AdQEmlL/QoU7j766fCc1PlEqEirlGp5y7DC3ki027+N71u+6PyC8bSld5I7lRVX9e36YeWt6vp+/n/9k="},1145:(e,t,i)=>{i.d(t,{Z:()=>n});const n=i.p+"assets/images/raven-sound-applet-84fdb76d11a39ca554f2bc756205d35e.jpg"}}]); \ No newline at end of file diff --git a/assets/js/cca891e2.341b8cf5.js b/assets/js/cca891e2.341b8cf5.js new file mode 100644 index 000000000..fa656a1c0 --- /dev/null +++ b/assets/js/cca891e2.341b8cf5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[9773],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>f});var a=r(7294);function i(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}return r}function n(e){for(var t=1;t=0||(i[r]=e[r]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}var l=a.createContext({}),c=function(e){var t=a.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):n(n({},t),e)),r},p=function(e){var t=c(e.components);return a.createElement(l.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},h=a.forwardRef((function(e,t){var r=e.components,i=e.mdxType,o=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=c(r),h=i,f=u["".concat(l,".").concat(h)]||u[h]||d[h]||o;return r?a.createElement(f,n(n({ref:t},p),{},{components:r})):a.createElement(f,n({ref:t},p))}));function f(e,t){var r=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var o=r.length,n=new Array(o);n[0]=h;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[u]="string"==typeof e?e:i,n[1]=s;for(var c=2;c{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>n,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>c});var a=r(7462),i=(r(7294),r(3905));const o={title:"Package Inclusion Policy",summary:"What's needed to include packages into the repository"},n="Package Inclusion Policy",s={unversionedId:"packaging/procedures/package-inclusion",id:"packaging/procedures/package-inclusion",title:"Package Inclusion Policy",description:"This policy sets forth the criteria for a package to be accepted for inclusion into the Solus repositories or rejected.",source:"@site/docs/packaging/procedures/package-inclusion.md",sourceDirName:"packaging/procedures",slug:"/packaging/procedures/package-inclusion",permalink:"/docs/packaging/procedures/package-inclusion",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/procedures/package-inclusion.md",tags:[],version:"current",lastUpdatedAt:1695222528,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Package Inclusion Policy",summary:"What's needed to include packages into the repository"},sidebar:"packagingSidebar",previous:{title:"Maintainership",permalink:"/docs/packaging/procedures/maintainership"},next:{title:"Release Processes",permalink:"/docs/packaging/procedures/release-processes"}},l={},c=[{value:"Criteria",id:"criteria",level:2},{value:"Explicitly Redistributable",id:"explicitly-redistributable",level:3},{value:"Server Software",id:"server-software",level:3},{value:"Software Age",id:"software-age",level:3},{value:"Stack Complexity",id:"stack-complexity",level:3},{value:"Value Add",id:"value-add",level:3},{value:"Rejection",id:"rejection",level:2}],p={toc:c},u="wrapper";function d(e){let{components:t,...r}=e;return(0,i.kt)(u,(0,a.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"package-inclusion-policy"},"Package Inclusion Policy"),(0,i.kt)("p",null,"This policy sets forth the criteria for a package to be accepted for inclusion into the Solus repositories or rejected."),(0,i.kt)("h2",{id:"criteria"},"Criteria"),(0,i.kt)("h3",{id:"explicitly-redistributable"},"Explicitly Redistributable"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Software under a free software or open source software license, or license text which explicitly states that it is ",(0,i.kt)("strong",{parentName:"li"},"permissible")," to redistribute the software."),(0,i.kt)("li",{parentName:"ul"},"For anything that cannot be redistributed by Solus, there is the possibility for them to be provided as a Flatpak, for Third Party repository inclusion, however the Solus project is not responsible for flatpak or snap implementation of these items. These items should then fetch only at installation time, and not contain non distributable components."),(0,i.kt)("li",{parentName:"ul"},"Solus supports both VCS (currently only git, this will expand) and traditional software sources (such as tarballs) for packages, equally."),(0,i.kt)("li",{parentName:"ul"},"Unless ",(0,i.kt)("strong",{parentName:"li"},"absolutely unavoidable"),", the sources for a package should be source, and not ",(0,i.kt)("strong",{parentName:"li"},"binary, prebuilt")," sources. Exceptions may be made in rare cases, such as stage1 bootstrap for a compiler, or requires custom components otherwise impossible to provide in Solus (patched libraries, etc.)")),(0,i.kt)("h3",{id:"server-software"},"Server Software"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Mail servers such as Postfix, Dovecot, etc, are ",(0,i.kt)("strong",{parentName:"li"},"not")," eligible for inclusion. Solus does not provide a server operating system."),(0,i.kt)("li",{parentName:"ul"},"Web servers and database daemons ",(0,i.kt)("strong",{parentName:"li"},"are")," eligible for inclusion, as they facilitate web developers to work locally."),(0,i.kt)("li",{parentName:"ul"},"Anything outside of these may be catered to by the usage of Docker, or other container technology. Thus, container technology must be supported by Solus to support access to ancillary cases.")),(0,i.kt)("h3",{id:"software-age"},"Software Age"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"DOA (dead-on-arrival) packages are generally rejected from Solus. However, they may be included at the discretion of the project, if they provide unique functionality."),(0,i.kt)("li",{parentName:"ul"},"Projects with no tags/tarballs which lack traction, may be frozen until a suitable release is made. Tagging releases is an indicator for good release engineering practices."),(0,i.kt)("li",{parentName:"ul"},"Typically, we prefer ",(0,i.kt)("strong",{parentName:"li"},"stable")," tagged releases. However, this may be waived if:"),(0,i.kt)("li",{parentName:"ul"},"The software has significant traction (i.e. prerelease)"),(0,i.kt)("li",{parentName:"ul"},"A bug fix only exists beyond the latest stable release for a git source")),(0,i.kt)("h3",{id:"stack-complexity"},"Stack Complexity"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Certain requests may tick all the boxes, but introduce a level of complexity or require a level of engagement not possible to balance for Solus Staff. Under certain situations, a request will be frozen until it has a dedicated maintainer."),(0,i.kt)("li",{parentName:"ul"},"This extends to requests for full desktop environments. However, this does not extend to minor components like drop-in window managers or panels separate of a dependent stack (i.e. Awesome WM, tint2, etc.)")),(0,i.kt)("h3",{id:"value-add"},"Value Add"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"A web wrapper which ",(0,i.kt)("strong",{parentName:"li"},"adds value"),", such as Discord, with the global push-to-talk shortcut, is eligible for inclusion."),(0,i.kt)("li",{parentName:"ul"},"A web page wrapper, that adds ",(0,i.kt)("strong",{parentName:"li"},"no further value")," other than \u201cconvenient desktop shortcut\u201d or \u201ctray icon\u201d, are ",(0,i.kt)("strong",{parentName:"li"},"not")," eligible for inclusion. Web browsers already support desktop notifications."),(0,i.kt)("li",{parentName:"ul"},"If the newly requested package offers no functionality above that of an alternative already in the repositories, it will very likely be rejected. \u201cIt\u2019s pretty\u201d is never a sufficient reason."),(0,i.kt)("li",{parentName:"ul"},"If the requested package is curated towards, or developed with the intent to work on, a specific operating system, it will very likely be rejected. This includes packages which require libraries that are built with the intent to work on a specific operating system."),(0,i.kt)("li",{parentName:"ul"},"Likewise, when a new package offers a better alternative to an ",(0,i.kt)("strong",{parentName:"li"},"existing")," package, we should look to replace the old one with the new one, to ensure the repository is always deduplicating.")),(0,i.kt)("h2",{id:"rejection"},"Rejection"),(0,i.kt)("p",null,"Solus Staff members reserve the right to permanently reject a package request without the need for further discussion once the rejection is issued. The limited time of contributors should be considered and respected, instead of dragging out and 'necromancing' old issues in a vain attempt to force inclusion of previously rejected software. In the event of any policy change, existing/expired package requests will NOT be reevaluated under new criteria as this would lead to an exponential growth in work upon every policy change, and is physically impossible to handle for a project of ",(0,i.kt)("em",{parentName:"p"},"any")," size."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/cca891e2.4656b42f.js b/assets/js/cca891e2.4656b42f.js deleted file mode 100644 index bde983c35..000000000 --- a/assets/js/cca891e2.4656b42f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[9773],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>f});var a=r(7294);function i(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}return r}function n(e){for(var t=1;t=0||(i[r]=e[r]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}var l=a.createContext({}),c=function(e){var t=a.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):n(n({},t),e)),r},p=function(e){var t=c(e.components);return a.createElement(l.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},h=a.forwardRef((function(e,t){var r=e.components,i=e.mdxType,o=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=c(r),h=i,f=u["".concat(l,".").concat(h)]||u[h]||d[h]||o;return r?a.createElement(f,n(n({ref:t},p),{},{components:r})):a.createElement(f,n({ref:t},p))}));function f(e,t){var r=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var o=r.length,n=new Array(o);n[0]=h;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[u]="string"==typeof e?e:i,n[1]=s;for(var c=2;c{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>n,default:()=>d,frontMatter:()=>o,metadata:()=>s,toc:()=>c});var a=r(7462),i=(r(7294),r(3905));const o={title:"Package Inclusion Policy",summary:"What's needed to include packages into the repository"},n="Package Inclusion Policy",s={unversionedId:"packaging/procedures/package-inclusion",id:"packaging/procedures/package-inclusion",title:"Package Inclusion Policy",description:"This policy sets forth the criteria for a package to be accepted for inclusion into the Solus repositories or rejected.",source:"@site/docs/packaging/procedures/package-inclusion.md",sourceDirName:"packaging/procedures",slug:"/packaging/procedures/package-inclusion",permalink:"/docs/packaging/procedures/package-inclusion",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/procedures/package-inclusion.md",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Package Inclusion Policy",summary:"What's needed to include packages into the repository"},sidebar:"packagingSidebar",previous:{title:"Migrating Existing Repos to GitHub",permalink:"/docs/packaging/procedures/migrate-repos-to-github"},next:{title:"Release Processes",permalink:"/docs/packaging/procedures/release-processes"}},l={},c=[{value:"Criteria",id:"criteria",level:2},{value:"Explicitly Redistributable",id:"explicitly-redistributable",level:3},{value:"Server Software",id:"server-software",level:3},{value:"Software Age",id:"software-age",level:3},{value:"Stack Complexity",id:"stack-complexity",level:3},{value:"Value Add",id:"value-add",level:3},{value:"Rejection",id:"rejection",level:2}],p={toc:c},u="wrapper";function d(e){let{components:t,...r}=e;return(0,i.kt)(u,(0,a.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"package-inclusion-policy"},"Package Inclusion Policy"),(0,i.kt)("p",null,"This policy sets forth the criteria for a package to be accepted for inclusion into the Solus repositories or rejected."),(0,i.kt)("h2",{id:"criteria"},"Criteria"),(0,i.kt)("h3",{id:"explicitly-redistributable"},"Explicitly Redistributable"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Software under a free software or open source software license, or license text which explicitly states that it is ",(0,i.kt)("strong",{parentName:"li"},"permissible")," to redistribute the software."),(0,i.kt)("li",{parentName:"ul"},"For anything that cannot be redistributed by Solus, there is the possibility for them to be provided as a Flatpak, for Third Party repository inclusion, however the Solus project is not responsible for flatpak or snap implementation of these items. These items should then fetch only at installation time, and not contain non distributable components."),(0,i.kt)("li",{parentName:"ul"},"Solus supports both VCS (currently only git, this will expand) and traditional software sources (such as tarballs) for packages, equally."),(0,i.kt)("li",{parentName:"ul"},"Unless ",(0,i.kt)("strong",{parentName:"li"},"absolutely unavoidable"),", the sources for a package should be source, and not ",(0,i.kt)("strong",{parentName:"li"},"binary, prebuilt")," sources. Exceptions may be made in rare cases, such as stage1 bootstrap for a compiler, or requires custom components otherwise impossible to provide in Solus (patched libraries, etc.)")),(0,i.kt)("h3",{id:"server-software"},"Server Software"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Mail servers such as Postfix, Dovecot, etc, are ",(0,i.kt)("strong",{parentName:"li"},"not")," eligible for inclusion. Solus does not provide a server operating system."),(0,i.kt)("li",{parentName:"ul"},"Web servers and database daemons ",(0,i.kt)("strong",{parentName:"li"},"are")," eligible for inclusion, as they facilitate web developers to work locally."),(0,i.kt)("li",{parentName:"ul"},"Anything outside of these may be catered to by the usage of Docker, or other container technology. Thus, container technology must be supported by Solus to support access to ancillary cases.")),(0,i.kt)("h3",{id:"software-age"},"Software Age"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"DOA (dead-on-arrival) packages are generally rejected from Solus. However, they may be included at the discretion of the project, if they provide unique functionality."),(0,i.kt)("li",{parentName:"ul"},"Projects with no tags/tarballs which lack traction, may be frozen until a suitable release is made. Tagging releases is an indicator for good release engineering practices."),(0,i.kt)("li",{parentName:"ul"},"Typically, we prefer ",(0,i.kt)("strong",{parentName:"li"},"stable")," tagged releases. However, this may be waived if:"),(0,i.kt)("li",{parentName:"ul"},"The software has significant traction (i.e. prerelease)"),(0,i.kt)("li",{parentName:"ul"},"A bug fix only exists beyond the latest stable release for a git source")),(0,i.kt)("h3",{id:"stack-complexity"},"Stack Complexity"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"Certain requests may tick all the boxes, but introduce a level of complexity or require a level of engagement not possible to balance for Solus Staff. Under certain situations, a request will be frozen until it has a dedicated maintainer."),(0,i.kt)("li",{parentName:"ul"},"This extends to requests for full desktop environments. However, this does not extend to minor components like drop-in window managers or panels separate of a dependent stack (i.e. Awesome WM, tint2, etc.)")),(0,i.kt)("h3",{id:"value-add"},"Value Add"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"A web wrapper which ",(0,i.kt)("strong",{parentName:"li"},"adds value"),", such as Discord, with the global push-to-talk shortcut, is eligible for inclusion."),(0,i.kt)("li",{parentName:"ul"},"A web page wrapper, that adds ",(0,i.kt)("strong",{parentName:"li"},"no further value")," other than \u201cconvenient desktop shortcut\u201d or \u201ctray icon\u201d, are ",(0,i.kt)("strong",{parentName:"li"},"not")," eligible for inclusion. Web browsers already support desktop notifications."),(0,i.kt)("li",{parentName:"ul"},"If the newly requested package offers no functionality above that of an alternative already in the repositories, it will very likely be rejected. \u201cIt\u2019s pretty\u201d is never a sufficient reason."),(0,i.kt)("li",{parentName:"ul"},"If the requested package is curated towards, or developed with the intent to work on, a specific operating system, it will very likely be rejected. This includes packages which require libraries that are built with the intent to work on a specific operating system."),(0,i.kt)("li",{parentName:"ul"},"Likewise, when a new package offers a better alternative to an ",(0,i.kt)("strong",{parentName:"li"},"existing")," package, we should look to replace the old one with the new one, to ensure the repository is always deduplicating.")),(0,i.kt)("h2",{id:"rejection"},"Rejection"),(0,i.kt)("p",null,"Solus Staff members reserve the right to permanently reject a package request without the need for further discussion once the rejection is issued. The limited time of contributors should be considered and respected, instead of dragging out and 'necromancing' old issues in a vain attempt to force inclusion of previously rejected software. In the event of any policy change, existing/expired package requests will NOT be reevaluated under new criteria as this would lead to an exponential growth in work upon every policy change, and is physically impossible to handle for a project of ",(0,i.kt)("em",{parentName:"p"},"any")," size."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/cec10a63.8bd6048a.js b/assets/js/cec10a63.f899895b.js similarity index 99% rename from assets/js/cec10a63.8bd6048a.js rename to assets/js/cec10a63.f899895b.js index 78c895d54..94fe1cdbe 100644 --- a/assets/js/cec10a63.8bd6048a.js +++ b/assets/js/cec10a63.f899895b.js @@ -1 +1 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[8422],{3905:(t,e,a)=>{a.d(e,{Zo:()=>m,kt:()=>g});var n=a(7294);function o(t,e,a){return e in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}function r(t,e){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),a.push.apply(a,n)}return a}function i(t){for(var e=1;e=0||(o[a]=t[a]);return o}(t,e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(t,a)&&(o[a]=t[a])}return o}var s=n.createContext({}),p=function(t){var e=n.useContext(s),a=e;return t&&(a="function"==typeof t?t(e):i(i({},e),t)),a},m=function(t){var e=p(t.components);return n.createElement(s.Provider,{value:e},t.children)},k="mdxType",d={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},u=n.forwardRef((function(t,e){var a=t.components,o=t.mdxType,r=t.originalType,s=t.parentName,m=l(t,["components","mdxType","originalType","parentName"]),k=p(a),u=o,g=k["".concat(s,".").concat(u)]||k[u]||d[u]||r;return a?n.createElement(g,i(i({ref:e},m),{},{components:a})):n.createElement(g,i({ref:e},m))}));function g(t,e){var a=arguments,o=e&&e.mdxType;if("string"==typeof t||o){var r=a.length,i=new Array(r);i[0]=u;var l={};for(var s in e)hasOwnProperty.call(e,s)&&(l[s]=e[s]);l.originalType=t,l[k]="string"==typeof t?t:o,i[1]=l;for(var p=2;p{a.r(e),a.d(e,{assets:()=>s,contentTitle:()=>i,default:()=>d,frontMatter:()=>r,metadata:()=>l,toc:()=>p});var n=a(7462),o=(a(7294),a(3905));const r={title:"Configuration",summary:"Learn how to customize and configure the Plasma Desktop on Solus."},i="Configuration",l={unversionedId:"user/editions/plasma/configuration",id:"user/editions/plasma/configuration",title:"Configuration",description:"Opening System Settings",source:"@site/docs/user/editions/plasma/configuration.md",sourceDirName:"user/editions/plasma",slug:"/user/editions/plasma/configuration",permalink:"/docs/user/editions/plasma/configuration",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/editions/plasma/configuration.md",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Configuration",summary:"Learn how to customize and configure the Plasma Desktop on Solus."},sidebar:"userSidebar",previous:{title:"Plasma",permalink:"/docs/user/editions/plasma/"},next:{title:"Tips and Tricks",permalink:"/docs/user/editions/plasma/tips-and-tricks"}},s={},p=[{value:"Opening System Settings",id:"opening-system-settings",level:2},{value:"Date and Time",id:"date-and-time",level:2},{value:"Default Applications",id:"default-applications",level:2},{value:"Configuring Default Applications from System Settings",id:"configuring-default-applications-from-system-settings",level:3},{value:"Configuring Default Applications from the File Manager",id:"configuring-default-applications-from-the-file-manager",level:3},{value:"Displays",id:"displays",level:2},{value:"Keyboard Layout",id:"keyboard-layout",level:2},{value:"Configuring Keyboard Layouts",id:"configuring-keyboard-layouts",level:3},{value:"Using IBus",id:"using-ibus",level:3},{value:"Mouse and Touchpad",id:"mouse-and-touchpad",level:2},{value:"Network Settings",id:"network-settings",level:2},{value:"Connecting to a Hidden Wi-Fi Network",id:"connecting-to-a-hidden-wi-fi-network",level:3},{value:"Sound and Sound Devices",id:"sound-and-sound-devices",level:2},{value:"Users",id:"users",level:2},{value:"Adding User Accounts",id:"adding-user-accounts",level:3},{value:"Removing User Accounts",id:"removing-user-accounts",level:3},{value:"Customizing the Desktop",id:"customizing-the-desktop",level:2},{value:"Virtual Desktops",id:"virtual-desktops",level:2},{value:"Creating Virtual Desktops",id:"creating-virtual-desktops",level:3},{value:"Switching Between Virtual Desktops",id:"switching-between-virtual-desktops",level:3}],m={toc:p},k="wrapper";function d(t){let{components:e,...r}=t;return(0,o.kt)(k,(0,n.Z)({},m,r,{components:e,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"configuration"},"Configuration"),(0,o.kt)("h2",{id:"opening-system-settings"},"Opening System Settings"),(0,o.kt)("p",null,"You can open the system settings in Solus Plasma using any of the following methods:"),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Method"),(0,o.kt)("th",{parentName:"tr",align:null},"Description"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Application menu"),(0,o.kt)("td",{parentName:"tr",align:null},"Open the application menu and go to ",(0,o.kt)("strong",{parentName:"td"},"Settings")," > ",(0,o.kt)("strong",{parentName:"td"},"System Settings"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"KRunner"),(0,o.kt)("td",{parentName:"tr",align:null},"Press ",(0,o.kt)("inlineCode",{parentName:"td"},"Alt + F2")," or ",(0,o.kt)("inlineCode",{parentName:"td"},"Alt + Space"),", type ",(0,o.kt)("inlineCode",{parentName:"td"},"systemsettings"),", and press Enter")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Terminal"),(0,o.kt)("td",{parentName:"tr",align:null},"Open a terminal window and execute ",(0,o.kt)("inlineCode",{parentName:"td"},"systemsettings"))))),(0,o.kt)("h2",{id:"date-and-time"},"Date and Time"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"In the ",(0,o.kt)("a",{parentName:"li",href:"#opening-system-settings"},(0,o.kt)("strong",{parentName:"a"},"System Settings"))," screen, go to ",(0,o.kt)("strong",{parentName:"li"},"Personalization")," > ",(0,o.kt)("strong",{parentName:"li"},"Regional Settings")," > ",(0,o.kt)("strong",{parentName:"li"},"Date and Time"),"."),(0,o.kt)("li",{parentName:"ol"},"Configure the date and time of your system.",(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"If you want Solus to set the date and time automatically, select ",(0,o.kt)("strong",{parentName:"li"},"Set date and time automatically"),"."),(0,o.kt)("li",{parentName:"ul"},"If you want to set the date and time manually, clear the ",(0,o.kt)("strong",{parentName:"li"},"Set date and time automatically")," checkbox, then use the available controls.\n",(0,o.kt)("img",{alt:"Plasma date and time settings",src:a(6488).Z,width:"1022",height:"730"})))),(0,o.kt)("li",{parentName:"ol"},"(Optional) Configure the time zone of your system.",(0,o.kt)("ol",{parentName:"li"},(0,o.kt)("li",{parentName:"ol"},"Go to the ",(0,o.kt)("strong",{parentName:"li"},"Time Zone")," tab."),(0,o.kt)("li",{parentName:"ol"},"Select a time zone from the list."))),(0,o.kt)("li",{parentName:"ol"},"Click ",(0,o.kt)("strong",{parentName:"li"},"Apply"),"."),(0,o.kt)("li",{parentName:"ol"},"(Optional) Customize how the time and date display in the bottom panel.",(0,o.kt)("ol",{parentName:"li"},(0,o.kt)("li",{parentName:"ol"},"Right-click the digital clock widget on the bottom panel."),(0,o.kt)("li",{parentName:"ol"},"Select ",(0,o.kt)("strong",{parentName:"li"},"Configure Digital Clock...")),(0,o.kt)("li",{parentName:"ol"},"Configure the available settings as needed.")))),(0,o.kt)("h2",{id:"default-applications"},"Default Applications"),(0,o.kt)("h3",{id:"configuring-default-applications-from-system-settings"},"Configuring Default Applications from System Settings"),(0,o.kt)("p",null,"In the ",(0,o.kt)("a",{parentName:"p",href:"#opening-system-settings"},(0,o.kt)("strong",{parentName:"a"},"System Settings"))," screen, go to ",(0,o.kt)("strong",{parentName:"p"},"Personalization")," > ",(0,o.kt)("strong",{parentName:"p"},"Applications")," > ",(0,o.kt)("strong",{parentName:"p"},"Default Applications"),", then use the menus to select your preferred default applications."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Default applications",src:a(4995).Z,width:"1022",height:"731"})),(0,o.kt)("h3",{id:"configuring-default-applications-from-the-file-manager"},"Configuring Default Applications from the File Manager"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Open Dolphin.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Navigate to the folder that contains the file you want to open.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Right-click the file."),(0,o.kt)("p",{parentName:"li"},(0,o.kt)("img",{alt:"Context menu",src:a(9501).Z,width:"714",height:"456"}))),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Go to ",(0,o.kt)("strong",{parentName:"p"},"Open With")," > ",(0,o.kt)("strong",{parentName:"p"},"Other Application"),"."),(0,o.kt)("p",{parentName:"li"},"The ",(0,o.kt)("strong",{parentName:"p"},"Choose Application")," dialog appears.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Choose the application you want to use from the list.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Select ",(0,o.kt)("strong",{parentName:"p"},"Remember application association for all files of type ","[file type]"),".")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Click ",(0,o.kt)("strong",{parentName:"p"},"OK"),"."),(0,o.kt)("p",{parentName:"li"},(0,o.kt)("img",{alt:"Choose application dialog",src:a(5400).Z,width:"373",height:"571"})))),(0,o.kt)("h2",{id:"displays"},"Displays"),(0,o.kt)("admonition",{type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"Press ",(0,o.kt)("inlineCode",{parentName:"p"},"Super + P")," to access the screen layout settings.")),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"In the ",(0,o.kt)("a",{parentName:"li",href:"#opening-system-settings"},(0,o.kt)("strong",{parentName:"a"},"System Settings"))," screen, go to ",(0,o.kt)("strong",{parentName:"li"},"Hardware")," > ",(0,o.kt)("strong",{parentName:"li"},"Display and Monitor")," > ",(0,o.kt)("strong",{parentName:"li"},"Display Configuration"),"."),(0,o.kt)("li",{parentName:"ol"},"Select the display you want to configure."),(0,o.kt)("li",{parentName:"ol"},"Configure the available settings as needed.\n",(0,o.kt)("img",{alt:"Screen settings available in Solus Plasma",src:a(6304).Z,width:"1021",height:"763"})),(0,o.kt)("li",{parentName:"ol"},"Click ",(0,o.kt)("strong",{parentName:"li"},"Apply"),". ")),(0,o.kt)("h2",{id:"keyboard-layout"},"Keyboard Layout"),(0,o.kt)("h3",{id:"configuring-keyboard-layouts"},"Configuring Keyboard Layouts"),(0,o.kt)("admonition",{title:"Important",type:"caution"},(0,o.kt)("p",{parentName:"admonition"},"If you need to input languages that do not use Latin characters (for example, Chinese or Japanese), ",(0,o.kt)("a",{parentName:"p",href:"#using-ibus"},"use IBus instead"),".")),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"In the ",(0,o.kt)("a",{parentName:"p",href:"#opening-system-settings"},(0,o.kt)("strong",{parentName:"a"},"System Settings"))," screen, go to ",(0,o.kt)("strong",{parentName:"p"},"Input Devices")," > ",(0,o.kt)("strong",{parentName:"p"},"Keyboard")," > ",(0,o.kt)("strong",{parentName:"p"},"Layouts"),"."),(0,o.kt)("p",{parentName:"li"},"The layouts screen appears.\n",(0,o.kt)("img",{alt:"Keyboard layouts",src:a(2570).Z,width:"743",height:"728"}))),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Select ",(0,o.kt)("strong",{parentName:"p"},"Configure layouts"),".")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Configure keyboard layouts as you need."),(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"To add a keyboard layout click ",(0,o.kt)("strong",{parentName:"li"},"Add"),", select a layout from the list, and click ",(0,o.kt)("strong",{parentName:"li"},"OK"),"."),(0,o.kt)("li",{parentName:"ul"},"To remove a keyboard layout select a layout from the list and click ",(0,o.kt)("strong",{parentName:"li"},"Remove"),"."),(0,o.kt)("li",{parentName:"ul"},"To order the list of keyboard layouts, select a layout from the list, then use the ",(0,o.kt)("strong",{parentName:"li"},"Move Up")," and ",(0,o.kt)("strong",{parentName:"li"},"Move Down")," buttons to reorder the list."))),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Configure a keyboard shortcut to switch between layouts by using the options under ",(0,o.kt)("strong",{parentName:"p"},"Shortcuts for Switching Layout"),"."),(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"To use the default shortcuts Solus Plasma provides, use the ",(0,o.kt)("strong",{parentName:"li"},"Main shortcuts")," and ",(0,o.kt)("strong",{parentName:"li"},"3rd level shortcuts")," options."),(0,o.kt)("li",{parentName:"ul"},"To use a custom shortcut, use the ",(0,o.kt)("strong",{parentName:"li"},"Alternative shortcut")," option."))),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Click ",(0,o.kt)("strong",{parentName:"p"},"Apply"),". "))),(0,o.kt)("h3",{id:"using-ibus"},"Using IBus"),(0,o.kt)("p",null,"Solus Plasma includes IBus installed by default. However, you need to enable and integrate IBus with Plasma before usage."),(0,o.kt)("admonition",{title:"Important",type:"caution"},(0,o.kt)("p",{parentName:"admonition"},"Using IBus overrides the configuration in the ",(0,o.kt)("strong",{parentName:"p"},"Layouts")," section of ",(0,o.kt)("strong",{parentName:"p"},"System Settings"))),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Open the ",(0,o.kt)("inlineCode",{parentName:"li"},"/home/[username]/.bashrc")," file with a text editor."),(0,o.kt)("li",{parentName:"ol"},"Add the following lines at the end of the file.")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"export GTK_IM_MODULE=ibus\nexport QT_IM_MODULE=ibus\nexport XMODIFIERS=@im=ibus\n")),(0,o.kt)("ol",{start:3},(0,o.kt)("li",{parentName:"ol"},"Save the file."),(0,o.kt)("li",{parentName:"ol"},"Configure IBus to autostart.",(0,o.kt)("ol",{parentName:"li"},(0,o.kt)("li",{parentName:"ol"},"In the ",(0,o.kt)("a",{parentName:"li",href:"#opening-system-settings"},(0,o.kt)("strong",{parentName:"a"},"System Settings"))," screen, go to ",(0,o.kt)("strong",{parentName:"li"},"Workspace")," > ",(0,o.kt)("strong",{parentName:"li"},"Startup and Shutdown")," > ",(0,o.kt)("strong",{parentName:"li"},"Autostart"),"."),(0,o.kt)("li",{parentName:"ol"},"Click ",(0,o.kt)("strong",{parentName:"li"},"Add"),", then ",(0,o.kt)("strong",{parentName:"li"},"Add Application"),"."),(0,o.kt)("li",{parentName:"ol"},"In the search box, enter ",(0,o.kt)("inlineCode",{parentName:"li"},"ibus-daemon -rxR")," and press ",(0,o.kt)("strong",{parentName:"li"},"OK"),"."))),(0,o.kt)("li",{parentName:"ol"},"Log out from your session, then log in again."),(0,o.kt)("li",{parentName:"ol"},"Configure keyboard layouts as you need.",(0,o.kt)("ol",{parentName:"li"},(0,o.kt)("li",{parentName:"ol"},"Open ",(0,o.kt)("strong",{parentName:"li"},"IBus Preferences")," from the application launcher."),(0,o.kt)("li",{parentName:"ol"},"In the ",(0,o.kt)("strong",{parentName:"li"},"Input Method")," tab, add the keyboard layout you need.")))),(0,o.kt)("admonition",{title:"Important",type:"caution"},(0,o.kt)("p",{parentName:"admonition"},"Some keyboard layouts require ",(0,o.kt)("a",{parentName:"p",href:"/docs/user/software/localization/ibus"},"installing additional packages"),".")),(0,o.kt)("h2",{id:"mouse-and-touchpad"},"Mouse and Touchpad"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"In the ",(0,o.kt)("a",{parentName:"li",href:"#opening-system-settings"},(0,o.kt)("strong",{parentName:"a"},"System Settings"))," screen, go to the appropriate configuration screen:",(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"To configure the mouse, go to ",(0,o.kt)("strong",{parentName:"li"},"Input Devices")," > ",(0,o.kt)("strong",{parentName:"li"},"Mouse"),".\n",(0,o.kt)("img",{alt:"Mouse settings",src:a(80).Z,width:"749",height:"343"})),(0,o.kt)("li",{parentName:"ul"},"To configure the touchpad, go to ",(0,o.kt)("strong",{parentName:"li"},"Input Devices")," > ",(0,o.kt)("strong",{parentName:"li"},"Touchpad"),".\n",(0,o.kt)("img",{alt:"Touchpad settings",src:a(5387).Z,width:"748",height:"591"})," "))),(0,o.kt)("li",{parentName:"ol"},"Configure the available settings as needed."),(0,o.kt)("li",{parentName:"ol"},"Click ",(0,o.kt)("strong",{parentName:"li"},"Apply"),".")),(0,o.kt)("h2",{id:"network-settings"},"Network Settings"),(0,o.kt)("p",null,"The ",(0,o.kt)("strong",{parentName:"p"},"Networks")," widget on the bottom panel allows you to perform frequent networking tasks, such as connecting to a Wi-Fi network or enabling airplane mode."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Networks widget",src:a(253).Z,width:"460",height:"489"})),(0,o.kt)("h3",{id:"connecting-to-a-hidden-wi-fi-network"},"Connecting to a Hidden Wi-Fi Network"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"In the ",(0,o.kt)("strong",{parentName:"p"},"System Settings")," screen, go to ",(0,o.kt)("strong",{parentName:"p"},"Network")," > ",(0,o.kt)("strong",{parentName:"p"},"Connections"),".")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Click the ",(0,o.kt)("strong",{parentName:"p"},"Add new connection")," icon (+).")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Select ",(0,o.kt)("strong",{parentName:"p"},"Wi-Fi"),".")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Click ",(0,o.kt)("strong",{parentName:"p"},"Create"),"."),(0,o.kt)("p",{parentName:"li"},"The ",(0,o.kt)("strong",{parentName:"p"},"New Connection")," window appears.\n",(0,o.kt)("img",{alt:"New connection settings",src:a(8991).Z,width:"651",height:"656"}))),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"In the ",(0,o.kt)("strong",{parentName:"p"},"Wi-Fi")," tab, specify the name (SSID) and basic network settings.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"In the ",(0,o.kt)("strong",{parentName:"p"},"Wi-Fi Security")," tab, configure the password or other authentication settings.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Use the ",(0,o.kt)("strong",{parentName:"p"},"IPv4"),", ",(0,o.kt)("strong",{parentName:"p"},"IPv6")," and ",(0,o.kt)("strong",{parentName:"p"},"General configuration")," tabs to configure additional settings, such as DNS servers.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Click ",(0,o.kt)("strong",{parentName:"p"},"Save"),"."))),(0,o.kt)("h2",{id:"sound-and-sound-devices"},"Sound and Sound Devices"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Audio Volume widget",src:a(4781).Z,width:"497",height:"489"})),(0,o.kt)("p",null,"The ",(0,o.kt)("strong",{parentName:"p"},"Audio Volume")," widget on the bottom panel allows you to perform the following tasks:"),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Task"),(0,o.kt)("th",{parentName:"tr",align:null},"Description"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Select the active output device"),(0,o.kt)("td",{parentName:"tr",align:null},"Select any of the available output devices to change the active output device of your system.")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Select the active input device"),(0,o.kt)("td",{parentName:"tr",align:null},"Select any of the available input devices to change the active input device of your system.")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Control the volume of a device"),(0,o.kt)("td",{parentName:"tr",align:null},"Use the sliders to adjust the master volume of an input/output device.")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Adjust the volume for a specific app"),(0,o.kt)("td",{parentName:"tr",align:null},"The ",(0,o.kt)("strong",{parentName:"td"},"Volume")," tab allows you to control the volume for a specific application.")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Open the audio settings"),(0,o.kt)("td",{parentName:"tr",align:null},"Click the ",(0,o.kt)("strong",{parentName:"td"},"Configure Audio Devices")," button to open the audio configuration screen in System Settings.")))),(0,o.kt)("h2",{id:"users"},"Users"),(0,o.kt)("h3",{id:"adding-user-accounts"},"Adding User Accounts"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"In the ",(0,o.kt)("a",{parentName:"p",href:"#opening-system-settings"},(0,o.kt)("strong",{parentName:"a"},"System Settings"))," screen, go to ",(0,o.kt)("strong",{parentName:"p"},"Personalization")," > ",(0,o.kt)("strong",{parentName:"p"},"Users"),".")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Click ",(0,o.kt)("strong",{parentName:"p"},"Add New User"),".")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Configure the necessary settings."),(0,o.kt)("p",{parentName:"li"},(0,o.kt)("img",{alt:"Add user account",src:a(9367).Z,width:"752",height:"731"}))),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Click ",(0,o.kt)("strong",{parentName:"p"},"Create")),(0,o.kt)("p",{parentName:"li"},"The ",(0,o.kt)("strong",{parentName:"p"},"Authentication Required")," window appears.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Specify your user password and click ",(0,o.kt)("strong",{parentName:"p"},"OK"),". "))),(0,o.kt)("h3",{id:"removing-user-accounts"},"Removing User Accounts"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"In the ",(0,o.kt)("a",{parentName:"p",href:"#opening-system-settings"},(0,o.kt)("strong",{parentName:"a"},"System Settings"))," screen, go to ",(0,o.kt)("strong",{parentName:"p"},"Personalization")," > ",(0,o.kt)("strong",{parentName:"p"},"Users"),".")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Select an account from the user list.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Click ",(0,o.kt)("strong",{parentName:"p"},"Delete User"),".")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"To delete the the user account files, select ",(0,o.kt)("strong",{parentName:"p"},"Delete files"),"; to keep the files for posterior use, select ",(0,o.kt)("strong",{parentName:"p"},"Keep files"),"."),(0,o.kt)("p",{parentName:"li"},(0,o.kt)("img",{alt:"Keep or delete user files",src:a(9300).Z,width:"671",height:"525"})))),(0,o.kt)("h1",{id:"user-interface"},"User Interface"),(0,o.kt)("h2",{id:"customizing-the-desktop"},"Customizing the Desktop"),(0,o.kt)("p",null,"The ",(0,o.kt)("strong",{parentName:"p"},"Desktop Settings")," screen allows you to customize various aspects of your desktop, such as the wallpaper and the desktop icons. To open ",(0,o.kt)("strong",{parentName:"p"},"Desktop Settings")," screen, right-click anywhere on the desktop and select ",(0,o.kt)("strong",{parentName:"p"},"Configure Desktop and Wallpaper..."),"."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Desktop context menu",src:a(3004).Z,width:"537",height:"355"})),(0,o.kt)("p",null,"The following table describes how to customize the desktop using the ",(0,o.kt)("strong",{parentName:"p"},"Desktop Folder Settings")," screen."),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Section"),(0,o.kt)("th",{parentName:"tr",align:null},"Description"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Change the wallpaper"),(0,o.kt)("td",{parentName:"tr",align:null},"Go to the ",(0,o.kt)("strong",{parentName:"td"},"Wallpaper")," section, choose an image from the list, and click ",(0,o.kt)("strong",{parentName:"td"},"OK"),".")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Hide the desktop icons"),(0,o.kt)("td",{parentName:"tr",align:null},"Go to the ",(0,o.kt)("strong",{parentName:"td"},"Wallpaper")," section, change ",(0,o.kt)("strong",{parentName:"td"},"Layout")," to ",(0,o.kt)("strong",{parentName:"td"},"Desktop"),", and click ",(0,o.kt)("strong",{parentName:"td"},"OK"),".")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Configure mouse gestures"),(0,o.kt)("td",{parentName:"tr",align:null},"Go to the ",(0,o.kt)("strong",{parentName:"td"},"Mouse Actions")," section to setup mouse gestures.")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Change the folder displayed on the desktop"),(0,o.kt)("td",{parentName:"tr",align:null},"Go to the ",(0,o.kt)("strong",{parentName:"td"},"Location")," section, select a location in your system, and click ",(0,o.kt)("strong",{parentName:"td"},"OK"),".")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Change the appearance of the desktop icons"),(0,o.kt)("td",{parentName:"tr",align:null},"Go to the ",(0,o.kt)("strong",{parentName:"td"},"Icons")," section, configure the necessary settings, and click ",(0,o.kt)("strong",{parentName:"td"},"OK"),".")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Display only specific files in the desktop"),(0,o.kt)("td",{parentName:"tr",align:null},"Go to the ",(0,o.kt)("strong",{parentName:"td"},"Filter")," section,configure the necessary settings, and click ",(0,o.kt)("strong",{parentName:"td"},"OK"),".")))),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},(0,o.kt)("strong",{parentName:"p"},"Icons")," and ",(0,o.kt)("strong",{parentName:"p"},"Location")," are only available when the desktop layout is set to ",(0,o.kt)("strong",{parentName:"p"},"Folder View"),".")),(0,o.kt)("h2",{id:"virtual-desktops"},"Virtual Desktops"),(0,o.kt)("p",null,"Plasma allows you to have multiple desktops on your computer. "),(0,o.kt)("p",null,"Virtual desktops are helpful to keep tasks organized and avoid clutter. For example, you could have one virtual desktop for work, one for school, and one for personal use."),(0,o.kt)("p",null,"Plasma arranges virtual desktops in a grid. You can configure the rows of the grid to suit your needs."),(0,o.kt)("admonition",{type:"note"},(0,o.kt)("p",{parentName:"admonition"},"Solus Plasma has one virtual desktop and one row by default.")),(0,o.kt)("h3",{id:"creating-virtual-desktops"},"Creating Virtual Desktops"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"In the ",(0,o.kt)("a",{parentName:"p",href:"#opening-system-settings"},(0,o.kt)("strong",{parentName:"a"},"System Settings"))," screen, go to ",(0,o.kt)("strong",{parentName:"p"},"Workspace")," > ",(0,o.kt)("strong",{parentName:"p"},"Workspace Behavior")," > ",(0,o.kt)("strong",{parentName:"p"},"Virtual Desktops"),".")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Define the number of rows in the grid.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Create a new virtual desktop."),(0,o.kt)("ol",{parentName:"li"},(0,o.kt)("li",{parentName:"ol"},"Click ",(0,o.kt)("strong",{parentName:"li"},"Add"),"."),(0,o.kt)("li",{parentName:"ol"},"(Optional) Click the ",(0,o.kt)("strong",{parentName:"li"},"Rename")," button to change the name of the virtual desktop."))),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Repeat the previous step to add multiple virtual desktops."),(0,o.kt)("admonition",{parentName:"li",type:"caution"},(0,o.kt)("p",{parentName:"admonition"},"Plasma arranges the desktops by the rows automatically."))),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"(Optional) Configure the behavior of the virtual desktops."),(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Navigation wraps around"),": Lets you cycle through your virtual desktops in a loop using keyboard shortcuts or mouse gestures."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Show animation when switching"),": Displays animations when switching between virtual desktops."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Show on-screen display when switching"),": Displays the name of the current desktop when switching between desktops."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Show desktop layout indicators"),": Displays the virtual desktop grid when you switch between desktops."))),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Click ",(0,o.kt)("strong",{parentName:"p"},"Apply")))),(0,o.kt)("admonition",{type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"Plasma displays the virtual desktop grid next to the application launcher button.\n",(0,o.kt)("img",{alt:"Virtual desktop grid",src:a(6582).Z,width:"375",height:"325"}))),(0,o.kt)("h3",{id:"switching-between-virtual-desktops"},"Switching Between Virtual Desktops"),(0,o.kt)("p",null,"The following table outlines the methods to change between desktops in Solus Plasma."),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Method"),(0,o.kt)("th",{parentName:"tr",align:null},"Description"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Using the applet in the bottom panel"),(0,o.kt)("td",{parentName:"tr",align:null},"Use the the virtual desktop grid next to the application launcher button to change between your virtual desktops.")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Using mouse gestures"),(0,o.kt)("td",{parentName:"tr",align:null},"Move the mouse pointer anywhere in the desktop, then move the mouse wheel to change between your virtual desktops.")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Using keyboard shortcuts"),(0,o.kt)("td",{parentName:"tr",align:null},"Open System Settings, go to ",(0,o.kt)("strong",{parentName:"td"},"Workspace")," > ",(0,o.kt)("strong",{parentName:"td"},"Shortcuts")," > ",(0,o.kt)("strong",{parentName:"td"},"KWin"),", then search for ",(0,o.kt)("inlineCode",{parentName:"td"},"desktop")," to see the available keyboard shortcuts to switch between virtual desktops")))),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Keyboard shortcuts to switch between desktops",src:a(9834).Z,width:"1150",height:"859"})),(0,o.kt)("admonition",{type:"note"},(0,o.kt)("p",{parentName:"admonition"},"Some of the keyboard shortcuts are disabled by default.")))}d.isMDXComponent=!0},9367:(t,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/add-user-account-1e83f41522d5b43ae2f29250e52bb758.png"},4781:(t,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/audio-widget-48a0e65d8e699ad8ca493a1e2dfcfb10.png"},5400:(t,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/choose-application-f3747627db0cff378d7192b6c7b253f0.png"},6488:(t,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/date-time-9e18cbfa859270a81d6973cab14ae1b6.png"},4995:(t,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/default-apps-screen-3da638bbc4ab452b8242fb718543a132.png"},3004:(t,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/desktop-context-menu-2a7196d846dab6acdff78dacb64b3fd6.png"},9501:(t,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/file-context-menu-default-app-0816ad4ab5c64beeef9817dad6cbaeb7.png"},9300:(t,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/keep-delete-files-9a5622ed38b6dd5a1002312f0a7a01cd.png"},2570:(t,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/keyboard-layouts-468ec6547841069b372a81ef4120a67b.png"},80:(t,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/mouse-settings-0ec1470b23397d7d0aba492f1f4806fe.png"},253:(t,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/networks-widget-5446dcc803349c7a20e445393930a00a.png"},8991:(t,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/new-wifi-network-b1c4e7f299993318ae998c66b217fa69.png"},6304:(t,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/screen-configuration-2fd6ef5f5d7a1d590ae67d553f6f58c9.png"},9834:(t,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/switch-desktop-shortcut-list-8b9812e81259bd41b56730a22d11728b.png"},5387:(t,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/touchpad-settings-71fa3d9caf82f2103b978f12bf73a5be.png"},6582:(t,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/vd-grid-bb98a6b6492fe334b36271eac65b4acb.png"}}]); \ No newline at end of file +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[8422],{3905:(t,e,a)=>{a.d(e,{Zo:()=>m,kt:()=>g});var n=a(7294);function o(t,e,a){return e in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}function r(t,e){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),a.push.apply(a,n)}return a}function i(t){for(var e=1;e=0||(o[a]=t[a]);return o}(t,e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(t,a)&&(o[a]=t[a])}return o}var s=n.createContext({}),p=function(t){var e=n.useContext(s),a=e;return t&&(a="function"==typeof t?t(e):i(i({},e),t)),a},m=function(t){var e=p(t.components);return n.createElement(s.Provider,{value:e},t.children)},k="mdxType",d={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},u=n.forwardRef((function(t,e){var a=t.components,o=t.mdxType,r=t.originalType,s=t.parentName,m=l(t,["components","mdxType","originalType","parentName"]),k=p(a),u=o,g=k["".concat(s,".").concat(u)]||k[u]||d[u]||r;return a?n.createElement(g,i(i({ref:e},m),{},{components:a})):n.createElement(g,i({ref:e},m))}));function g(t,e){var a=arguments,o=e&&e.mdxType;if("string"==typeof t||o){var r=a.length,i=new Array(r);i[0]=u;var l={};for(var s in e)hasOwnProperty.call(e,s)&&(l[s]=e[s]);l.originalType=t,l[k]="string"==typeof t?t:o,i[1]=l;for(var p=2;p{a.r(e),a.d(e,{assets:()=>s,contentTitle:()=>i,default:()=>d,frontMatter:()=>r,metadata:()=>l,toc:()=>p});var n=a(7462),o=(a(7294),a(3905));const r={title:"Configuration",summary:"Learn how to customize and configure the Plasma Desktop on Solus."},i="Configuration",l={unversionedId:"user/editions/plasma/configuration",id:"user/editions/plasma/configuration",title:"Configuration",description:"Opening System Settings",source:"@site/docs/user/editions/plasma/configuration.md",sourceDirName:"user/editions/plasma",slug:"/user/editions/plasma/configuration",permalink:"/docs/user/editions/plasma/configuration",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/editions/plasma/configuration.md",tags:[],version:"current",lastUpdatedAt:1695222528,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Configuration",summary:"Learn how to customize and configure the Plasma Desktop on Solus."},sidebar:"userSidebar",previous:{title:"Plasma",permalink:"/docs/user/editions/plasma/"},next:{title:"Tips and Tricks",permalink:"/docs/user/editions/plasma/tips-and-tricks"}},s={},p=[{value:"Opening System Settings",id:"opening-system-settings",level:2},{value:"Date and Time",id:"date-and-time",level:2},{value:"Default Applications",id:"default-applications",level:2},{value:"Configuring Default Applications from System Settings",id:"configuring-default-applications-from-system-settings",level:3},{value:"Configuring Default Applications from the File Manager",id:"configuring-default-applications-from-the-file-manager",level:3},{value:"Displays",id:"displays",level:2},{value:"Keyboard Layout",id:"keyboard-layout",level:2},{value:"Configuring Keyboard Layouts",id:"configuring-keyboard-layouts",level:3},{value:"Using IBus",id:"using-ibus",level:3},{value:"Mouse and Touchpad",id:"mouse-and-touchpad",level:2},{value:"Network Settings",id:"network-settings",level:2},{value:"Connecting to a Hidden Wi-Fi Network",id:"connecting-to-a-hidden-wi-fi-network",level:3},{value:"Sound and Sound Devices",id:"sound-and-sound-devices",level:2},{value:"Users",id:"users",level:2},{value:"Adding User Accounts",id:"adding-user-accounts",level:3},{value:"Removing User Accounts",id:"removing-user-accounts",level:3},{value:"Customizing the Desktop",id:"customizing-the-desktop",level:2},{value:"Virtual Desktops",id:"virtual-desktops",level:2},{value:"Creating Virtual Desktops",id:"creating-virtual-desktops",level:3},{value:"Switching Between Virtual Desktops",id:"switching-between-virtual-desktops",level:3}],m={toc:p},k="wrapper";function d(t){let{components:e,...r}=t;return(0,o.kt)(k,(0,n.Z)({},m,r,{components:e,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"configuration"},"Configuration"),(0,o.kt)("h2",{id:"opening-system-settings"},"Opening System Settings"),(0,o.kt)("p",null,"You can open the system settings in Solus Plasma using any of the following methods:"),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Method"),(0,o.kt)("th",{parentName:"tr",align:null},"Description"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Application menu"),(0,o.kt)("td",{parentName:"tr",align:null},"Open the application menu and go to ",(0,o.kt)("strong",{parentName:"td"},"Settings")," > ",(0,o.kt)("strong",{parentName:"td"},"System Settings"))),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"KRunner"),(0,o.kt)("td",{parentName:"tr",align:null},"Press ",(0,o.kt)("inlineCode",{parentName:"td"},"Alt + F2")," or ",(0,o.kt)("inlineCode",{parentName:"td"},"Alt + Space"),", type ",(0,o.kt)("inlineCode",{parentName:"td"},"systemsettings"),", and press Enter")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Terminal"),(0,o.kt)("td",{parentName:"tr",align:null},"Open a terminal window and execute ",(0,o.kt)("inlineCode",{parentName:"td"},"systemsettings"))))),(0,o.kt)("h2",{id:"date-and-time"},"Date and Time"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"In the ",(0,o.kt)("a",{parentName:"li",href:"#opening-system-settings"},(0,o.kt)("strong",{parentName:"a"},"System Settings"))," screen, go to ",(0,o.kt)("strong",{parentName:"li"},"Personalization")," > ",(0,o.kt)("strong",{parentName:"li"},"Regional Settings")," > ",(0,o.kt)("strong",{parentName:"li"},"Date and Time"),"."),(0,o.kt)("li",{parentName:"ol"},"Configure the date and time of your system.",(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"If you want Solus to set the date and time automatically, select ",(0,o.kt)("strong",{parentName:"li"},"Set date and time automatically"),"."),(0,o.kt)("li",{parentName:"ul"},"If you want to set the date and time manually, clear the ",(0,o.kt)("strong",{parentName:"li"},"Set date and time automatically")," checkbox, then use the available controls.\n",(0,o.kt)("img",{alt:"Plasma date and time settings",src:a(6488).Z,width:"1022",height:"730"})))),(0,o.kt)("li",{parentName:"ol"},"(Optional) Configure the time zone of your system.",(0,o.kt)("ol",{parentName:"li"},(0,o.kt)("li",{parentName:"ol"},"Go to the ",(0,o.kt)("strong",{parentName:"li"},"Time Zone")," tab."),(0,o.kt)("li",{parentName:"ol"},"Select a time zone from the list."))),(0,o.kt)("li",{parentName:"ol"},"Click ",(0,o.kt)("strong",{parentName:"li"},"Apply"),"."),(0,o.kt)("li",{parentName:"ol"},"(Optional) Customize how the time and date display in the bottom panel.",(0,o.kt)("ol",{parentName:"li"},(0,o.kt)("li",{parentName:"ol"},"Right-click the digital clock widget on the bottom panel."),(0,o.kt)("li",{parentName:"ol"},"Select ",(0,o.kt)("strong",{parentName:"li"},"Configure Digital Clock...")),(0,o.kt)("li",{parentName:"ol"},"Configure the available settings as needed.")))),(0,o.kt)("h2",{id:"default-applications"},"Default Applications"),(0,o.kt)("h3",{id:"configuring-default-applications-from-system-settings"},"Configuring Default Applications from System Settings"),(0,o.kt)("p",null,"In the ",(0,o.kt)("a",{parentName:"p",href:"#opening-system-settings"},(0,o.kt)("strong",{parentName:"a"},"System Settings"))," screen, go to ",(0,o.kt)("strong",{parentName:"p"},"Personalization")," > ",(0,o.kt)("strong",{parentName:"p"},"Applications")," > ",(0,o.kt)("strong",{parentName:"p"},"Default Applications"),", then use the menus to select your preferred default applications."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Default applications",src:a(4995).Z,width:"1022",height:"731"})),(0,o.kt)("h3",{id:"configuring-default-applications-from-the-file-manager"},"Configuring Default Applications from the File Manager"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Open Dolphin.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Navigate to the folder that contains the file you want to open.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Right-click the file."),(0,o.kt)("p",{parentName:"li"},(0,o.kt)("img",{alt:"Context menu",src:a(9501).Z,width:"714",height:"456"}))),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Go to ",(0,o.kt)("strong",{parentName:"p"},"Open With")," > ",(0,o.kt)("strong",{parentName:"p"},"Other Application"),"."),(0,o.kt)("p",{parentName:"li"},"The ",(0,o.kt)("strong",{parentName:"p"},"Choose Application")," dialog appears.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Choose the application you want to use from the list.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Select ",(0,o.kt)("strong",{parentName:"p"},"Remember application association for all files of type ","[file type]"),".")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Click ",(0,o.kt)("strong",{parentName:"p"},"OK"),"."),(0,o.kt)("p",{parentName:"li"},(0,o.kt)("img",{alt:"Choose application dialog",src:a(5400).Z,width:"373",height:"571"})))),(0,o.kt)("h2",{id:"displays"},"Displays"),(0,o.kt)("admonition",{type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"Press ",(0,o.kt)("inlineCode",{parentName:"p"},"Super + P")," to access the screen layout settings.")),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"In the ",(0,o.kt)("a",{parentName:"li",href:"#opening-system-settings"},(0,o.kt)("strong",{parentName:"a"},"System Settings"))," screen, go to ",(0,o.kt)("strong",{parentName:"li"},"Hardware")," > ",(0,o.kt)("strong",{parentName:"li"},"Display and Monitor")," > ",(0,o.kt)("strong",{parentName:"li"},"Display Configuration"),"."),(0,o.kt)("li",{parentName:"ol"},"Select the display you want to configure."),(0,o.kt)("li",{parentName:"ol"},"Configure the available settings as needed.\n",(0,o.kt)("img",{alt:"Screen settings available in Solus Plasma",src:a(6304).Z,width:"1021",height:"763"})),(0,o.kt)("li",{parentName:"ol"},"Click ",(0,o.kt)("strong",{parentName:"li"},"Apply"),". ")),(0,o.kt)("h2",{id:"keyboard-layout"},"Keyboard Layout"),(0,o.kt)("h3",{id:"configuring-keyboard-layouts"},"Configuring Keyboard Layouts"),(0,o.kt)("admonition",{title:"Important",type:"caution"},(0,o.kt)("p",{parentName:"admonition"},"If you need to input languages that do not use Latin characters (for example, Chinese or Japanese), ",(0,o.kt)("a",{parentName:"p",href:"#using-ibus"},"use IBus instead"),".")),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"In the ",(0,o.kt)("a",{parentName:"p",href:"#opening-system-settings"},(0,o.kt)("strong",{parentName:"a"},"System Settings"))," screen, go to ",(0,o.kt)("strong",{parentName:"p"},"Input Devices")," > ",(0,o.kt)("strong",{parentName:"p"},"Keyboard")," > ",(0,o.kt)("strong",{parentName:"p"},"Layouts"),"."),(0,o.kt)("p",{parentName:"li"},"The layouts screen appears.\n",(0,o.kt)("img",{alt:"Keyboard layouts",src:a(2570).Z,width:"743",height:"728"}))),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Select ",(0,o.kt)("strong",{parentName:"p"},"Configure layouts"),".")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Configure keyboard layouts as you need."),(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"To add a keyboard layout click ",(0,o.kt)("strong",{parentName:"li"},"Add"),", select a layout from the list, and click ",(0,o.kt)("strong",{parentName:"li"},"OK"),"."),(0,o.kt)("li",{parentName:"ul"},"To remove a keyboard layout select a layout from the list and click ",(0,o.kt)("strong",{parentName:"li"},"Remove"),"."),(0,o.kt)("li",{parentName:"ul"},"To order the list of keyboard layouts, select a layout from the list, then use the ",(0,o.kt)("strong",{parentName:"li"},"Move Up")," and ",(0,o.kt)("strong",{parentName:"li"},"Move Down")," buttons to reorder the list."))),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Configure a keyboard shortcut to switch between layouts by using the options under ",(0,o.kt)("strong",{parentName:"p"},"Shortcuts for Switching Layout"),"."),(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"To use the default shortcuts Solus Plasma provides, use the ",(0,o.kt)("strong",{parentName:"li"},"Main shortcuts")," and ",(0,o.kt)("strong",{parentName:"li"},"3rd level shortcuts")," options."),(0,o.kt)("li",{parentName:"ul"},"To use a custom shortcut, use the ",(0,o.kt)("strong",{parentName:"li"},"Alternative shortcut")," option."))),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Click ",(0,o.kt)("strong",{parentName:"p"},"Apply"),". "))),(0,o.kt)("h3",{id:"using-ibus"},"Using IBus"),(0,o.kt)("p",null,"Solus Plasma includes IBus installed by default. However, you need to enable and integrate IBus with Plasma before usage."),(0,o.kt)("admonition",{title:"Important",type:"caution"},(0,o.kt)("p",{parentName:"admonition"},"Using IBus overrides the configuration in the ",(0,o.kt)("strong",{parentName:"p"},"Layouts")," section of ",(0,o.kt)("strong",{parentName:"p"},"System Settings"))),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"Open the ",(0,o.kt)("inlineCode",{parentName:"li"},"/home/[username]/.bashrc")," file with a text editor."),(0,o.kt)("li",{parentName:"ol"},"Add the following lines at the end of the file.")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"export GTK_IM_MODULE=ibus\nexport QT_IM_MODULE=ibus\nexport XMODIFIERS=@im=ibus\n")),(0,o.kt)("ol",{start:3},(0,o.kt)("li",{parentName:"ol"},"Save the file."),(0,o.kt)("li",{parentName:"ol"},"Configure IBus to autostart.",(0,o.kt)("ol",{parentName:"li"},(0,o.kt)("li",{parentName:"ol"},"In the ",(0,o.kt)("a",{parentName:"li",href:"#opening-system-settings"},(0,o.kt)("strong",{parentName:"a"},"System Settings"))," screen, go to ",(0,o.kt)("strong",{parentName:"li"},"Workspace")," > ",(0,o.kt)("strong",{parentName:"li"},"Startup and Shutdown")," > ",(0,o.kt)("strong",{parentName:"li"},"Autostart"),"."),(0,o.kt)("li",{parentName:"ol"},"Click ",(0,o.kt)("strong",{parentName:"li"},"Add"),", then ",(0,o.kt)("strong",{parentName:"li"},"Add Application"),"."),(0,o.kt)("li",{parentName:"ol"},"In the search box, enter ",(0,o.kt)("inlineCode",{parentName:"li"},"ibus-daemon -rxR")," and press ",(0,o.kt)("strong",{parentName:"li"},"OK"),"."))),(0,o.kt)("li",{parentName:"ol"},"Log out from your session, then log in again."),(0,o.kt)("li",{parentName:"ol"},"Configure keyboard layouts as you need.",(0,o.kt)("ol",{parentName:"li"},(0,o.kt)("li",{parentName:"ol"},"Open ",(0,o.kt)("strong",{parentName:"li"},"IBus Preferences")," from the application launcher."),(0,o.kt)("li",{parentName:"ol"},"In the ",(0,o.kt)("strong",{parentName:"li"},"Input Method")," tab, add the keyboard layout you need.")))),(0,o.kt)("admonition",{title:"Important",type:"caution"},(0,o.kt)("p",{parentName:"admonition"},"Some keyboard layouts require ",(0,o.kt)("a",{parentName:"p",href:"/docs/user/software/localization/ibus"},"installing additional packages"),".")),(0,o.kt)("h2",{id:"mouse-and-touchpad"},"Mouse and Touchpad"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"In the ",(0,o.kt)("a",{parentName:"li",href:"#opening-system-settings"},(0,o.kt)("strong",{parentName:"a"},"System Settings"))," screen, go to the appropriate configuration screen:",(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},"To configure the mouse, go to ",(0,o.kt)("strong",{parentName:"li"},"Input Devices")," > ",(0,o.kt)("strong",{parentName:"li"},"Mouse"),".\n",(0,o.kt)("img",{alt:"Mouse settings",src:a(80).Z,width:"749",height:"343"})),(0,o.kt)("li",{parentName:"ul"},"To configure the touchpad, go to ",(0,o.kt)("strong",{parentName:"li"},"Input Devices")," > ",(0,o.kt)("strong",{parentName:"li"},"Touchpad"),".\n",(0,o.kt)("img",{alt:"Touchpad settings",src:a(5387).Z,width:"748",height:"591"})," "))),(0,o.kt)("li",{parentName:"ol"},"Configure the available settings as needed."),(0,o.kt)("li",{parentName:"ol"},"Click ",(0,o.kt)("strong",{parentName:"li"},"Apply"),".")),(0,o.kt)("h2",{id:"network-settings"},"Network Settings"),(0,o.kt)("p",null,"The ",(0,o.kt)("strong",{parentName:"p"},"Networks")," widget on the bottom panel allows you to perform frequent networking tasks, such as connecting to a Wi-Fi network or enabling airplane mode."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Networks widget",src:a(253).Z,width:"460",height:"489"})),(0,o.kt)("h3",{id:"connecting-to-a-hidden-wi-fi-network"},"Connecting to a Hidden Wi-Fi Network"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"In the ",(0,o.kt)("strong",{parentName:"p"},"System Settings")," screen, go to ",(0,o.kt)("strong",{parentName:"p"},"Network")," > ",(0,o.kt)("strong",{parentName:"p"},"Connections"),".")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Click the ",(0,o.kt)("strong",{parentName:"p"},"Add new connection")," icon (+).")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Select ",(0,o.kt)("strong",{parentName:"p"},"Wi-Fi"),".")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Click ",(0,o.kt)("strong",{parentName:"p"},"Create"),"."),(0,o.kt)("p",{parentName:"li"},"The ",(0,o.kt)("strong",{parentName:"p"},"New Connection")," window appears.\n",(0,o.kt)("img",{alt:"New connection settings",src:a(8991).Z,width:"651",height:"656"}))),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"In the ",(0,o.kt)("strong",{parentName:"p"},"Wi-Fi")," tab, specify the name (SSID) and basic network settings.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"In the ",(0,o.kt)("strong",{parentName:"p"},"Wi-Fi Security")," tab, configure the password or other authentication settings.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Use the ",(0,o.kt)("strong",{parentName:"p"},"IPv4"),", ",(0,o.kt)("strong",{parentName:"p"},"IPv6")," and ",(0,o.kt)("strong",{parentName:"p"},"General configuration")," tabs to configure additional settings, such as DNS servers.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Click ",(0,o.kt)("strong",{parentName:"p"},"Save"),"."))),(0,o.kt)("h2",{id:"sound-and-sound-devices"},"Sound and Sound Devices"),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Audio Volume widget",src:a(4781).Z,width:"497",height:"489"})),(0,o.kt)("p",null,"The ",(0,o.kt)("strong",{parentName:"p"},"Audio Volume")," widget on the bottom panel allows you to perform the following tasks:"),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Task"),(0,o.kt)("th",{parentName:"tr",align:null},"Description"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Select the active output device"),(0,o.kt)("td",{parentName:"tr",align:null},"Select any of the available output devices to change the active output device of your system.")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Select the active input device"),(0,o.kt)("td",{parentName:"tr",align:null},"Select any of the available input devices to change the active input device of your system.")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Control the volume of a device"),(0,o.kt)("td",{parentName:"tr",align:null},"Use the sliders to adjust the master volume of an input/output device.")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Adjust the volume for a specific app"),(0,o.kt)("td",{parentName:"tr",align:null},"The ",(0,o.kt)("strong",{parentName:"td"},"Volume")," tab allows you to control the volume for a specific application.")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Open the audio settings"),(0,o.kt)("td",{parentName:"tr",align:null},"Click the ",(0,o.kt)("strong",{parentName:"td"},"Configure Audio Devices")," button to open the audio configuration screen in System Settings.")))),(0,o.kt)("h2",{id:"users"},"Users"),(0,o.kt)("h3",{id:"adding-user-accounts"},"Adding User Accounts"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"In the ",(0,o.kt)("a",{parentName:"p",href:"#opening-system-settings"},(0,o.kt)("strong",{parentName:"a"},"System Settings"))," screen, go to ",(0,o.kt)("strong",{parentName:"p"},"Personalization")," > ",(0,o.kt)("strong",{parentName:"p"},"Users"),".")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Click ",(0,o.kt)("strong",{parentName:"p"},"Add New User"),".")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Configure the necessary settings."),(0,o.kt)("p",{parentName:"li"},(0,o.kt)("img",{alt:"Add user account",src:a(9367).Z,width:"752",height:"731"}))),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Click ",(0,o.kt)("strong",{parentName:"p"},"Create")),(0,o.kt)("p",{parentName:"li"},"The ",(0,o.kt)("strong",{parentName:"p"},"Authentication Required")," window appears.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Specify your user password and click ",(0,o.kt)("strong",{parentName:"p"},"OK"),". "))),(0,o.kt)("h3",{id:"removing-user-accounts"},"Removing User Accounts"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"In the ",(0,o.kt)("a",{parentName:"p",href:"#opening-system-settings"},(0,o.kt)("strong",{parentName:"a"},"System Settings"))," screen, go to ",(0,o.kt)("strong",{parentName:"p"},"Personalization")," > ",(0,o.kt)("strong",{parentName:"p"},"Users"),".")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Select an account from the user list.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Click ",(0,o.kt)("strong",{parentName:"p"},"Delete User"),".")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"To delete the the user account files, select ",(0,o.kt)("strong",{parentName:"p"},"Delete files"),"; to keep the files for posterior use, select ",(0,o.kt)("strong",{parentName:"p"},"Keep files"),"."),(0,o.kt)("p",{parentName:"li"},(0,o.kt)("img",{alt:"Keep or delete user files",src:a(9300).Z,width:"671",height:"525"})))),(0,o.kt)("h1",{id:"user-interface"},"User Interface"),(0,o.kt)("h2",{id:"customizing-the-desktop"},"Customizing the Desktop"),(0,o.kt)("p",null,"The ",(0,o.kt)("strong",{parentName:"p"},"Desktop Settings")," screen allows you to customize various aspects of your desktop, such as the wallpaper and the desktop icons. To open ",(0,o.kt)("strong",{parentName:"p"},"Desktop Settings")," screen, right-click anywhere on the desktop and select ",(0,o.kt)("strong",{parentName:"p"},"Configure Desktop and Wallpaper..."),"."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Desktop context menu",src:a(3004).Z,width:"537",height:"355"})),(0,o.kt)("p",null,"The following table describes how to customize the desktop using the ",(0,o.kt)("strong",{parentName:"p"},"Desktop Folder Settings")," screen."),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Section"),(0,o.kt)("th",{parentName:"tr",align:null},"Description"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Change the wallpaper"),(0,o.kt)("td",{parentName:"tr",align:null},"Go to the ",(0,o.kt)("strong",{parentName:"td"},"Wallpaper")," section, choose an image from the list, and click ",(0,o.kt)("strong",{parentName:"td"},"OK"),".")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Hide the desktop icons"),(0,o.kt)("td",{parentName:"tr",align:null},"Go to the ",(0,o.kt)("strong",{parentName:"td"},"Wallpaper")," section, change ",(0,o.kt)("strong",{parentName:"td"},"Layout")," to ",(0,o.kt)("strong",{parentName:"td"},"Desktop"),", and click ",(0,o.kt)("strong",{parentName:"td"},"OK"),".")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Configure mouse gestures"),(0,o.kt)("td",{parentName:"tr",align:null},"Go to the ",(0,o.kt)("strong",{parentName:"td"},"Mouse Actions")," section to setup mouse gestures.")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Change the folder displayed on the desktop"),(0,o.kt)("td",{parentName:"tr",align:null},"Go to the ",(0,o.kt)("strong",{parentName:"td"},"Location")," section, select a location in your system, and click ",(0,o.kt)("strong",{parentName:"td"},"OK"),".")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Change the appearance of the desktop icons"),(0,o.kt)("td",{parentName:"tr",align:null},"Go to the ",(0,o.kt)("strong",{parentName:"td"},"Icons")," section, configure the necessary settings, and click ",(0,o.kt)("strong",{parentName:"td"},"OK"),".")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Display only specific files in the desktop"),(0,o.kt)("td",{parentName:"tr",align:null},"Go to the ",(0,o.kt)("strong",{parentName:"td"},"Filter")," section,configure the necessary settings, and click ",(0,o.kt)("strong",{parentName:"td"},"OK"),".")))),(0,o.kt)("admonition",{type:"info"},(0,o.kt)("p",{parentName:"admonition"},(0,o.kt)("strong",{parentName:"p"},"Icons")," and ",(0,o.kt)("strong",{parentName:"p"},"Location")," are only available when the desktop layout is set to ",(0,o.kt)("strong",{parentName:"p"},"Folder View"),".")),(0,o.kt)("h2",{id:"virtual-desktops"},"Virtual Desktops"),(0,o.kt)("p",null,"Plasma allows you to have multiple desktops on your computer. "),(0,o.kt)("p",null,"Virtual desktops are helpful to keep tasks organized and avoid clutter. For example, you could have one virtual desktop for work, one for school, and one for personal use."),(0,o.kt)("p",null,"Plasma arranges virtual desktops in a grid. You can configure the rows of the grid to suit your needs."),(0,o.kt)("admonition",{type:"note"},(0,o.kt)("p",{parentName:"admonition"},"Solus Plasma has one virtual desktop and one row by default.")),(0,o.kt)("h3",{id:"creating-virtual-desktops"},"Creating Virtual Desktops"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"In the ",(0,o.kt)("a",{parentName:"p",href:"#opening-system-settings"},(0,o.kt)("strong",{parentName:"a"},"System Settings"))," screen, go to ",(0,o.kt)("strong",{parentName:"p"},"Workspace")," > ",(0,o.kt)("strong",{parentName:"p"},"Workspace Behavior")," > ",(0,o.kt)("strong",{parentName:"p"},"Virtual Desktops"),".")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Define the number of rows in the grid.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Create a new virtual desktop."),(0,o.kt)("ol",{parentName:"li"},(0,o.kt)("li",{parentName:"ol"},"Click ",(0,o.kt)("strong",{parentName:"li"},"Add"),"."),(0,o.kt)("li",{parentName:"ol"},"(Optional) Click the ",(0,o.kt)("strong",{parentName:"li"},"Rename")," button to change the name of the virtual desktop."))),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Repeat the previous step to add multiple virtual desktops."),(0,o.kt)("admonition",{parentName:"li",type:"caution"},(0,o.kt)("p",{parentName:"admonition"},"Plasma arranges the desktops by the rows automatically."))),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"(Optional) Configure the behavior of the virtual desktops."),(0,o.kt)("ul",{parentName:"li"},(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Navigation wraps around"),": Lets you cycle through your virtual desktops in a loop using keyboard shortcuts or mouse gestures."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Show animation when switching"),": Displays animations when switching between virtual desktops."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Show on-screen display when switching"),": Displays the name of the current desktop when switching between desktops."),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("strong",{parentName:"li"},"Show desktop layout indicators"),": Displays the virtual desktop grid when you switch between desktops."))),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Click ",(0,o.kt)("strong",{parentName:"p"},"Apply")))),(0,o.kt)("admonition",{type:"tip"},(0,o.kt)("p",{parentName:"admonition"},"Plasma displays the virtual desktop grid next to the application launcher button.\n",(0,o.kt)("img",{alt:"Virtual desktop grid",src:a(6582).Z,width:"375",height:"325"}))),(0,o.kt)("h3",{id:"switching-between-virtual-desktops"},"Switching Between Virtual Desktops"),(0,o.kt)("p",null,"The following table outlines the methods to change between desktops in Solus Plasma."),(0,o.kt)("table",null,(0,o.kt)("thead",{parentName:"table"},(0,o.kt)("tr",{parentName:"thead"},(0,o.kt)("th",{parentName:"tr",align:null},"Method"),(0,o.kt)("th",{parentName:"tr",align:null},"Description"))),(0,o.kt)("tbody",{parentName:"table"},(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Using the applet in the bottom panel"),(0,o.kt)("td",{parentName:"tr",align:null},"Use the the virtual desktop grid next to the application launcher button to change between your virtual desktops.")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Using mouse gestures"),(0,o.kt)("td",{parentName:"tr",align:null},"Move the mouse pointer anywhere in the desktop, then move the mouse wheel to change between your virtual desktops.")),(0,o.kt)("tr",{parentName:"tbody"},(0,o.kt)("td",{parentName:"tr",align:null},"Using keyboard shortcuts"),(0,o.kt)("td",{parentName:"tr",align:null},"Open System Settings, go to ",(0,o.kt)("strong",{parentName:"td"},"Workspace")," > ",(0,o.kt)("strong",{parentName:"td"},"Shortcuts")," > ",(0,o.kt)("strong",{parentName:"td"},"KWin"),", then search for ",(0,o.kt)("inlineCode",{parentName:"td"},"desktop")," to see the available keyboard shortcuts to switch between virtual desktops")))),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Keyboard shortcuts to switch between desktops",src:a(9834).Z,width:"1150",height:"859"})),(0,o.kt)("admonition",{type:"note"},(0,o.kt)("p",{parentName:"admonition"},"Some of the keyboard shortcuts are disabled by default.")))}d.isMDXComponent=!0},9367:(t,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/add-user-account-1e83f41522d5b43ae2f29250e52bb758.png"},4781:(t,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/audio-widget-48a0e65d8e699ad8ca493a1e2dfcfb10.png"},5400:(t,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/choose-application-f3747627db0cff378d7192b6c7b253f0.png"},6488:(t,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/date-time-9e18cbfa859270a81d6973cab14ae1b6.png"},4995:(t,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/default-apps-screen-3da638bbc4ab452b8242fb718543a132.png"},3004:(t,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/desktop-context-menu-2a7196d846dab6acdff78dacb64b3fd6.png"},9501:(t,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/file-context-menu-default-app-0816ad4ab5c64beeef9817dad6cbaeb7.png"},9300:(t,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/keep-delete-files-9a5622ed38b6dd5a1002312f0a7a01cd.png"},2570:(t,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/keyboard-layouts-468ec6547841069b372a81ef4120a67b.png"},80:(t,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/mouse-settings-0ec1470b23397d7d0aba492f1f4806fe.png"},253:(t,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/networks-widget-5446dcc803349c7a20e445393930a00a.png"},8991:(t,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/new-wifi-network-b1c4e7f299993318ae998c66b217fa69.png"},6304:(t,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/screen-configuration-2fd6ef5f5d7a1d590ae67d553f6f58c9.png"},9834:(t,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/switch-desktop-shortcut-list-8b9812e81259bd41b56730a22d11728b.png"},5387:(t,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/touchpad-settings-71fa3d9caf82f2103b978f12bf73a5be.png"},6582:(t,e,a)=>{a.d(e,{Z:()=>n});const n=a.p+"assets/images/vd-grid-bb98a6b6492fe334b36271eac65b4acb.png"}}]); \ No newline at end of file diff --git a/assets/js/d00f7e62.bba59f46.js b/assets/js/d00f7e62.10e03b87.js similarity index 79% rename from assets/js/d00f7e62.bba59f46.js rename to assets/js/d00f7e62.10e03b87.js index b18aeab0c..a85afa904 100644 --- a/assets/js/d00f7e62.bba59f46.js +++ b/assets/js/d00f7e62.10e03b87.js @@ -1 +1 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[255],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>k});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var t=1;t=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var p=n.createContext({}),s=function(e){var t=n.useContext(p),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},u=function(e){var t=s(e.components);return n.createElement(p.Provider,{value:t},e.children)},c="mdxType",g={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,o=e.originalType,p=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),c=s(a),d=r,k=c["".concat(p,".").concat(d)]||c[d]||g[d]||o;return a?n.createElement(k,i(i({ref:t},u),{},{components:a})):n.createElement(k,i({ref:t},u))}));function k(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=a.length,i=new Array(o);i[0]=d;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l[c]="string"==typeof e?e:r,i[1]=l;for(var s=2;s{a.r(t),a.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>g,frontMatter:()=>o,metadata:()=>l,toc:()=>s});var n=a(7462),r=(a(7294),a(3905));const o={title:"Your First Package Update",summary:"An example of how to build a package that exists in the Solus repos for new packagers."},i="Your First Package Update",l={unversionedId:"packaging/your-first-package-update",id:"packaging/your-first-package-update",title:"Your First Package Update",description:"This page will guide you through the steps required to build your first package. This is really a test to make sure that your build environment is set up correctly. You will clone an existing package, build it, then install it, and finally remove it.",source:"@site/docs/packaging/your-first-package-update.md",sourceDirName:"packaging",slug:"/packaging/your-first-package-update",permalink:"/docs/packaging/your-first-package-update",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/your-first-package-update.md",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Your First Package Update",summary:"An example of how to build a package that exists in the Solus repos for new packagers."},sidebar:"packagingSidebar",previous:{title:"Requesting a Package",permalink:"/docs/packaging/procedures/request-a-package"}},p={},s=[{value:"Cloning and building nano",id:"cloning-and-building-nano",level:2},{value:"Installing Your New nano Package",id:"installing-your-new-nano-package",level:2},{value:"Returning to the Repository version (optional)",id:"returning-to-the-repository-version-optional",level:2}],u={toc:s},c="wrapper";function g(e){let{components:t,...a}=e;return(0,r.kt)(c,(0,n.Z)({},u,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"your-first-package-update"},"Your First Package Update"),(0,r.kt)("p",null,"This page will guide you through the steps required to build your first package. This is really a test to make sure that your ",(0,r.kt)("a",{parentName:"p",href:"/docs/packaging/prepare-for-packaging"},"build environment is set up correctly"),". You will clone an existing package, build it, then install it, and finally remove it."),(0,r.kt)("h2",{id:"cloning-and-building-nano"},"Cloning and building ",(0,r.kt)("inlineCode",{parentName:"h2"},"nano")),(0,r.kt)("p",null,"For this example we will use the text editor ",(0,r.kt)("inlineCode",{parentName:"p"},"nano"),"."),(0,r.kt)("p",null,"Change to your packaging directory. Your directory may have a different name or location:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cd ~/solus-builds\n")),(0,r.kt)("p",null,"Clone the ",(0,r.kt)("inlineCode",{parentName:"p"},"packages")," repository, then change into it:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"git clone https://github.com/getsolus/packages.git\ncd packages/packages/n/nano\n")),(0,r.kt)("p",null,'Increase the release number by one ("bump" the package) and then check the results:'),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"go-task bump\ngit diff\n")),(0,r.kt)("p",null,"You should see output from git similar to the following:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-diff"},"diff --git a/package.yml b/package.yml\nindex 2ff1756..4bc344c 100644\n--- a/package.yml\n+++ b/package.yml\n@@ -1,6 +1,6 @@\n name : nano\n version : '7.2'\n-release : 161\n+release : 162\n source :\n - https://www.nano-editor.org/dist/v7/nano-7.2.tar.xz : 86f3442768bd2873cec693f83cdf80b4b444ad3cc14760b74361474fc87a4526\n homepage : https://www.nano-editor.org\n")),(0,r.kt)("p",null,"Next, build the package:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"go-task\n")),(0,r.kt)("p",null,"You will be prompted to enter your password by sudo, and the ",(0,r.kt)("inlineCode",{parentName:"p"},"solbuild")," tool will build the package.\nIf the build is successful, you will have a ",(0,r.kt)("inlineCode",{parentName:"p"},"nano")," package file with a name like ",(0,r.kt)("inlineCode",{parentName:"p"},"nano-7.2-161-1-x86_64.eopkg"),". Run the ",(0,r.kt)("inlineCode",{parentName:"p"},"ls")," tool to check the exact name:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"ls\n\nabi_used_libs files package.yml\nabi_used_symbols Makefile nano-7.2-162-1-x86_64.eopkg pspec_x86_64.xml\n")),(0,r.kt)("p",null,"Congratulations! You have successfully built your first package on Solus."),(0,r.kt)("h2",{id:"installing-your-new-nano-package"},"Installing Your New ",(0,r.kt)("inlineCode",{parentName:"h2"},"nano")," Package"),(0,r.kt)("p",null,"To install your new ",(0,r.kt)("inlineCode",{parentName:"p"},"nano")," package, run the following command. Your filename will probably be slightly different."),(0,r.kt)("p",null,"This is done so you can test that the package works as expected. Each package submission will require you to describe what testing you did."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg it nano-7.2-162-1-x86_64.eopkg\n")),(0,r.kt)("p",null,"Testing ",(0,r.kt)("inlineCode",{parentName:"p"},"nano")," is pretty easy. Testing other packages may be more complicated, depending on what they do."),(0,r.kt)("p",null,"To test your newly built ",(0,r.kt)("inlineCode",{parentName:"p"},"nano")," package, simply run it on command line, then make sure you can edit and save a file."),(0,r.kt)("h2",{id:"returning-to-the-repository-version-optional"},"Returning to the Repository version (optional)"),(0,r.kt)("p",null,"It is a good idea to remove the package you built, and return to the repository version, once you are done testing."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg it --reinstall nano\n")))}g.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[255],{3905:(e,t,a)=>{a.d(t,{Zo:()=>u,kt:()=>k});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function o(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function i(e){for(var t=1;t=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var p=n.createContext({}),s=function(e){var t=n.useContext(p),a=t;return e&&(a="function"==typeof e?e(t):i(i({},t),e)),a},u=function(e){var t=s(e.components);return n.createElement(p.Provider,{value:t},e.children)},c="mdxType",g={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,o=e.originalType,p=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),c=s(a),d=r,k=c["".concat(p,".").concat(d)]||c[d]||g[d]||o;return a?n.createElement(k,i(i({ref:t},u),{},{components:a})):n.createElement(k,i({ref:t},u))}));function k(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=a.length,i=new Array(o);i[0]=d;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l[c]="string"==typeof e?e:r,i[1]=l;for(var s=2;s{a.r(t),a.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>g,frontMatter:()=>o,metadata:()=>l,toc:()=>s});var n=a(7462),r=(a(7294),a(3905));const o={title:"Your First Package Update",summary:"An example of how to build a package that exists in the Solus repos for new packagers."},i="Your First Package Update",l={unversionedId:"packaging/your-first-package-update",id:"packaging/your-first-package-update",title:"Your First Package Update",description:"This page will guide you through the steps required to build your first package. This is really a test to make sure that your build environment is set up correctly. You will clone an existing package, build it, then install it, and finally remove it.",source:"@site/docs/packaging/your-first-package-update.md",sourceDirName:"packaging",slug:"/packaging/your-first-package-update",permalink:"/docs/packaging/your-first-package-update",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/your-first-package-update.md",tags:[],version:"current",lastUpdatedAt:1695222528,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Your First Package Update",summary:"An example of how to build a package that exists in the Solus repos for new packagers."},sidebar:"packagingSidebar",previous:{title:"Requesting a Package",permalink:"/docs/packaging/procedures/request-a-package"}},p={},s=[{value:"Cloning and building nano",id:"cloning-and-building-nano",level:2},{value:"Installing Your New nano Package",id:"installing-your-new-nano-package",level:2},{value:"Returning to the Repository version (optional)",id:"returning-to-the-repository-version-optional",level:2}],u={toc:s},c="wrapper";function g(e){let{components:t,...a}=e;return(0,r.kt)(c,(0,n.Z)({},u,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"your-first-package-update"},"Your First Package Update"),(0,r.kt)("p",null,"This page will guide you through the steps required to build your first package. This is really a test to make sure that your ",(0,r.kt)("a",{parentName:"p",href:"/docs/packaging/prepare-for-packaging"},"build environment is set up correctly"),". You will clone an existing package, build it, then install it, and finally remove it."),(0,r.kt)("h2",{id:"cloning-and-building-nano"},"Cloning and building ",(0,r.kt)("inlineCode",{parentName:"h2"},"nano")),(0,r.kt)("p",null,"For this example we will use the text editor ",(0,r.kt)("inlineCode",{parentName:"p"},"nano"),"."),(0,r.kt)("p",null,"Change to your packaging directory. Your directory may have a different name or location:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"cd ~/solus-builds\n")),(0,r.kt)("p",null,"Clone the ",(0,r.kt)("inlineCode",{parentName:"p"},"packages")," repository, then change into it:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"git clone https://github.com/getsolus/packages.git\ncd packages/packages/n/nano\n")),(0,r.kt)("p",null,'Increase the release number by one ("bump" the package) and then check the results:'),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"go-task bump\ngit diff\n")),(0,r.kt)("p",null,"You should see output from git similar to the following:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-diff"},"diff --git a/package.yml b/package.yml\nindex 2ff1756..4bc344c 100644\n--- a/package.yml\n+++ b/package.yml\n@@ -1,6 +1,6 @@\n name : nano\n version : '7.2'\n-release : 161\n+release : 162\n source :\n - https://www.nano-editor.org/dist/v7/nano-7.2.tar.xz : 86f3442768bd2873cec693f83cdf80b4b444ad3cc14760b74361474fc87a4526\n homepage : https://www.nano-editor.org\n")),(0,r.kt)("p",null,"Next, build the package:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"go-task\n")),(0,r.kt)("p",null,"You will be prompted to enter your password by sudo, and the ",(0,r.kt)("inlineCode",{parentName:"p"},"solbuild")," tool will build the package.\nIf the build is successful, you will have a ",(0,r.kt)("inlineCode",{parentName:"p"},"nano")," package file with a name like ",(0,r.kt)("inlineCode",{parentName:"p"},"nano-7.2-161-1-x86_64.eopkg"),". Run the ",(0,r.kt)("inlineCode",{parentName:"p"},"ls")," tool to check the exact name:"),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"$ ls\nabi_used_libs files package.yml\nabi_used_symbols nano-7.2-162-1-x86_64.eopkg pspec_x86_64.xml\n")),(0,r.kt)("p",null,"Congratulations! You have successfully built your first package on Solus."),(0,r.kt)("h2",{id:"installing-your-new-nano-package"},"Installing Your New ",(0,r.kt)("inlineCode",{parentName:"h2"},"nano")," Package"),(0,r.kt)("p",null,"To install your new ",(0,r.kt)("inlineCode",{parentName:"p"},"nano")," package, run the following command. Your filename will probably be slightly different."),(0,r.kt)("p",null,"This is done so you can test that the package works as expected. Each package submission will require you to describe what testing you did."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg it nano-7.2-162-1-x86_64.eopkg\n")),(0,r.kt)("p",null,"Testing ",(0,r.kt)("inlineCode",{parentName:"p"},"nano")," is pretty easy. Testing other packages may be more complicated, depending on what they do."),(0,r.kt)("p",null,"To test your newly built ",(0,r.kt)("inlineCode",{parentName:"p"},"nano")," package, simply run it on command line, then make sure you can edit and save a file."),(0,r.kt)("h2",{id:"returning-to-the-repository-version-optional"},"Returning to the Repository version (optional)"),(0,r.kt)("p",null,"It is a good idea to remove the package you built, and return to the repository version, once you are done testing."),(0,r.kt)("pre",null,(0,r.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg it --reinstall nano\n")))}g.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/d0d2faf6.ff39b142.js b/assets/js/d0d2faf6.dec1fefd.js similarity index 99% rename from assets/js/d0d2faf6.ff39b142.js rename to assets/js/d0d2faf6.dec1fefd.js index 18b313c10..f06e317e4 100644 --- a/assets/js/d0d2faf6.ff39b142.js +++ b/assets/js/d0d2faf6.dec1fefd.js @@ -1 +1 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[4507],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>g});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function s(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function o(e){for(var t=1;t=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var l=n.createContext({}),p=function(e){var t=n.useContext(l),a=t;return e&&(a="function"==typeof e?e(t):o(o({},t),e)),a},c=function(e){var t=p(e.components);return n.createElement(l.Provider,{value:t},e.children)},d="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},h=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,s=e.originalType,l=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),d=p(a),h=r,g=d["".concat(l,".").concat(h)]||d[h]||u[h]||s;return a?n.createElement(g,o(o({ref:t},c),{},{components:a})):n.createElement(g,o({ref:t},c))}));function g(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var s=a.length,o=new Array(s);o[0]=h;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i[d]="string"==typeof e?e:r,o[1]=i;for(var p=2;p{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>u,frontMatter:()=>s,metadata:()=>i,toc:()=>p});var n=a(7462),r=(a(7294),a(3905));const s={title:"Release Processes",summary:"Release Processes"},o="Release Processes",i={unversionedId:"packaging/procedures/release-processes",id:"packaging/procedures/release-processes",title:"Release Processes",description:"This post is intended as both information to users, and guidelines for developers and contributors of Solus. Solus employs a formal architecture to enable the curated rolling release model, which is made possible through the use of ferryd, solbuild and a split-repository model.",source:"@site/docs/packaging/procedures/release-processes.md",sourceDirName:"packaging/procedures",slug:"/packaging/procedures/release-processes",permalink:"/docs/packaging/procedures/release-processes",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/procedures/release-processes.md",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Release Processes",summary:"Release Processes"},sidebar:"packagingSidebar",previous:{title:"Package Inclusion Policy",permalink:"/docs/packaging/procedures/package-inclusion"},next:{title:"Requesting a Package Update",permalink:"/docs/packaging/procedures/request-a-package-update"}},l={},p=[{value:"Repository staging",id:"repository-staging",level:2},{value:"Weekly Sync - Every Friday",id:"weekly-sync---every-friday",level:2},{value:"Package deprecation",id:"package-deprecation",level:2},{value:"Deprecating a package",id:"deprecating-a-package",level:3},{value:"Un-deprecating a package",id:"un-deprecating-a-package",level:3},{value:"Major stack changes",id:"major-stack-changes",level:2}],c={toc:p},d="wrapper";function u(e){let{components:t,...a}=e;return(0,r.kt)(d,(0,n.Z)({},c,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"release-processes"},"Release Processes"),(0,r.kt)("p",null,"This post is intended as both information to users, and guidelines for developers and contributors of Solus. Solus employs a formal architecture to enable the curated rolling release model, which is made possible through the use of ferryd, solbuild and a split-repository model."),(0,r.kt)("h2",{id:"repository-staging"},"Repository staging"),(0,r.kt)("p",null,"All package builds for Solus, updates or otherwise, will always enter the ",(0,r.kt)("inlineCode",{parentName:"p"},"unstable")," repository first. Consequently, all Solus developers and contributors should ensure ",(0,r.kt)("inlineCode",{parentName:"p"},"solbuild")," is configured to use the unstable target. As and when the weekly stabilisation efforts have completed, the ",(0,r.kt)("inlineCode",{parentName:"p"},"unstable")," repository will be pulled into ",(0,r.kt)("inlineCode",{parentName:"p"},"shannon"),", the stable target."),(0,r.kt)("p",null,"This effectively means that ",(0,r.kt)("inlineCode",{parentName:"p"},"shannon")," is a rolling snapshot of ",(0,r.kt)("inlineCode",{parentName:"p"},"unstable"),". Note that the weekly sync will not make each repository match identically - the ",(0,r.kt)("strong",{parentName:"p"},"tip")," of every package in ",(0,r.kt)("inlineCode",{parentName:"p"},"unstable")," will be merged into ",(0,r.kt)("inlineCode",{parentName:"p"},"shannon"),". This ensures that the ",(0,r.kt)("inlineCode",{parentName:"p"},"shannon")," update path is cost-efficient in terms of package availability, and that the delta packages provided on ",(0,r.kt)("inlineCode",{parentName:"p"},"shannon")," match the true update path for those users. Lastly, this also ensures that there are no unintended packages arriving in shannon from older builds."),(0,r.kt)("p",null,"Solus installations always default to the ",(0,r.kt)("inlineCode",{parentName:"p"},"shannon")," repository, making shannon the published distribution, and ",(0,r.kt)("inlineCode",{parentName:"p"},"unstable")," the development distribution."),(0,r.kt)("h2",{id:"weekly-sync---every-friday"},"Weekly Sync - Every Friday"),(0,r.kt)("p",null,"At minimum there shall be one sync per week - this will always be on a Friday. As a result, users are never more than a few days away from unstable. This allows packagers to make deeper changes to Solus and still have time to stabilise the repository before releasing changes on the Friday."),(0,r.kt)("p",null,"Given the high volume of changes within Solus in any sync window, the Friday sync should be viewed more as a release than a simple sync. All developers and contributors should try their best to ensure that their changes do not introduce regressions, and that existing update paths are ",(0,r.kt)("strong",{parentName:"p"},"always respected"),"."),(0,r.kt)("p",null,"Minor syncs during the week, and correctional syncs shortly after the Friday-sync, are permitted assuming they do not introduce breaking changes to shannon. These may include minor packaging changes, security updates, etc."),(0,r.kt)("h2",{id:"package-deprecation"},"Package deprecation"),(0,r.kt)("p",null,"There are times when a package may need to be deprecated or even renamed. Packagers owning these changes must first communicate the need to ensure a coordinated deprecation."),(0,r.kt)("p",null,"Deprecated packages will remove themselves from the users systems as the first operation in an update or package install using the package manager, once marked as ",(0,r.kt)("inlineCode",{parentName:"p"},"Obsolete")," in the index."),(0,r.kt)("h3",{id:"deprecating-a-package"},"Deprecating a package"),(0,r.kt)("p",null,"Follow these steps to submit a package for deprecation:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Fork and clone the ",(0,r.kt)("inlineCode",{parentName:"li"},"solus-sc")," repo ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/getsolus/solus-sc"},"on GitHub"),", and/or create a new branch"),(0,r.kt)("li",{parentName:"ol"},"Edit ",(0,r.kt)("inlineCode",{parentName:"li"},"repo_data/distribution.xml.in")),(0,r.kt)("li",{parentName:"ol"},"Add the package you wish to deprecate at the end of the ",(0,r.kt)("inlineCode",{parentName:"li"},"")," section"),(0,r.kt)("li",{parentName:"ol"},"Run the ",(0,r.kt)("inlineCode",{parentName:"li"},"repo_data/merged_repos.sh")," script"),(0,r.kt)("li",{parentName:"ol"},"Commit and push your changes to your repo/branch"),(0,r.kt)("li",{parentName:"ol"},"Open a Pull Request on GitHub")),(0,r.kt)("p",null,"If a deprecation depends on a packaging change landing before it can be properly deprecated without undesireable side effects on user systems, the GitHub deprecation Pull Request MUST link to the packaging change and declare it as a dependency for deprecation."),(0,r.kt)("h3",{id:"un-deprecating-a-package"},"Un-deprecating a package"),(0,r.kt)("p",null,"The above steps also apply to un-deprecating a package, with the following additions:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Before making changes, the package repository must be reactivated"),(0,r.kt)("li",{parentName:"ol"},"In Step 2, remove the package from the list instead of adding it"),(0,r.kt)("li",{parentName:"ol"},"After the ",(0,r.kt)("inlineCode",{parentName:"li"},"solus-sc")," pull request has been merged, ask a Solus Staff member to use available tooling to update the repository files, then index the repo with ",(0,r.kt)("inlineCode",{parentName:"li"},"ferryctl index unstable")," (or do it yourself if you have the ability)"),(0,r.kt)("li",{parentName:"ol"},"Bump or update the package")),(0,r.kt)("h2",{id:"major-stack-changes"},"Major stack changes"),(0,r.kt)("p",null,"Large stack upgrades should begin as closely to the last Friday sync as possible, to ensure there is plenty of time for the work to be completed, integrated, and tested for regressions."))}u.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[4507],{3905:(e,t,a)=>{a.d(t,{Zo:()=>c,kt:()=>g});var n=a(7294);function r(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function s(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,n)}return a}function o(e){for(var t=1;t=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var l=n.createContext({}),p=function(e){var t=n.useContext(l),a=t;return e&&(a="function"==typeof e?e(t):o(o({},t),e)),a},c=function(e){var t=p(e.components);return n.createElement(l.Provider,{value:t},e.children)},d="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},h=n.forwardRef((function(e,t){var a=e.components,r=e.mdxType,s=e.originalType,l=e.parentName,c=i(e,["components","mdxType","originalType","parentName"]),d=p(a),h=r,g=d["".concat(l,".").concat(h)]||d[h]||u[h]||s;return a?n.createElement(g,o(o({ref:t},c),{},{components:a})):n.createElement(g,o({ref:t},c))}));function g(e,t){var a=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var s=a.length,o=new Array(s);o[0]=h;var i={};for(var l in t)hasOwnProperty.call(t,l)&&(i[l]=t[l]);i.originalType=e,i[d]="string"==typeof e?e:r,o[1]=i;for(var p=2;p{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>u,frontMatter:()=>s,metadata:()=>i,toc:()=>p});var n=a(7462),r=(a(7294),a(3905));const s={title:"Release Processes",summary:"Release Processes"},o="Release Processes",i={unversionedId:"packaging/procedures/release-processes",id:"packaging/procedures/release-processes",title:"Release Processes",description:"This post is intended as both information to users, and guidelines for developers and contributors of Solus. Solus employs a formal architecture to enable the curated rolling release model, which is made possible through the use of ferryd, solbuild and a split-repository model.",source:"@site/docs/packaging/procedures/release-processes.md",sourceDirName:"packaging/procedures",slug:"/packaging/procedures/release-processes",permalink:"/docs/packaging/procedures/release-processes",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/procedures/release-processes.md",tags:[],version:"current",lastUpdatedAt:1695222528,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Release Processes",summary:"Release Processes"},sidebar:"packagingSidebar",previous:{title:"Package Inclusion Policy",permalink:"/docs/packaging/procedures/package-inclusion"},next:{title:"Requesting a Package Update",permalink:"/docs/packaging/procedures/request-a-package-update"}},l={},p=[{value:"Repository staging",id:"repository-staging",level:2},{value:"Weekly Sync - Every Friday",id:"weekly-sync---every-friday",level:2},{value:"Package deprecation",id:"package-deprecation",level:2},{value:"Deprecating a package",id:"deprecating-a-package",level:3},{value:"Un-deprecating a package",id:"un-deprecating-a-package",level:3},{value:"Major stack changes",id:"major-stack-changes",level:2}],c={toc:p},d="wrapper";function u(e){let{components:t,...a}=e;return(0,r.kt)(d,(0,n.Z)({},c,a,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"release-processes"},"Release Processes"),(0,r.kt)("p",null,"This post is intended as both information to users, and guidelines for developers and contributors of Solus. Solus employs a formal architecture to enable the curated rolling release model, which is made possible through the use of ferryd, solbuild and a split-repository model."),(0,r.kt)("h2",{id:"repository-staging"},"Repository staging"),(0,r.kt)("p",null,"All package builds for Solus, updates or otherwise, will always enter the ",(0,r.kt)("inlineCode",{parentName:"p"},"unstable")," repository first. Consequently, all Solus developers and contributors should ensure ",(0,r.kt)("inlineCode",{parentName:"p"},"solbuild")," is configured to use the unstable target. As and when the weekly stabilisation efforts have completed, the ",(0,r.kt)("inlineCode",{parentName:"p"},"unstable")," repository will be pulled into ",(0,r.kt)("inlineCode",{parentName:"p"},"shannon"),", the stable target."),(0,r.kt)("p",null,"This effectively means that ",(0,r.kt)("inlineCode",{parentName:"p"},"shannon")," is a rolling snapshot of ",(0,r.kt)("inlineCode",{parentName:"p"},"unstable"),". Note that the weekly sync will not make each repository match identically - the ",(0,r.kt)("strong",{parentName:"p"},"tip")," of every package in ",(0,r.kt)("inlineCode",{parentName:"p"},"unstable")," will be merged into ",(0,r.kt)("inlineCode",{parentName:"p"},"shannon"),". This ensures that the ",(0,r.kt)("inlineCode",{parentName:"p"},"shannon")," update path is cost-efficient in terms of package availability, and that the delta packages provided on ",(0,r.kt)("inlineCode",{parentName:"p"},"shannon")," match the true update path for those users. Lastly, this also ensures that there are no unintended packages arriving in shannon from older builds."),(0,r.kt)("p",null,"Solus installations always default to the ",(0,r.kt)("inlineCode",{parentName:"p"},"shannon")," repository, making shannon the published distribution, and ",(0,r.kt)("inlineCode",{parentName:"p"},"unstable")," the development distribution."),(0,r.kt)("h2",{id:"weekly-sync---every-friday"},"Weekly Sync - Every Friday"),(0,r.kt)("p",null,"At minimum there shall be one sync per week - this will always be on a Friday. As a result, users are never more than a few days away from unstable. This allows packagers to make deeper changes to Solus and still have time to stabilise the repository before releasing changes on the Friday."),(0,r.kt)("p",null,"Given the high volume of changes within Solus in any sync window, the Friday sync should be viewed more as a release than a simple sync. All developers and contributors should try their best to ensure that their changes do not introduce regressions, and that existing update paths are ",(0,r.kt)("strong",{parentName:"p"},"always respected"),"."),(0,r.kt)("p",null,"Minor syncs during the week, and correctional syncs shortly after the Friday-sync, are permitted assuming they do not introduce breaking changes to shannon. These may include minor packaging changes, security updates, etc."),(0,r.kt)("h2",{id:"package-deprecation"},"Package deprecation"),(0,r.kt)("p",null,"There are times when a package may need to be deprecated or even renamed. Packagers owning these changes must first communicate the need to ensure a coordinated deprecation."),(0,r.kt)("p",null,"Deprecated packages will remove themselves from the users systems as the first operation in an update or package install using the package manager, once marked as ",(0,r.kt)("inlineCode",{parentName:"p"},"Obsolete")," in the index."),(0,r.kt)("h3",{id:"deprecating-a-package"},"Deprecating a package"),(0,r.kt)("p",null,"Follow these steps to submit a package for deprecation:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Fork and clone the ",(0,r.kt)("inlineCode",{parentName:"li"},"solus-sc")," repo ",(0,r.kt)("a",{parentName:"li",href:"https://github.com/getsolus/solus-sc"},"on GitHub"),", and/or create a new branch"),(0,r.kt)("li",{parentName:"ol"},"Edit ",(0,r.kt)("inlineCode",{parentName:"li"},"repo_data/distribution.xml.in")),(0,r.kt)("li",{parentName:"ol"},"Add the package you wish to deprecate at the end of the ",(0,r.kt)("inlineCode",{parentName:"li"},"")," section"),(0,r.kt)("li",{parentName:"ol"},"Run the ",(0,r.kt)("inlineCode",{parentName:"li"},"repo_data/merged_repos.sh")," script"),(0,r.kt)("li",{parentName:"ol"},"Commit and push your changes to your repo/branch"),(0,r.kt)("li",{parentName:"ol"},"Open a Pull Request on GitHub")),(0,r.kt)("p",null,"If a deprecation depends on a packaging change landing before it can be properly deprecated without undesireable side effects on user systems, the GitHub deprecation Pull Request MUST link to the packaging change and declare it as a dependency for deprecation."),(0,r.kt)("h3",{id:"un-deprecating-a-package"},"Un-deprecating a package"),(0,r.kt)("p",null,"The above steps also apply to un-deprecating a package, with the following additions:"),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Before making changes, the package repository must be reactivated"),(0,r.kt)("li",{parentName:"ol"},"In Step 2, remove the package from the list instead of adding it"),(0,r.kt)("li",{parentName:"ol"},"After the ",(0,r.kt)("inlineCode",{parentName:"li"},"solus-sc")," pull request has been merged, ask a Solus Staff member to use available tooling to update the repository files, then index the repo with ",(0,r.kt)("inlineCode",{parentName:"li"},"ferryctl index unstable")," (or do it yourself if you have the ability)"),(0,r.kt)("li",{parentName:"ol"},"Bump or update the package")),(0,r.kt)("h2",{id:"major-stack-changes"},"Major stack changes"),(0,r.kt)("p",null,"Large stack upgrades should begin as closely to the last Friday sync as possible, to ensure there is plenty of time for the work to be completed, integrated, and tested for regressions."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/d0e18f29.7f0a69f4.js b/assets/js/d0e18f29.6ea00662.js similarity index 72% rename from assets/js/d0e18f29.7f0a69f4.js rename to assets/js/d0e18f29.6ea00662.js index aa09592ff..51e082951 100644 --- a/assets/js/d0e18f29.7f0a69f4.js +++ b/assets/js/d0e18f29.6ea00662.js @@ -1 +1 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[8944],{4713:e=>{e.exports=JSON.parse('{"title":"Procedures","slug":"/category/procedures","permalink":"/docs/category/procedures","navigation":{"previous":{"title":"Packaging Practices","permalink":"/docs/packaging/packaging-practices"},"next":{"title":"Diff to Pull Request","permalink":"/docs/packaging/procedures/diff-to-pull-request"}}}')}}]); \ No newline at end of file +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[8944],{4713:e=>{e.exports=JSON.parse('{"title":"Procedures","slug":"/category/procedures","permalink":"/docs/category/procedures","navigation":{"previous":{"title":"Packaging Practices","permalink":"/docs/packaging/packaging-practices"},"next":{"title":"Maintainership","permalink":"/docs/packaging/procedures/maintainership"}}}')}}]); \ No newline at end of file diff --git a/assets/js/d4762887.643bb3e8.js b/assets/js/d4762887.b351c12b.js similarity index 97% rename from assets/js/d4762887.643bb3e8.js rename to assets/js/d4762887.b351c12b.js index 3c4481401..2d4ba1944 100644 --- a/assets/js/d4762887.643bb3e8.js +++ b/assets/js/d4762887.b351c12b.js @@ -1 +1 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[3624],{3905:(e,t,o)=>{o.d(t,{Zo:()=>c,kt:()=>b});var n=o(7294);function r(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function a(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,n)}return o}function i(e){for(var t=1;t=0||(r[o]=e[o]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(r[o]=e[o])}return r}var l=n.createContext({}),u=function(e){var t=n.useContext(l),o=t;return e&&(o="function"==typeof e?e(t):i(i({},t),e)),o},c=function(e){var t=u(e.components);return n.createElement(l.Provider,{value:t},e.children)},d="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},h=n.forwardRef((function(e,t){var o=e.components,r=e.mdxType,a=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),d=u(o),h=r,b=d["".concat(l,".").concat(h)]||d[h]||p[h]||a;return o?n.createElement(b,i(i({ref:t},c),{},{components:o})):n.createElement(b,i({ref:t},c))}));function b(e,t){var o=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=o.length,i=new Array(a);i[0]=h;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[d]="string"==typeof e?e:r,i[1]=s;for(var u=2;u{o.r(t),o.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>p,frontMatter:()=>a,metadata:()=>s,toc:()=>u});var n=o(7462),r=(o(7294),o(3905));const a={title:"Installation Issues",summary:"Troubleshooting the Solus installation process"},i="Installation Issues",s={unversionedId:"user/troubleshooting/installation",id:"user/troubleshooting/installation",title:"Installation Issues",description:"This article covers various issues that you may come across during installation of Solus.",source:"@site/docs/user/troubleshooting/installation.md",sourceDirName:"user/troubleshooting",slug:"/user/troubleshooting/installation",permalink:"/docs/user/troubleshooting/installation",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/troubleshooting/installation.md",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Installation Issues",summary:"Troubleshooting the Solus installation process"},sidebar:"userSidebar",previous:{title:"Boot Rescue",permalink:"/docs/user/troubleshooting/boot-rescue"}},l={},u=[{value:"Can't install in EFI mode",id:"cant-install-in-efi-mode",level:2},{value:"I can't boot into Solus after installation!",id:"i-cant-boot-into-solus-after-installation",level:2},{value:"Legacy/BIOS installation",id:"legacybios-installation",level:3},{value:"EFI",id:"efi",level:3}],c={toc:u},d="wrapper";function p(e){let{components:t,...o}=e;return(0,r.kt)(d,(0,n.Z)({},c,o,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"installation-issues"},"Installation Issues"),(0,r.kt)("p",null,"This article covers various issues that you may come across during installation of Solus."),(0,r.kt)("h2",{id:"cant-install-in-efi-mode"},"Can't install in EFI mode"),(0,r.kt)("p",null,"The live ISO will attempt to install Solus by the same method it was booted. If it is unable to install the boot loader to the ESP, then it is likely booted in legacy mode. Ensure that the ISO has been created via a ",(0,r.kt)("a",{parentName:"p",href:"/docs/user/quick-start/installation"},"supported method")," and that an EFI boot is selected from the boot options."),(0,r.kt)("p",null,"You can check whether the Solus ISO has booted in EFI mode by checking the for the existence of ",(0,r.kt)("inlineCode",{parentName:"p"},"ls /sys/firmware/efi")," (if it's not found, then it's booted in legacy mode)."),(0,r.kt)("h2",{id:"i-cant-boot-into-solus-after-installation"},"I can't boot into Solus after installation!"),(0,r.kt)("p",null,"There are some misunderstandings with how legacy and EFI boot works (usually implemented as UEFI). These sections cover the common misconceptions."),(0,r.kt)("h3",{id:"legacybios-installation"},"Legacy/BIOS installation"),(0,r.kt)("p",null,"Legacy installations on Solus use the Grub boot loader on an MBR disk. Only one boot loader can be used on an MBR disk, so if you haven't installed the Solus boot loader on the MBR, you will need to boot into the other OS and update grub prior to being able to boot Solus. This will also be required on each update of the kernel to ensure you're booting in the latest release."),(0,r.kt)("h3",{id:"efi"},"EFI"),(0,r.kt)("p",null,"EFI allows for multiple boot loaders to be installed, which means you can boot the Solus boot loader directly. To ensure you are booting Solus you need to boot ",(0,r.kt)("inlineCode",{parentName:"p"},"Linux Boot Manager")," from the EFI options. Common keys for bringing up a boot menu or the options during boot are hitting ",(0,r.kt)("inlineCode",{parentName:"p"},"Esc/F2/F9/F10/F11/F12")," during boot (this differs per motherboard). If a boot loader for another OS is not listed in the menu, then it is not correctly registered (and therefore not installed correctly). You can make the Solus boot menu appear via ",(0,r.kt)("a",{parentName:"p",href:"/docs/user/quick-start/boot-management#displaying-the-boot-menu-by-default-every-boot"},"Displaying the Solus boot menu on boot")," which should be able to boot windows (as it's registered with UEFI properly) as well as Solus, but not other systems."))}p.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[3624],{3905:(e,t,o)=>{o.d(t,{Zo:()=>c,kt:()=>b});var n=o(7294);function r(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function a(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,n)}return o}function i(e){for(var t=1;t=0||(r[o]=e[o]);return r}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(r[o]=e[o])}return r}var l=n.createContext({}),u=function(e){var t=n.useContext(l),o=t;return e&&(o="function"==typeof e?e(t):i(i({},t),e)),o},c=function(e){var t=u(e.components);return n.createElement(l.Provider,{value:t},e.children)},d="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},h=n.forwardRef((function(e,t){var o=e.components,r=e.mdxType,a=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),d=u(o),h=r,b=d["".concat(l,".").concat(h)]||d[h]||p[h]||a;return o?n.createElement(b,i(i({ref:t},c),{},{components:o})):n.createElement(b,i({ref:t},c))}));function b(e,t){var o=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=o.length,i=new Array(a);i[0]=h;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[d]="string"==typeof e?e:r,i[1]=s;for(var u=2;u{o.r(t),o.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>p,frontMatter:()=>a,metadata:()=>s,toc:()=>u});var n=o(7462),r=(o(7294),o(3905));const a={title:"Installation Issues",summary:"Troubleshooting the Solus installation process"},i="Installation Issues",s={unversionedId:"user/troubleshooting/installation",id:"user/troubleshooting/installation",title:"Installation Issues",description:"This article covers various issues that you may come across during installation of Solus.",source:"@site/docs/user/troubleshooting/installation.md",sourceDirName:"user/troubleshooting",slug:"/user/troubleshooting/installation",permalink:"/docs/user/troubleshooting/installation",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/troubleshooting/installation.md",tags:[],version:"current",lastUpdatedAt:1695222528,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Installation Issues",summary:"Troubleshooting the Solus installation process"},sidebar:"userSidebar",previous:{title:"Boot Rescue",permalink:"/docs/user/troubleshooting/boot-rescue"}},l={},u=[{value:"Can't install in EFI mode",id:"cant-install-in-efi-mode",level:2},{value:"I can't boot into Solus after installation!",id:"i-cant-boot-into-solus-after-installation",level:2},{value:"Legacy/BIOS installation",id:"legacybios-installation",level:3},{value:"EFI",id:"efi",level:3}],c={toc:u},d="wrapper";function p(e){let{components:t,...o}=e;return(0,r.kt)(d,(0,n.Z)({},c,o,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("h1",{id:"installation-issues"},"Installation Issues"),(0,r.kt)("p",null,"This article covers various issues that you may come across during installation of Solus."),(0,r.kt)("h2",{id:"cant-install-in-efi-mode"},"Can't install in EFI mode"),(0,r.kt)("p",null,"The live ISO will attempt to install Solus by the same method it was booted. If it is unable to install the boot loader to the ESP, then it is likely booted in legacy mode. Ensure that the ISO has been created via a ",(0,r.kt)("a",{parentName:"p",href:"/docs/user/quick-start/installation"},"supported method")," and that an EFI boot is selected from the boot options."),(0,r.kt)("p",null,"You can check whether the Solus ISO has booted in EFI mode by checking the for the existence of ",(0,r.kt)("inlineCode",{parentName:"p"},"ls /sys/firmware/efi")," (if it's not found, then it's booted in legacy mode)."),(0,r.kt)("h2",{id:"i-cant-boot-into-solus-after-installation"},"I can't boot into Solus after installation!"),(0,r.kt)("p",null,"There are some misunderstandings with how legacy and EFI boot works (usually implemented as UEFI). These sections cover the common misconceptions."),(0,r.kt)("h3",{id:"legacybios-installation"},"Legacy/BIOS installation"),(0,r.kt)("p",null,"Legacy installations on Solus use the Grub boot loader on an MBR disk. Only one boot loader can be used on an MBR disk, so if you haven't installed the Solus boot loader on the MBR, you will need to boot into the other OS and update grub prior to being able to boot Solus. This will also be required on each update of the kernel to ensure you're booting in the latest release."),(0,r.kt)("h3",{id:"efi"},"EFI"),(0,r.kt)("p",null,"EFI allows for multiple boot loaders to be installed, which means you can boot the Solus boot loader directly. To ensure you are booting Solus you need to boot ",(0,r.kt)("inlineCode",{parentName:"p"},"Linux Boot Manager")," from the EFI options. Common keys for bringing up a boot menu or the options during boot are hitting ",(0,r.kt)("inlineCode",{parentName:"p"},"Esc/F2/F9/F10/F11/F12")," during boot (this differs per motherboard). If a boot loader for another OS is not listed in the menu, then it is not correctly registered (and therefore not installed correctly). You can make the Solus boot menu appear via ",(0,r.kt)("a",{parentName:"p",href:"/docs/user/quick-start/boot-management#displaying-the-boot-menu-by-default-every-boot"},"Displaying the Solus boot menu on boot")," which should be able to boot windows (as it's registered with UEFI properly) as well as Solus, but not other systems."))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/dabd6b33.bdcb0d4c.js b/assets/js/dabd6b33.ce2a57f0.js similarity index 99% rename from assets/js/dabd6b33.bdcb0d4c.js rename to assets/js/dabd6b33.ce2a57f0.js index 50b4291e7..1173cc444 100644 --- a/assets/js/dabd6b33.bdcb0d4c.js +++ b/assets/js/dabd6b33.ce2a57f0.js @@ -1 +1 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[1059],{3905:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>d});var o=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function i(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var c=o.createContext({}),p=function(e){var t=o.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},s=function(e){var t=p(e.components);return o.createElement(c.Provider,{value:t},e.children)},g="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},f=o.forwardRef((function(e,t){var n=e.components,a=e.mdxType,r=e.originalType,c=e.parentName,s=l(e,["components","mdxType","originalType","parentName"]),g=p(n),f=a,d=g["".concat(c,".").concat(f)]||g[f]||u[f]||r;return n?o.createElement(d,i(i({ref:t},s),{},{components:n})):o.createElement(d,i({ref:t},s))}));function d(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var r=n.length,i=new Array(r);i[0]=f;var l={};for(var c in t)hasOwnProperty.call(t,c)&&(l[c]=t[c]);l.originalType=e,l[g]="string"==typeof e?e:a,i[1]=l;for(var p=2;p{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>u,frontMatter:()=>r,metadata:()=>l,toc:()=>p});var o=n(7462),a=(n(7294),n(3905));const r={title:"Eopkg Configuration",summary:"Modifying the eopkg configuration"},i="Eopkg Configuration",l={unversionedId:"packaging/advanced-config/eopkg-configuration",id:"packaging/advanced-config/eopkg-configuration",title:"Eopkg Configuration",description:"The eopkg configuration file changes how eopkg works. The first section in the config has settings for the process of building a package. The second section allows you to configure the directories that eopkg uses for various operations. Lastly, the general section contains settings for the general operation of eopkg.",source:"@site/docs/packaging/advanced-config/eopkg-configuration.md",sourceDirName:"packaging/advanced-config",slug:"/packaging/advanced-config/eopkg-configuration",permalink:"/docs/packaging/advanced-config/eopkg-configuration",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/advanced-config/eopkg-configuration.md",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Eopkg Configuration",summary:"Modifying the eopkg configuration"},sidebar:"packagingSidebar",previous:{title:"Advanced Configuration",permalink:"/docs/category/advanced-configuration"},next:{title:"Local Repository",permalink:"/docs/packaging/advanced-config/local-repository"}},c={},p=[{value:"Copying the default configuration",id:"copying-the-default-configuration",level:2},{value:"Notable keys",id:"notable-keys",level:2},{value:"Restoring defaults",id:"restoring-defaults",level:2}],s={toc:p},g="wrapper";function u(e){let{components:t,...n}=e;return(0,a.kt)(g,(0,o.Z)({},s,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"eopkg-configuration"},"Eopkg Configuration"),(0,a.kt)("p",null,"The eopkg configuration file changes how eopkg works. The first section in the config has settings for the process of building a package. The second section allows you to configure the directories that eopkg uses for various operations. Lastly, the ",(0,a.kt)("inlineCode",{parentName:"p"},"general")," section contains settings for the general operation of eopkg."),(0,a.kt)("h2",{id:"copying-the-default-configuration"},"Copying the default configuration"),(0,a.kt)("p",null,"Solus aims to be a stateless operating system, so the default configuration file for eopkg is saved to ",(0,a.kt)("inlineCode",{parentName:"p"},"/usr/share/defaults/eopkg/eopkg.conf"),". To modify the configuration, you'll have to start by copying the default configuration file into ",(0,a.kt)("inlineCode",{parentName:"p"},"/etc/eopkg")," so it will override the default file:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-sh"},"sudo mkdir -p /etc/eopkg && sudo cp /usr/share/defaults/eopkg/eopkg.conf /etc/eopkg/eopkg.conf\n")),(0,a.kt)("p",null,"Once the file has been copied, you can edit it with your text editor of choice."),(0,a.kt)("h2",{id:"notable-keys"},"Notable keys"),(0,a.kt)("p",null,"Most keys in the config you'll probably want to leave untouched. However, some are useful to know about:"),(0,a.kt)("table",null,(0,a.kt)("thead",{parentName:"table"},(0,a.kt)("tr",{parentName:"thead"},(0,a.kt)("th",{parentName:"tr",align:null},"Key"),(0,a.kt)("th",{parentName:"tr",align:null},"Description"))),(0,a.kt)("tbody",{parentName:"table"},(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"generateDebug"),(0,a.kt)("td",{parentName:"tr",align:null},"Whether or not debug symbol subpackages will be generated")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"jobs"),(0,a.kt)("td",{parentName:"tr",align:null},"How many building jobs to use when compiling the source")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"retry_attempts"),(0,a.kt)("td",{parentName:"tr",align:null},"How many times to retry downloading a package during install")))),(0,a.kt)("h2",{id:"restoring-defaults"},"Restoring defaults"),(0,a.kt)("p",null,"If at any time you want to go back to the default configuration, simply remove the config file in ",(0,a.kt)("inlineCode",{parentName:"p"},"/etc/eopkg"),"."))}u.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[1059],{3905:(e,t,n)=>{n.d(t,{Zo:()=>s,kt:()=>d});var o=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function i(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var c=o.createContext({}),p=function(e){var t=o.useContext(c),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},s=function(e){var t=p(e.components);return o.createElement(c.Provider,{value:t},e.children)},g="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},f=o.forwardRef((function(e,t){var n=e.components,a=e.mdxType,r=e.originalType,c=e.parentName,s=l(e,["components","mdxType","originalType","parentName"]),g=p(n),f=a,d=g["".concat(c,".").concat(f)]||g[f]||u[f]||r;return n?o.createElement(d,i(i({ref:t},s),{},{components:n})):o.createElement(d,i({ref:t},s))}));function d(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var r=n.length,i=new Array(r);i[0]=f;var l={};for(var c in t)hasOwnProperty.call(t,c)&&(l[c]=t[c]);l.originalType=e,l[g]="string"==typeof e?e:a,i[1]=l;for(var p=2;p{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>u,frontMatter:()=>r,metadata:()=>l,toc:()=>p});var o=n(7462),a=(n(7294),n(3905));const r={title:"Eopkg Configuration",summary:"Modifying the eopkg configuration"},i="Eopkg Configuration",l={unversionedId:"packaging/advanced-config/eopkg-configuration",id:"packaging/advanced-config/eopkg-configuration",title:"Eopkg Configuration",description:"The eopkg configuration file changes how eopkg works. The first section in the config has settings for the process of building a package. The second section allows you to configure the directories that eopkg uses for various operations. Lastly, the general section contains settings for the general operation of eopkg.",source:"@site/docs/packaging/advanced-config/eopkg-configuration.md",sourceDirName:"packaging/advanced-config",slug:"/packaging/advanced-config/eopkg-configuration",permalink:"/docs/packaging/advanced-config/eopkg-configuration",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/advanced-config/eopkg-configuration.md",tags:[],version:"current",lastUpdatedAt:1695222528,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Eopkg Configuration",summary:"Modifying the eopkg configuration"},sidebar:"packagingSidebar",previous:{title:"Advanced Configuration",permalink:"/docs/category/advanced-configuration"},next:{title:"Local Repository",permalink:"/docs/packaging/advanced-config/local-repository"}},c={},p=[{value:"Copying the default configuration",id:"copying-the-default-configuration",level:2},{value:"Notable keys",id:"notable-keys",level:2},{value:"Restoring defaults",id:"restoring-defaults",level:2}],s={toc:p},g="wrapper";function u(e){let{components:t,...n}=e;return(0,a.kt)(g,(0,o.Z)({},s,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"eopkg-configuration"},"Eopkg Configuration"),(0,a.kt)("p",null,"The eopkg configuration file changes how eopkg works. The first section in the config has settings for the process of building a package. The second section allows you to configure the directories that eopkg uses for various operations. Lastly, the ",(0,a.kt)("inlineCode",{parentName:"p"},"general")," section contains settings for the general operation of eopkg."),(0,a.kt)("h2",{id:"copying-the-default-configuration"},"Copying the default configuration"),(0,a.kt)("p",null,"Solus aims to be a stateless operating system, so the default configuration file for eopkg is saved to ",(0,a.kt)("inlineCode",{parentName:"p"},"/usr/share/defaults/eopkg/eopkg.conf"),". To modify the configuration, you'll have to start by copying the default configuration file into ",(0,a.kt)("inlineCode",{parentName:"p"},"/etc/eopkg")," so it will override the default file:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-sh"},"sudo mkdir -p /etc/eopkg && sudo cp /usr/share/defaults/eopkg/eopkg.conf /etc/eopkg/eopkg.conf\n")),(0,a.kt)("p",null,"Once the file has been copied, you can edit it with your text editor of choice."),(0,a.kt)("h2",{id:"notable-keys"},"Notable keys"),(0,a.kt)("p",null,"Most keys in the config you'll probably want to leave untouched. However, some are useful to know about:"),(0,a.kt)("table",null,(0,a.kt)("thead",{parentName:"table"},(0,a.kt)("tr",{parentName:"thead"},(0,a.kt)("th",{parentName:"tr",align:null},"Key"),(0,a.kt)("th",{parentName:"tr",align:null},"Description"))),(0,a.kt)("tbody",{parentName:"table"},(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"generateDebug"),(0,a.kt)("td",{parentName:"tr",align:null},"Whether or not debug symbol subpackages will be generated")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"jobs"),(0,a.kt)("td",{parentName:"tr",align:null},"How many building jobs to use when compiling the source")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"retry_attempts"),(0,a.kt)("td",{parentName:"tr",align:null},"How many times to retry downloading a package during install")))),(0,a.kt)("h2",{id:"restoring-defaults"},"Restoring defaults"),(0,a.kt)("p",null,"If at any time you want to go back to the default configuration, simply remove the config file in ",(0,a.kt)("inlineCode",{parentName:"p"},"/etc/eopkg"),"."))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/ddc41e4a.58c520ab.js b/assets/js/ddc41e4a.17f94293.js similarity index 98% rename from assets/js/ddc41e4a.58c520ab.js rename to assets/js/ddc41e4a.17f94293.js index 10e1b0499..b72aee7b2 100644 --- a/assets/js/ddc41e4a.58c520ab.js +++ b/assets/js/ddc41e4a.17f94293.js @@ -1 +1 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[9451],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>m});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function s(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var a=n.createContext({}),l=function(e){var t=n.useContext(a),r=t;return e&&(r="function"==typeof e?e(t):s(s({},t),e)),r},p=function(e){var t=l(e.components);return n.createElement(a.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,i=e.originalType,a=e.parentName,p=u(e,["components","mdxType","originalType","parentName"]),c=l(r),f=o,m=c["".concat(a,".").concat(f)]||c[f]||d[f]||i;return r?n.createElement(m,s(s({ref:t},p),{},{components:r})):n.createElement(m,s({ref:t},p))}));function m(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=r.length,s=new Array(i);s[0]=f;var u={};for(var a in t)hasOwnProperty.call(t,a)&&(u[a]=t[a]);u.originalType=e,u[c]="string"==typeof e?e:o,s[1]=u;for(var l=2;l{r.r(t),r.d(t,{assets:()=>a,contentTitle:()=>s,default:()=>d,frontMatter:()=>i,metadata:()=>u,toc:()=>l});var n=r(7462),o=(r(7294),r(3905));const i={title:"Sound",summary:"Configuration of sound systems on Solus"},s="Sound",u={unversionedId:"user/software/sound/index",id:"user/software/sound/index",title:"Sound",description:"Solus comes with PulseAudio configured by default.",source:"@site/docs/user/software/sound/index.md",sourceDirName:"user/software/sound",slug:"/user/software/sound/",permalink:"/docs/user/software/sound/",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/sound/index.md",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Sound",summary:"Configuration of sound systems on Solus"},sidebar:"userSidebar",previous:{title:"XRDP",permalink:"/docs/user/software/networking/xrdp"},next:{title:"Third Party",permalink:"/docs/user/software/third-party/"}},a={},l=[{value:"PipeWire",id:"pipewire",level:2}],p={toc:l},c="wrapper";function d(e){let{components:t,...r}=e;return(0,o.kt)(c,(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"sound"},"Sound"),(0,o.kt)("p",null,"Solus comes with PulseAudio configured by default.\nIt is possible to switch to PipeWire manually using the instructions below."),(0,o.kt)("h2",{id:"pipewire"},"PipeWire"),(0,o.kt)("p",null,"PipeWire is a multimedia framework aimed to replace PulseAudio.\nInstalling it can be done by installing PipeWire and WirePlumber:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-console"},"sudo eopkg it pipewire wireplumber\n")),(0,o.kt)("p",null,"Subsequently enable the user services, and disable PulseAudio (without sudo!):"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-console"},"systemctl --user enable --now pipewire.socket pipewire-pulse.socket wireplumber.service\nsystemctl --user mask app-pulseaudio@autostart.service\n")),(0,o.kt)("p",null,"You should now be using PipeWire. This can be verified using:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"pactl info | grep '^Server Name'\n")),(0,o.kt)("p",null,"Which should show something like the following:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"Server Name: PulseAudio (on PipeWire 0.3.71)\n")),(0,o.kt)("p",null,"Try logging out and in again if your system has not switched yet."))}d.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[9451],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>m});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function s(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var a=n.createContext({}),l=function(e){var t=n.useContext(a),r=t;return e&&(r="function"==typeof e?e(t):s(s({},t),e)),r},p=function(e){var t=l(e.components);return n.createElement(a.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,i=e.originalType,a=e.parentName,p=u(e,["components","mdxType","originalType","parentName"]),c=l(r),f=o,m=c["".concat(a,".").concat(f)]||c[f]||d[f]||i;return r?n.createElement(m,s(s({ref:t},p),{},{components:r})):n.createElement(m,s({ref:t},p))}));function m(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=r.length,s=new Array(i);s[0]=f;var u={};for(var a in t)hasOwnProperty.call(t,a)&&(u[a]=t[a]);u.originalType=e,u[c]="string"==typeof e?e:o,s[1]=u;for(var l=2;l{r.r(t),r.d(t,{assets:()=>a,contentTitle:()=>s,default:()=>d,frontMatter:()=>i,metadata:()=>u,toc:()=>l});var n=r(7462),o=(r(7294),r(3905));const i={title:"Sound",summary:"Configuration of sound systems on Solus"},s="Sound",u={unversionedId:"user/software/sound/index",id:"user/software/sound/index",title:"Sound",description:"Solus comes with PulseAudio configured by default.",source:"@site/docs/user/software/sound/index.md",sourceDirName:"user/software/sound",slug:"/user/software/sound/",permalink:"/docs/user/software/sound/",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/sound/index.md",tags:[],version:"current",lastUpdatedAt:1695222528,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Sound",summary:"Configuration of sound systems on Solus"},sidebar:"userSidebar",previous:{title:"XRDP",permalink:"/docs/user/software/networking/xrdp"},next:{title:"Third Party",permalink:"/docs/user/software/third-party/"}},a={},l=[{value:"PipeWire",id:"pipewire",level:2}],p={toc:l},c="wrapper";function d(e){let{components:t,...r}=e;return(0,o.kt)(c,(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"sound"},"Sound"),(0,o.kt)("p",null,"Solus comes with PulseAudio configured by default.\nIt is possible to switch to PipeWire manually using the instructions below."),(0,o.kt)("h2",{id:"pipewire"},"PipeWire"),(0,o.kt)("p",null,"PipeWire is a multimedia framework aimed to replace PulseAudio.\nInstalling it can be done by installing PipeWire and WirePlumber:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-console"},"sudo eopkg it pipewire wireplumber\n")),(0,o.kt)("p",null,"Subsequently enable the user services, and disable PulseAudio (without sudo!):"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-console"},"systemctl --user enable --now pipewire.socket pipewire-pulse.socket wireplumber.service\nsystemctl --user mask app-pulseaudio@autostart.service\n")),(0,o.kt)("p",null,"You should now be using PipeWire. This can be verified using:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"pactl info | grep '^Server Name'\n")),(0,o.kt)("p",null,"Which should show something like the following:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"Server Name: PulseAudio (on PipeWire 0.3.71)\n")),(0,o.kt)("p",null,"Try logging out and in again if your system has not switched yet."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/e5595530.9d7cca91.js b/assets/js/e5595530.ab57b9a1.js similarity index 99% rename from assets/js/e5595530.9d7cca91.js rename to assets/js/e5595530.ab57b9a1.js index bb4ef11de..b750347db 100644 --- a/assets/js/e5595530.9d7cca91.js +++ b/assets/js/e5595530.ab57b9a1.js @@ -1 +1 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[1648],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>b});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var u=r.createContext({}),d=function(e){var t=r.useContext(u),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},p=function(e){var t=d(e.components);return r.createElement(u.Provider,{value:t},e.children)},m="mdxType",s={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},c=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,u=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),m=d(n),c=a,b=m["".concat(u,".").concat(c)]||m[c]||s[c]||o;return n?r.createElement(b,l(l({ref:t},p),{},{components:n})):r.createElement(b,l({ref:t},p))}));function b(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,l=new Array(o);l[0]=c;var i={};for(var u in t)hasOwnProperty.call(t,u)&&(i[u]=t[u]);i.originalType=e,i[m]="string"==typeof e?e:a,l[1]=i;for(var d=2;d{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>l,default:()=>s,frontMatter:()=>o,metadata:()=>i,toc:()=>d});var r=n(7462),a=(n(7294),n(3905));const o={title:"Boot Management",summary:"Guide to customizing the Solus boot process"},l="Boot Management",i={unversionedId:"user/quick-start/boot-management",id:"user/quick-start/boot-management",title:"Boot Management",description:"Solus leverages clr-boot-manager from the ClearLinux project to manage its boot process.",source:"@site/docs/user/quick-start/boot-management.md",sourceDirName:"user/quick-start",slug:"/user/quick-start/boot-management",permalink:"/docs/user/quick-start/boot-management",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/quick-start/boot-management.md",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Boot Management",summary:"Guide to customizing the Solus boot process"},sidebar:"userSidebar",previous:{title:"Quick Start",permalink:"/docs/category/quick-start"},next:{title:"Default Applications",permalink:"/docs/user/quick-start/default-applications"}},u={},d=[{value:"Open the boot menu",id:"open-the-boot-menu",level:2},{value:"Displaying the boot menu by default every boot",id:"displaying-the-boot-menu-by-default-every-boot",level:2},{value:"Adding kernel parameters",id:"adding-kernel-parameters",level:2},{value:"Installing an a different kernel branch",id:"installing-an-a-different-kernel-branch",level:2},{value:"Change the default kernel branch to boot",id:"change-the-default-kernel-branch-to-boot",level:2}],p={toc:d},m="wrapper";function s(e){let{components:t,...n}=e;return(0,a.kt)(m,(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"boot-management"},"Boot Management"),(0,a.kt)("h1",{id:"clr-boot-manager"},"clr-boot-manager"),(0,a.kt)("p",null,"Solus leverages ",(0,a.kt)("inlineCode",{parentName:"p"},"clr-boot-manager")," from the ClearLinux project to manage its boot process.",(0,a.kt)("br",{parentName:"p"}),"\n","On legacy BIOS systems, ",(0,a.kt)("inlineCode",{parentName:"p"},"clr-boot-manager")," will configure ",(0,a.kt)("inlineCode",{parentName:"p"},"GRUB2")," to properly boot your system.",(0,a.kt)("br",{parentName:"p"}),"\n","On modern UEFI systems, ",(0,a.kt)("inlineCode",{parentName:"p"},"clr-boot-manager")," will configure ",(0,a.kt)("inlineCode",{parentName:"p"},"systemd-boot")," instead.",(0,a.kt)("br",{parentName:"p"}),"\n","This means that any time we want to modify the boot process, ",(0,a.kt)("inlineCode",{parentName:"p"},"clr-boot-manager")," will be involved.",(0,a.kt)("br",{parentName:"p"}),"\n","Trying to modify the configurations manually may work temporarily, but will be overwritten eventually."),(0,a.kt)("h2",{id:"open-the-boot-menu"},"Open the boot menu"),(0,a.kt)("p",null,"By default, EFI installs will not show the boot menu and boot directly into Solus. By hitting space bar (repeatedly) during boot, the boot menu will appear (it may take a couple of goes to get the timing right)."),(0,a.kt)("h2",{id:"displaying-the-boot-menu-by-default-every-boot"},"Displaying the boot menu by default every boot"),(0,a.kt)("p",null,"The following command will set the timeout of the boot loader so that it appears by default."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},"sudo clr-boot-manager set-timeout 5 && sudo clr-boot-manager update\n")),(0,a.kt)("h2",{id:"adding-kernel-parameters"},"Adding kernel parameters"),(0,a.kt)("p",null,"Kernel parameters can be appended to boot via creating a file for ",(0,a.kt)("inlineCode",{parentName:"p"},"clr-boot-manager")," to use when updating kernels. For example, to add ",(0,a.kt)("inlineCode",{parentName:"p"},"nomodeset")," to boot options, you would create a file in ",(0,a.kt)("inlineCode",{parentName:"p"},"/etc/kernel/cmdline.d")," (as sudo):"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},"sudo mkdir -p /etc/kernel/cmdline.d\necho 'nomodeset' | sudo tee /etc/kernel/cmdline.d/40_nomodeset.conf\n")),(0,a.kt)("p",null,"The settings should be on one line with a space between them. You will need to run ",(0,a.kt)("inlineCode",{parentName:"p"},"sudo clr-boot-manager update")," for the options to be appended to boot."),(0,a.kt)("h1",{id:"kernels"},"Kernels"),(0,a.kt)("h2",{id:"installing-an-a-different-kernel-branch"},"Installing an a different kernel branch"),(0,a.kt)("p",null,"By default, Solus utilizes our linux-current kernel. The separate kernel branches can be added by installing the ",(0,a.kt)("inlineCode",{parentName:"p"},"linux-lts")," or ",(0,a.kt)("inlineCode",{parentName:"p"},"linux-current")," packages. Note that each kernel has separate module packages, so if you use these kernel modules, you'll need to install the one related to the kernel you are adding."),(0,a.kt)("table",null,(0,a.kt)("thead",{parentName:"table"},(0,a.kt)("tr",{parentName:"thead"},(0,a.kt)("th",{parentName:"tr",align:null},"linux-lts"),(0,a.kt)("th",{parentName:"tr",align:null},"linux-current"))),(0,a.kt)("tbody",{parentName:"table"},(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"bbswitch"),(0,a.kt)("td",{parentName:"tr",align:null},"bbswitch-current")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"broadcom-sta"),(0,a.kt)("td",{parentName:"tr",align:null},"broadcom-sta-current")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"linux-lts-headers"),(0,a.kt)("td",{parentName:"tr",align:null},"linux-current-headers")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"nvidia-470-glx-driver"),(0,a.kt)("td",{parentName:"tr",align:null},"nvidia-470-glx-driver-current")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"nvidia-beta-driver"),(0,a.kt)("td",{parentName:"tr",align:null},"nvidia-beta-driver-current")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"nvidia-developer-driver"),(0,a.kt)("td",{parentName:"tr",align:null},"nvidia-developer-driver-current")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"nvidia-glx-driver"),(0,a.kt)("td",{parentName:"tr",align:null},"nvidia-glx-driver-current")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"openrazer"),(0,a.kt)("td",{parentName:"tr",align:null},"openrazer-current")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"v4l2loopback"),(0,a.kt)("td",{parentName:"tr",align:null},"v4l2loopback-current")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"vhba-module"),(0,a.kt)("td",{parentName:"tr",align:null},"vhba-module-current")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"virtualbox"),(0,a.kt)("td",{parentName:"tr",align:null},"virtualbox-current")))),(0,a.kt)("h2",{id:"change-the-default-kernel-branch-to-boot"},"Change the default kernel branch to boot"),(0,a.kt)("p",null,"After successfully booting into a kernel from the ",(0,a.kt)("inlineCode",{parentName:"p"},"current")," or ",(0,a.kt)("inlineCode",{parentName:"p"},"lts")," branches running ",(0,a.kt)("inlineCode",{parentName:"p"},"sudo clr-boot-manager update")," will make the booted kernel branch the default boot option going forward."))}s.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[1648],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>b});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var u=r.createContext({}),d=function(e){var t=r.useContext(u),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},p=function(e){var t=d(e.components);return r.createElement(u.Provider,{value:t},e.children)},m="mdxType",s={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},c=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,u=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),m=d(n),c=a,b=m["".concat(u,".").concat(c)]||m[c]||s[c]||o;return n?r.createElement(b,l(l({ref:t},p),{},{components:n})):r.createElement(b,l({ref:t},p))}));function b(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,l=new Array(o);l[0]=c;var i={};for(var u in t)hasOwnProperty.call(t,u)&&(i[u]=t[u]);i.originalType=e,i[m]="string"==typeof e?e:a,l[1]=i;for(var d=2;d{n.r(t),n.d(t,{assets:()=>u,contentTitle:()=>l,default:()=>s,frontMatter:()=>o,metadata:()=>i,toc:()=>d});var r=n(7462),a=(n(7294),n(3905));const o={title:"Boot Management",summary:"Guide to customizing the Solus boot process"},l="Boot Management",i={unversionedId:"user/quick-start/boot-management",id:"user/quick-start/boot-management",title:"Boot Management",description:"Solus leverages clr-boot-manager from the ClearLinux project to manage its boot process.",source:"@site/docs/user/quick-start/boot-management.md",sourceDirName:"user/quick-start",slug:"/user/quick-start/boot-management",permalink:"/docs/user/quick-start/boot-management",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/quick-start/boot-management.md",tags:[],version:"current",lastUpdatedAt:1695222528,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Boot Management",summary:"Guide to customizing the Solus boot process"},sidebar:"userSidebar",previous:{title:"Quick Start",permalink:"/docs/category/quick-start"},next:{title:"Default Applications",permalink:"/docs/user/quick-start/default-applications"}},u={},d=[{value:"Open the boot menu",id:"open-the-boot-menu",level:2},{value:"Displaying the boot menu by default every boot",id:"displaying-the-boot-menu-by-default-every-boot",level:2},{value:"Adding kernel parameters",id:"adding-kernel-parameters",level:2},{value:"Installing an a different kernel branch",id:"installing-an-a-different-kernel-branch",level:2},{value:"Change the default kernel branch to boot",id:"change-the-default-kernel-branch-to-boot",level:2}],p={toc:d},m="wrapper";function s(e){let{components:t,...n}=e;return(0,a.kt)(m,(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"boot-management"},"Boot Management"),(0,a.kt)("h1",{id:"clr-boot-manager"},"clr-boot-manager"),(0,a.kt)("p",null,"Solus leverages ",(0,a.kt)("inlineCode",{parentName:"p"},"clr-boot-manager")," from the ClearLinux project to manage its boot process.",(0,a.kt)("br",{parentName:"p"}),"\n","On legacy BIOS systems, ",(0,a.kt)("inlineCode",{parentName:"p"},"clr-boot-manager")," will configure ",(0,a.kt)("inlineCode",{parentName:"p"},"GRUB2")," to properly boot your system.",(0,a.kt)("br",{parentName:"p"}),"\n","On modern UEFI systems, ",(0,a.kt)("inlineCode",{parentName:"p"},"clr-boot-manager")," will configure ",(0,a.kt)("inlineCode",{parentName:"p"},"systemd-boot")," instead.",(0,a.kt)("br",{parentName:"p"}),"\n","This means that any time we want to modify the boot process, ",(0,a.kt)("inlineCode",{parentName:"p"},"clr-boot-manager")," will be involved.",(0,a.kt)("br",{parentName:"p"}),"\n","Trying to modify the configurations manually may work temporarily, but will be overwritten eventually."),(0,a.kt)("h2",{id:"open-the-boot-menu"},"Open the boot menu"),(0,a.kt)("p",null,"By default, EFI installs will not show the boot menu and boot directly into Solus. By hitting space bar (repeatedly) during boot, the boot menu will appear (it may take a couple of goes to get the timing right)."),(0,a.kt)("h2",{id:"displaying-the-boot-menu-by-default-every-boot"},"Displaying the boot menu by default every boot"),(0,a.kt)("p",null,"The following command will set the timeout of the boot loader so that it appears by default."),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},"sudo clr-boot-manager set-timeout 5 && sudo clr-boot-manager update\n")),(0,a.kt)("h2",{id:"adding-kernel-parameters"},"Adding kernel parameters"),(0,a.kt)("p",null,"Kernel parameters can be appended to boot via creating a file for ",(0,a.kt)("inlineCode",{parentName:"p"},"clr-boot-manager")," to use when updating kernels. For example, to add ",(0,a.kt)("inlineCode",{parentName:"p"},"nomodeset")," to boot options, you would create a file in ",(0,a.kt)("inlineCode",{parentName:"p"},"/etc/kernel/cmdline.d")," (as sudo):"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre"},"sudo mkdir -p /etc/kernel/cmdline.d\necho 'nomodeset' | sudo tee /etc/kernel/cmdline.d/40_nomodeset.conf\n")),(0,a.kt)("p",null,"The settings should be on one line with a space between them. You will need to run ",(0,a.kt)("inlineCode",{parentName:"p"},"sudo clr-boot-manager update")," for the options to be appended to boot."),(0,a.kt)("h1",{id:"kernels"},"Kernels"),(0,a.kt)("h2",{id:"installing-an-a-different-kernel-branch"},"Installing an a different kernel branch"),(0,a.kt)("p",null,"By default, Solus utilizes our linux-current kernel. The separate kernel branches can be added by installing the ",(0,a.kt)("inlineCode",{parentName:"p"},"linux-lts")," or ",(0,a.kt)("inlineCode",{parentName:"p"},"linux-current")," packages. Note that each kernel has separate module packages, so if you use these kernel modules, you'll need to install the one related to the kernel you are adding."),(0,a.kt)("table",null,(0,a.kt)("thead",{parentName:"table"},(0,a.kt)("tr",{parentName:"thead"},(0,a.kt)("th",{parentName:"tr",align:null},"linux-lts"),(0,a.kt)("th",{parentName:"tr",align:null},"linux-current"))),(0,a.kt)("tbody",{parentName:"table"},(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"bbswitch"),(0,a.kt)("td",{parentName:"tr",align:null},"bbswitch-current")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"broadcom-sta"),(0,a.kt)("td",{parentName:"tr",align:null},"broadcom-sta-current")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"linux-lts-headers"),(0,a.kt)("td",{parentName:"tr",align:null},"linux-current-headers")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"nvidia-470-glx-driver"),(0,a.kt)("td",{parentName:"tr",align:null},"nvidia-470-glx-driver-current")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"nvidia-beta-driver"),(0,a.kt)("td",{parentName:"tr",align:null},"nvidia-beta-driver-current")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"nvidia-developer-driver"),(0,a.kt)("td",{parentName:"tr",align:null},"nvidia-developer-driver-current")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"nvidia-glx-driver"),(0,a.kt)("td",{parentName:"tr",align:null},"nvidia-glx-driver-current")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"openrazer"),(0,a.kt)("td",{parentName:"tr",align:null},"openrazer-current")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"v4l2loopback"),(0,a.kt)("td",{parentName:"tr",align:null},"v4l2loopback-current")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"vhba-module"),(0,a.kt)("td",{parentName:"tr",align:null},"vhba-module-current")),(0,a.kt)("tr",{parentName:"tbody"},(0,a.kt)("td",{parentName:"tr",align:null},"virtualbox"),(0,a.kt)("td",{parentName:"tr",align:null},"virtualbox-current")))),(0,a.kt)("h2",{id:"change-the-default-kernel-branch-to-boot"},"Change the default kernel branch to boot"),(0,a.kt)("p",null,"After successfully booting into a kernel from the ",(0,a.kt)("inlineCode",{parentName:"p"},"current")," or ",(0,a.kt)("inlineCode",{parentName:"p"},"lts")," branches running ",(0,a.kt)("inlineCode",{parentName:"p"},"sudo clr-boot-manager update")," will make the booted kernel branch the default boot option going forward."))}s.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/eae77de0.d96fad7a.js b/assets/js/eae77de0.0064c776.js similarity index 98% rename from assets/js/eae77de0.d96fad7a.js rename to assets/js/eae77de0.0064c776.js index 7d9585ebc..4aaf21e53 100644 --- a/assets/js/eae77de0.d96fad7a.js +++ b/assets/js/eae77de0.0064c776.js @@ -1 +1 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[6046],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>d});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var c=n.createContext({}),l=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},u=function(e){var t=l(e.components);return n.createElement(c.Provider,{value:t},e.children)},p="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,c=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),p=l(r),f=a,d=p["".concat(c,".").concat(f)]||p[f]||m[f]||o;return r?n.createElement(d,i(i({ref:t},u),{},{components:r})):n.createElement(d,i({ref:t},u))}));function d(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,i=new Array(o);i[0]=f;var s={};for(var c in t)hasOwnProperty.call(t,c)&&(s[c]=t[c]);s.originalType=e,s[p]="string"==typeof e?e:a,i[1]=s;for(var l=2;l{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>m,frontMatter:()=>o,metadata:()=>s,toc:()=>l});var n=r(7462),a=(r(7294),r(3905));const o={title:"Software Center",summary:"Introduction to the Solus Software Center"},i="Software Center",s={unversionedId:"user/quick-start/package-management/index",id:"user/quick-start/package-management/index",title:"Software Center",description:"You can install software ranging from Google Chrome to LibreOffice, as well as updating software, via our Software Center.",source:"@site/docs/user/quick-start/package-management/index.md",sourceDirName:"user/quick-start/package-management",slug:"/user/quick-start/package-management/",permalink:"/docs/user/quick-start/package-management/",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/quick-start/package-management/index.md",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Software Center",summary:"Introduction to the Solus Software Center"},sidebar:"userSidebar",previous:{title:"Booting with Secure Boot Enabled",permalink:"/docs/user/quick-start/installation/secure-boot"},next:{title:"eopkg",permalink:"/docs/user/quick-start/package-management/eopkg"}},c={},l=[],u={toc:l},p="wrapper";function m(e){let{components:t,...o}=e;return(0,a.kt)(p,(0,n.Z)({},u,o,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"software-center"},"Software Center"),(0,a.kt)("p",null,"You can install software ranging from Google Chrome to LibreOffice, as well as updating software, via our Software Center."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"Software Center",src:r(2611).Z,width:"949",height:"698"})),(0,a.kt)("p",null,"Solus uses the ",(0,a.kt)("inlineCode",{parentName:"p"},"eopkg")," package manager, which is not compatible with either ",(0,a.kt)("inlineCode",{parentName:"p"},"deb")," or ",(0,a.kt)("inlineCode",{parentName:"p"},"rpm")," packages offered by other Linux-based operating systems."),(0,a.kt)("p",null,'You can also use a number of distribution-agnostic (or "universal") package managers to install applications, including Snap, Flatpak, and AppImage.'))}m.isMDXComponent=!0},2611:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/solus-sc-563436dafaad570539db7231fc5ed77e.jpg"}}]); \ No newline at end of file +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[6046],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>d});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var c=n.createContext({}),l=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},u=function(e){var t=l(e.components);return n.createElement(c.Provider,{value:t},e.children)},p="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,c=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),p=l(r),f=a,d=p["".concat(c,".").concat(f)]||p[f]||m[f]||o;return r?n.createElement(d,i(i({ref:t},u),{},{components:r})):n.createElement(d,i({ref:t},u))}));function d(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,i=new Array(o);i[0]=f;var s={};for(var c in t)hasOwnProperty.call(t,c)&&(s[c]=t[c]);s.originalType=e,s[p]="string"==typeof e?e:a,i[1]=s;for(var l=2;l{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>m,frontMatter:()=>o,metadata:()=>s,toc:()=>l});var n=r(7462),a=(r(7294),r(3905));const o={title:"Software Center",summary:"Introduction to the Solus Software Center"},i="Software Center",s={unversionedId:"user/quick-start/package-management/index",id:"user/quick-start/package-management/index",title:"Software Center",description:"You can install software ranging from Google Chrome to LibreOffice, as well as updating software, via our Software Center.",source:"@site/docs/user/quick-start/package-management/index.md",sourceDirName:"user/quick-start/package-management",slug:"/user/quick-start/package-management/",permalink:"/docs/user/quick-start/package-management/",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/quick-start/package-management/index.md",tags:[],version:"current",lastUpdatedAt:1695222528,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Software Center",summary:"Introduction to the Solus Software Center"},sidebar:"userSidebar",previous:{title:"Booting with Secure Boot Enabled",permalink:"/docs/user/quick-start/installation/secure-boot"},next:{title:"eopkg",permalink:"/docs/user/quick-start/package-management/eopkg"}},c={},l=[],u={toc:l},p="wrapper";function m(e){let{components:t,...o}=e;return(0,a.kt)(p,(0,n.Z)({},u,o,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"software-center"},"Software Center"),(0,a.kt)("p",null,"You can install software ranging from Google Chrome to LibreOffice, as well as updating software, via our Software Center."),(0,a.kt)("p",null,(0,a.kt)("img",{alt:"Software Center",src:r(2611).Z,width:"949",height:"698"})),(0,a.kt)("p",null,"Solus uses the ",(0,a.kt)("inlineCode",{parentName:"p"},"eopkg")," package manager, which is not compatible with either ",(0,a.kt)("inlineCode",{parentName:"p"},"deb")," or ",(0,a.kt)("inlineCode",{parentName:"p"},"rpm")," packages offered by other Linux-based operating systems."),(0,a.kt)("p",null,'You can also use a number of distribution-agnostic (or "universal") package managers to install applications, including Snap, Flatpak, and AppImage.'))}m.isMDXComponent=!0},2611:(e,t,r)=>{r.d(t,{Z:()=>n});const n=r.p+"assets/images/solus-sc-563436dafaad570539db7231fc5ed77e.jpg"}}]); \ No newline at end of file diff --git a/assets/js/ec4e4367.eacd3b00.js b/assets/js/ec4e4367.1765454a.js similarity index 98% rename from assets/js/ec4e4367.eacd3b00.js rename to assets/js/ec4e4367.1765454a.js index 6cde8388c..ee2b38964 100644 --- a/assets/js/ec4e4367.eacd3b00.js +++ b/assets/js/ec4e4367.1765454a.js @@ -1 +1 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[4529],{3905:(e,r,t)=>{t.d(r,{Zo:()=>c,kt:()=>f});var o=t(7294);function n(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function a(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,o)}return t}function i(e){for(var r=1;r=0||(n[t]=e[t]);return n}(e,r);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(n[t]=e[t])}return n}var s=o.createContext({}),d=function(e){var r=o.useContext(s),t=r;return e&&(t="function"==typeof e?e(r):i(i({},r),e)),t},c=function(e){var r=d(e.components);return o.createElement(s.Provider,{value:r},e.children)},p="mdxType",u={inlineCode:"code",wrapper:function(e){var r=e.children;return o.createElement(o.Fragment,{},r)}},m=o.forwardRef((function(e,r){var t=e.components,n=e.mdxType,a=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),p=d(t),m=n,f=p["".concat(s,".").concat(m)]||p[m]||u[m]||a;return t?o.createElement(f,i(i({ref:r},c),{},{components:t})):o.createElement(f,i({ref:r},c))}));function f(e,r){var t=arguments,n=r&&r.mdxType;if("string"==typeof e||n){var a=t.length,i=new Array(a);i[0]=m;var l={};for(var s in r)hasOwnProperty.call(r,s)&&(l[s]=r[s]);l.originalType=e,l[p]="string"==typeof e?e:n,i[1]=l;for(var d=2;d{t.r(r),t.d(r,{assets:()=>s,contentTitle:()=>i,default:()=>u,frontMatter:()=>a,metadata:()=>l,toc:()=>d});var o=t(7462),n=(t(7294),t(3905));const a={title:"Android",summary:"Quick guide to working with Android devices on Solus"},i="Android",l={unversionedId:"user/hardware/mobile/android",id:"user/hardware/mobile/android",title:"Android",description:"For the most part, Android devices will work out of the box on Solus. The experience is similar to on other operating systems.",source:"@site/docs/user/hardware/mobile/android.md",sourceDirName:"user/hardware/mobile",slug:"/user/hardware/mobile/android",permalink:"/docs/user/hardware/mobile/android",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/hardware/mobile/android.md",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Android",summary:"Quick guide to working with Android devices on Solus"},sidebar:"userSidebar",previous:{title:"Mobile",permalink:"/docs/category/mobile"},next:{title:"Apple",permalink:"/docs/user/hardware/mobile/apple"}},s={},d=[{value:"File Management",id:"file-management",level:2},{value:"Developer Tools",id:"developer-tools",level:2}],c={toc:d},p="wrapper";function u(e){let{components:r,...t}=e;return(0,n.kt)(p,(0,o.Z)({},c,t,{components:r,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"android"},"Android"),(0,n.kt)("p",null,"For the most part, Android devices will work out of the box on Solus. The experience is similar to on other operating systems."),(0,n.kt)("h2",{id:"file-management"},"File Management"),(0,n.kt)("p",null,"TODO: Tutorial on accessing files from a file browser. Android screenshots would be nice to have."),(0,n.kt)("h2",{id:"developer-tools"},"Developer Tools"),(0,n.kt)("p",null,"Whether you are an Android developer or just need ",(0,n.kt)("inlineCode",{parentName:"p"},"adb")," or ",(0,n.kt)("inlineCode",{parentName:"p"},"fastboot")," for installing a ROM, we've got you covered! We just need to install ",(0,n.kt)("inlineCode",{parentName:"p"},"android-tools")," from the Software Center or command-line:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg install android-tools\n")))}u.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[4529],{3905:(e,r,t)=>{t.d(r,{Zo:()=>c,kt:()=>f});var o=t(7294);function n(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function a(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,o)}return t}function i(e){for(var r=1;r=0||(n[t]=e[t]);return n}(e,r);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(n[t]=e[t])}return n}var s=o.createContext({}),d=function(e){var r=o.useContext(s),t=r;return e&&(t="function"==typeof e?e(r):i(i({},r),e)),t},c=function(e){var r=d(e.components);return o.createElement(s.Provider,{value:r},e.children)},p="mdxType",u={inlineCode:"code",wrapper:function(e){var r=e.children;return o.createElement(o.Fragment,{},r)}},m=o.forwardRef((function(e,r){var t=e.components,n=e.mdxType,a=e.originalType,s=e.parentName,c=l(e,["components","mdxType","originalType","parentName"]),p=d(t),m=n,f=p["".concat(s,".").concat(m)]||p[m]||u[m]||a;return t?o.createElement(f,i(i({ref:r},c),{},{components:t})):o.createElement(f,i({ref:r},c))}));function f(e,r){var t=arguments,n=r&&r.mdxType;if("string"==typeof e||n){var a=t.length,i=new Array(a);i[0]=m;var l={};for(var s in r)hasOwnProperty.call(r,s)&&(l[s]=r[s]);l.originalType=e,l[p]="string"==typeof e?e:n,i[1]=l;for(var d=2;d{t.r(r),t.d(r,{assets:()=>s,contentTitle:()=>i,default:()=>u,frontMatter:()=>a,metadata:()=>l,toc:()=>d});var o=t(7462),n=(t(7294),t(3905));const a={title:"Android",summary:"Quick guide to working with Android devices on Solus"},i="Android",l={unversionedId:"user/hardware/mobile/android",id:"user/hardware/mobile/android",title:"Android",description:"For the most part, Android devices will work out of the box on Solus. The experience is similar to on other operating systems.",source:"@site/docs/user/hardware/mobile/android.md",sourceDirName:"user/hardware/mobile",slug:"/user/hardware/mobile/android",permalink:"/docs/user/hardware/mobile/android",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/hardware/mobile/android.md",tags:[],version:"current",lastUpdatedAt:1695222528,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Android",summary:"Quick guide to working with Android devices on Solus"},sidebar:"userSidebar",previous:{title:"Mobile",permalink:"/docs/category/mobile"},next:{title:"Apple",permalink:"/docs/user/hardware/mobile/apple"}},s={},d=[{value:"File Management",id:"file-management",level:2},{value:"Developer Tools",id:"developer-tools",level:2}],c={toc:d},p="wrapper";function u(e){let{components:r,...t}=e;return(0,n.kt)(p,(0,o.Z)({},c,t,{components:r,mdxType:"MDXLayout"}),(0,n.kt)("h1",{id:"android"},"Android"),(0,n.kt)("p",null,"For the most part, Android devices will work out of the box on Solus. The experience is similar to on other operating systems."),(0,n.kt)("h2",{id:"file-management"},"File Management"),(0,n.kt)("p",null,"TODO: Tutorial on accessing files from a file browser. Android screenshots would be nice to have."),(0,n.kt)("h2",{id:"developer-tools"},"Developer Tools"),(0,n.kt)("p",null,"Whether you are an Android developer or just need ",(0,n.kt)("inlineCode",{parentName:"p"},"adb")," or ",(0,n.kt)("inlineCode",{parentName:"p"},"fastboot")," for installing a ROM, we've got you covered! We just need to install ",(0,n.kt)("inlineCode",{parentName:"p"},"android-tools")," from the Software Center or command-line:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg install android-tools\n")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/f0629c21.a37c7bda.js b/assets/js/f0629c21.2dcc08f4.js similarity index 99% rename from assets/js/f0629c21.a37c7bda.js rename to assets/js/f0629c21.2dcc08f4.js index 41864d614..24b7aa9e7 100644 --- a/assets/js/f0629c21.a37c7bda.js +++ b/assets/js/f0629c21.2dcc08f4.js @@ -1 +1 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[3375],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>m});var o=n(7294);function l(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function r(e){for(var t=1;t=0||(l[n]=e[n]);return l}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(l[n]=e[n])}return l}var s=o.createContext({}),u=function(e){var t=o.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):r(r({},t),e)),n},p=function(e){var t=u(e.components);return o.createElement(s.Provider,{value:t},e.children)},d="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},h=o.forwardRef((function(e,t){var n=e.components,l=e.mdxType,a=e.originalType,s=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),d=u(n),h=l,m=d["".concat(s,".").concat(h)]||d[h]||c[h]||a;return n?o.createElement(m,r(r({ref:t},p),{},{components:n})):o.createElement(m,r({ref:t},p))}));function m(e,t){var n=arguments,l=t&&t.mdxType;if("string"==typeof e||l){var a=n.length,r=new Array(a);r[0]=h;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[d]="string"==typeof e?e:l,r[1]=i;for(var u=2;u{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>r,default:()=>c,frontMatter:()=>a,metadata:()=>i,toc:()=>u});var o=n(7462),l=(n(7294),n(3905));const a={title:"Open Broadcaster Software (OBS)",summary:"A quick start guide to OBS on Solus"},r="Open Broadcaster Software (OBS)",i={unversionedId:"user/software/web/obs",id:"user/software/web/obs",title:"Open Broadcaster Software (OBS)",description:"This article covers the installation of OBS Studio as well as the use of third-party plugins.",source:"@site/docs/user/software/web/obs.md",sourceDirName:"user/software/web",slug:"/user/software/web/obs",permalink:"/docs/user/software/web/obs",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/web/obs.md",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Open Broadcaster Software (OBS)",summary:"A quick start guide to OBS on Solus"},sidebar:"userSidebar",previous:{title:"Web",permalink:"/docs/category/web"},next:{title:"Troubleshooting",permalink:"/docs/user/troubleshooting/"}},s={},u=[{value:"Installation",id:"installation",level:2},{value:"Virtual Camera",id:"virtual-camera",level:2},{value:"Plugins",id:"plugins",level:2},{value:"Known Working Plugins",id:"known-working-plugins",level:3},{value:"Input Overlay",id:"input-overlay",level:4}],p={toc:u},d="wrapper";function c(e){let{components:t,...a}=e;return(0,l.kt)(d,(0,o.Z)({},p,a,{components:t,mdxType:"MDXLayout"}),(0,l.kt)("h1",{id:"open-broadcaster-software-obs"},"Open Broadcaster Software (OBS)"),(0,l.kt)("p",null,"This article covers the installation of OBS Studio as well as the use of third-party plugins."),(0,l.kt)("h2",{id:"installation"},"Installation"),(0,l.kt)("p",null,"To install OBS Studio, either open up the Software Center and type ",(0,l.kt)("inlineCode",{parentName:"p"},"obs-studio")," into the Search section or run the following command:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg install obs-studio\n")),(0,l.kt)("h2",{id:"virtual-camera"},"Virtual Camera"),(0,l.kt)("p",null,'OBS includes a virtual webcam device which can be used to send your OBS stream to video conferencing programs. In order to use this on Solus, you must first install from our repository a separate kernel module that is responsible for creating the necessary "loopback" device. There are two versions of this software available in the repository, you must choose the version that corresponds to the kernel you have installed.'),(0,l.kt)("p",null,"To find out which kernel is installed, run:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"uname -r\n")),(0,l.kt)("p",null,"This should return a version which ends in ",(0,l.kt)("inlineCode",{parentName:"p"},".current")," or ",(0,l.kt)("inlineCode",{parentName:"p"},".lts"),"."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},'If you are running the "current" kernel, install ',(0,l.kt)("inlineCode",{parentName:"li"},"v4l2loopback-current"),": ",(0,l.kt)("inlineCode",{parentName:"li"},"sudo eopkg install v4l2loopback-current")),(0,l.kt)("li",{parentName:"ul"},'If you are running the "lts" kernel, install ',(0,l.kt)("inlineCode",{parentName:"li"},"v4l2loopback"),": ",(0,l.kt)("inlineCode",{parentName:"li"},"sudo eopkg install v4l2loopback"))),(0,l.kt)("p",null,"Once v4l2loopback is installed, reboot your computer. Next time you start OBS, it will prompt you for your password to set up v4l2loopback. After that, the virtual camera should be available as a webcam in other programs."),(0,l.kt)("h2",{id:"plugins"},"Plugins"),(0,l.kt)("p",null,"All OBS Studio plugins should be installed into their own respective folders inside the ",(0,l.kt)("inlineCode",{parentName:"p"},"~/.config/obs-studio/plugins")," folder. If this folder does not exist for you, you'll need to create it before copying plugins into it."),(0,l.kt)("p",null,"When installing a plugin, the directory tree should look something like the following:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre"},"plugins\n\u2514\u2500\u2500 plugin-name\n \u251c\u2500\u2500 bin\n \u2502\xa0\xa0 \u2514\u2500\u2500 64bit\n \u2502\xa0\xa0 \u2514\u2500\u2500 filename.so\n \u251c\u2500\u2500 data\n \u2502\xa0\xa0 \u2514\u2500\u2500 locale\n \u2502\xa0\xa0 \u2514\u2500\u2500 en-US.ini\n")),(0,l.kt)("p",null,"In essence, you should have ",(0,l.kt)("inlineCode",{parentName:"p"},"bin/64bit")," folders inside the plugin folder, with any shared object plugin files inside that. As OBS Studio for Solus only supports 64-bit, the plugin ",(0,l.kt)("strong",{parentName:"p"},"must")," support 64-bit as well."),(0,l.kt)("p",null,"Additionally, the plugin may come with additional files or folders, such as locale information. That locale information should be located in ",(0,l.kt)("inlineCode",{parentName:"p"},"data/locale"),"."),(0,l.kt)("p",null,"Most Linux-supporting plugins should provide pre-compiled tarballs or zip files that you can extract to get a pre-made / ready folder structure that you can simply copy / paste into ",(0,l.kt)("inlineCode",{parentName:"p"},"~/.config/obs-studio/plugins")),(0,l.kt)("h3",{id:"known-working-plugins"},"Known Working Plugins"),(0,l.kt)("h4",{id:"input-overlay"},"Input Overlay"),(0,l.kt)("p",null,"The Input Overlay plugin enables you to show an input overlay of your gamepad, mouse, or keyboard. Pre-compiled release files are available on the Releases section of the ",(0,l.kt)("a",{parentName:"p",href:"https://github.com/univrsal/input-overlay"},"developer's website"),"."),(0,l.kt)("p",null,"To install Input Overlay, download the input-overlay-vNUM.zip file from their releases page, where NUM is the latest release number, such as 4.4."),(0,l.kt)("p",null,"Next, we'll install a library necessary to use the Input Overlay plugin, as well as an unzip tool to make the installation process easier. Run the following command:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg install libuiohook unzip\n")),(0,l.kt)("p",null,"Next, click on the zip file in your File Manager to open up the Extract tool (such as File Roller). You will be presented with contents like the following."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"Input Overlay Zip",src:n(5594).Z,width:"770",height:"348"})),(0,l.kt)("p",null,"Let's extract this to our Downloads folder to make the process of copying the contents we need more easily. Click the Extract button in the image indicated above. This will present you with a file dialog. Navigate to the Downloads folder and click Extract. This will create a folder, likely called something similar to ",(0,l.kt)("inlineCode",{parentName:"p"},"input-overlay.v4.4"),"."),(0,l.kt)("p",null,"Next let's run the following commands in the Terminal. The commands below will:"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Remove our zip file to make our directory renaming more reliable."),(0,l.kt)("li",{parentName:"ul"},"Move our extracted input overlay in our Downloads directory to one which is without a version number, to make it easier for future commands."),(0,l.kt)("li",{parentName:"ul"},"Extract all the preset zips and remove their zip files"),(0,l.kt)("li",{parentName:"ul"},"Create an ",(0,l.kt)("inlineCode",{parentName:"li"},"input-overlay")," folder in ",(0,l.kt)("inlineCode",{parentName:"li"},"~/.config/obs-studio/plugins")," as well as creating the ",(0,l.kt)("inlineCode",{parentName:"li"},"plugins")," folder if needed."),(0,l.kt)("li",{parentName:"ul"},"Copy over the necessary and recommended folders and files to our input-overlay plugin folder.")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},'rm ~/Downloads/input-overlay*.zip\nmv ~/Downloads/input-overlay.v* ~/Downloads/input-overlay\ncd ~/Downloads/input-overlay/presets\nfor file in `ls *.zip`; do unzip "${file}" -d "${file:0:-4}"; done\nrm *.zip\nmkdir -p ~/.config/obs-studio/plugins/input-overlay\ncp -R ~/Downloads/input-overlay/plugin-linux/* ~/.config/obs-studio/plugins/input-overlay/\ncp -R ~/Downloads/input-overlay/presets ~/.config/obs-studio/plugins/input-overlay/\n')),(0,l.kt)("p",null,"Now the Input Overlay source is available to us as a source (if you have OBS Studio already open, restart it), as shown in the below screenshot."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"Input Overlay: Source Menu",src:n(7549).Z,width:"1000",height:"600"})),(0,l.kt)("p",null,"Upon clicking on this source, we'll be presented with the usual add / use existing source dialog."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"Input Overlay: Add Existing Source",src:n(2985).Z,width:"791",height:"540"})),(0,l.kt)("p",null,"After naming a source, such as \"Mouse\", click OK and you'll be presented with a dialog that looks similar to below. Do note that yours will be empty by default, as you've not yet selected an Overlay image file and Layout config file yet."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"Input Overlay: Main Source",src:n(1515).Z,width:"1032",height:"783"})),(0,l.kt)("p",null,"This is where the presets come in handy. Click the Browse button for Overlay image file and navigate to ",(0,l.kt)("inlineCode",{parentName:"p"},".config/obs-studio/plugins/presets")," and then the respective preset you want, such as mouse, and then the PNG within it. ",(0,l.kt)("strong",{parentName:"p"},"You will need to enable hidden files")," in the file dialog by using the keyboard combination ",(0,l.kt)("inlineCode",{parentName:"p"},"Ctrl+H")," to see ",(0,l.kt)("inlineCode",{parentName:"p"},".config")),(0,l.kt)("p",null,"Next, do the same for Layout config overlay, but instead go to the same folder as your PNG and select the ",(0,l.kt)("inlineCode",{parentName:"p"},"ini")," file."),(0,l.kt)("p",null,'If you\'re using a mouse or gamepad, be sure to check the "Mouse overlay" or "Gamepad overlay" boxes respectively and tweak settings as you see fit.'))}c.isMDXComponent=!0},2985:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/input-overlay-source-add-existing-d472cc90ae7590dd14f41fa8e7a249d5.jpg"},1515:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/input-overlay-source-main-8fdfb8ec5ad7ba5006f03737eebcc8c8.jpg"},7549:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/input-overlay-source-menu-ef421b6d9afa2c80e8f2c84e15adb843.jpg"},5594:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/input-overlay-zip-12cbf3b807ebdf130723291e940f425d.jpg"}}]); \ No newline at end of file +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[3375],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>m});var o=n(7294);function l(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function r(e){for(var t=1;t=0||(l[n]=e[n]);return l}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(l[n]=e[n])}return l}var s=o.createContext({}),u=function(e){var t=o.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):r(r({},t),e)),n},p=function(e){var t=u(e.components);return o.createElement(s.Provider,{value:t},e.children)},d="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},h=o.forwardRef((function(e,t){var n=e.components,l=e.mdxType,a=e.originalType,s=e.parentName,p=i(e,["components","mdxType","originalType","parentName"]),d=u(n),h=l,m=d["".concat(s,".").concat(h)]||d[h]||c[h]||a;return n?o.createElement(m,r(r({ref:t},p),{},{components:n})):o.createElement(m,r({ref:t},p))}));function m(e,t){var n=arguments,l=t&&t.mdxType;if("string"==typeof e||l){var a=n.length,r=new Array(a);r[0]=h;var i={};for(var s in t)hasOwnProperty.call(t,s)&&(i[s]=t[s]);i.originalType=e,i[d]="string"==typeof e?e:l,r[1]=i;for(var u=2;u{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>r,default:()=>c,frontMatter:()=>a,metadata:()=>i,toc:()=>u});var o=n(7462),l=(n(7294),n(3905));const a={title:"Open Broadcaster Software (OBS)",summary:"A quick start guide to OBS on Solus"},r="Open Broadcaster Software (OBS)",i={unversionedId:"user/software/web/obs",id:"user/software/web/obs",title:"Open Broadcaster Software (OBS)",description:"This article covers the installation of OBS Studio as well as the use of third-party plugins.",source:"@site/docs/user/software/web/obs.md",sourceDirName:"user/software/web",slug:"/user/software/web/obs",permalink:"/docs/user/software/web/obs",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/web/obs.md",tags:[],version:"current",lastUpdatedAt:1695222528,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Open Broadcaster Software (OBS)",summary:"A quick start guide to OBS on Solus"},sidebar:"userSidebar",previous:{title:"Web",permalink:"/docs/category/web"},next:{title:"Troubleshooting",permalink:"/docs/user/troubleshooting/"}},s={},u=[{value:"Installation",id:"installation",level:2},{value:"Virtual Camera",id:"virtual-camera",level:2},{value:"Plugins",id:"plugins",level:2},{value:"Known Working Plugins",id:"known-working-plugins",level:3},{value:"Input Overlay",id:"input-overlay",level:4}],p={toc:u},d="wrapper";function c(e){let{components:t,...a}=e;return(0,l.kt)(d,(0,o.Z)({},p,a,{components:t,mdxType:"MDXLayout"}),(0,l.kt)("h1",{id:"open-broadcaster-software-obs"},"Open Broadcaster Software (OBS)"),(0,l.kt)("p",null,"This article covers the installation of OBS Studio as well as the use of third-party plugins."),(0,l.kt)("h2",{id:"installation"},"Installation"),(0,l.kt)("p",null,"To install OBS Studio, either open up the Software Center and type ",(0,l.kt)("inlineCode",{parentName:"p"},"obs-studio")," into the Search section or run the following command:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg install obs-studio\n")),(0,l.kt)("h2",{id:"virtual-camera"},"Virtual Camera"),(0,l.kt)("p",null,'OBS includes a virtual webcam device which can be used to send your OBS stream to video conferencing programs. In order to use this on Solus, you must first install from our repository a separate kernel module that is responsible for creating the necessary "loopback" device. There are two versions of this software available in the repository, you must choose the version that corresponds to the kernel you have installed.'),(0,l.kt)("p",null,"To find out which kernel is installed, run:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"uname -r\n")),(0,l.kt)("p",null,"This should return a version which ends in ",(0,l.kt)("inlineCode",{parentName:"p"},".current")," or ",(0,l.kt)("inlineCode",{parentName:"p"},".lts"),"."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},'If you are running the "current" kernel, install ',(0,l.kt)("inlineCode",{parentName:"li"},"v4l2loopback-current"),": ",(0,l.kt)("inlineCode",{parentName:"li"},"sudo eopkg install v4l2loopback-current")),(0,l.kt)("li",{parentName:"ul"},'If you are running the "lts" kernel, install ',(0,l.kt)("inlineCode",{parentName:"li"},"v4l2loopback"),": ",(0,l.kt)("inlineCode",{parentName:"li"},"sudo eopkg install v4l2loopback"))),(0,l.kt)("p",null,"Once v4l2loopback is installed, reboot your computer. Next time you start OBS, it will prompt you for your password to set up v4l2loopback. After that, the virtual camera should be available as a webcam in other programs."),(0,l.kt)("h2",{id:"plugins"},"Plugins"),(0,l.kt)("p",null,"All OBS Studio plugins should be installed into their own respective folders inside the ",(0,l.kt)("inlineCode",{parentName:"p"},"~/.config/obs-studio/plugins")," folder. If this folder does not exist for you, you'll need to create it before copying plugins into it."),(0,l.kt)("p",null,"When installing a plugin, the directory tree should look something like the following:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre"},"plugins\n\u2514\u2500\u2500 plugin-name\n \u251c\u2500\u2500 bin\n \u2502\xa0\xa0 \u2514\u2500\u2500 64bit\n \u2502\xa0\xa0 \u2514\u2500\u2500 filename.so\n \u251c\u2500\u2500 data\n \u2502\xa0\xa0 \u2514\u2500\u2500 locale\n \u2502\xa0\xa0 \u2514\u2500\u2500 en-US.ini\n")),(0,l.kt)("p",null,"In essence, you should have ",(0,l.kt)("inlineCode",{parentName:"p"},"bin/64bit")," folders inside the plugin folder, with any shared object plugin files inside that. As OBS Studio for Solus only supports 64-bit, the plugin ",(0,l.kt)("strong",{parentName:"p"},"must")," support 64-bit as well."),(0,l.kt)("p",null,"Additionally, the plugin may come with additional files or folders, such as locale information. That locale information should be located in ",(0,l.kt)("inlineCode",{parentName:"p"},"data/locale"),"."),(0,l.kt)("p",null,"Most Linux-supporting plugins should provide pre-compiled tarballs or zip files that you can extract to get a pre-made / ready folder structure that you can simply copy / paste into ",(0,l.kt)("inlineCode",{parentName:"p"},"~/.config/obs-studio/plugins")),(0,l.kt)("h3",{id:"known-working-plugins"},"Known Working Plugins"),(0,l.kt)("h4",{id:"input-overlay"},"Input Overlay"),(0,l.kt)("p",null,"The Input Overlay plugin enables you to show an input overlay of your gamepad, mouse, or keyboard. Pre-compiled release files are available on the Releases section of the ",(0,l.kt)("a",{parentName:"p",href:"https://github.com/univrsal/input-overlay"},"developer's website"),"."),(0,l.kt)("p",null,"To install Input Overlay, download the input-overlay-vNUM.zip file from their releases page, where NUM is the latest release number, such as 4.4."),(0,l.kt)("p",null,"Next, we'll install a library necessary to use the Input Overlay plugin, as well as an unzip tool to make the installation process easier. Run the following command:"),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg install libuiohook unzip\n")),(0,l.kt)("p",null,"Next, click on the zip file in your File Manager to open up the Extract tool (such as File Roller). You will be presented with contents like the following."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"Input Overlay Zip",src:n(5594).Z,width:"770",height:"348"})),(0,l.kt)("p",null,"Let's extract this to our Downloads folder to make the process of copying the contents we need more easily. Click the Extract button in the image indicated above. This will present you with a file dialog. Navigate to the Downloads folder and click Extract. This will create a folder, likely called something similar to ",(0,l.kt)("inlineCode",{parentName:"p"},"input-overlay.v4.4"),"."),(0,l.kt)("p",null,"Next let's run the following commands in the Terminal. The commands below will:"),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Remove our zip file to make our directory renaming more reliable."),(0,l.kt)("li",{parentName:"ul"},"Move our extracted input overlay in our Downloads directory to one which is without a version number, to make it easier for future commands."),(0,l.kt)("li",{parentName:"ul"},"Extract all the preset zips and remove their zip files"),(0,l.kt)("li",{parentName:"ul"},"Create an ",(0,l.kt)("inlineCode",{parentName:"li"},"input-overlay")," folder in ",(0,l.kt)("inlineCode",{parentName:"li"},"~/.config/obs-studio/plugins")," as well as creating the ",(0,l.kt)("inlineCode",{parentName:"li"},"plugins")," folder if needed."),(0,l.kt)("li",{parentName:"ul"},"Copy over the necessary and recommended folders and files to our input-overlay plugin folder.")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-bash"},'rm ~/Downloads/input-overlay*.zip\nmv ~/Downloads/input-overlay.v* ~/Downloads/input-overlay\ncd ~/Downloads/input-overlay/presets\nfor file in `ls *.zip`; do unzip "${file}" -d "${file:0:-4}"; done\nrm *.zip\nmkdir -p ~/.config/obs-studio/plugins/input-overlay\ncp -R ~/Downloads/input-overlay/plugin-linux/* ~/.config/obs-studio/plugins/input-overlay/\ncp -R ~/Downloads/input-overlay/presets ~/.config/obs-studio/plugins/input-overlay/\n')),(0,l.kt)("p",null,"Now the Input Overlay source is available to us as a source (if you have OBS Studio already open, restart it), as shown in the below screenshot."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"Input Overlay: Source Menu",src:n(7549).Z,width:"1000",height:"600"})),(0,l.kt)("p",null,"Upon clicking on this source, we'll be presented with the usual add / use existing source dialog."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"Input Overlay: Add Existing Source",src:n(2985).Z,width:"791",height:"540"})),(0,l.kt)("p",null,"After naming a source, such as \"Mouse\", click OK and you'll be presented with a dialog that looks similar to below. Do note that yours will be empty by default, as you've not yet selected an Overlay image file and Layout config file yet."),(0,l.kt)("p",null,(0,l.kt)("img",{alt:"Input Overlay: Main Source",src:n(1515).Z,width:"1032",height:"783"})),(0,l.kt)("p",null,"This is where the presets come in handy. Click the Browse button for Overlay image file and navigate to ",(0,l.kt)("inlineCode",{parentName:"p"},".config/obs-studio/plugins/presets")," and then the respective preset you want, such as mouse, and then the PNG within it. ",(0,l.kt)("strong",{parentName:"p"},"You will need to enable hidden files")," in the file dialog by using the keyboard combination ",(0,l.kt)("inlineCode",{parentName:"p"},"Ctrl+H")," to see ",(0,l.kt)("inlineCode",{parentName:"p"},".config")),(0,l.kt)("p",null,"Next, do the same for Layout config overlay, but instead go to the same folder as your PNG and select the ",(0,l.kt)("inlineCode",{parentName:"p"},"ini")," file."),(0,l.kt)("p",null,'If you\'re using a mouse or gamepad, be sure to check the "Mouse overlay" or "Gamepad overlay" boxes respectively and tweak settings as you see fit.'))}c.isMDXComponent=!0},2985:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/input-overlay-source-add-existing-d472cc90ae7590dd14f41fa8e7a249d5.jpg"},1515:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/input-overlay-source-main-8fdfb8ec5ad7ba5006f03737eebcc8c8.jpg"},7549:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/input-overlay-source-menu-ef421b6d9afa2c80e8f2c84e15adb843.jpg"},5594:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/input-overlay-zip-12cbf3b807ebdf130723291e940f425d.jpg"}}]); \ No newline at end of file diff --git a/assets/js/f1d13e1b.79e47fe5.js b/assets/js/f1d13e1b.a260f6b4.js similarity index 98% rename from assets/js/f1d13e1b.79e47fe5.js rename to assets/js/f1d13e1b.a260f6b4.js index 7487088b9..e239f339d 100644 --- a/assets/js/f1d13e1b.79e47fe5.js +++ b/assets/js/f1d13e1b.a260f6b4.js @@ -1 +1 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[5462],{3905:(e,t,r)=>{r.d(t,{Zo:()=>l,kt:()=>m});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function s(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c=n.createContext({}),u=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):s(s({},t),e)),r},l=function(e){var t=u(e.components);return n.createElement(c.Provider,{value:t},e.children)},p="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,i=e.originalType,c=e.parentName,l=a(e,["components","mdxType","originalType","parentName"]),p=u(r),f=o,m=p["".concat(c,".").concat(f)]||p[f]||d[f]||i;return r?n.createElement(m,s(s({ref:t},l),{},{components:r})):n.createElement(m,s({ref:t},l))}));function m(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=r.length,s=new Array(i);s[0]=f;var a={};for(var c in t)hasOwnProperty.call(t,c)&&(a[c]=t[c]);a.originalType=e,a[p]="string"==typeof e?e:o,s[1]=a;for(var u=2;u{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>d,frontMatter:()=>i,metadata:()=>a,toc:()=>u});var n=r(7462),o=(r(7294),r(3905));const i={title:"Tips and Tricks",summary:"Helpful tips and tricks for using MATE on Solus"},s="Tips and Tricks",a={unversionedId:"user/editions/mate/tips-and-tricks",id:"user/editions/mate/tips-and-tricks",title:"Tips and Tricks",description:"MATE Keyboard Shortcuts",source:"@site/docs/user/editions/mate/tips-and-tricks.md",sourceDirName:"user/editions/mate",slug:"/user/editions/mate/tips-and-tricks",permalink:"/docs/user/editions/mate/tips-and-tricks",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/editions/mate/tips-and-tricks.md",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Tips and Tricks",summary:"Helpful tips and tricks for using MATE on Solus"},sidebar:"userSidebar",previous:{title:"Configuration",permalink:"/docs/user/editions/mate/configuration"},next:{title:"Plasma",permalink:"/docs/user/editions/plasma/"}},c={},u=[{value:"MATE Keyboard Shortcuts",id:"mate-keyboard-shortcuts",level:2}],l={toc:u},p="wrapper";function d(e){let{components:t,...r}=e;return(0,o.kt)(p,(0,n.Z)({},l,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"tips-and-tricks"},"Tips and Tricks"),(0,o.kt)("h2",{id:"mate-keyboard-shortcuts"},"MATE Keyboard Shortcuts"),(0,o.kt)("p",null,"TODO: Provide a table of short-cuts like we did for Budgie"),(0,o.kt)("p",null,"TODO: Add a few other tips and tricks useful to MATE users"))}d.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[5462],{3905:(e,t,r)=>{r.d(t,{Zo:()=>l,kt:()=>m});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function s(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c=n.createContext({}),u=function(e){var t=n.useContext(c),r=t;return e&&(r="function"==typeof e?e(t):s(s({},t),e)),r},l=function(e){var t=u(e.components);return n.createElement(c.Provider,{value:t},e.children)},p="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,i=e.originalType,c=e.parentName,l=a(e,["components","mdxType","originalType","parentName"]),p=u(r),f=o,m=p["".concat(c,".").concat(f)]||p[f]||d[f]||i;return r?n.createElement(m,s(s({ref:t},l),{},{components:r})):n.createElement(m,s({ref:t},l))}));function m(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=r.length,s=new Array(i);s[0]=f;var a={};for(var c in t)hasOwnProperty.call(t,c)&&(a[c]=t[c]);a.originalType=e,a[p]="string"==typeof e?e:o,s[1]=a;for(var u=2;u{r.r(t),r.d(t,{assets:()=>c,contentTitle:()=>s,default:()=>d,frontMatter:()=>i,metadata:()=>a,toc:()=>u});var n=r(7462),o=(r(7294),r(3905));const i={title:"Tips and Tricks",summary:"Helpful tips and tricks for using MATE on Solus"},s="Tips and Tricks",a={unversionedId:"user/editions/mate/tips-and-tricks",id:"user/editions/mate/tips-and-tricks",title:"Tips and Tricks",description:"MATE Keyboard Shortcuts",source:"@site/docs/user/editions/mate/tips-and-tricks.md",sourceDirName:"user/editions/mate",slug:"/user/editions/mate/tips-and-tricks",permalink:"/docs/user/editions/mate/tips-and-tricks",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/editions/mate/tips-and-tricks.md",tags:[],version:"current",lastUpdatedAt:1695222528,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Tips and Tricks",summary:"Helpful tips and tricks for using MATE on Solus"},sidebar:"userSidebar",previous:{title:"Configuration",permalink:"/docs/user/editions/mate/configuration"},next:{title:"Plasma",permalink:"/docs/user/editions/plasma/"}},c={},u=[{value:"MATE Keyboard Shortcuts",id:"mate-keyboard-shortcuts",level:2}],l={toc:u},p="wrapper";function d(e){let{components:t,...r}=e;return(0,o.kt)(p,(0,n.Z)({},l,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"tips-and-tricks"},"Tips and Tricks"),(0,o.kt)("h2",{id:"mate-keyboard-shortcuts"},"MATE Keyboard Shortcuts"),(0,o.kt)("p",null,"TODO: Provide a table of short-cuts like we did for Budgie"),(0,o.kt)("p",null,"TODO: Add a few other tips and tricks useful to MATE users"))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/f4aa4739.a00d9d23.js b/assets/js/f4aa4739.62c6d938.js similarity index 98% rename from assets/js/f4aa4739.a00d9d23.js rename to assets/js/f4aa4739.62c6d938.js index 12ae388f0..9f7653e0f 100644 --- a/assets/js/f4aa4739.a00d9d23.js +++ b/assets/js/f4aa4739.62c6d938.js @@ -1 +1 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[9170],{3905:(e,t,r)=>{r.d(t,{Zo:()=>l,kt:()=>g});var n=r(7294);function i(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function u(e){for(var t=1;t=0||(i[r]=e[r]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}var s=n.createContext({}),d=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):u(u({},t),e)),r},l=function(e){var t=d(e.components);return n.createElement(s.Provider,{value:t},e.children)},p="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var r=e.components,i=e.mdxType,o=e.originalType,s=e.parentName,l=a(e,["components","mdxType","originalType","parentName"]),p=d(r),f=i,g=p["".concat(s,".").concat(f)]||p[f]||c[f]||o;return r?n.createElement(g,u(u({ref:t},l),{},{components:r})):n.createElement(g,u({ref:t},l))}));function g(e,t){var r=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var o=r.length,u=new Array(o);u[0]=f;var a={};for(var s in t)hasOwnProperty.call(t,s)&&(a[s]=t[s]);a.originalType=e,a[p]="string"==typeof e?e:i,u[1]=a;for(var d=2;d{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>u,default:()=>c,frontMatter:()=>o,metadata:()=>a,toc:()=>d});var n=r(7462),i=(r(7294),r(3905));const o={title:"Budgie",summary:"A quick introduction to the Budgie Edition of Solus"},u="Budgie Desktop",a={unversionedId:"user/editions/budgie/index",id:"user/editions/budgie/index",title:"Budgie",description:"TODO: Add Budgie branding image",source:"@site/docs/user/editions/budgie/index.md",sourceDirName:"user/editions/budgie",slug:"/user/editions/budgie/",permalink:"/docs/user/editions/budgie/",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/editions/budgie/index.md",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Budgie",summary:"A quick introduction to the Budgie Edition of Solus"},sidebar:"userSidebar",previous:{title:"Editions",permalink:"/docs/user/editions/"},next:{title:"Configuration",permalink:"/docs/user/editions/budgie/configuration"}},s={},d=[],l={toc:d},p="wrapper";function c(e){let{components:t,...r}=e;return(0,i.kt)(p,(0,n.Z)({},l,r,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"budgie-desktop"},"Budgie Desktop"),(0,i.kt)("blockquote",null,(0,i.kt)("p",{parentName:"blockquote"},"TODO: Add Budgie branding image")),(0,i.kt)("p",null,"Budgie is the flagship Edition of Solus. It was originally started by Solus and has now been spun off into its own distro-agnostic project. They describe it as:"),(0,i.kt)("blockquote",null,(0,i.kt)("p",{parentName:"blockquote"},"The Budgie Desktop is a feature-rich, modern desktop designed to keep out the way of the user.")),(0,i.kt)("p",null,"Here are some links related to this project that you may find helpful:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/BuddiesOfBudgie"},"Homepage")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://blog.buddiesofbudgie.org/"},"News")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/BuddiesOfBudgie/budgie-desktop/issues"},"Support"))),(0,i.kt)("p",null,(0,i.kt)("a",{parentName:"p",href:"configuration"},"Go to Budgie Configuration")),(0,i.kt)("p",null,(0,i.kt)("a",{parentName:"p",href:"tips-and-tricks"},"Go to Budgie Tips and Tricks")))}c.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[9170],{3905:(e,t,r)=>{r.d(t,{Zo:()=>l,kt:()=>g});var n=r(7294);function i(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function u(e){for(var t=1;t=0||(i[r]=e[r]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(i[r]=e[r])}return i}var s=n.createContext({}),d=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):u(u({},t),e)),r},l=function(e){var t=d(e.components);return n.createElement(s.Provider,{value:t},e.children)},p="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var r=e.components,i=e.mdxType,o=e.originalType,s=e.parentName,l=a(e,["components","mdxType","originalType","parentName"]),p=d(r),f=i,g=p["".concat(s,".").concat(f)]||p[f]||c[f]||o;return r?n.createElement(g,u(u({ref:t},l),{},{components:r})):n.createElement(g,u({ref:t},l))}));function g(e,t){var r=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var o=r.length,u=new Array(o);u[0]=f;var a={};for(var s in t)hasOwnProperty.call(t,s)&&(a[s]=t[s]);a.originalType=e,a[p]="string"==typeof e?e:i,u[1]=a;for(var d=2;d{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>u,default:()=>c,frontMatter:()=>o,metadata:()=>a,toc:()=>d});var n=r(7462),i=(r(7294),r(3905));const o={title:"Budgie",summary:"A quick introduction to the Budgie Edition of Solus"},u="Budgie Desktop",a={unversionedId:"user/editions/budgie/index",id:"user/editions/budgie/index",title:"Budgie",description:"TODO: Add Budgie branding image",source:"@site/docs/user/editions/budgie/index.md",sourceDirName:"user/editions/budgie",slug:"/user/editions/budgie/",permalink:"/docs/user/editions/budgie/",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/editions/budgie/index.md",tags:[],version:"current",lastUpdatedAt:1695222528,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Budgie",summary:"A quick introduction to the Budgie Edition of Solus"},sidebar:"userSidebar",previous:{title:"Editions",permalink:"/docs/user/editions/"},next:{title:"Configuration",permalink:"/docs/user/editions/budgie/configuration"}},s={},d=[],l={toc:d},p="wrapper";function c(e){let{components:t,...r}=e;return(0,i.kt)(p,(0,n.Z)({},l,r,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"budgie-desktop"},"Budgie Desktop"),(0,i.kt)("blockquote",null,(0,i.kt)("p",{parentName:"blockquote"},"TODO: Add Budgie branding image")),(0,i.kt)("p",null,"Budgie is the flagship Edition of Solus. It was originally started by Solus and has now been spun off into its own distro-agnostic project. They describe it as:"),(0,i.kt)("blockquote",null,(0,i.kt)("p",{parentName:"blockquote"},"The Budgie Desktop is a feature-rich, modern desktop designed to keep out the way of the user.")),(0,i.kt)("p",null,"Here are some links related to this project that you may find helpful:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/BuddiesOfBudgie"},"Homepage")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://blog.buddiesofbudgie.org/"},"News")),(0,i.kt)("li",{parentName:"ul"},(0,i.kt)("a",{parentName:"li",href:"https://github.com/BuddiesOfBudgie/budgie-desktop/issues"},"Support"))),(0,i.kt)("p",null,(0,i.kt)("a",{parentName:"p",href:"configuration"},"Go to Budgie Configuration")),(0,i.kt)("p",null,(0,i.kt)("a",{parentName:"p",href:"tips-and-tricks"},"Go to Budgie Tips and Tricks")))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/f4c9601b.0b01dd6a.js b/assets/js/f4c9601b.975f8b18.js similarity index 99% rename from assets/js/f4c9601b.0b01dd6a.js rename to assets/js/f4c9601b.975f8b18.js index 8f1a9eb7a..a5681d7ca 100644 --- a/assets/js/f4c9601b.0b01dd6a.js +++ b/assets/js/f4c9601b.975f8b18.js @@ -1 +1 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[2595],{3905:(A,C,g)=>{g.d(C,{Zo:()=>i,kt:()=>s});var e=g(7294);function o(A,C,g){return C in A?Object.defineProperty(A,C,{value:g,enumerable:!0,configurable:!0,writable:!0}):A[C]=g,A}function t(A,C){var g=Object.keys(A);if(Object.getOwnPropertySymbols){var e=Object.getOwnPropertySymbols(A);C&&(e=e.filter((function(C){return Object.getOwnPropertyDescriptor(A,C).enumerable}))),g.push.apply(g,e)}return g}function I(A){for(var C=1;C=0||(o[g]=A[g]);return o}(A,C);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(A);for(e=0;e=0||Object.prototype.propertyIsEnumerable.call(A,g)&&(o[g]=A[g])}return o}var r=e.createContext({}),a=function(A){var C=e.useContext(r),g=C;return A&&(g="function"==typeof A?A(C):I(I({},C),A)),g},i=function(A){var C=a(A.components);return e.createElement(r.Provider,{value:C},A.children)},B="mdxType",u={inlineCode:"code",wrapper:function(A){var C=A.children;return e.createElement(e.Fragment,{},C)}},w=e.forwardRef((function(A,C){var g=A.components,o=A.mdxType,t=A.originalType,r=A.parentName,i=n(A,["components","mdxType","originalType","parentName"]),B=a(g),w=o,s=B["".concat(r,".").concat(w)]||B[w]||u[w]||t;return g?e.createElement(s,I(I({ref:C},i),{},{components:g})):e.createElement(s,I({ref:C},i))}));function s(A,C){var g=arguments,o=C&&C.mdxType;if("string"==typeof A||o){var t=g.length,I=new Array(t);I[0]=w;var n={};for(var r in C)hasOwnProperty.call(C,r)&&(n[r]=C[r]);n.originalType=A,n[B]="string"==typeof A?A:o,I[1]=n;for(var a=2;a{g.r(C),g.d(C,{assets:()=>r,contentTitle:()=>I,default:()=>u,frontMatter:()=>t,metadata:()=>n,toc:()=>a});var e=g(7462),o=(g(7294),g(3905));const t={title:"Booting with Secure Boot Enabled",summary:"Instructions for enrolling the Solus Certificate when Secure Boot is enabled"},I="Booting with Secure Boot Enabled",n={unversionedId:"user/quick-start/installation/secure-boot",id:"user/quick-start/installation/secure-boot",title:"Booting with Secure Boot Enabled",description:"Since Solus 4.4 secure boot is now supported. When you first boot the ISO, and, if you have secure boot enabled in your UEFI firmware; you will have to perform the one-time-step of manually enrolling the Solus certificate. The following guide will walk you through this. If you already have Solus installed and wish to enable secure boot, skip ahead here.",source:"@site/docs/user/quick-start/installation/secure-boot.md",sourceDirName:"user/quick-start/installation",slug:"/user/quick-start/installation/secure-boot",permalink:"/docs/user/quick-start/installation/secure-boot",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/quick-start/installation/secure-boot.md",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Booting with Secure Boot Enabled",summary:"Instructions for enrolling the Solus Certificate when Secure Boot is enabled"},sidebar:"userSidebar",previous:{title:"Disk Partitioning",permalink:"/docs/user/quick-start/installation/disks"},next:{title:"Software Center",permalink:"/docs/user/quick-start/package-management/"}},r={},a=[{value:"Enrolling the Solus Certificate",id:"enrolling-the-solus-certificate",level:2},{value:"Enabling Secure Boot on an Existing Install",id:"enabling-secure-boot-on-an-existing-install",level:2},{value:"Final Tips",id:"final-tips",level:3},{value:"Useful Links for Additional Reading",id:"useful-links-for-additional-reading",level:2}],i={toc:a},B="wrapper";function u(A){let{components:C,...t}=A;return(0,o.kt)(B,(0,e.Z)({},i,t,{components:C,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"booting-with-secure-boot-enabled"},"Booting with Secure Boot Enabled"),(0,o.kt)("p",null,"Since Solus 4.4 secure boot is now supported. When you first boot the ISO, and, if you have secure boot enabled in your UEFI firmware; you will have to perform the one-time-step of manually enrolling the Solus certificate. The following guide will walk you through this. If you already have Solus installed and wish to enable secure boot, skip ahead ",(0,o.kt)("a",{parentName:"p",href:"#enabling-secure-boot-on-an-existing-install"},"here"),"."),(0,o.kt)("em",null,"Note that this only applies to machines with UEFI firmware, if your machine uses the older BIOS firmware you can safely ignore this article. If you wish to avoid having to do this step then you may disable secure boot in your machine's UEFI firmware interface."),(0,o.kt)("h2",{id:"enrolling-the-solus-certificate"},"Enrolling the Solus Certificate"),(0,o.kt)("p",null,"After ",(0,o.kt)("a",{parentName:"p",href:"/docs/user/quick-start/installation/#boot-the-media"},"booting")," the ISO from USB/DVD and, if Secure Boot is enabled in your device's UEFI firmware. A warning will appear concerning a secure boot violation, press ",(0,o.kt)("inlineCode",{parentName:"p"},"Enter")," on your keyboard to continue."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Secure Boot violation",src:g(5762).Z,width:"807",height:"577"})),(0,o.kt)("p",null,"Now, it will provide 10 seconds in order to continue to MOK (Machine Owner Key) Management, press ",(0,o.kt)("inlineCode",{parentName:"p"},"Enter")," again within the timeframe to do so."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Continue to MOK Management",src:g(8979).Z,width:"811",height:"581"})),(0,o.kt)("p",null,"Use the down ",(0,o.kt)("inlineCode",{parentName:"p"},"\u2193")," arrow key on your keyboard to select ",(0,o.kt)("inlineCode",{parentName:"p"},"Enroll Key from Disk")," and press ",(0,o.kt)("inlineCode",{parentName:"p"},"Enter")," to continue."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Enroll Key from Disk",src:g(5529).Z,width:"809",height:"581"})),(0,o.kt)("p",null,"Here you'll need to find the ",(0,o.kt)("inlineCode",{parentName:"p"},"solus-enroll-me.cer")," certificate, it should normally be located in the ",(0,o.kt)("inlineCode",{parentName:"p"},"SOLUSESP")," directory. Use the arrow keys to select a directory, ",(0,o.kt)("inlineCode",{parentName:"p"},"Enter")," to enter it and ",(0,o.kt)("inlineCode",{parentName:"p"},"Esc")," to go back."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Enroll the Solus Certificate",src:g(1370).Z,width:"804",height:"577"})),(0,o.kt)("p",null,"Once you found the ",(0,o.kt)("inlineCode",{parentName:"p"},"solus-enroll-me.cer")," certificate, press ",(0,o.kt)("inlineCode",{parentName:"p"},"Enter")," to enroll it, and press the ",(0,o.kt)("inlineCode",{parentName:"p"},"\u2193")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"Enter")," key to continue. Finally, when confirming you wish to Enroll the key(s) press the ",(0,o.kt)("inlineCode",{parentName:"p"},"\u2193"),' key to select "Yes" and ',(0,o.kt)("inlineCode",{parentName:"p"},"Enter")," again."),(0,o.kt)("p",null,"Now, with the Solus certificate enrolled, press ",(0,o.kt)("inlineCode",{parentName:"p"},"Enter")," to reboot the machine, boot the ISO from USB/DVD again and it should continue booting to the installer."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Confirm Key Enrollment",src:g(1754).Z,width:"816",height:"586"})),(0,o.kt)("em",null,"Once Solus is installed you will not have to enroll the certificate again as it will stay enrolled."),(0,o.kt)("h2",{id:"enabling-secure-boot-on-an-existing-install"},"Enabling Secure Boot on an Existing Install"),(0,o.kt)("p",null,"If you already have Solus installed and wish to enable secure boot then there is one extra step you must perform BEFORE continuing with ",(0,o.kt)("a",{parentName:"p",href:"#enrolling-the-solus-certificate"},"Enrolling the Solus Certificate")," as normal."),(0,o.kt)("p",null,"Firstly, you must confirm you have ",(0,o.kt)("inlineCode",{parentName:"p"},"clr-boot-manager, version: 3.2.12, release: 29")," installed, run ",(0,o.kt)("inlineCode",{parentName:"p"},"eopkg info clr-boot-manager")," to confirm this. This version of ",(0,o.kt)("inlineCode",{parentName:"p"},"clr-boot-manager")," will have created a new UEFI boot entry on your machine called ",(0,o.kt)("inlineCode",{parentName:"p"},"Solus Linux Bootloader")," that can be booted from with Secure Boot enabled."),(0,o.kt)("admonition",{title:"Before continuing, it is important to note the screenshots provided here are for example only, your UEFI firmware interface will almost certainly look different.",type:"note"}),(0,o.kt)("p",null,"Reboot your machine and select the appropriate keyboard button during startup to choose a boot device. The correct key will vary from machine to machine but some common keys are ",(0,o.kt)("inlineCode",{parentName:"p"},"F2"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"F11"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"F12"),", or ",(0,o.kt)("inlineCode",{parentName:"p"},"Esc"),". From the boot selection interface, select the ",(0,o.kt)("inlineCode",{parentName:"p"},"Solus Linux Bootloader")," entry and boot from it. If you've manage to successfully boot then you can continue with enabling Secure Boot."),(0,o.kt)("em",null,"If there is no entry called `Solus Linux Bootloader`, reboot, log back in, open a terminal and run `sudo clr-boot-manager update`."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"UEFI Choose Boot Device",src:g(3506).Z,width:"645",height:"463"})),(0,o.kt)("p",null,"After successfully booting from the new ",(0,o.kt)("inlineCode",{parentName:"p"},"Solus Linux Bootloader")," UEFI entry, open a terminal, input ",(0,o.kt)("inlineCode",{parentName:"p"},"systemctl reboot --firmware-setup")," and press ",(0,o.kt)("inlineCode",{parentName:"p"},"Enter"),". This will reboot you into your machine's UEFI firmware interface. Once there, you will have to find and enable the secure boot setting. Where this is located varies from machine to machine. Some common places it can be located under are ",(0,o.kt)("inlineCode",{parentName:"p"},"Windows OS Configuration"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"Security")," or ",(0,o.kt)("inlineCode",{parentName:"p"},"Device Manager"),"."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"UEFI Secure Boot Configuration",src:g(1857).Z,width:"645",height:"460"})),(0,o.kt)("p",null,"Once you've found and enabled the Secure Boot setting then reboot once again from the ",(0,o.kt)("inlineCode",{parentName:"p"},"Solus Linux Bootloader")," UEFI entry. From there you can continue with the instructions: ",(0,o.kt)("a",{parentName:"p",href:"#enrolling-the-solus-certificate"},"Enrolling the Solus Certificate"),", bearing in mind you are booting from a disk rather than from a USB/DVD."),(0,o.kt)("em",null," Remember to save settings after enabling Secure Boot! (usually `F10`)"),(0,o.kt)("h3",{id:"final-tips"},"Final Tips"),(0,o.kt)("p",null,"Once you've successfully enabled and booted your Solus install with Secure Boot enabled. Go back into your machine's UEFI firmware interface and change the default boot device to ",(0,o.kt)("inlineCode",{parentName:"p"},"Solus Linux Bootloader"),"."),(0,o.kt)("p",null,"You can run ",(0,o.kt)("inlineCode",{parentName:"p"},'bootctl status | grep "Secure Boot"')," in a terminal to verify Secure Boot is enabled."),(0,o.kt)("p",null,"It is possible to delete the old Solus UEFI boot entry with ",(0,o.kt)("inlineCode",{parentName:"p"},"efibootmgr")," once secure boot is enabled successfully, However, caution is required and as such, instructions to do so are not provided here."),(0,o.kt)("h1",{id:"why-is-enrolling-the-solus-certificate-necessary"},"Why is Enrolling the Solus Certificate Necessary?"),(0,o.kt)("p",null,"In order to avoid the one time step of enrolling the Solus certificate, Solus would have to get it's own ",(0,o.kt)("inlineCode",{parentName:"p"},"shim")," EFI executable signed by Microsoft. Currently, the following actions must be completed to do this:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Obtain an EV Certificate (expensive!)"),(0,o.kt)("li",{parentName:"ul"},"Register for the Microsoft Windows Hardware Developer Program."),(0,o.kt)("li",{parentName:"ul"},"Implement any additional security requirements as required by the ",(0,o.kt)("a",{parentName:"li",href:"https://github.com/rhboot/shim-review/"},"shim-review")," process.")),(0,o.kt)("p",null,"Currently, we are using a third-party ",(0,o.kt)("inlineCode",{parentName:"p"},"shim")," that is already signed by Microsoft, the downside is the Solus (vendor) certificate is not already embedded and trusted in the ",(0,o.kt)("inlineCode",{parentName:"p"},"shim")," executable, and as such, requires the user to enroll the Solus certificate manually on first boot."),(0,o.kt)("p",null,"We appreciate that having the enroll the certificate may be confusing to users and, the process to do so may not be self-explanatory. Especially, as Secure Boot is generally enabled by default for the majority of machines."),(0,o.kt)("p",null,"However, it is also important to consider the following:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Obtaining an EV certificate is an expensive investment."),(0,o.kt)("li",{parentName:"ul"},"Enrolling the Solus certificate is only required once, and, only if secure boot is enabled.")),(0,o.kt)("p",null,"As such, we are not currently looking to our get our own ",(0,o.kt)("inlineCode",{parentName:"p"},"shim")," signed by Microsoft. However, thanks to our supporters on ",(0,o.kt)("a",{parentName:"p",href:"https://opencollective.com/getsolus"},"OpenCollective"),", it is indeed within our budget to obtain an EV certificate in the future which would unblock the additional requirements."),(0,o.kt)("h2",{id:"useful-links-for-additional-reading"},"Useful Links for Additional Reading"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://learn.microsoft.com-us/windows-hardware/drivers/dashboard/file-signing-reqs"},"https://learn.microsoft.com-us/windows-hardware/drivers/dashboard/file-signing-reqs")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/rhboot/shim-review/"},"https://github.com/rhboot/shim-review/")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/rhboot/shim/"},"https://github.com/rhboot/shim/"))))}u.isMDXComponent=!0},5762:(A,C,g)=>{g.d(C,{Z:()=>e});const e="data:image/png;base64,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6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKPxeDvznfF6OAADwab+GZZ0FAPBY02XJO4wAAAXVBQBQUF0AAAXVBQBQUF0AAAXVBQBQUF0AAAXVBQAAAAAAANzu/9RxiIRrIM4UAAAAAElFTkSuQmCC"},8979:(A,C,g)=>{g.d(C,{Z:()=>e});const e="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAysAAAJFCAIAAABSvP+VAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAQEklEQVR4Xu3d227iyAJAUfpoPpZP4nPPgyPH7VsgwMbQa2k0gsIUhXPxlp1OTicAAAAAAAAAAADe2Z/5wJfLfAAAgLucx1v/m4wCAFBQYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAAtf/mA3+7+M2sAAB3OH//HtZvPxTYYPWZAADs2DmT5SokAEBNgQEA1BQYAEBNgQEA1BQYAEBNgQEA1BQYAEBNgQEA1BQYAEBNgQEA1BQYAEDtqr8LCbzW7C+LDX+qdRx80l9uHeYfJx/vrv6Zs5vG9xf87Pf18S4Xuw7egHNgcHRj+gz/TUf2XS4r9XO/8XXH9fw4vvXQqh83YMczPuLAMygw4C5bwbQ1DsDJVUj4YFkDbb3Q1vhNrjzhB/BeFBgc3fn8dT1xqJBli6z+4NRycDryqKzZ+ZGjnYeuN1vn7BLbML66zc5L7+yH6fzLCXd26XRwOj57iZ31D3d31jOOb61nuvGPOwF4OVch4Q2Mh9jZIXm0PAZfc/Tdmu1KW0/fWedNVnPkvPh5uPtNU2Y5+Xh39aHl4HSd07dw/fqH8a3tt9Yz3p3dBo5JgcF72Dls33qsXc7wO1uv+8DD/6PmWfWo/fAoR1sP8FSuQsI7Of99RfIXhhmG/99vZxk7D11v+U4fsuzTxn64dfJbtz9tP2V1Paft7YF3p8CAg1rNzYeE3aqhdYb5r+meW7cf3Lr+W7cH3oWrkHB0Q4Uc2cGXB3BACgy4y1Pza+cM0/HDdN+t63/29kDMVUg4uvFi3HTktNElo/HRy+JHqa704+vOFrD1itPNhtv769l6X1vrWY7/znSe8fbOUre231rPcnxn8tPt2w9mqwIO68984MvXF70vY+C9HOq71qEWA/QW3wS+b7kKCXyOxTe7F1g9AQYw4yok8N5mufPa/Dotrh6+fD3AMSkw4L0dMHEOuCTgaFyFBACoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgNp/8wH4OJfLfOR8no98kvH9PvttXi5Pf4mbTD/QwcKGlxtfaHp39ik3G5zeDdZ5WEf7/IGYc2B8vvG7/Pk8PxZ+pOaodrR9OAZN/CEeXmj6ctOViK0t2QcIDss5MODTHL91NBngHBh8uMvF+YbnsnuBX3AOjH/XeB5iPIKO5yRmx9Rfj2+Zbj+bZLme2fmSm06frD539Lv5p5OsPne0M8lp+/2OD41m61xuv+WmeaZ3f9wJ97hy8p31TN/XbHD5vsaHZoPT8dlL7Oy34e7OesbxrfVMN75yV8BHcg6Mf9d4PDj//fM641HhzvEdqxtvrefXZoe3X6xz1fj02e1b5996v1vzbG2/emO8fdM8M1vjU8MMw/+vd+v2g3E9yzc1DA53Vx9aDk73z2zPbD1lZhjf2n5rPePd2W341zgHxj9kdqyaWR3csbX91vhLHGoxjzV9a+fFWZnrLZ+yFRxbljP8aOiSK926nmc72nrgTSkw/iHXH/NOa4eZ4TA/HR8m3BrfsZz8SZZH+uyl7/SqdQ4fzTHpnmH8hPnx8+S0sZ5b13br9qftp6yu57S9PbBFgcG61aPjdHB6EN0aXzUcq4YNnnrcWj3S7yzsUN5lnb1bP39u3X5w6/6/dXvAz4EB1G7tIeDzKDD4wXAaaXpjZmv8CHaO9I9a9qPm2fLs+dl36/5/9vbwMRQYn2/8/j77Rr81PlbLeGyYXmq8fnzLdPudQhot59+3tc1ynq31X2O68q159vfD6Mf1zPbScpGrD/1inof48XXvNJ3/mpm3tp+OT22tf8ut2w+WK4F/zZ/5wJevr0hfHnA0z/6qfPb8U+VrscMHAp5k8cX1fcs5MHgniy/mB3v2/BzHeMoKeAn/FhKObnaYfHgePXv+LePrXnb/6ShPcv77t6j4EEBMgcHRPfvQ+Oz5t7zqdRn5EMALuQoJAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFD7bz7wK5fLfOR8no/c5HK5d4ZXme2Kg7+LcbUHXycAfJjHnAMbj9/n89ftZZNdb+e5l8veo/e7c/7hucNOuH8/BIQXALzEYwoMAIDrPeYqZObZ52yePT8AwCkosK2fi1odnw6OV/RmI9PBcZuth6aP/lhXW5Oszv8oq/vhUeP76589ZbA6DwDwWH/mA1++jsNXtstp48g9e/osCJbjq3enlg9NR1bnXz5lx3LjW6ea7YfT7vZbb/xR49fcXh0cXPN+AYAtiyPp960HnwMbD+SXt/3HjHeavuthv1/v1j126/ajxSfEuh83AAB+58EFxk2GU1DTULsn4O63vx4A4FEU2IvNkmt67vAl9bOzHgDgUfw2CgCA2qELbHZF7L1c87NWV77Brc22xn/t4RMCAKse828hl4ft8Smzh34cH4yPbv1c1Gye4e7y9ujHt3C6cf4tq5Ps2FrnY8eX659tvzV+zVsAAFYtyuH71mMK7Mg+4C0AAO9oESHftw59FfLXLq6mAQAH9pkFNl5QW7QnAMDrfexvo1BdAMBhfeY5MACAI1NgAAA1BQYAUFNgAAA1BQYAUFNgAAA1BQYAUFNgAAA1BQYAULvqd+L7G4sAAA/0Zz7wRXMBADzW999MdBUSAKCmwAAAagoMAKCmwAAAagoMAKCmwAAAagoMAKCmwAAAAAAAAAAAAAAAAAAAAAAAAOB1/g8woPo/FVU5nQAAAABJRU5ErkJggg=="},5529:(A,C,g)=>{g.d(C,{Z:()=>e});const e="data:image/png;base64,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z79/vcB7cs8RDuXqmftyOZ3/+yGnrfH52WH8FdY1s17pnu3ZGh8Mc06ePw5b47N5qrX14JfrvTEb8Clc94JDOS8u4ezXn8sfW+P6VeuRLfORufGSG08Ndh7kL9d429UXXh0EPoj2gqP50HPz1ZqZgml9pepnTVv1WObetmd/p1UDn8s9R+DnLe+1DabB+alvz513c3t/rw4Cn0V7wTE5PQO8J+0FB3SY8BpuwB3env116Qs+nfaCI5jPxHtO3qf/Lr80n9fneZY3AbdetTW+trXAcr3Lttjanq15bri6kVcHT9vrvddynsnttW+t94H9Bd7Wr8XjP2/uZ77RAN/L+5Fn+PcDvdX7bnwHuu4FANDRXgAAHe0FANDRXgAAHe0FANDRXgAAHe0FANDRXgAAHe0FANDRXgAAHe0FANDRXgAAnd/jAPB+pt/MCsABaC94a+fzOALAR3PPEQCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCg83sc+MflMo4AAPCkX4vHagsA4Hudh6/dcwQA6GgvAICO9gIA6GgvAICO9gIA6GgvAICO9gIA6GgvAAAAAAAAAAAAAAAAAAAAgOP7P/7OB7w235xvAAAAAElFTkSuQmCC"},1370:(A,C,g)=>{g.d(C,{Z:()=>e});const e="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAyQAAAJBCAIAAAA4JuYOAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAX2ElEQVR4Xu3d4ZaiOrcFUPqO87A+ko97f1BfOk1IBGQpWnOOHudgjDsBFVcBVU4TAAAAAAAAwD/+TNM0TfdFKwAAz7nN//u/f1sBADiTsAUAECRsAQAECVsAAEHCFgBAkLAFABAkbAEABAlbAABB/9U37v64KQDAE24/f8r0r3/C1qztBADAWO+gldOIAABBwhYAQJCwBQAQJGwBAAQJWwAAQcIWAECQsAUAECRsAQAECVsAAEHCFgBAkLAFABC08t2IAFssvgVsy9eqlods6Tx2v28qshhxvrnlgQBncWQLOKKklvlfaRk7K+VsGWt21ogAhwlbwG/hsBbwFsIWAECQa7aAI2636X7/e+FUfbho77Vcvf6r7XXjriNVbedB/cUcNg4BsMqRLeCgkk5WA9D8r7T09Pr32svNxfIWdedefYDTCVvAcS9LKntz1ar0JAFWOY0IPOv27ynFaX+s2dv/gHaS00vGBRC2gPPtPQq1t/9Z3jUu8Ks4jQgcMR8l+iyvOeMJsCBsAUF7M1mv/972vc6qA9D6M03TNP3sY+Z9jePqwBaLdNK7YKt3jdTD/r32Wbl3vMtadKv3cr36beoaDwEwa3LUz5KwBdBlrwhs1+wxfpacRgRY1+w3AY7w24gAf/XOLQIcJmwB/CVdAadzGhEAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAj6b9nAr3e/L1tut3/a55svduLo9/u+IhuH3tjtxXqz6rW3tve8gt5se+0DBx6yy97XYc+izlnTnuuUIvXNMsRs0Vjf3DKHvRPeuN32loUoR7bY6r37rLNGX3xObLFx6I3dcu73lbXrzarX3tre8wp6s+21D+x9yOr279nec6yts3faY3P9epSSouZ/dcsxux7Yrm/PrrKQJmyxouyn7LCAvZ6MX/B9nEZkabGLtMc85vWfN68ci9a3bv/tB5OAHmGL3dqLIRa744efOr3+vfaeXv/V9tVTIfXNoh732CfNlvqrfQarPO7fPimna4dYXa+B1f5lRRb1e+3lruLhuD2DOou7HupNsp1/Xbn3JM7G6zWoUzfW7bvqH7Y6mZ7V7Vw3rk5+sN3accfbYfCkr/av22E7pxE5ov7YKDu++V9p6en177X39Pr32svNxXKvf33XLotHDeqfaO8kD1jMf+969fqX5Y3tvTp7DeosnsEt2s69+Zebi+XBfFb16tTqOnvrz+aeq8UHNvbvbefVSQ7Wd7X/4t76rtX+ve3Ta4ddHNlit3o397xzq7UO1+99Emxx7FEMvGyTPvO8X8pZq3Cgzn3DLwxefDtfdmJ8KGGLc2z/ae92m+7//t5WvV/bXme2t3/PWXVm7YfNifXb4m+0d7329k+72nzSXrC+5Q1++FW6d5Kn9D93vwQLwhbn2LVjXezF6v3yrjrT/v49Z9WZOh82J9a/lL3rtbd/2tXmk3b99Z1jzTzPLRHnxP4n7pdgwTVb8Enmj4ctHyrwLqtRBn4zYYuTzT8RDjzsMNvYrej1P6t9l8GHzfP1r/lD9t712ts/7V3zOWvcvXX29r+a0+e/seDGbrDwZ5qmafp57cyvoWvuynmlem9SXg+lsU4Sq6ni4Uuo17/XPj2a0sb22WJF6pZx+9SUqh3YPrvqT1XNunh91+yZ9lUb5/9kncV2G8ywV2fqr9dqe6/O3udlGtZfrFdRHtIb9+Ggs0Wd1ZuLu2bj+osJP6wzGLent53rUm2dwXZb9F+dZ92+t/+iHVrNK/ZnSdiCS/DuA/h0zZ78Z8lpRHi/5v0JwPfw24jwHs5NAPwSwha8h3QF8Es4jQgAECRsAQAECVsAAEGu2Xq/xYXSU/NHX1zccwrbMyS9Ye//fvHR6cMt6p+rN9tee2t7zw/10c/viT5lnhzjyNZ1PXzj3f0t4z3evj3T9XvS4z7csButzrNtOTzcxvqHrdbvzbbX3tre8+JWt0/bcu76tvWvaTDP1e3GxxG2LqHsX87d0QAAb+c04vstAtb2vLW9J1ukt2e6fs+7xt0rPc9Pr//pbJ9jbLfvIGx9gHIMuX7XjRtn43dpXWFeLv17der2RWMp0t5VjOcz7ay/OueHQ0yPNl1bsHfXauNq/3Jvr3G2Wr9u7xn0H49bZtsuzMuzLfUfKvUHN1dbyvJiO7QPGWg7P6y/sDrhttq4yDPaIQbPS6tMeFGnXpHV5XbcVasbpJ1q21KWF/XHDyntq3Muy7PV+gu99e21l7uKxbjlIeM643n2Bm3rlLvqe8erzCs5jfgZ2rdl+y4q7675X2nZbu4/qNNrnG8u7hrU6Vnt3Kt/2GqduaU2GPfAPNv6ve3Ta+8Z9x+PW5bLf9v5D+rXD39SW6QMt1iuLeYz0D58S/3tnnz4FovtP3heVpU+of5j7fapt3m9XHtyfR/Wr/XWt9e+fT7jOuN5Lm6WlrZOXa0ekYtwZOsDHHvPbH9Ubx9xru3z+Q5nre/eOnv7H/b2Hfobh/4C199615zh9lm9Zr/KpxC2vsf8A039Dt+yX5gfVX4YKlb3FKuNPQfms6v+G504z7bU3u22t/8x7TwPm19vn+tS8z/xeTnLpbbPu/T2q/xawtZXqfdx8wfw4b1e+8B5rzG3b9yD7JrPgfpvce48VzfIru027e9/wOkFOYXnBT6Ca7aA15nj6fMh9V0+ff5ptg+sEra+x3xI43SHyx5+4O9UNtfe7ba3/5OeH+7YwZjnxx3bXv/Y/NO2zz/t2PZJzz9d/yyfMk/2ErYuoby76rfZ+C3XPqSc2Cpv12N7vV6dun3LSbRenZ7n62+0Op9S4WGp3jzHFdp72/m327mdZ2vcfzzuFr36bZ1xwXYtxvOc1Vu4Xt5re/2e9t4t89/bPlA2dbv9t8y/N2Jd55kt3I6+Zfu02783em99x/Nv6z+0qP9w5ov+D632782zN3qrng8X9Geapmn6eXLaZxo+hVfvATYaFOm3Q7p+8bKBaDUb/2fJkS2+QfP6psvPvvB9vK8vzpEtPtViz+J1u1296Ww3mPJvinT96SVD8FCTo36WhC0AgBM0OcppRACAPGELACBI2AIACPJ1Pd+j/VWU11x+V8ZND3cPfAvNwMvW611evD1/m/Tr53D9F19G3e6XpsC4va3Ra38j77vfyZGt71HewLfbz/Lqbu50r9lxvGZdaq9Zrxe4r/1OeNvy0GqdLxBar/Tr51j9eU1fuYto90sJvcq99in2vBer9dsWfglhC+A3iqafntePCFfgNCJsUg4JfJyz5nxWnat5zXp97uvndBfZCOlppOvzWYStX2Fx7HreC5TG2235SbC3/6zusGip28tj2/6r6iJb5tkzmH9dZ7XIoH/d3rPav665utxun9U6Y+Mii/UaaOvUjbOHdR5u54V60HYTFePt1j5wdRUW26etU+4qtqzCbDHuap3VPluGeH6eq/1D26FdwUX9Xnu5q9g+bqtXfDxuuffh0IMiZflhEb6J04hf6L72Raq328+/0tKa2/f2Lxb9e3XK8sP6s9Jtsdyrv13pPy5ST7u+OXhIbW//0mfRf2+dWZl23VIa6+WxttuB+ezqXNevn4LeuGV5+xDT2nr16vTGfaieXn1zb52e7fNsF8py278sb68/tujWq99rPzzuqrlC2zIet57hWNunlF0s80s4svW1tr+Z9+6z9vYf2z7PsxyY/4mT3Ftqb/93+ZR5vsVFNs6uuLBw4CELZfRdnh8XrkDY+kLzTm3+Ea3o7ebmzu1+cG//no3dXmZ1/g8nudiYc8tG5emoWw7bPm7agfU6cfInltrl2LjPvH6OuWb9h68Q+FbC1m+xdze3t3/PWXVy5o+NeZ6rHyElVdTrsmu96s5tqV0OPzBh13o93M67DAaKOjDu86+fAz69PnwZ12x9p7M+0gDOZb/ELyRs/TrzD9nb7e3fc7U6uwzC68P5POxwzFllD9c5/MBzvWsau8Z95vXzpKvV39X5i+3dbny6P9M0TdPPcz4/944Pf6jy1q337Kt7+UWHe3UN04n9e+11464X22IF65ZF+6ot86/bF8Ot9p+Nx536/cfjzjdrvToDW6odrrN3PqvrO9CrP24fPF/tuIP1GtSZbZz89jqL9mnzELNendX2uvJq/17nqdO/p12pqb9Nbkdf/71H7WpfnU9ZLsbrO1utPyt3banDx6lfOdM0TdPPkrAFXN0v3DX9wlW+Pk8KDzUvkp8lpxGBK7r/4vMszf6at/nNr0NO5LcRgSu6/funJb4+eRw4V8UL/LbXISHCFnBRv+qD7Vet7Gfx1PA8pxEBAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACDov2UDcG33+7IFbrdlC3AdwhZ8JB+uzIRvuD6nEQEAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgyHcjAu+0+tV+t9uO9tWviZy7rd4F8GKObAHvVPLQ7fZPNhq09+4CuCZhC7iQXnjqta9yWAu4FGELuJZeSOq1A1ycsAVcRXs9VjG4a8FhLeBqXCAPXEIvTvXaAT6FI1vAJfSORe26Ct5hLeCChC3gKgYhaXAXwMUJW8CXcFgLuCZhC7gWF2kBX0bYAi7kcNJyWAu4LL+NCLxTSVeLmFW31xGq7iZgAR9B2ALeqReVzmoHeDunEQEAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIH/6AXid8leynv9LDSeWmvzJLiDJkS3gdU5MMyeWAogStoDfzmEtIErYAgAIcs0W8GaLb0UsR5jq9sVhp9Xvq16tU45a9a7xclgLSHNkC3inknXmf6Wl11iWe5lp8ZCyvFoK4AUc2QI+yWrS2q4X0QByhC3gog4cgjrwEIA0YQu4osVJwI12HaNyWAt4DddsAQAECVvAF7rfHxwPc1gLeBlhC3idEoDKQjlRWOLR3FK3r/524aJUr047IsCLuWYLeJ3VI0mrjdO/7b3l2mr7auPUbwc4nSNbAABBwhYAQJCwBQAQ5Jot+BTlIqP5Sm/XHDFbvB78IgBcjiNbAABBwhYAQJDTiMBf9//9NarbZ/5phN78e+0AL+DIFvDXp2eR3vx77QAvIGwBAAQJWwAAQa7Zgq9VLlSalVNpvfZVc+e5T71cbhbjOlOnf6m5uKyq117uKh6Ou0s9XGJ9e+2D9QU+nSNb8J3Kh/estPTa99pbp9e/LG9s79XJOTZur3+vvSwv2oEv4MgW/Arz53dOXb9NCc+P/nyF1nie7b3P2Dv/vf2BKxO24Dvdbrf7/V4nhnM/vwf1BwOdm2CeNJjnvHbzf+v2s+Z/Vh3gIwhb8LUWx2nm9FDd/6wD9R92uLiz5n9WHeAjuGYL4ARz3Fy2Aghb8K3Sn/1P1n/y4W+3d/69/r124Jv8maZp+t+3xM9veYe34ZJ+3pnzZ/OW81CLT/HykF779O9dbf9yDdN816DOql7/tmYZaNFz1qszdeY/aG/VE4iu76J9+wwX6hnODdWdwEvN7+PqHfyzJGzBp1iJJtC8HoQteJsmR/0sOY0IABAkbAEABAlbAABB/s4WfIrFtTguzaHm9QDX5cgWAECQsAUAECRsAQAECVsAAEHCFgBAkLAFABAkbAEABAlbAABB/qgpfKT5604BuD5hCz5M9X3yAHwApxEBAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACC/ls2TNP9vmwBAOCYP9M0TZN4BQBwrtv8P6cRAQCChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAAAAAAAAAAAADgK/w/O572RyDxlzcAAAAASUVORK5CYII="},1754:(A,C,g)=>{g.d(C,{Z:()=>e});const e="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAzAAAAJKCAIAAAB8pDdfAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAM3ElEQVR4Xu3d0VLiygJAUeaWH5tP4nPvA8eYaQiiMu4krFXzgE1sMloFu7ojnE4AAAAAAAAAAAAAAEDizzjw4TwOAADwI9M4cDqdTqf/jQMAAPwuQQYAEBNkAAAxQQYAEBNkAAAxQQYAEBNkAAAxQQYAEHsbB66cvUEsAMAPTLffDvbD50F28elEAAAMHlzYsmUJABATZAAAMUEGABATZAAAMUEGABATZAAAMUEGABATZAAAMUEGABATZAAAMUEGABB79LMsgQO4+ZFqT/+k2vlRhpnXxu84n/86+Bsz3PSseQaXae/MeeeA4Vdz8xjgwKyQwQuZX+an6R++5K/NvDa+5jofvzrDmmfNs3QntmaXe6//X/P3zr+X62OAYxNk8Lru1wMAv0aQwUvTZKfT6Xz+6YrUI8tjFzcXwJYLlo9PBRyJa8jgRS0vz5ojYLi4am18vmv23IBYTn4zUJ54PsP8N+e5ecz9h7g5D8AaK2Twim7mwiXRrhPkeny+dxh/lnna4fbSU85nrbS+Os/g2/MM5wO8Ditk8IqmxaLX47YTCk88kydOteYXHgLYO0EGL+p4lfCNxDy9r/8NIz906d3lPMf7aQPPJciAg/hG9MzltPzeb8xzbTnJ9UOseeQY4JBcQwYv7eerQZzeQ+qRH6arxICbBBm8rkcCYguG7b9Pfen4Oy31pXmWfv8bgb0TZPBC5hf7B1/4l8cvzREzzzPs0A037o+vWabSnWw6fXY+1746z/X4tZtnO8zzyLkBr+nPOPDhv2cdzyAAS54VgcddPWPcfu6wQgbwBVfPrQBP4K8sAT4xbFOqMeDpBBnAJxQY8K/ZsgQAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAIDY2zgA8OvO53FkC6ZpHAH4RwQZsBXbCaBtBiJwYLYsAQBiggwAICbIAABiggwAICbIAABiggwAICbIAABiggwAICbIAABiggwAICbIAABiggzYjfP5r0+ZHL4E2C9BBuyMCAOOR5AB+6PJgIMRZAAAsbdxAGCHhjWzafrrS4CNs0IG7Mwltoar+y/jl3/DvQDbJ8iA/bEABhyMIAMAiAkyYJcskgFHIsgAAGKCDAAg5m0vgN2bpvFjlGxoAvsiyIDdGDJr+aUCA3bNliUAQEyQAQDEBBkAQMw1ZEBovvLrckH+di4EG87HJzEB/5YVMgCAmCADAIgJMmA3zufz+f3dxpa3AfZOkAEAxAQZAEBMkAEAxLztBXAEw/Vk0/tHKa2NA2yKFTJgNy45NV/OP1TX9G4eWRsH2BpBBuzJHGHzjcfNWQawNbYsgYO4Xv2apml4dwxBBmyTIAMO4mZsLQcvcXbzMICWLUsAgJggA45m3qYc9isBNsuWJbAnc2AtNx/XrhVbGwfYGkEG7MlaUX11HGBTbFkCAMQEGQBATJABAMRcQwaEhj+B3NpfRG7tfIDDskIGABATZAAAMUEGABATZAAAMUEGABATZAAAMUEGABATZAAAMW8MC2zF2fuwAq9KkAG9aRpHAF6KLUsAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgNjbOLDifB5HAAB4ij/jwAcJBgDwXNM4cDqdbFkCAOQEGQBATJABAMQEGQBATJABAMQEGQBATJABAMQEGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDr+D+VT1dp1SpSzAAAAABJRU5ErkJggg=="},3506:(A,C,g)=>{g.d(C,{Z:()=>e});const e=g.p+"assets/images/uefi-choosing-boot-device-62df6cbf7123313a863cc3e6199c5eae.png"},1857:(A,C,g)=>{g.d(C,{Z:()=>e});const e="data:image/png;base64,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Zc/4568jAHMX5nFXd46uAqCMhG7/E316/avtGv/kdQRg7trfr07T8fZrrCtUF21M3OH1AviZrs3jiRyTG/Ny1G3Uvteozqh9r7Pq7HXWfp/WedoBgInzf786T8rlxVb3wivvcW97Uu1oYlTncPta/Dpx2Xk0wmQ+zjbM2v1ubE82Hp+qW35e5aqyQ9u+POsPwESaPM/PY36UMr8BOCBNpGH3q/kGhDHAWd79+9V8OjelAa4gj9lHAANcwf1qAIgnjwEgnjwGgHjyGADiyWMAiCePASCePAaAePIYAOLJYwCIJ48BIJ48BoB48hgA4sljAIgnjwEgnjwGgHjyGADiyWMAiCePASCePAaAePIYAOLJYwCIJ48BIJ48BoB48hgA4sljAIgnjwEgnjwGgHjyGADiyWMAiCePASCePAaAePIYAOLJYwCIJ48BIJ48BoB48hgA4sljAIgnjwEgnjwGgHjyGADiyWMAiCePASCePAaAePIYAOLJYwCIJ48BIJ48BoB48hgA4sljAIgnjwEgnjwGgHjyGADiyWMAiCePASCePAaAePIYAOLJYwCIJ48BIJ48BoB48hgA4sljAIgnjwEgnjwGgHjyGADiyWMAiCePASCePAaAePIYAOLJYwCIJ48BIJ48BoB48hgA4sljAIgnjwEgnjwGgHjyGADiyWMAiCePASCePAaAePIYAOLJYwCIJ48BIJ48BoB48hgA4sljAIgnjwEgnjwGgHjyGADiyWMAiCePASCePAaAePIYAOLJYwCIJ48BIJ48BoB48hgA4sljAIgnjwEgnjwGgHjyGADiyWMAiCePASCePAaAePIYAOLJYwCIJ48BIJ48BoB48hgA4sljAIgnjwEgnjwGgHjyGADiyWMAiCePASCePAaAePIYAOLJYwCIJ48BIJ48BoB48hgA4sljAIgnjwEgnjwGgHjyGADiyWMAiCePASCePAaAePIYAOLJYwCIJ48BIJ48BoB48hgA4sljAIgnjwEgnjwGgHjyGADiyWMAiCePASCePAaAePIYAOLJYwCIJ48BIJ48BoB48hgA4sljAIgnjwEgnjwGgHjyGADiyWMAiCePASCePAaAePIYAOLJYwCIJ48BIJ48BoB48hgA4sljAIgnjwEgnjwGgHjyGADiyWMAiCePASCePAaAePIYAOLJYwCIJ48BIJ48BoB48hgA4sljAIgnjwEgnjwGgHjyGADiyWMAiCePASCePAaAePIYAOLJYwCIJ48BIJ48BoB48hgA4sljAIgnjwEgnjwGgHjyGADiyWMAiCePASCePAaAePIYAOLJYwCIJ48BIJ48BoB48hgA4sljAIgnjwEgnjwGgHjyGADiyWMAiCePASCePAaAePIYAOLJYwCIJ48BIJ48BoB48hgA4sljAIgnjwEgnjwGgHjyGADiyWMAiPdVLK/FMgDwHo/F9TEA3IE8BoB48hgA4sljAIgnjwEgnjwGgHjyGADiyWMAiPe/umFZfv/+p24CAE719fWrfNjJ46TqBwCconvd6341AMSTxwAQTx4DQDx5DADx5DEAxJPHABBPHgNAPHkMAPGG3wdSeNQNAMBua91QcH0MAPHkMQDE23K/Gs63rp37No/HY2lWpcaRts68/2Hruu6qvLd/ZddBKJUbbt+qkou0FV58XlHa82T5+9mlDtVTmxyH1uGXDBLXx8TIs9Xj8ehOi7m9O5NmbZ15/2P21tzbv1U+r2VzwfLo5YcH5L1XDhcM154npe7zKhO626G097yFljzmFtopkuzY/N4NHpLyyHQPbBnGx44/7CWPuQvhwTvl880PLtyEz4+5hfWCTyWrC5pcf1d72VheM41M+nfrH7C3Ttm/Gkz5HOd13vC83un08+3xeKzrmsuWxfce/088npxCHhOsnX3SvFY2Lk23pDvrjea4NFfube9Wmxj1H9XPHTaa1Emr0kJZudt5r6uf19vko7RR9XS6m6cOj+LUPXz8P+54ciJ5TLAqS3JLkts3Tkkbu2V7+99ZyoO0UK97l8Bdb9Seb7vMn2AuLkQ5QB5zC69PXimNqnmwnXZzt7IlL7f972nXOHd13mt+PG9r+yC398yqU/HA8T+wCd+APOYzdGeop3Nlt0MVwHnerFbd2fZxpuN2OBi2mBzP76d7DCfP99jxnxTkG5PHfIYtM1R1XQKnG51aZe7CMf7eifs6cY5LOV0uzI26jdpH9vbvShW6x+GU+gfk/UYN4GrlFe3k+B+W68+Lf9fDS9dXsfzvq/779z/Lsnx9/frT3j9R4BXlLFNNRpNVrdy5nEC7twdzqb3tSbWjp9r+8/qVSefRqtFxK0fSPT5Ve7mqbExefF5RtjyjrH1qW57U6Dg8Pc7z8WzZNZ/j3xe3m7PyGADeY5az7lcDQDx5DADx5DEAxJPHABBPHgNAPHkMAPFO+H6u7p/QTdorW/4g7wpn7Xf+F4rztVs8rbD6Oip4pvqj3uTEN87p9b2vf6BXr4/zWdg9HbdLm79Y5Fzrum4Zz/w9M1l7Sv0tFYD8Pno8HvP31DGH63fngbaFn+ClPK5OGucQ8BF2ReYBV9fnW3rpfnU651IMv37+3S3OX39Gc1fXByaufgNurL+xGz/BS3l8tSqh2/ivfhTo9j8mlyqLlI3tTyHdTUa6nXfVL59s2xkYWaf/SPbr80lZvztHtbtoW/Ly9v3y6d6Xx9XJneRTLSVQzqGlORfXda3eRZW9/ZPuqJYiEbOyfrWvLG21Zb+v15/3BLom77v0ML2/5u2V8g1YdSjfs1XNvPa/3s9mAL639+Xx03PraYcrlO+3v9fsdvX4r64PP0EbgaXRuyy3jzpkbf0cyWm5XAWl9+Xxe0zeaQBL7wq1nDdej8zXK/AzXZLH5cmdfyrsJuXpJ+7pBYHvrZw0UjZPppED81g5B86L88NdksdV+qbzz1kI3MexaNy+ybH6/GQv/f3xRD4RTz8jU8H0k2Z+2Modfoif9nzhFfnNsvGNs7FbVtZf/r4m2VtnV38+2lex/O+r/vv3P8uyfH39+tPeD7yzlOdr9bA6EcvorbYqG7NRVCeT/eaHSbcxt+fG8mF3k3b8VfuB+m0HoFW9uZL5PDNq7xrV704I3V1U9b2vv6l/X9Zuzsbn8SdqQ/FcV9cHIMIsZ6+6X/39rOva/RH4LFfXB+DOXB/vMLm5dIqr6wMQapazl/x+9Xd1dUZeXR+A29qSx26iAsC1fH4MAPHkMQDEk8cAEE8eA0A8eQwA8eQxAMSTxwAQTx4DQLzh94Gkb/MCAN6gk8fFN2oCAO/gfjUAxJPHABBPHgNAPHkMAPHkMQDEk8cAEE8eA0A8eQwAAAAAwB38PyZrkDdbrqQ1AAAAAElFTkSuQmCC"}}]); \ No newline at end of file +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[2595],{3905:(A,C,g)=>{g.d(C,{Zo:()=>i,kt:()=>s});var e=g(7294);function o(A,C,g){return C in A?Object.defineProperty(A,C,{value:g,enumerable:!0,configurable:!0,writable:!0}):A[C]=g,A}function t(A,C){var g=Object.keys(A);if(Object.getOwnPropertySymbols){var e=Object.getOwnPropertySymbols(A);C&&(e=e.filter((function(C){return Object.getOwnPropertyDescriptor(A,C).enumerable}))),g.push.apply(g,e)}return g}function I(A){for(var C=1;C=0||(o[g]=A[g]);return o}(A,C);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(A);for(e=0;e=0||Object.prototype.propertyIsEnumerable.call(A,g)&&(o[g]=A[g])}return o}var r=e.createContext({}),a=function(A){var C=e.useContext(r),g=C;return A&&(g="function"==typeof A?A(C):I(I({},C),A)),g},i=function(A){var C=a(A.components);return e.createElement(r.Provider,{value:C},A.children)},B="mdxType",u={inlineCode:"code",wrapper:function(A){var C=A.children;return e.createElement(e.Fragment,{},C)}},w=e.forwardRef((function(A,C){var g=A.components,o=A.mdxType,t=A.originalType,r=A.parentName,i=n(A,["components","mdxType","originalType","parentName"]),B=a(g),w=o,s=B["".concat(r,".").concat(w)]||B[w]||u[w]||t;return g?e.createElement(s,I(I({ref:C},i),{},{components:g})):e.createElement(s,I({ref:C},i))}));function s(A,C){var g=arguments,o=C&&C.mdxType;if("string"==typeof A||o){var t=g.length,I=new Array(t);I[0]=w;var n={};for(var r in C)hasOwnProperty.call(C,r)&&(n[r]=C[r]);n.originalType=A,n[B]="string"==typeof A?A:o,I[1]=n;for(var a=2;a{g.r(C),g.d(C,{assets:()=>r,contentTitle:()=>I,default:()=>u,frontMatter:()=>t,metadata:()=>n,toc:()=>a});var e=g(7462),o=(g(7294),g(3905));const t={title:"Booting with Secure Boot Enabled",summary:"Instructions for enrolling the Solus Certificate when Secure Boot is enabled"},I="Booting with Secure Boot Enabled",n={unversionedId:"user/quick-start/installation/secure-boot",id:"user/quick-start/installation/secure-boot",title:"Booting with Secure Boot Enabled",description:"Since Solus 4.4 secure boot is now supported. When you first boot the ISO, and, if you have secure boot enabled in your UEFI firmware; you will have to perform the one-time-step of manually enrolling the Solus certificate. The following guide will walk you through this. If you already have Solus installed and wish to enable secure boot, skip ahead here.",source:"@site/docs/user/quick-start/installation/secure-boot.md",sourceDirName:"user/quick-start/installation",slug:"/user/quick-start/installation/secure-boot",permalink:"/docs/user/quick-start/installation/secure-boot",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/quick-start/installation/secure-boot.md",tags:[],version:"current",lastUpdatedAt:1695222528,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Booting with Secure Boot Enabled",summary:"Instructions for enrolling the Solus Certificate when Secure Boot is enabled"},sidebar:"userSidebar",previous:{title:"Disk Partitioning",permalink:"/docs/user/quick-start/installation/disks"},next:{title:"Software Center",permalink:"/docs/user/quick-start/package-management/"}},r={},a=[{value:"Enrolling the Solus Certificate",id:"enrolling-the-solus-certificate",level:2},{value:"Enabling Secure Boot on an Existing Install",id:"enabling-secure-boot-on-an-existing-install",level:2},{value:"Final Tips",id:"final-tips",level:3},{value:"Useful Links for Additional Reading",id:"useful-links-for-additional-reading",level:2}],i={toc:a},B="wrapper";function u(A){let{components:C,...t}=A;return(0,o.kt)(B,(0,e.Z)({},i,t,{components:C,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"booting-with-secure-boot-enabled"},"Booting with Secure Boot Enabled"),(0,o.kt)("p",null,"Since Solus 4.4 secure boot is now supported. When you first boot the ISO, and, if you have secure boot enabled in your UEFI firmware; you will have to perform the one-time-step of manually enrolling the Solus certificate. The following guide will walk you through this. If you already have Solus installed and wish to enable secure boot, skip ahead ",(0,o.kt)("a",{parentName:"p",href:"#enabling-secure-boot-on-an-existing-install"},"here"),"."),(0,o.kt)("em",null,"Note that this only applies to machines with UEFI firmware, if your machine uses the older BIOS firmware you can safely ignore this article. If you wish to avoid having to do this step then you may disable secure boot in your machine's UEFI firmware interface."),(0,o.kt)("h2",{id:"enrolling-the-solus-certificate"},"Enrolling the Solus Certificate"),(0,o.kt)("p",null,"After ",(0,o.kt)("a",{parentName:"p",href:"/docs/user/quick-start/installation/#boot-the-media"},"booting")," the ISO from USB/DVD and, if Secure Boot is enabled in your device's UEFI firmware. A warning will appear concerning a secure boot violation, press ",(0,o.kt)("inlineCode",{parentName:"p"},"Enter")," on your keyboard to continue."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Secure Boot violation",src:g(5762).Z,width:"807",height:"577"})),(0,o.kt)("p",null,"Now, it will provide 10 seconds in order to continue to MOK (Machine Owner Key) Management, press ",(0,o.kt)("inlineCode",{parentName:"p"},"Enter")," again within the timeframe to do so."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Continue to MOK Management",src:g(8979).Z,width:"811",height:"581"})),(0,o.kt)("p",null,"Use the down ",(0,o.kt)("inlineCode",{parentName:"p"},"\u2193")," arrow key on your keyboard to select ",(0,o.kt)("inlineCode",{parentName:"p"},"Enroll Key from Disk")," and press ",(0,o.kt)("inlineCode",{parentName:"p"},"Enter")," to continue."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Enroll Key from Disk",src:g(5529).Z,width:"809",height:"581"})),(0,o.kt)("p",null,"Here you'll need to find the ",(0,o.kt)("inlineCode",{parentName:"p"},"solus-enroll-me.cer")," certificate, it should normally be located in the ",(0,o.kt)("inlineCode",{parentName:"p"},"SOLUSESP")," directory. Use the arrow keys to select a directory, ",(0,o.kt)("inlineCode",{parentName:"p"},"Enter")," to enter it and ",(0,o.kt)("inlineCode",{parentName:"p"},"Esc")," to go back."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Enroll the Solus Certificate",src:g(1370).Z,width:"804",height:"577"})),(0,o.kt)("p",null,"Once you found the ",(0,o.kt)("inlineCode",{parentName:"p"},"solus-enroll-me.cer")," certificate, press ",(0,o.kt)("inlineCode",{parentName:"p"},"Enter")," to enroll it, and press the ",(0,o.kt)("inlineCode",{parentName:"p"},"\u2193")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"Enter")," key to continue. Finally, when confirming you wish to Enroll the key(s) press the ",(0,o.kt)("inlineCode",{parentName:"p"},"\u2193"),' key to select "Yes" and ',(0,o.kt)("inlineCode",{parentName:"p"},"Enter")," again."),(0,o.kt)("p",null,"Now, with the Solus certificate enrolled, press ",(0,o.kt)("inlineCode",{parentName:"p"},"Enter")," to reboot the machine, boot the ISO from USB/DVD again and it should continue booting to the installer."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"Confirm Key Enrollment",src:g(1754).Z,width:"816",height:"586"})),(0,o.kt)("em",null,"Once Solus is installed you will not have to enroll the certificate again as it will stay enrolled."),(0,o.kt)("h2",{id:"enabling-secure-boot-on-an-existing-install"},"Enabling Secure Boot on an Existing Install"),(0,o.kt)("p",null,"If you already have Solus installed and wish to enable secure boot then there is one extra step you must perform BEFORE continuing with ",(0,o.kt)("a",{parentName:"p",href:"#enrolling-the-solus-certificate"},"Enrolling the Solus Certificate")," as normal."),(0,o.kt)("p",null,"Firstly, you must confirm you have ",(0,o.kt)("inlineCode",{parentName:"p"},"clr-boot-manager, version: 3.2.12, release: 29")," installed, run ",(0,o.kt)("inlineCode",{parentName:"p"},"eopkg info clr-boot-manager")," to confirm this. This version of ",(0,o.kt)("inlineCode",{parentName:"p"},"clr-boot-manager")," will have created a new UEFI boot entry on your machine called ",(0,o.kt)("inlineCode",{parentName:"p"},"Solus Linux Bootloader")," that can be booted from with Secure Boot enabled."),(0,o.kt)("admonition",{title:"Before continuing, it is important to note the screenshots provided here are for example only, your UEFI firmware interface will almost certainly look different.",type:"note"}),(0,o.kt)("p",null,"Reboot your machine and select the appropriate keyboard button during startup to choose a boot device. The correct key will vary from machine to machine but some common keys are ",(0,o.kt)("inlineCode",{parentName:"p"},"F2"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"F11"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"F12"),", or ",(0,o.kt)("inlineCode",{parentName:"p"},"Esc"),". From the boot selection interface, select the ",(0,o.kt)("inlineCode",{parentName:"p"},"Solus Linux Bootloader")," entry and boot from it. If you've manage to successfully boot then you can continue with enabling Secure Boot."),(0,o.kt)("em",null,"If there is no entry called `Solus Linux Bootloader`, reboot, log back in, open a terminal and run `sudo clr-boot-manager update`."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"UEFI Choose Boot Device",src:g(3506).Z,width:"645",height:"463"})),(0,o.kt)("p",null,"After successfully booting from the new ",(0,o.kt)("inlineCode",{parentName:"p"},"Solus Linux Bootloader")," UEFI entry, open a terminal, input ",(0,o.kt)("inlineCode",{parentName:"p"},"systemctl reboot --firmware-setup")," and press ",(0,o.kt)("inlineCode",{parentName:"p"},"Enter"),". This will reboot you into your machine's UEFI firmware interface. Once there, you will have to find and enable the secure boot setting. Where this is located varies from machine to machine. Some common places it can be located under are ",(0,o.kt)("inlineCode",{parentName:"p"},"Windows OS Configuration"),", ",(0,o.kt)("inlineCode",{parentName:"p"},"Security")," or ",(0,o.kt)("inlineCode",{parentName:"p"},"Device Manager"),"."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"UEFI Secure Boot Configuration",src:g(1857).Z,width:"645",height:"460"})),(0,o.kt)("p",null,"Once you've found and enabled the Secure Boot setting then reboot once again from the ",(0,o.kt)("inlineCode",{parentName:"p"},"Solus Linux Bootloader")," UEFI entry. From there you can continue with the instructions: ",(0,o.kt)("a",{parentName:"p",href:"#enrolling-the-solus-certificate"},"Enrolling the Solus Certificate"),", bearing in mind you are booting from a disk rather than from a USB/DVD."),(0,o.kt)("em",null," Remember to save settings after enabling Secure Boot! (usually `F10`)"),(0,o.kt)("h3",{id:"final-tips"},"Final Tips"),(0,o.kt)("p",null,"Once you've successfully enabled and booted your Solus install with Secure Boot enabled. Go back into your machine's UEFI firmware interface and change the default boot device to ",(0,o.kt)("inlineCode",{parentName:"p"},"Solus Linux Bootloader"),"."),(0,o.kt)("p",null,"You can run ",(0,o.kt)("inlineCode",{parentName:"p"},'bootctl status | grep "Secure Boot"')," in a terminal to verify Secure Boot is enabled."),(0,o.kt)("p",null,"It is possible to delete the old Solus UEFI boot entry with ",(0,o.kt)("inlineCode",{parentName:"p"},"efibootmgr")," once secure boot is enabled successfully, However, caution is required and as such, instructions to do so are not provided here."),(0,o.kt)("h1",{id:"why-is-enrolling-the-solus-certificate-necessary"},"Why is Enrolling the Solus Certificate Necessary?"),(0,o.kt)("p",null,"In order to avoid the one time step of enrolling the Solus certificate, Solus would have to get it's own ",(0,o.kt)("inlineCode",{parentName:"p"},"shim")," EFI executable signed by Microsoft. Currently, the following actions must be completed to do this:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Obtain an EV Certificate (expensive!)"),(0,o.kt)("li",{parentName:"ul"},"Register for the Microsoft Windows Hardware Developer Program."),(0,o.kt)("li",{parentName:"ul"},"Implement any additional security requirements as required by the ",(0,o.kt)("a",{parentName:"li",href:"https://github.com/rhboot/shim-review/"},"shim-review")," process.")),(0,o.kt)("p",null,"Currently, we are using a third-party ",(0,o.kt)("inlineCode",{parentName:"p"},"shim")," that is already signed by Microsoft, the downside is the Solus (vendor) certificate is not already embedded and trusted in the ",(0,o.kt)("inlineCode",{parentName:"p"},"shim")," executable, and as such, requires the user to enroll the Solus certificate manually on first boot."),(0,o.kt)("p",null,"We appreciate that having the enroll the certificate may be confusing to users and, the process to do so may not be self-explanatory. Especially, as Secure Boot is generally enabled by default for the majority of machines."),(0,o.kt)("p",null,"However, it is also important to consider the following:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"Obtaining an EV certificate is an expensive investment."),(0,o.kt)("li",{parentName:"ul"},"Enrolling the Solus certificate is only required once, and, only if secure boot is enabled.")),(0,o.kt)("p",null,"As such, we are not currently looking to our get our own ",(0,o.kt)("inlineCode",{parentName:"p"},"shim")," signed by Microsoft. However, thanks to our supporters on ",(0,o.kt)("a",{parentName:"p",href:"https://opencollective.com/getsolus"},"OpenCollective"),", it is indeed within our budget to obtain an EV certificate in the future which would unblock the additional requirements."),(0,o.kt)("h2",{id:"useful-links-for-additional-reading"},"Useful Links for Additional Reading"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://learn.microsoft.com-us/windows-hardware/drivers/dashboard/file-signing-reqs"},"https://learn.microsoft.com-us/windows-hardware/drivers/dashboard/file-signing-reqs")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/rhboot/shim-review/"},"https://github.com/rhboot/shim-review/")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://github.com/rhboot/shim/"},"https://github.com/rhboot/shim/"))))}u.isMDXComponent=!0},5762:(A,C,g)=>{g.d(C,{Z:()=>e});const e="data:image/png;base64,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6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKKguAICC6gIAKPxeDvznfF6OAADwab+GZZ0FAPBY02XJO4wAAAXVBQBQUF0AAAXVBQBQUF0AAAXVBQBQUF0AAAXVBQAAAAAAANzu/9RxiIRrIM4UAAAAAElFTkSuQmCC"},8979:(A,C,g)=>{g.d(C,{Z:()=>e});const e="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAysAAAJFCAIAAABSvP+VAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAQEklEQVR4Xu3d227iyAJAUfpoPpZP4nPPgyPH7VsgwMbQa2k0gsIUhXPxlp1OTicAAAAAAAAAAADe2Z/5wJfLfAAAgLucx1v/m4wCAFBQYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAAtf/mA3+7+M2sAAB3OH//HtZvPxTYYPWZAADs2DmT5SokAEBNgQEA1BQYAEBNgQEA1BQYAEBNgQEA1BQYAEBNgQEA1BQYAEBNgQEA1BQYAEDtqr8LCbzW7C+LDX+qdRx80l9uHeYfJx/vrv6Zs5vG9xf87Pf18S4Xuw7egHNgcHRj+gz/TUf2XS4r9XO/8XXH9fw4vvXQqh83YMczPuLAMygw4C5bwbQ1DsDJVUj4YFkDbb3Q1vhNrjzhB/BeFBgc3fn8dT1xqJBli6z+4NRycDryqKzZ+ZGjnYeuN1vn7BLbML66zc5L7+yH6fzLCXd26XRwOj57iZ31D3d31jOOb61nuvGPOwF4OVch4Q2Mh9jZIXm0PAZfc/Tdmu1KW0/fWedNVnPkvPh5uPtNU2Y5+Xh39aHl4HSd07dw/fqH8a3tt9Yz3p3dBo5JgcF72Dls33qsXc7wO1uv+8DD/6PmWfWo/fAoR1sP8FSuQsI7Of99RfIXhhmG/99vZxk7D11v+U4fsuzTxn64dfJbtz9tP2V1Paft7YF3p8CAg1rNzYeE3aqhdYb5r+meW7cf3Lr+W7cH3oWrkHB0Q4Uc2cGXB3BACgy4y1Pza+cM0/HDdN+t63/29kDMVUg4uvFi3HTktNElo/HRy+JHqa704+vOFrD1itPNhtv769l6X1vrWY7/znSe8fbOUre231rPcnxn8tPt2w9mqwIO68984MvXF70vY+C9HOq71qEWA/QW3wS+b7kKCXyOxTe7F1g9AQYw4yok8N5mufPa/Dotrh6+fD3AMSkw4L0dMHEOuCTgaFyFBACoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgJoCAwCoKTAAgNp/8wH4OJfLfOR8no98kvH9PvttXi5Pf4mbTD/QwcKGlxtfaHp39ik3G5zeDdZ5WEf7/IGYc2B8vvG7/Pk8PxZ+pOaodrR9OAZN/CEeXmj6ctOViK0t2QcIDss5MODTHL91NBngHBh8uMvF+YbnsnuBX3AOjH/XeB5iPIKO5yRmx9Rfj2+Zbj+bZLme2fmSm06frD539Lv5p5OsPne0M8lp+/2OD41m61xuv+WmeaZ3f9wJ97hy8p31TN/XbHD5vsaHZoPT8dlL7Oy34e7OesbxrfVMN75yV8BHcg6Mf9d4PDj//fM641HhzvEdqxtvrefXZoe3X6xz1fj02e1b5996v1vzbG2/emO8fdM8M1vjU8MMw/+vd+v2g3E9yzc1DA53Vx9aDk73z2zPbD1lZhjf2n5rPePd2W341zgHxj9kdqyaWR3csbX91vhLHGoxjzV9a+fFWZnrLZ+yFRxbljP8aOiSK926nmc72nrgTSkw/iHXH/NOa4eZ4TA/HR8m3BrfsZz8SZZH+uyl7/SqdQ4fzTHpnmH8hPnx8+S0sZ5b13br9qftp6yu57S9PbBFgcG61aPjdHB6EN0aXzUcq4YNnnrcWj3S7yzsUN5lnb1bP39u3X5w6/6/dXvAz4EB1G7tIeDzKDD4wXAaaXpjZmv8CHaO9I9a9qPm2fLs+dl36/5/9vbwMRQYn2/8/j77Rr81PlbLeGyYXmq8fnzLdPudQhot59+3tc1ynq31X2O68q159vfD6Mf1zPbScpGrD/1inof48XXvNJ3/mpm3tp+OT22tf8ut2w+WK4F/zZ/5wJevr0hfHnA0z/6qfPb8U+VrscMHAp5k8cX1fcs5MHgniy/mB3v2/BzHeMoKeAn/FhKObnaYfHgePXv+LePrXnb/6ShPcv77t6j4EEBMgcHRPfvQ+Oz5t7zqdRn5EMALuQoJAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFBTYAAANQUGAFD7bz7wK5fLfOR8no/c5HK5d4ZXme2Kg7+LcbUHXycAfJjHnAMbj9/n89ftZZNdb+e5l8veo/e7c/7hucNOuH8/BIQXALzEYwoMAIDrPeYqZObZ52yePT8AwCkosK2fi1odnw6OV/RmI9PBcZuth6aP/lhXW5Oszv8oq/vhUeP76589ZbA6DwDwWH/mA1++jsNXtstp48g9e/osCJbjq3enlg9NR1bnXz5lx3LjW6ea7YfT7vZbb/xR49fcXh0cXPN+AYAtiyPp960HnwMbD+SXt/3HjHeavuthv1/v1j126/ajxSfEuh83AAB+58EFxk2GU1DTULsn4O63vx4A4FEU2IvNkmt67vAl9bOzHgDgUfw2CgCA2qELbHZF7L1c87NWV77Brc22xn/t4RMCAKse828hl4ft8Smzh34cH4yPbv1c1Gye4e7y9ujHt3C6cf4tq5Ps2FrnY8eX659tvzV+zVsAAFYtyuH71mMK7Mg+4C0AAO9oESHftw59FfLXLq6mAQAH9pkFNl5QW7QnAMDrfexvo1BdAMBhfeY5MACAI1NgAAA1BQYAUFNgAAA1BQYAUFNgAAA1BQYAUFNgAAA1BQYAULvqd+L7G4sAAA/0Zz7wRXMBADzW999MdBUSAKCmwAAAagoMAKCmwAAAagoMAKCmwAAAagoMAKCmwAAAAAAAAAAAAAAAAAAAAAAAAOB1/g8woPo/FVU5nQAAAABJRU5ErkJggg=="},5529:(A,C,g)=>{g.d(C,{Z:()=>e});const e="data:image/png;base64,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z79/vcB7cs8RDuXqmftyOZ3/+yGnrfH52WH8FdY1s17pnu3ZGh8Mc06ePw5b47N5qrX14JfrvTEb8Clc94JDOS8u4ezXn8sfW+P6VeuRLfORufGSG08Ndh7kL9d429UXXh0EPoj2gqP50HPz1ZqZgml9pepnTVv1WObetmd/p1UDn8s9R+DnLe+1DabB+alvz513c3t/rw4Cn0V7wTE5PQO8J+0FB3SY8BpuwB3env116Qs+nfaCI5jPxHtO3qf/Lr80n9fneZY3AbdetTW+trXAcr3Lttjanq15bri6kVcHT9vrvddynsnttW+t94H9Bd7Wr8XjP2/uZ77RAN/L+5Fn+PcDvdX7bnwHuu4FANDRXgAAHe0FANDRXgAAHe0FANDRXgAAHe0FANDRXgAAHe0FANDRXgAAHe0FANDRXgAAnd/jAPB+pt/MCsABaC94a+fzOALAR3PPEQCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCgo70AADraCwCg83sc+MflMo4AAPCkX4vHagsA4Hudh6/dcwQA6GgvAICO9gIA6GgvAICO9gIA6GgvAICO9gIA6GgvAAAAAAAAAAAAAAAAAAAAgOP7P/7OB7w235xvAAAAAElFTkSuQmCC"},1370:(A,C,g)=>{g.d(C,{Z:()=>e});const e="data:image/png;base64,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AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAIErYAAIKELQCAIGELACBI2AIACBK2AACC/ls2TNP9vmwBAOCYP9M0TZN4BQBwrtv8P6cRAQCChC0AgCBhCwAgSNgCAAgStgAAgoQtAIAgYQsAIEjYAgAAAAAAAAAAAADgK/w/O572RyDxlzcAAAAASUVORK5CYII="},1754:(A,C,g)=>{g.d(C,{Z:()=>e});const e="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAzAAAAJKCAIAAAB8pDdfAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAM3ElEQVR4Xu3d0VLiygJAUeaWH5tP4nPvA8eYaQiiMu4krFXzgE1sMloFu7ojnE4AAAAAAAAAAAAAAEDizzjw4TwOAADwI9M4cDqdTqf/jQMAAPwuQQYAEBNkAAAxQQYAEBNkAAAxQQYAEBNkAAAxQQYAEHsbB66cvUEsAMAPTLffDvbD50F28elEAAAMHlzYsmUJABATZAAAMUEGABATZAAAMUEGABATZAAAMUEGABATZAAAMUEGABATZAAAMUEGABB79LMsgQO4+ZFqT/+k2vlRhpnXxu84n/86+Bsz3PSseQaXae/MeeeA4Vdz8xjgwKyQwQuZX+an6R++5K/NvDa+5jofvzrDmmfNs3QntmaXe6//X/P3zr+X62OAYxNk8Lru1wMAv0aQwUvTZKfT6Xz+6YrUI8tjFzcXwJYLlo9PBRyJa8jgRS0vz5ojYLi4am18vmv23IBYTn4zUJ54PsP8N+e5ecz9h7g5D8AaK2Twim7mwiXRrhPkeny+dxh/lnna4fbSU85nrbS+Os/g2/MM5wO8Ditk8IqmxaLX47YTCk88kydOteYXHgLYO0EGL+p4lfCNxDy9r/8NIz906d3lPMf7aQPPJciAg/hG9MzltPzeb8xzbTnJ9UOseeQY4JBcQwYv7eerQZzeQ+qRH6arxICbBBm8rkcCYguG7b9Pfen4Oy31pXmWfv8bgb0TZPBC5hf7B1/4l8cvzREzzzPs0A037o+vWabSnWw6fXY+1746z/X4tZtnO8zzyLkBr+nPOPDhv2cdzyAAS54VgcddPWPcfu6wQgbwBVfPrQBP4K8sAT4xbFOqMeDpBBnAJxQY8K/ZsgQAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAICYIAMAiAkyAIDY2zgA8OvO53FkC6ZpHAH4RwQZsBXbCaBtBiJwYLYsAQBiggwAICbIAABiggwAICbIAABiggwAICbIAABiggwAICbIAABiggwAICbIAABiggzYjfP5r0+ZHL4E2C9BBuyMCAOOR5AB+6PJgIMRZAAAsbdxAGCHhjWzafrrS4CNs0IG7Mwltoar+y/jl3/DvQDbJ8iA/bEABhyMIAMAiAkyYJcskgFHIsgAAGKCDAAg5m0vgN2bpvFjlGxoAvsiyIDdGDJr+aUCA3bNliUAQEyQAQDEBBkAQMw1ZEBovvLrckH+di4EG87HJzEB/5YVMgCAmCADAIgJMmA3zufz+f3dxpa3AfZOkAEAxAQZAEBMkAEAxLztBXAEw/Vk0/tHKa2NA2yKFTJgNy45NV/OP1TX9G4eWRsH2BpBBuzJHGHzjcfNWQawNbYsgYO4Xv2apml4dwxBBmyTIAMO4mZsLQcvcXbzMICWLUsAgJggA45m3qYc9isBNsuWJbAnc2AtNx/XrhVbGwfYGkEG7MlaUX11HGBTbFkCAMQEGQBATJABAMRcQwaEhj+B3NpfRG7tfIDDskIGABATZAAAMUEGABATZAAAMUEGABATZAAAMUEGABATZAAAMW8MC2zF2fuwAq9KkAG9aRpHAF6KLUsAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgJggAwCICTIAgNjbOLDifB5HAAB4ij/jwAcJBgDwXNM4cDqdbFkCAOQEGQBATJABAMQEGQBATJABAMQEGQBATJABAMQEGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDr+D+VT1dp1SpSzAAAAABJRU5ErkJggg=="},3506:(A,C,g)=>{g.d(C,{Z:()=>e});const e=g.p+"assets/images/uefi-choosing-boot-device-62df6cbf7123313a863cc3e6199c5eae.png"},1857:(A,C,g)=>{g.d(C,{Z:()=>e});const e="data:image/png;base64,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Zc/4568jAHMX5nFXd46uAqCMhG7/E316/avtGv/kdQRg7trfr07T8fZrrCtUF21M3OH1AviZrs3jiRyTG/Ny1G3Uvteozqh9r7Pq7HXWfp/WedoBgInzf786T8rlxVb3wivvcW97Uu1oYlTncPta/Dpx2Xk0wmQ+zjbM2v1ubE82Hp+qW35e5aqyQ9u+POsPwESaPM/PY36UMr8BOCBNpGH3q/kGhDHAWd79+9V8OjelAa4gj9lHAANcwf1qAIgnjwEgnjwGgHjyGADiyWMAiCePASCePAaAePIYAOLJYwCIJ48BIJ48BoB48hgA4sljAIgnjwEgnjwGgHjyGADiyWMAiCePASCePAaAePIYAOLJYwCIJ48BIJ48BoB48hgA4sljAIgnjwEgnjwGgHjyGADiyWMAiCePASCePAaAePIYAOLJYwCIJ48BIJ48BoB48hgA4sljAIgnjwEgnjwGgHjyGADiyWMAiCePASCePAaAePIYAOLJYwCIJ48BIJ48BoB48hgA4sljAIgnjwEgnjwGgHjyGADiyWMAiCePASCePAaAePIYAOLJYwCIJ48BIJ48BoB48hgA4sljAIgnjwEgnjwGgHjyGADiyWMAiCePASCePAaAePIYAOLJYwCIJ48BIJ48BoB48hgA4sljAIgnjwEgnjwGgHjyGADiyWMAiCePASCePAaAePIYAOLJYwCIJ48BIJ48BoB48hgA4sljAIgnjwEgnjwGgHjyGADiyWMAiCePASCePAaAePIYAOLJYwCIJ48BIJ48BoB48hgA4sljAIgnjwEgnjwGgHjyGADiyWMAiCePASCePAaAePIYAOLJYwCIJ48BIJ48BoB48hgA4sljAIgnjwEgnjwGgHjyGADiyWMAiCePASCePAaAePIYAOLJYwCIJ48BIJ48BoB48hgA4sljAIgnjwEgnjwGgHjyGADiyWMAiCePASCePAaAePIYAOLJYwCIJ48BIJ48BoB48hgA4sljAIgnjwEgnjwGgHjyGADiyWMAiCePASCePAaAePIYAOLJYwCIJ48BIJ48BoB48hgA4sljAIgnjwEgnjwGgHjyGADiyWMAiCePASCePAaAePIYAOLJYwCIJ48BIJ48BoB48hgA4sljAIgnjwEgnjwGgHjyGADiyWMAiCePASCePAaAePIYAOLJYwCIJ48BIJ48BoB48hgA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"}}]); \ No newline at end of file diff --git a/assets/js/f6faa2b4.33c09626.js b/assets/js/f6faa2b4.d2083429.js similarity index 99% rename from assets/js/f6faa2b4.33c09626.js rename to assets/js/f6faa2b4.d2083429.js index cdccfd17b..75b0b0c1e 100644 --- a/assets/js/f6faa2b4.33c09626.js +++ b/assets/js/f6faa2b4.d2083429.js @@ -1 +1 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[8143],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>y});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=r.createContext({}),d=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},u=function(e){var t=d(e.components);return r.createElement(s.Provider,{value:t},e.children)},p="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},h=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),p=d(n),h=o,y=p["".concat(s,".").concat(h)]||p[h]||c[h]||a;return n?r.createElement(y,i(i({ref:t},u),{},{components:n})):r.createElement(y,i({ref:t},u))}));function y(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=h;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[p]="string"==typeof e?e:o,i[1]=l;for(var d=2;d{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>c,frontMatter:()=>a,metadata:()=>l,toc:()=>d});var r=n(7462),o=(n(7294),n(3905));const a={title:"MIDI Keyboards",summary:"Guide for installing and configuring MIDI keyboards on Solus"},i="MIDI Keyboards",l={unversionedId:"user/hardware/peripherals/midi-keyboard",id:"user/hardware/peripherals/midi-keyboard",title:"MIDI Keyboards",description:"These instructions will guide you through how to set up and use a USB-connected MIDI Keyboard on Solus. This will easily let you use the keyboard to play music with a wide set of instruments.",source:"@site/docs/user/hardware/peripherals/midi-keyboard.md",sourceDirName:"user/hardware/peripherals",slug:"/user/hardware/peripherals/midi-keyboard",permalink:"/docs/user/hardware/peripherals/midi-keyboard",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/hardware/peripherals/midi-keyboard.md",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"MIDI Keyboards",summary:"Guide for installing and configuring MIDI keyboards on Solus"},sidebar:"userSidebar",previous:{title:"Mice and Touchpads",permalink:"/docs/user/hardware/peripherals/mice-and-touchpads"},next:{title:"Printers and Scanners",permalink:"/docs/user/hardware/peripherals/printers-and-scanners"}},s={},d=[{value:"Installing required software",id:"installing-required-software",level:2},{value:"Setting up the soundfont in qsynth",id:"setting-up-the-soundfont-in-qsynth",level:2},{value:"Connecting the keyboard",id:"connecting-the-keyboard",level:2},{value:"Keyboard compatibility",id:"keyboard-compatibility",level:2},{value:"M-audio",id:"m-audio",level:3}],u={toc:d},p="wrapper";function c(e){let{components:t,...a}=e;return(0,o.kt)(p,(0,r.Z)({},u,a,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"midi-keyboards"},"MIDI Keyboards"),(0,o.kt)("p",null,"These instructions will guide you through how to set up and use a USB-connected MIDI Keyboard on Solus. This will easily let you use the keyboard to play music with a wide set of instruments."),(0,o.kt)("h2",{id:"installing-required-software"},"Installing required software"),(0,o.kt)("p",null,"We will need to install three packages in order to use the keyboard:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("inlineCode",{parentName:"li"},"qsynth")," - A frontend for fluidsynth"),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("inlineCode",{parentName:"li"},"qjackctl")," - A controller for the JACK audio server"),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("inlineCode",{parentName:"li"},"fluid-soundfont")," - An open source soundfont to use with fluidsynth")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg it qsynth qjackctl fluid-soundfont\n")),(0,o.kt)("h2",{id:"setting-up-the-soundfont-in-qsynth"},"Setting up the soundfont in qsynth"),(0,o.kt)("p",null,"In order to use the soundfont, we need to open up ",(0,o.kt)("inlineCode",{parentName:"p"},"qsynth")," and set the soundfont. For the purposes of this article, it would be ",(0,o.kt)("inlineCode",{parentName:"p"},"FluidR3.sf2"),", however any other soundfont should work fine too. You set the soundfont by clicking on ",(0,o.kt)("inlineCode",{parentName:"p"},"Setup...")," and navigating to ",(0,o.kt)("inlineCode",{parentName:"p"},"Soundfonts"),". There you just need click ",(0,o.kt)("inlineCode",{parentName:"p"},"Open...")," and navigate to the soundfont of your liking. The soundfont that we will be using will be placed in ",(0,o.kt)("inlineCode",{parentName:"p"},"/usr/share/sounds/sf2/")," by default."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"QSynth SoundFont",src:n(8892).Z,width:"1039",height:"517"})),(0,o.kt)("h2",{id:"connecting-the-keyboard"},"Connecting the keyboard"),(0,o.kt)("p",null,"At this stage you need to first verify that the keyboard is plugged in and turned on. Now we just need to open up ",(0,o.kt)("inlineCode",{parentName:"p"},"qjackctl")," to connect the keyboard on a software level. In ",(0,o.kt)("inlineCode",{parentName:"p"},"qjackctl")," you press on ",(0,o.kt)("inlineCode",{parentName:"p"},"Graph")," and drag the keyboard's output to the input called ",(0,o.kt)("inlineCode",{parentName:"p"},"FLUID Synth")," (Your keyboard name will probably differ from the on in the image below). This step will need to be done every time you disconnect or turn off you keyboard."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"QJackCtl Connect",src:n(8950).Z,width:"717",height:"629"})),(0,o.kt)("p",null,"You should now be ready to play on the keyboard using ",(0,o.kt)("inlineCode",{parentName:"p"},"qsynth"),"."),(0,o.kt)("h2",{id:"keyboard-compatibility"},"Keyboard compatibility"),(0,o.kt)("p",null,"The following keyboards have been tested and/or suggested to function correctly by our users."),(0,o.kt)("p",null,"This list should not suggest that ",(0,o.kt)("em",{parentName:"p"},"only")," such devices listed below are compatible with Solus, as there may be devices not listed below that are in fact compatible."),(0,o.kt)("h3",{id:"m-audio"},"M-audio"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"KeyRig 49")))}c.isMDXComponent=!0},8950:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/qjackctl-connect-ec819e2ca49b8af3c5a395ebad0a2bba.jpg"},8892:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/qsynth-soundfont-3bfc213f843495358dedf524b6ed7fc6.jpg"}}]); \ No newline at end of file +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[8143],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>y});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=r.createContext({}),d=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},u=function(e){var t=d(e.components);return r.createElement(s.Provider,{value:t},e.children)},p="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},h=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),p=d(n),h=o,y=p["".concat(s,".").concat(h)]||p[h]||c[h]||a;return n?r.createElement(y,i(i({ref:t},u),{},{components:n})):r.createElement(y,i({ref:t},u))}));function y(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=h;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[p]="string"==typeof e?e:o,i[1]=l;for(var d=2;d{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>c,frontMatter:()=>a,metadata:()=>l,toc:()=>d});var r=n(7462),o=(n(7294),n(3905));const a={title:"MIDI Keyboards",summary:"Guide for installing and configuring MIDI keyboards on Solus"},i="MIDI Keyboards",l={unversionedId:"user/hardware/peripherals/midi-keyboard",id:"user/hardware/peripherals/midi-keyboard",title:"MIDI Keyboards",description:"These instructions will guide you through how to set up and use a USB-connected MIDI Keyboard on Solus. This will easily let you use the keyboard to play music with a wide set of instruments.",source:"@site/docs/user/hardware/peripherals/midi-keyboard.md",sourceDirName:"user/hardware/peripherals",slug:"/user/hardware/peripherals/midi-keyboard",permalink:"/docs/user/hardware/peripherals/midi-keyboard",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/hardware/peripherals/midi-keyboard.md",tags:[],version:"current",lastUpdatedAt:1695222528,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"MIDI Keyboards",summary:"Guide for installing and configuring MIDI keyboards on Solus"},sidebar:"userSidebar",previous:{title:"Mice and Touchpads",permalink:"/docs/user/hardware/peripherals/mice-and-touchpads"},next:{title:"Printers and Scanners",permalink:"/docs/user/hardware/peripherals/printers-and-scanners"}},s={},d=[{value:"Installing required software",id:"installing-required-software",level:2},{value:"Setting up the soundfont in qsynth",id:"setting-up-the-soundfont-in-qsynth",level:2},{value:"Connecting the keyboard",id:"connecting-the-keyboard",level:2},{value:"Keyboard compatibility",id:"keyboard-compatibility",level:2},{value:"M-audio",id:"m-audio",level:3}],u={toc:d},p="wrapper";function c(e){let{components:t,...a}=e;return(0,o.kt)(p,(0,r.Z)({},u,a,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"midi-keyboards"},"MIDI Keyboards"),(0,o.kt)("p",null,"These instructions will guide you through how to set up and use a USB-connected MIDI Keyboard on Solus. This will easily let you use the keyboard to play music with a wide set of instruments."),(0,o.kt)("h2",{id:"installing-required-software"},"Installing required software"),(0,o.kt)("p",null,"We will need to install three packages in order to use the keyboard:"),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("inlineCode",{parentName:"li"},"qsynth")," - A frontend for fluidsynth"),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("inlineCode",{parentName:"li"},"qjackctl")," - A controller for the JACK audio server"),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("inlineCode",{parentName:"li"},"fluid-soundfont")," - An open source soundfont to use with fluidsynth")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre",className:"language-bash"},"sudo eopkg it qsynth qjackctl fluid-soundfont\n")),(0,o.kt)("h2",{id:"setting-up-the-soundfont-in-qsynth"},"Setting up the soundfont in qsynth"),(0,o.kt)("p",null,"In order to use the soundfont, we need to open up ",(0,o.kt)("inlineCode",{parentName:"p"},"qsynth")," and set the soundfont. For the purposes of this article, it would be ",(0,o.kt)("inlineCode",{parentName:"p"},"FluidR3.sf2"),", however any other soundfont should work fine too. You set the soundfont by clicking on ",(0,o.kt)("inlineCode",{parentName:"p"},"Setup...")," and navigating to ",(0,o.kt)("inlineCode",{parentName:"p"},"Soundfonts"),". There you just need click ",(0,o.kt)("inlineCode",{parentName:"p"},"Open...")," and navigate to the soundfont of your liking. The soundfont that we will be using will be placed in ",(0,o.kt)("inlineCode",{parentName:"p"},"/usr/share/sounds/sf2/")," by default."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"QSynth SoundFont",src:n(8892).Z,width:"1039",height:"517"})),(0,o.kt)("h2",{id:"connecting-the-keyboard"},"Connecting the keyboard"),(0,o.kt)("p",null,"At this stage you need to first verify that the keyboard is plugged in and turned on. Now we just need to open up ",(0,o.kt)("inlineCode",{parentName:"p"},"qjackctl")," to connect the keyboard on a software level. In ",(0,o.kt)("inlineCode",{parentName:"p"},"qjackctl")," you press on ",(0,o.kt)("inlineCode",{parentName:"p"},"Graph")," and drag the keyboard's output to the input called ",(0,o.kt)("inlineCode",{parentName:"p"},"FLUID Synth")," (Your keyboard name will probably differ from the on in the image below). This step will need to be done every time you disconnect or turn off you keyboard."),(0,o.kt)("p",null,(0,o.kt)("img",{alt:"QJackCtl Connect",src:n(8950).Z,width:"717",height:"629"})),(0,o.kt)("p",null,"You should now be ready to play on the keyboard using ",(0,o.kt)("inlineCode",{parentName:"p"},"qsynth"),"."),(0,o.kt)("h2",{id:"keyboard-compatibility"},"Keyboard compatibility"),(0,o.kt)("p",null,"The following keyboards have been tested and/or suggested to function correctly by our users."),(0,o.kt)("p",null,"This list should not suggest that ",(0,o.kt)("em",{parentName:"p"},"only")," such devices listed below are compatible with Solus, as there may be devices not listed below that are in fact compatible."),(0,o.kt)("h3",{id:"m-audio"},"M-audio"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"KeyRig 49")))}c.isMDXComponent=!0},8950:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/qjackctl-connect-ec819e2ca49b8af3c5a395ebad0a2bba.jpg"},8892:(e,t,n)=>{n.d(t,{Z:()=>r});const r=n.p+"assets/images/qsynth-soundfont-3bfc213f843495358dedf524b6ed7fc6.jpg"}}]); \ No newline at end of file diff --git a/assets/js/f8dd8223.f044cd26.js b/assets/js/f8dd8223.49f1d1fd.js similarity index 99% rename from assets/js/f8dd8223.f044cd26.js rename to assets/js/f8dd8223.49f1d1fd.js index 97d4b850b..8cb68d362 100644 --- a/assets/js/f8dd8223.f044cd26.js +++ b/assets/js/f8dd8223.49f1d1fd.js @@ -1 +1 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[7212],{3905:(e,t,r)=>{r.d(t,{Zo:()=>d,kt:()=>m});var a=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function s(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}return r}function n(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var p=a.createContext({}),i=function(e){var t=a.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):n(n({},t),e)),r},d=function(e){var t=i(e.components);return a.createElement(p.Provider,{value:t},e.children)},u="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},g=a.forwardRef((function(e,t){var r=e.components,o=e.mdxType,s=e.originalType,p=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),u=i(r),g=o,m=u["".concat(p,".").concat(g)]||u[g]||c[g]||s;return r?a.createElement(m,n(n({ref:t},d),{},{components:r})):a.createElement(m,n({ref:t},d))}));function m(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var s=r.length,n=new Array(s);n[0]=g;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l[u]="string"==typeof e?e:o,n[1]=l;for(var i=2;i{r.r(t),r.d(t,{assets:()=>p,contentTitle:()=>n,default:()=>c,frontMatter:()=>s,metadata:()=>l,toc:()=>i});var a=r(7462),o=(r(7294),r(3905));const s={title:"PostgreSQL",summary:"A quick guide to using Postgres on Solus"},n="PostgreSQL server",l={unversionedId:"user/software/development/postgresql",id:"user/software/development/postgresql",title:"PostgreSQL",description:"PostgreSQL is an open source object-relational database system. The postgresql package in Solus includes the PostgreSQL library, client and server.",source:"@site/docs/user/software/development/postgresql.md",sourceDirName:"user/software/development",slug:"/user/software/development/postgresql",permalink:"/docs/user/software/development/postgresql",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/development/postgresql.md",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"PostgreSQL",summary:"A quick guide to using Postgres on Solus"},sidebar:"userSidebar",previous:{title:"Java",permalink:"/docs/user/software/development/java"},next:{title:"R and Rstudio",permalink:"/docs/user/software/development/r-and-rstudio"}},p={},i=[{value:"Usage",id:"usage",level:2},{value:"Updating to 15.1",id:"updating-to-151",level:2}],d={toc:i},u="wrapper";function c(e){let{components:t,...r}=e;return(0,o.kt)(u,(0,a.Z)({},d,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"postgresql-server"},"PostgreSQL server"),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"https://www.postgresql.org/"},"PostgreSQL")," is an open source object-relational database system. The ",(0,o.kt)("inlineCode",{parentName:"p"},"postgresql")," package in Solus includes the PostgreSQL library, client and server."),(0,o.kt)("h2",{id:"usage"},"Usage"),(0,o.kt)("p",null,"PostgreSQL can be installed either from the Software Center or via terminal:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"sudo eopkg install postgresql\n")),(0,o.kt)("p",null,"Management of the server can be done using Systemd:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"sudo systemctl enable postgresql # Start the server on boot\nsudo systemctl start postgresql # Start the server now\nsudo systemctl stop postgresql # Stop the server\n")),(0,o.kt)("p",null,"It is possible to connect to the database using the PostgreSQL user:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"sudo -u postgres psql\n")),(0,o.kt)("p",null,"Note that all local connections are trusted and can access all databases by default. This can be changed in ",(0,o.kt)("inlineCode",{parentName:"p"},"/var/db/pgsql/data/pg_hba.conf"),", see the ",(0,o.kt)("a",{parentName:"p",href:"https://www.postgresql.org/docs/current/auth-pg-hba-conf.html"},"PostgreSQL documentation")," for more details."),(0,o.kt)("h2",{id:"updating-to-151"},"Updating to 15.1"),(0,o.kt)("p",null,"Because PostgreSQL is included as a single package, the only way to perform a major upgrade of PostgreSQL is via a backup/restore. The procedure below describes the upgrade process as it applies to Solus. See the ",(0,o.kt)("a",{parentName:"p",href:"https://www.postgresql.org/docs/15/upgrading.html#UPGRADING-VIA-PGDUMPALL"},"PostgreSQL documentation")," for more details."),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"If you have already updated PostgreSQL, downgrade PostgreSQL back to 14.5:")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"sudo eopkg it https://mirrors.rit.edu/solus/packages/shannon/p/postgresql/postgresql-14.5-37-1-x86_64.eopkg \\\n https://mirrors.rit.edu/solus/packages/shannon/p/postgresql/postgresql-libpq-14.5-37-1-x86_64.eopkg\n")),(0,o.kt)("ol",{start:2},(0,o.kt)("li",{parentName:"ol"},"(Re)start PostgreSQL:")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"sudo systemctl restart postgresql\n")),(0,o.kt)("ol",{start:3},(0,o.kt)("li",{parentName:"ol"},"Create a backup of all current data:")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"sudo -u postgres pg_dumpall -f /tmp/backup.sql\n")),(0,o.kt)("p",null,"The location of the backup may be one of your choosing, but keep in mind that the ",(0,o.kt)("inlineCode",{parentName:"p"},"postgres")," user needs to have write permissions on the given location."),(0,o.kt)("ol",{start:4},(0,o.kt)("li",{parentName:"ol"},"Stop PostgreSQL:")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"sudo systemctl stop postgresql\n")),(0,o.kt)("ol",{start:5},(0,o.kt)("li",{parentName:"ol"},"Rename the old data directory. This directory contains the old configuration and the original database, but requires significant disk space.")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"sudo mv /var/db/pgsql/data /var/db/pgsql/data.old\n")),(0,o.kt)("ol",{start:6},(0,o.kt)("li",{parentName:"ol"},"Create a new data directory:")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"sudo mkdir /var/db/pgsql/data\nsudo chown postgres: /var/db/pgsql/data\n")),(0,o.kt)("ol",{start:7},(0,o.kt)("li",{parentName:"ol"},"Upgrade PostgreSQL:")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"sudo eopkg upgrade\n")),(0,o.kt)("ol",{start:8},(0,o.kt)("li",{parentName:"ol"},"Start PostgreSQL:")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"sudo systemctl start postgresql\n")),(0,o.kt)("ol",{start:9},(0,o.kt)("li",{parentName:"ol"},"Restore the data:")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"sudo -u postgres psql < /tmp/backup.sql\n")),(0,o.kt)("ol",{start:10},(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"(optional) Update the configuration files in ",(0,o.kt)("inlineCode",{parentName:"p"},"/var/db/pgsql/data")," based on the configuration in ",(0,o.kt)("inlineCode",{parentName:"p"},"/var/db/pgsql/data.old"),". Restart PostgreSQL afterwards.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Verify that the migration was successful and your data is there.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Remove the backup and data dump:"))),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"sudo rm -r /var/db/pgsql/data.old /tmp/backup.sql\n")))}c.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[7212],{3905:(e,t,r)=>{r.d(t,{Zo:()=>d,kt:()=>m});var a=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function s(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}return r}function n(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var p=a.createContext({}),i=function(e){var t=a.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):n(n({},t),e)),r},d=function(e){var t=i(e.components);return a.createElement(p.Provider,{value:t},e.children)},u="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},g=a.forwardRef((function(e,t){var r=e.components,o=e.mdxType,s=e.originalType,p=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),u=i(r),g=o,m=u["".concat(p,".").concat(g)]||u[g]||c[g]||s;return r?a.createElement(m,n(n({ref:t},d),{},{components:r})):a.createElement(m,n({ref:t},d))}));function m(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var s=r.length,n=new Array(s);n[0]=g;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l[u]="string"==typeof e?e:o,n[1]=l;for(var i=2;i{r.r(t),r.d(t,{assets:()=>p,contentTitle:()=>n,default:()=>c,frontMatter:()=>s,metadata:()=>l,toc:()=>i});var a=r(7462),o=(r(7294),r(3905));const s={title:"PostgreSQL",summary:"A quick guide to using Postgres on Solus"},n="PostgreSQL server",l={unversionedId:"user/software/development/postgresql",id:"user/software/development/postgresql",title:"PostgreSQL",description:"PostgreSQL is an open source object-relational database system. The postgresql package in Solus includes the PostgreSQL library, client and server.",source:"@site/docs/user/software/development/postgresql.md",sourceDirName:"user/software/development",slug:"/user/software/development/postgresql",permalink:"/docs/user/software/development/postgresql",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/development/postgresql.md",tags:[],version:"current",lastUpdatedAt:1695222528,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"PostgreSQL",summary:"A quick guide to using Postgres on Solus"},sidebar:"userSidebar",previous:{title:"Java",permalink:"/docs/user/software/development/java"},next:{title:"R and Rstudio",permalink:"/docs/user/software/development/r-and-rstudio"}},p={},i=[{value:"Usage",id:"usage",level:2},{value:"Updating to 15.1",id:"updating-to-151",level:2}],d={toc:i},u="wrapper";function c(e){let{components:t,...r}=e;return(0,o.kt)(u,(0,a.Z)({},d,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"postgresql-server"},"PostgreSQL server"),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"https://www.postgresql.org/"},"PostgreSQL")," is an open source object-relational database system. The ",(0,o.kt)("inlineCode",{parentName:"p"},"postgresql")," package in Solus includes the PostgreSQL library, client and server."),(0,o.kt)("h2",{id:"usage"},"Usage"),(0,o.kt)("p",null,"PostgreSQL can be installed either from the Software Center or via terminal:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"sudo eopkg install postgresql\n")),(0,o.kt)("p",null,"Management of the server can be done using Systemd:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"sudo systemctl enable postgresql # Start the server on boot\nsudo systemctl start postgresql # Start the server now\nsudo systemctl stop postgresql # Stop the server\n")),(0,o.kt)("p",null,"It is possible to connect to the database using the PostgreSQL user:"),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"sudo -u postgres psql\n")),(0,o.kt)("p",null,"Note that all local connections are trusted and can access all databases by default. This can be changed in ",(0,o.kt)("inlineCode",{parentName:"p"},"/var/db/pgsql/data/pg_hba.conf"),", see the ",(0,o.kt)("a",{parentName:"p",href:"https://www.postgresql.org/docs/current/auth-pg-hba-conf.html"},"PostgreSQL documentation")," for more details."),(0,o.kt)("h2",{id:"updating-to-151"},"Updating to 15.1"),(0,o.kt)("p",null,"Because PostgreSQL is included as a single package, the only way to perform a major upgrade of PostgreSQL is via a backup/restore. The procedure below describes the upgrade process as it applies to Solus. See the ",(0,o.kt)("a",{parentName:"p",href:"https://www.postgresql.org/docs/15/upgrading.html#UPGRADING-VIA-PGDUMPALL"},"PostgreSQL documentation")," for more details."),(0,o.kt)("ol",null,(0,o.kt)("li",{parentName:"ol"},"If you have already updated PostgreSQL, downgrade PostgreSQL back to 14.5:")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"sudo eopkg it https://mirrors.rit.edu/solus/packages/shannon/p/postgresql/postgresql-14.5-37-1-x86_64.eopkg \\\n https://mirrors.rit.edu/solus/packages/shannon/p/postgresql/postgresql-libpq-14.5-37-1-x86_64.eopkg\n")),(0,o.kt)("ol",{start:2},(0,o.kt)("li",{parentName:"ol"},"(Re)start PostgreSQL:")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"sudo systemctl restart postgresql\n")),(0,o.kt)("ol",{start:3},(0,o.kt)("li",{parentName:"ol"},"Create a backup of all current data:")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"sudo -u postgres pg_dumpall -f /tmp/backup.sql\n")),(0,o.kt)("p",null,"The location of the backup may be one of your choosing, but keep in mind that the ",(0,o.kt)("inlineCode",{parentName:"p"},"postgres")," user needs to have write permissions on the given location."),(0,o.kt)("ol",{start:4},(0,o.kt)("li",{parentName:"ol"},"Stop PostgreSQL:")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"sudo systemctl stop postgresql\n")),(0,o.kt)("ol",{start:5},(0,o.kt)("li",{parentName:"ol"},"Rename the old data directory. This directory contains the old configuration and the original database, but requires significant disk space.")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"sudo mv /var/db/pgsql/data /var/db/pgsql/data.old\n")),(0,o.kt)("ol",{start:6},(0,o.kt)("li",{parentName:"ol"},"Create a new data directory:")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"sudo mkdir /var/db/pgsql/data\nsudo chown postgres: /var/db/pgsql/data\n")),(0,o.kt)("ol",{start:7},(0,o.kt)("li",{parentName:"ol"},"Upgrade PostgreSQL:")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"sudo eopkg upgrade\n")),(0,o.kt)("ol",{start:8},(0,o.kt)("li",{parentName:"ol"},"Start PostgreSQL:")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"sudo systemctl start postgresql\n")),(0,o.kt)("ol",{start:9},(0,o.kt)("li",{parentName:"ol"},"Restore the data:")),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"sudo -u postgres psql < /tmp/backup.sql\n")),(0,o.kt)("ol",{start:10},(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"(optional) Update the configuration files in ",(0,o.kt)("inlineCode",{parentName:"p"},"/var/db/pgsql/data")," based on the configuration in ",(0,o.kt)("inlineCode",{parentName:"p"},"/var/db/pgsql/data.old"),". Restart PostgreSQL afterwards.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Verify that the migration was successful and your data is there.")),(0,o.kt)("li",{parentName:"ol"},(0,o.kt)("p",{parentName:"li"},"Remove the backup and data dump:"))),(0,o.kt)("pre",null,(0,o.kt)("code",{parentName:"pre"},"sudo rm -r /var/db/pgsql/data.old /tmp/backup.sql\n")))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/fb6dc457.0e2a9dd2.js b/assets/js/fb6dc457.e5f8375f.js similarity index 99% rename from assets/js/fb6dc457.0e2a9dd2.js rename to assets/js/fb6dc457.e5f8375f.js index d943d14c2..aac3ab3ba 100644 --- a/assets/js/fb6dc457.0e2a9dd2.js +++ b/assets/js/fb6dc457.e5f8375f.js @@ -1 +1 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[5482],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>g});var o=n(7294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function l(e){for(var t=1;t=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var r=o.createContext({}),c=function(e){var t=o.useContext(r),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},d=function(e){var t=c(e.components);return o.createElement(r.Provider,{value:t},e.children)},u="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},h=o.forwardRef((function(e,t){var n=e.components,i=e.mdxType,a=e.originalType,r=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),u=c(n),h=i,g=u["".concat(r,".").concat(h)]||u[h]||p[h]||a;return n?o.createElement(g,l(l({ref:t},d),{},{components:n})):o.createElement(g,l({ref:t},d))}));function g(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var a=n.length,l=new Array(a);l[0]=h;var s={};for(var r in t)hasOwnProperty.call(t,r)&&(s[r]=t[r]);s.originalType=e,s[u]="string"==typeof e?e:i,l[1]=s;for(var c=2;c{n.r(t),n.d(t,{assets:()=>r,contentTitle:()=>l,default:()=>p,frontMatter:()=>a,metadata:()=>s,toc:()=>c});var o=n(7462),i=(n(7294),n(3905));const a={title:"Configuration",summary:"Help for configuring GNOME Shell on Solus"},l="Configuration",s={unversionedId:"user/editions/gnome/configuration",id:"user/editions/gnome/configuration",title:"Configuration",description:"Date and Time",source:"@site/docs/user/editions/gnome/configuration.md",sourceDirName:"user/editions/gnome",slug:"/user/editions/gnome/configuration",permalink:"/docs/user/editions/gnome/configuration",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/editions/gnome/configuration.md",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Configuration",summary:"Help for configuring GNOME Shell on Solus"},sidebar:"userSidebar",previous:{title:"GNOME",permalink:"/docs/user/editions/gnome/"},next:{title:"Tips and Tricks",permalink:"/docs/user/editions/gnome/tips-and-tricks"}},r={},c=[{value:"Date and Time",id:"date-and-time",level:2},{value:"Default Applications",id:"default-applications",level:2},{value:"Displays",id:"displays",level:2},{value:"Keyboard Layout",id:"keyboard-layout",level:2},{value:"IBus",id:"ibus",level:3},{value:"Language",id:"language",level:2},{value:"Mouse and Touchpad",id:"mouse-and-touchpad",level:2},{value:"Mouse",id:"mouse",level:3},{value:"Touchpad",id:"touchpad",level:3},{value:"Testing",id:"testing",level:3},{value:"Networking",id:"networking",level:2},{value:"Non-Hidden Network",id:"non-hidden-network",level:3},{value:"Hidden Network",id:"hidden-network",level:3},{value:"Sound and Sound Devices",id:"sound-and-sound-devices",level:2},{value:"Settings",id:"settings",level:3},{value:"Users",id:"users",level:2},{value:"Adding a User",id:"adding-a-user",level:3},{value:"Removing a User",id:"removing-a-user",level:3},{value:"Desktop Background",id:"desktop-background",level:2},{value:"Desktop Icons",id:"desktop-icons",level:2},{value:"Workspaces",id:"workspaces",level:2},{value:"Keyboard Shortcuts",id:"keyboard-shortcuts",level:3}],d={toc:c},u="wrapper";function p(e){let{components:t,...a}=e;return(0,i.kt)(u,(0,o.Z)({},d,a,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"configuration"},"Configuration"),(0,i.kt)("h1",{id:"system"},"System"),(0,i.kt)("h2",{id:"date-and-time"},"Date and Time"),(0,i.kt)("p",null,"To change the date and time settings in GNOME, you can open the Overlay using the ",(0,i.kt)("inlineCode",{parentName:"p"},"Super"),' button on your keyboard or by clicking the applications icon in the dock and then finding and clicking on "Date & Time".'),(0,i.kt)("p",null,'You will be presented with the following window. This window provides you with the ability to enable / disable automatic date & time, automatic time zone changing, and the time format. You will need to click on "Unlock" and input your user password before changes can be made.'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"GNOME Date and Time",src:n(6935).Z,width:"742",height:"384"})),(0,i.kt)("p",null,'If you wish to change how the time is displayed in the top panel, go back to the Applications Overlay and then find and click on "Tweak Tool". You can now show the date and / or seconds by opening the Top Bar section.'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"GNOME Tweak Tool: Top Bar",src:n(4202).Z,width:"906",height:"656"})),(0,i.kt)("h2",{id:"default-applications"},"Default Applications"),(0,i.kt)("p",null,"With GNOME, you will need to open the Overlay using the ",(0,i.kt)("inlineCode",{parentName:"p"},"Super"),' button on your keyboard or by clicking the applications icon in the dock and then finding and clicking on "Details".'),(0,i.kt)("p",null,'Upon entering the Details section, click on "Default Applications" and then use the drop down boxes to select a different default application for each category. For most categories, you will need to have installed alternative applications before you can change the default settings. For instance, if you wish to change the default video player from GNOME MPV to VLC then you must first install VLC (available in the Software Center).'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"GNOME Default Applications",src:n(3885).Z,width:"742",height:"517"})),(0,i.kt)("p",null,(0,i.kt)("em",{parentName:"p"},"Note: In the image above, we've changed the Web browser and Photo viewer.")),(0,i.kt)("p",null,'You can specify default applications for individual file types by right clicking on a file and then clicking on "Open With Other Application".'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"GNOME Context Menu ",src:n(2964).Z,width:"324",height:"417"})),(0,i.kt)("p",null,'Next, select the application you wish to use from the list. You may need to click "View All Applications" if you can\'t see the one you would like to use. Finish by clicking "Select". In the future, all files with the same file type will open with the same application.'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"GNOME Application Selection",src:n(2191).Z,width:"426",height:"405"})),(0,i.kt)("h2",{id:"displays"},"Displays"),(0,i.kt)("p",null,'In GNOME, You can configure your display(s) simply by right clicking anywhere on the desktop and clicking "Display Settings".'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"GNOME Desktop Context Menu",src:n(1729).Z,width:"210",height:"152"})),(0,i.kt)("p",null,"Alternatively, you can open the Overlay using the ",(0,i.kt)("inlineCode",{parentName:"p"},"Super"),' button on your keyboard or by clicking the applications icon in the dock and then finding and clicking on "Displays".'),(0,i.kt)("p",null,"You will then be shown the following window."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"GNOME Displays Overview",src:n(241).Z,width:"742",height:"345"})),(0,i.kt)("p",null,"Click on the individual display you wish to configure. You will now be able to select if you wish to use this monitor as the primary or secondary display, mirror it with another display, or turn it off. This window also gives you the size and aspect ratio, ability to rotate the display, and ability to change the resolution."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"GNOME Individual Display Settings",src:n(4287).Z,width:"741",height:"365"})),(0,i.kt)("p",null,"Going back to the Displays section, you also have the option to arrange your displays. Click the \u201cArrange Combined Displays\u201d button and then drag your displays so they are arranged to your liking."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"GNOME Arrange Displays",src:n(9556).Z,width:"742",height:"381"})),(0,i.kt)("p",null,'Click "Apply" once you are happy with your changes. You will be shown a message asking if the display looks OK, if it does, click on "Keep Changes" within 20 seconds.'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"GNOME Confirm Display Settings",src:n(4798).Z,width:"502",height:"142"})),(0,i.kt)("h2",{id:"keyboard-layout"},"Keyboard Layout"),(0,i.kt)("p",null,"With GNOME, open the Overlay using the ",(0,i.kt)("inlineCode",{parentName:"p"},"Super"),' button on your keyboard or by clicking the applications icon in the dock and then find and click on "Region and Language".'),(0,i.kt)("p",null,"You will now be shown the following dialog."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"GNOME Region and Languages",src:n(8684).Z,width:"742",height:"345"})),(0,i.kt)("p",null,"Click the ",(0,i.kt)("inlineCode",{parentName:"p"},"+")," button to add an input source (keyboard layout). You will be shown the following dialog."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"GNOME Add Input Source",src:n(8175).Z,width:"742",height:"410"})),(0,i.kt)("p",null,"Here you can select the language and then keyboard layout within each language section. If it does not appear in this list, click the ",(0,i.kt)("inlineCode",{parentName:"p"},"\u22ee")," button (three vertical dots). This will enable you to search for the keyboard layout you wish to use."),(0,i.kt)("p",null,'After choosing the keyboard layout, click "Done". You will be brought back to the following dialog with your new keyboard layout. In the image below, we are now using English (US), Finnish, and Swedish layout.'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"GNOME New Input Source Added",src:n(9324).Z,width:"742",height:"363"})),(0,i.kt)("p",null,"You can remove a keyboard layout by clicking on one of the items, for instance Swedish, then clicking the ",(0,i.kt)("inlineCode",{parentName:"p"},"-")," button."),(0,i.kt)("p",null,"If you wish to use multiple keyboard layouts, you can switch between them by using the keyboard shortcut ",(0,i.kt)("inlineCode",{parentName:"p"},"Super + Space")," or by clicking on the keyboard layout icon shown in the system tray. The icon will automatically appear when you have 2 or more keyboard layouts selected."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"GNOME Keyboard Indicator",src:n(2837).Z,width:"206",height:"168"})),(0,i.kt)("h3",{id:"ibus"},"IBus"),(0,i.kt)("p",null,"For ease of use, GNOME has IBus up and running by default. If you need an additional IBus IME see: ",(0,i.kt)("a",{parentName:"p",href:"/docs/user/software/localization/ibus/"},"IBus")),(0,i.kt)("p",null,"You can now switch between your layouts by using the keyboard shortcut ",(0,i.kt)("inlineCode",{parentName:"p"},"Super + Space")," or by clicking on the keyboard layout icon shown in the system tray."),(0,i.kt)("h2",{id:"language"},"Language"),(0,i.kt)("p",null,"With GNOME, open the Overlay using the ",(0,i.kt)("inlineCode",{parentName:"p"},"Super"),' button on your keyboard or by clicking the applications icon in the dock and then find and click on "Region and Language".'),(0,i.kt)("p",null,"You will now be shown the following window. This window allows you to change your language, formatting for dates and times and the language of your keyboard."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"GNOME Region and Languages",src:n(8684).Z,width:"742",height:"345"})),(0,i.kt)("p",null,'Start by clicking "Language". This brings up a selection of languages to chose from.'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"GNOME Selecting Language",src:n(5905).Z,width:"742",height:"489"})),(0,i.kt)("p",null,"If your language does not appear in the list, click the \u22ee button at the bottom (three vertical dots) to show all the available languages. You can use the search box to go directly to your choice or scroll down the list."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"GNOME Language Search",src:n(5623).Z,width:"742",height:"489"})),(0,i.kt)("p",null,'Once you have selected the language you wish to use, click "Done". You ',(0,i.kt)("em",{parentName:"p"},"may")," need to logout and login to your computer for it to take affect."),(0,i.kt)("h2",{id:"mouse-and-touchpad"},"Mouse and Touchpad"),(0,i.kt)("p",null,"With GNOME, open the Overlay using the ",(0,i.kt)("inlineCode",{parentName:"p"},"Super"),' button on your keyboard or by clicking the applications icon in the dock and then find and click on "Mouse and Touchpad". You will see either settings for your mouse or trackpad, depending on the device.'),(0,i.kt)("h3",{id:"mouse"},"Mouse"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"GNOME Mouse Settings",src:n(9580).Z,width:"742",height:"585"})),(0,i.kt)("p",null,"For mice, you can set:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"The primary button (usually left click) to be left or right."),(0,i.kt)("li",{parentName:"ul"},"Mouse speed."),(0,i.kt)("li",{parentName:"ul"},'Enabling / disabling "natural scrolling" (reversed scrolling direction).')),(0,i.kt)("h3",{id:"touchpad"},"Touchpad"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"GNOME Touchpad Settings",src:n(2903).Z,width:"742",height:"585"})),(0,i.kt)("p",null,"For touchpads, you can set:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"The primary button (usually left click) to be left or right."),(0,i.kt)("li",{parentName:"ul"},"Enabling / disabling of the touchpad."),(0,i.kt)("li",{parentName:"ul"},'Enabling / disabling "natural scrolling" (reversed scrolling direction).'),(0,i.kt)("li",{parentName:"ul"},"Touchpad speed."),(0,i.kt)("li",{parentName:"ul"},"Enabling / disabling of Tap to Click.")),(0,i.kt)("h3",{id:"testing"},"Testing"),(0,i.kt)("p",null,'You can test your settings by clicking the "Test Your Settings" button in the top right of the window.'),(0,i.kt)("h2",{id:"networking"},"Networking"),(0,i.kt)("p",null,'Easily change network settings with GNOME by left or right clicking on the system tray in the top panel and then clicking on "WiFi Not Connected".'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"GNOME Network Indicator",src:n(1694).Z,width:"331",height:"500"})),(0,i.kt)("p",null,"Alternatively, you can open the Overlay using the ",(0,i.kt)("inlineCode",{parentName:"p"},"Super"),' button on your keyboard or by clicking the applications icon in the dock and then finding and clicking on "Network".'),(0,i.kt)("h3",{id:"non-hidden-network"},"Non-Hidden Network"),(0,i.kt)("p",null,'Once you have opened the "WiFi Not Connected" menu, click on "Select Network". Click on the network you wish to join and then on "Connect".'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"GNOME Network Selection",src:n(9750).Z,width:"500",height:"479"})),(0,i.kt)("p",null,'You may now be prompted to authenticate with the network. Type in your password and then click "Connect".'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"GNOME Network Authentication",src:n(9755).Z,width:"550",height:"244"})),(0,i.kt)("p",null,"If your password is correct, you will now be authenticated with the network."),(0,i.kt)("h3",{id:"hidden-network"},"Hidden Network"),(0,i.kt)("p",null,'To join a hidden network, open the "WiFi Not Connected" menu and click on "WiFi Settings".'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"GNOME Network Overview",src:n(3917).Z,width:"742",height:"491"})),(0,i.kt)("p",null,"Next, click on \u201cConnect to Hidden Network...\u201d. It will show the following dialog, where you type the network name and type of security (if any)."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"GNOME Hidden Network",src:n(6258).Z,width:"741",height:"490"})),(0,i.kt)("p",null,"If the network is found and has a password, you will be prompted to authenticate with the network."),(0,i.kt)("h2",{id:"sound-and-sound-devices"},"Sound and Sound Devices"),(0,i.kt)("p",null,"With GNOME, the volume can be changed by left or right clicking the system tray in the top panel and then simply dragging the volume slider with your mouse."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"GNOME Volume Control",src:n(4483).Z,width:"300",height:"370"})),(0,i.kt)("h3",{id:"settings"},"Settings"),(0,i.kt)("p",null,"You can access sound settings, including individual application volume controls, and a simple speaker test by opening the Overlay using the ",(0,i.kt)("inlineCode",{parentName:"p"},"Super"),' button on your keyboard or by clicking the applications icon in the dock and then finding and clicking on "Sound".'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"GNOME Sound Settings",src:n(1401).Z,width:"742",height:"495"})),(0,i.kt)("h2",{id:"users"},"Users"),(0,i.kt)("p",null,'To add and remove users with GNOME, you can click on the icons in the far right of the top panel. Click on your name and then on "Account Setting".'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"GNOME User Indicator",src:n(7121).Z,width:"283",height:"323"})),(0,i.kt)("p",null,"Alternatively, you can open the Overlay using the ",(0,i.kt)("inlineCode",{parentName:"p"},"Super"),' button on your keyboard or by clicking the applications icon in the dock and then finding and clicking on "Users".'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"GNOME User Settings",src:n(1215).Z,width:"742",height:"453"})),(0,i.kt)("p",null,'To manage your own or other accounts, you first need to authenticate. Click the "Unlock" button in the top right corner and type your password. Note that you are required to be an administrator. If you\'re the only user on the system, then your account is an administrator by default.'),(0,i.kt)("p",null,'In the event the password provided is correct, the "Unlock" button will change to "Add User..."'),(0,i.kt)("h3",{id:"adding-a-user"},"Adding a User"),(0,i.kt)("p",null,'To add a user, click the "Add User..." button in the top right corner of the Users window.'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"GNOME Add User Button",src:n(3854).Z,width:"225",height:"65"})),(0,i.kt)("p",null,"This will open the Add User window (shown below)."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"GNOME Add User Dialog",src:n(2158).Z,width:"466",height:"546"})),(0,i.kt)("p",null,'Fill in the required items and then finish adding the new user by clicking "Add" in the top right corner.'),(0,i.kt)("h3",{id:"removing-a-user"},"Removing a User"),(0,i.kt)("p",null,'To remove a user, open the Users window and then click on the user you wish to remove. Now click on the red "Remove User..." button in the bottom right corner.'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"GNOME User List",src:n(1379).Z,width:"742",height:"592"})),(0,i.kt)("p",null,"Upon clicking to remove the user, you will be given the option to keep their files, delete their files, or cancel the removal of the user\u2019s account."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"GNOME Keep Files Prompt",src:n(1361).Z,width:"508",height:"162"})),(0,i.kt)("h1",{id:"user-interface"},"User Interface"),(0,i.kt)("h2",{id:"desktop-background"},"Desktop Background"),(0,i.kt)("p",null,'The GNOME desktop background can be changed by simply right clicking anywhere on the desktop and selecting "Change background".'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"GNOME Background Right Click Menu",src:n(6198).Z,width:"212",height:"150"})),(0,i.kt)("p",null,'Alternatively, you can open the Applications Overlay by clicking the applications icon in the dock and then finding and clicking on "Background".'),(0,i.kt)("p",null,'You will have two options, Background and Lock Screen. Click "Background".'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"GNOME Settings Background Section",src:n(7101).Z,width:"742",height:"515"})),(0,i.kt)("p",null,'In this section, you can choose between Solus wallpapers, pictures in your Pictures folder, or solid colors. After choosing, click "Select".'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"GNOME Background Selection",src:n(3276).Z,width:"830",height:"468"})),(0,i.kt)("h2",{id:"desktop-icons"},"Desktop Icons"),(0,i.kt)("p",null,"In GNOME, you can enable desktop items by opening the Overlay using the ",(0,i.kt)("inlineCode",{parentName:"p"},"Super"),' button on your keyboard or by clicking the Applications icon in the dock and then search for and open "Tweak Tool". You can then toggle them on and off by clicking "Icons on Desktop" under the Desktop section.'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"GNOME Tweak Tool",src:n(8338).Z,width:"904",height:"654"})),(0,i.kt)("p",null,'You may now add things to your Desktop. This can be done by dragging an item onto the Desktop or by right clicking an icon and selecting Copy to / Move to Desktop. Alternatively, click on the "Files" icon in the dock and then move the files you want to the Desktop folder (as shown in the image below). Please note, the Desktop folder is not visible in "Files" until you\'ve enabled the Desktop icons.'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"GNOME Desktop Folder",src:n(2778).Z,width:"884",height:"415"})),(0,i.kt)("h2",{id:"workspaces"},"Workspaces"),(0,i.kt)("p",null,"GNOME enables the switching of workspaces via the Workspace Switcher on the right side of the Activities Overview screen. Application windows can be dragged from the Activities Overview to a workspace, whether it is empty / new, or one that already has windows in it."),(0,i.kt)("video",{src:"/help/vids/GNOME-Workspace-Switch.mp4",autoplay:"autoplay",loop:"loop",width:"740",height:"416"}),(0,i.kt)("h3",{id:"keyboard-shortcuts"},"Keyboard Shortcuts"),(0,i.kt)("p",null,"GNOME provides a variety of keyboard shortcuts for workspaces."),(0,i.kt)("p",null,"To view these shortcuts open the Keyboard application and scroll to the Navigation section."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"GNOME Workspaces Keyboard Shortcuts",src:n(6663).Z,width:"740",height:"395"})))}p.isMDXComponent=!0},8175:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/gnome-add-input-source-d437c5e7831ecdb1e489aa21ac60d526.png"},3854:(e,t,n)=>{n.d(t,{Z:()=>o});const o="data:image/jpeg;base64,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"},2158:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/gnome-add-user-dialog-4a76a1d5811db1f477173c3c1fabb43a.jpg"},9556:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/gnome-arrange-displays-c6b7dca4d418eed7a79be42eabbab2d1.png"},6198:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/gnome-background-right-click-296958d96e0cd78b4bd122538368baf6.jpg"},7101:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/gnome-background-section-ca69ba209a6e21b75235377cfe37096a.jpg"},3276:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/gnome-background-selection-2b69c07e0327d086c99d3925edefd0de.jpg"},3885:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/gnome-configuring-default-applications-c38e8846a0f5406e2a929ceed630e0ac.jpg"},6935:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/gnome-date-and-time-aa3c32f3601912751b47792bed13d861.jpg"},4798:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/gnome-display-confirm-73e76e471778f250fce7a77b06ebf4cc.jpg"},1729:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/gnome-display-right-click-0e3734d006161e208d66f1dbbfd5b284.jpg"},241:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/gnome-displays-overview-6bbedd44653525b6c3aba838cf30349d.jpg"},4287:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/gnome-individual-display-settings-2d5ef78b2175bb97fc2e729a90ee5774.jpg"},1361:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/gnome-keep-files-prompt-5b7532e8ea1cf62ad466bf6d2eec702f.jpg"},9580:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/gnome-mouse-settings-4652630acfe19020bb0b29d0155bf012.jpg"},1379:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/gnome-multiple-user-settings-e0957ed6affeef47726232f6fa2c22a0.jpg"},2778:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/gnome-nautilus-desktop-folder-d8e82c2d25e2d637fc2f63e85241c255.jpg"},9755:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/gnome-network-authentication-306d93017ccbe74f3760db30ad3be13c.jpg"},6258:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/gnome-network-hidden-0567bce591f6219bb35378032a3db3e9.jpg"},3917:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/gnome-network-overview-56ca62f1ff834202f557968bddfe6ae8.jpg"},9750:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/gnome-network-select-b153e6a0d6a6394708fd70d376d84dc9.jpg"},2964:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/gnome-open-with-right-click-f8c5019ecbc6f6cb589c6117c20c85b4.jpg"},2191:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/gnome-open-with-select-application-7c831e8489c82c5ac4df9f3bd5a85644.jpg"},9324:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/gnome-region-and-languages-newlang-4bb2078c2e13e3b57093c6b6c8b68695.jpg"},8684:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/gnome-region-and-languages-335dc9a1b149e6ee8b31960b2786e80f.jpg"},5623:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/gnome-selecting-language-search-0ef7ad4ad481eba3511f505c0d48dd64.png"},5905:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/gnome-selecting-language-1b584e15820bf752584efc6dd7b15aeb.png"},1215:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/gnome-single-user-settings-39514927d322f1eae5e257384a82106b.jpg"},1401:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/gnome-sound-settings-83f0c82715b44956569594953085dad1.jpg"},2837:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/gnome-top-panel-keyboard-layout-c727398da89fe9a7bbae669ab07699d7.jpg"},1694:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/gnome-top-panel-network-click-23903f435151287556210b48a2731783.jpg"},7121:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/gnome-top-panel-right-click-10a13ee21a2ed1ad21315bfdd76e4041.jpg"},2903:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/gnome-touchpad-settings-ee9690f056a1ed39ebddd5cd61936608.jpg"},8338:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/gnome-tweak-tool-desktop-46f30603727af27af46f394d0df8f07e.jpg"},4202:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/gnome-tweak-tool-top-bar-212f1978bc9194fbe0d5a1f49da0ef38.jpg"},4483:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/gnome-volume-control-fc9ad5c29a7859a4532adde7ed56df46.jpg"},6663:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/workspace-shortcuts-gcc-f4f5e863caf0c2532f4d3cbc633b5f8a.jpg"}}]); \ No newline at end of file +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[5482],{3905:(e,t,n)=>{n.d(t,{Zo:()=>d,kt:()=>g});var o=n(7294);function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function l(e){for(var t=1;t=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var r=o.createContext({}),c=function(e){var t=o.useContext(r),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},d=function(e){var t=c(e.components);return o.createElement(r.Provider,{value:t},e.children)},u="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return o.createElement(o.Fragment,{},t)}},h=o.forwardRef((function(e,t){var n=e.components,i=e.mdxType,a=e.originalType,r=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),u=c(n),h=i,g=u["".concat(r,".").concat(h)]||u[h]||p[h]||a;return n?o.createElement(g,l(l({ref:t},d),{},{components:n})):o.createElement(g,l({ref:t},d))}));function g(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var a=n.length,l=new Array(a);l[0]=h;var s={};for(var r in t)hasOwnProperty.call(t,r)&&(s[r]=t[r]);s.originalType=e,s[u]="string"==typeof e?e:i,l[1]=s;for(var c=2;c{n.r(t),n.d(t,{assets:()=>r,contentTitle:()=>l,default:()=>p,frontMatter:()=>a,metadata:()=>s,toc:()=>c});var o=n(7462),i=(n(7294),n(3905));const a={title:"Configuration",summary:"Help for configuring GNOME Shell on Solus"},l="Configuration",s={unversionedId:"user/editions/gnome/configuration",id:"user/editions/gnome/configuration",title:"Configuration",description:"Date and Time",source:"@site/docs/user/editions/gnome/configuration.md",sourceDirName:"user/editions/gnome",slug:"/user/editions/gnome/configuration",permalink:"/docs/user/editions/gnome/configuration",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/editions/gnome/configuration.md",tags:[],version:"current",lastUpdatedAt:1695222528,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"Configuration",summary:"Help for configuring GNOME Shell on Solus"},sidebar:"userSidebar",previous:{title:"GNOME",permalink:"/docs/user/editions/gnome/"},next:{title:"Tips and Tricks",permalink:"/docs/user/editions/gnome/tips-and-tricks"}},r={},c=[{value:"Date and Time",id:"date-and-time",level:2},{value:"Default Applications",id:"default-applications",level:2},{value:"Displays",id:"displays",level:2},{value:"Keyboard Layout",id:"keyboard-layout",level:2},{value:"IBus",id:"ibus",level:3},{value:"Language",id:"language",level:2},{value:"Mouse and Touchpad",id:"mouse-and-touchpad",level:2},{value:"Mouse",id:"mouse",level:3},{value:"Touchpad",id:"touchpad",level:3},{value:"Testing",id:"testing",level:3},{value:"Networking",id:"networking",level:2},{value:"Non-Hidden Network",id:"non-hidden-network",level:3},{value:"Hidden Network",id:"hidden-network",level:3},{value:"Sound and Sound Devices",id:"sound-and-sound-devices",level:2},{value:"Settings",id:"settings",level:3},{value:"Users",id:"users",level:2},{value:"Adding a User",id:"adding-a-user",level:3},{value:"Removing a User",id:"removing-a-user",level:3},{value:"Desktop Background",id:"desktop-background",level:2},{value:"Desktop Icons",id:"desktop-icons",level:2},{value:"Workspaces",id:"workspaces",level:2},{value:"Keyboard Shortcuts",id:"keyboard-shortcuts",level:3}],d={toc:c},u="wrapper";function p(e){let{components:t,...a}=e;return(0,i.kt)(u,(0,o.Z)({},d,a,{components:t,mdxType:"MDXLayout"}),(0,i.kt)("h1",{id:"configuration"},"Configuration"),(0,i.kt)("h1",{id:"system"},"System"),(0,i.kt)("h2",{id:"date-and-time"},"Date and Time"),(0,i.kt)("p",null,"To change the date and time settings in GNOME, you can open the Overlay using the ",(0,i.kt)("inlineCode",{parentName:"p"},"Super"),' button on your keyboard or by clicking the applications icon in the dock and then finding and clicking on "Date & Time".'),(0,i.kt)("p",null,'You will be presented with the following window. This window provides you with the ability to enable / disable automatic date & time, automatic time zone changing, and the time format. You will need to click on "Unlock" and input your user password before changes can be made.'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"GNOME Date and Time",src:n(6935).Z,width:"742",height:"384"})),(0,i.kt)("p",null,'If you wish to change how the time is displayed in the top panel, go back to the Applications Overlay and then find and click on "Tweak Tool". You can now show the date and / or seconds by opening the Top Bar section.'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"GNOME Tweak Tool: Top Bar",src:n(4202).Z,width:"906",height:"656"})),(0,i.kt)("h2",{id:"default-applications"},"Default Applications"),(0,i.kt)("p",null,"With GNOME, you will need to open the Overlay using the ",(0,i.kt)("inlineCode",{parentName:"p"},"Super"),' button on your keyboard or by clicking the applications icon in the dock and then finding and clicking on "Details".'),(0,i.kt)("p",null,'Upon entering the Details section, click on "Default Applications" and then use the drop down boxes to select a different default application for each category. For most categories, you will need to have installed alternative applications before you can change the default settings. For instance, if you wish to change the default video player from GNOME MPV to VLC then you must first install VLC (available in the Software Center).'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"GNOME Default Applications",src:n(3885).Z,width:"742",height:"517"})),(0,i.kt)("p",null,(0,i.kt)("em",{parentName:"p"},"Note: In the image above, we've changed the Web browser and Photo viewer.")),(0,i.kt)("p",null,'You can specify default applications for individual file types by right clicking on a file and then clicking on "Open With Other Application".'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"GNOME Context Menu ",src:n(2964).Z,width:"324",height:"417"})),(0,i.kt)("p",null,'Next, select the application you wish to use from the list. You may need to click "View All Applications" if you can\'t see the one you would like to use. Finish by clicking "Select". In the future, all files with the same file type will open with the same application.'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"GNOME Application Selection",src:n(2191).Z,width:"426",height:"405"})),(0,i.kt)("h2",{id:"displays"},"Displays"),(0,i.kt)("p",null,'In GNOME, You can configure your display(s) simply by right clicking anywhere on the desktop and clicking "Display Settings".'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"GNOME Desktop Context Menu",src:n(1729).Z,width:"210",height:"152"})),(0,i.kt)("p",null,"Alternatively, you can open the Overlay using the ",(0,i.kt)("inlineCode",{parentName:"p"},"Super"),' button on your keyboard or by clicking the applications icon in the dock and then finding and clicking on "Displays".'),(0,i.kt)("p",null,"You will then be shown the following window."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"GNOME Displays Overview",src:n(241).Z,width:"742",height:"345"})),(0,i.kt)("p",null,"Click on the individual display you wish to configure. You will now be able to select if you wish to use this monitor as the primary or secondary display, mirror it with another display, or turn it off. This window also gives you the size and aspect ratio, ability to rotate the display, and ability to change the resolution."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"GNOME Individual Display Settings",src:n(4287).Z,width:"741",height:"365"})),(0,i.kt)("p",null,"Going back to the Displays section, you also have the option to arrange your displays. Click the \u201cArrange Combined Displays\u201d button and then drag your displays so they are arranged to your liking."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"GNOME Arrange Displays",src:n(9556).Z,width:"742",height:"381"})),(0,i.kt)("p",null,'Click "Apply" once you are happy with your changes. You will be shown a message asking if the display looks OK, if it does, click on "Keep Changes" within 20 seconds.'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"GNOME Confirm Display Settings",src:n(4798).Z,width:"502",height:"142"})),(0,i.kt)("h2",{id:"keyboard-layout"},"Keyboard Layout"),(0,i.kt)("p",null,"With GNOME, open the Overlay using the ",(0,i.kt)("inlineCode",{parentName:"p"},"Super"),' button on your keyboard or by clicking the applications icon in the dock and then find and click on "Region and Language".'),(0,i.kt)("p",null,"You will now be shown the following dialog."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"GNOME Region and Languages",src:n(8684).Z,width:"742",height:"345"})),(0,i.kt)("p",null,"Click the ",(0,i.kt)("inlineCode",{parentName:"p"},"+")," button to add an input source (keyboard layout). You will be shown the following dialog."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"GNOME Add Input Source",src:n(8175).Z,width:"742",height:"410"})),(0,i.kt)("p",null,"Here you can select the language and then keyboard layout within each language section. If it does not appear in this list, click the ",(0,i.kt)("inlineCode",{parentName:"p"},"\u22ee")," button (three vertical dots). This will enable you to search for the keyboard layout you wish to use."),(0,i.kt)("p",null,'After choosing the keyboard layout, click "Done". You will be brought back to the following dialog with your new keyboard layout. In the image below, we are now using English (US), Finnish, and Swedish layout.'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"GNOME New Input Source Added",src:n(9324).Z,width:"742",height:"363"})),(0,i.kt)("p",null,"You can remove a keyboard layout by clicking on one of the items, for instance Swedish, then clicking the ",(0,i.kt)("inlineCode",{parentName:"p"},"-")," button."),(0,i.kt)("p",null,"If you wish to use multiple keyboard layouts, you can switch between them by using the keyboard shortcut ",(0,i.kt)("inlineCode",{parentName:"p"},"Super + Space")," or by clicking on the keyboard layout icon shown in the system tray. The icon will automatically appear when you have 2 or more keyboard layouts selected."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"GNOME Keyboard Indicator",src:n(2837).Z,width:"206",height:"168"})),(0,i.kt)("h3",{id:"ibus"},"IBus"),(0,i.kt)("p",null,"For ease of use, GNOME has IBus up and running by default. If you need an additional IBus IME see: ",(0,i.kt)("a",{parentName:"p",href:"/docs/user/software/localization/ibus/"},"IBus")),(0,i.kt)("p",null,"You can now switch between your layouts by using the keyboard shortcut ",(0,i.kt)("inlineCode",{parentName:"p"},"Super + Space")," or by clicking on the keyboard layout icon shown in the system tray."),(0,i.kt)("h2",{id:"language"},"Language"),(0,i.kt)("p",null,"With GNOME, open the Overlay using the ",(0,i.kt)("inlineCode",{parentName:"p"},"Super"),' button on your keyboard or by clicking the applications icon in the dock and then find and click on "Region and Language".'),(0,i.kt)("p",null,"You will now be shown the following window. This window allows you to change your language, formatting for dates and times and the language of your keyboard."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"GNOME Region and Languages",src:n(8684).Z,width:"742",height:"345"})),(0,i.kt)("p",null,'Start by clicking "Language". This brings up a selection of languages to chose from.'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"GNOME Selecting Language",src:n(5905).Z,width:"742",height:"489"})),(0,i.kt)("p",null,"If your language does not appear in the list, click the \u22ee button at the bottom (three vertical dots) to show all the available languages. You can use the search box to go directly to your choice or scroll down the list."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"GNOME Language Search",src:n(5623).Z,width:"742",height:"489"})),(0,i.kt)("p",null,'Once you have selected the language you wish to use, click "Done". You ',(0,i.kt)("em",{parentName:"p"},"may")," need to logout and login to your computer for it to take affect."),(0,i.kt)("h2",{id:"mouse-and-touchpad"},"Mouse and Touchpad"),(0,i.kt)("p",null,"With GNOME, open the Overlay using the ",(0,i.kt)("inlineCode",{parentName:"p"},"Super"),' button on your keyboard or by clicking the applications icon in the dock and then find and click on "Mouse and Touchpad". You will see either settings for your mouse or trackpad, depending on the device.'),(0,i.kt)("h3",{id:"mouse"},"Mouse"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"GNOME Mouse Settings",src:n(9580).Z,width:"742",height:"585"})),(0,i.kt)("p",null,"For mice, you can set:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"The primary button (usually left click) to be left or right."),(0,i.kt)("li",{parentName:"ul"},"Mouse speed."),(0,i.kt)("li",{parentName:"ul"},'Enabling / disabling "natural scrolling" (reversed scrolling direction).')),(0,i.kt)("h3",{id:"touchpad"},"Touchpad"),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"GNOME Touchpad Settings",src:n(2903).Z,width:"742",height:"585"})),(0,i.kt)("p",null,"For touchpads, you can set:"),(0,i.kt)("ul",null,(0,i.kt)("li",{parentName:"ul"},"The primary button (usually left click) to be left or right."),(0,i.kt)("li",{parentName:"ul"},"Enabling / disabling of the touchpad."),(0,i.kt)("li",{parentName:"ul"},'Enabling / disabling "natural scrolling" (reversed scrolling direction).'),(0,i.kt)("li",{parentName:"ul"},"Touchpad speed."),(0,i.kt)("li",{parentName:"ul"},"Enabling / disabling of Tap to Click.")),(0,i.kt)("h3",{id:"testing"},"Testing"),(0,i.kt)("p",null,'You can test your settings by clicking the "Test Your Settings" button in the top right of the window.'),(0,i.kt)("h2",{id:"networking"},"Networking"),(0,i.kt)("p",null,'Easily change network settings with GNOME by left or right clicking on the system tray in the top panel and then clicking on "WiFi Not Connected".'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"GNOME Network Indicator",src:n(1694).Z,width:"331",height:"500"})),(0,i.kt)("p",null,"Alternatively, you can open the Overlay using the ",(0,i.kt)("inlineCode",{parentName:"p"},"Super"),' button on your keyboard or by clicking the applications icon in the dock and then finding and clicking on "Network".'),(0,i.kt)("h3",{id:"non-hidden-network"},"Non-Hidden Network"),(0,i.kt)("p",null,'Once you have opened the "WiFi Not Connected" menu, click on "Select Network". Click on the network you wish to join and then on "Connect".'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"GNOME Network Selection",src:n(9750).Z,width:"500",height:"479"})),(0,i.kt)("p",null,'You may now be prompted to authenticate with the network. Type in your password and then click "Connect".'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"GNOME Network Authentication",src:n(9755).Z,width:"550",height:"244"})),(0,i.kt)("p",null,"If your password is correct, you will now be authenticated with the network."),(0,i.kt)("h3",{id:"hidden-network"},"Hidden Network"),(0,i.kt)("p",null,'To join a hidden network, open the "WiFi Not Connected" menu and click on "WiFi Settings".'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"GNOME Network Overview",src:n(3917).Z,width:"742",height:"491"})),(0,i.kt)("p",null,"Next, click on \u201cConnect to Hidden Network...\u201d. It will show the following dialog, where you type the network name and type of security (if any)."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"GNOME Hidden Network",src:n(6258).Z,width:"741",height:"490"})),(0,i.kt)("p",null,"If the network is found and has a password, you will be prompted to authenticate with the network."),(0,i.kt)("h2",{id:"sound-and-sound-devices"},"Sound and Sound Devices"),(0,i.kt)("p",null,"With GNOME, the volume can be changed by left or right clicking the system tray in the top panel and then simply dragging the volume slider with your mouse."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"GNOME Volume Control",src:n(4483).Z,width:"300",height:"370"})),(0,i.kt)("h3",{id:"settings"},"Settings"),(0,i.kt)("p",null,"You can access sound settings, including individual application volume controls, and a simple speaker test by opening the Overlay using the ",(0,i.kt)("inlineCode",{parentName:"p"},"Super"),' button on your keyboard or by clicking the applications icon in the dock and then finding and clicking on "Sound".'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"GNOME Sound Settings",src:n(1401).Z,width:"742",height:"495"})),(0,i.kt)("h2",{id:"users"},"Users"),(0,i.kt)("p",null,'To add and remove users with GNOME, you can click on the icons in the far right of the top panel. Click on your name and then on "Account Setting".'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"GNOME User Indicator",src:n(7121).Z,width:"283",height:"323"})),(0,i.kt)("p",null,"Alternatively, you can open the Overlay using the ",(0,i.kt)("inlineCode",{parentName:"p"},"Super"),' button on your keyboard or by clicking the applications icon in the dock and then finding and clicking on "Users".'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"GNOME User Settings",src:n(1215).Z,width:"742",height:"453"})),(0,i.kt)("p",null,'To manage your own or other accounts, you first need to authenticate. Click the "Unlock" button in the top right corner and type your password. Note that you are required to be an administrator. If you\'re the only user on the system, then your account is an administrator by default.'),(0,i.kt)("p",null,'In the event the password provided is correct, the "Unlock" button will change to "Add User..."'),(0,i.kt)("h3",{id:"adding-a-user"},"Adding a User"),(0,i.kt)("p",null,'To add a user, click the "Add User..." button in the top right corner of the Users window.'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"GNOME Add User Button",src:n(3854).Z,width:"225",height:"65"})),(0,i.kt)("p",null,"This will open the Add User window (shown below)."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"GNOME Add User Dialog",src:n(2158).Z,width:"466",height:"546"})),(0,i.kt)("p",null,'Fill in the required items and then finish adding the new user by clicking "Add" in the top right corner.'),(0,i.kt)("h3",{id:"removing-a-user"},"Removing a User"),(0,i.kt)("p",null,'To remove a user, open the Users window and then click on the user you wish to remove. Now click on the red "Remove User..." button in the bottom right corner.'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"GNOME User List",src:n(1379).Z,width:"742",height:"592"})),(0,i.kt)("p",null,"Upon clicking to remove the user, you will be given the option to keep their files, delete their files, or cancel the removal of the user\u2019s account."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"GNOME Keep Files Prompt",src:n(1361).Z,width:"508",height:"162"})),(0,i.kt)("h1",{id:"user-interface"},"User Interface"),(0,i.kt)("h2",{id:"desktop-background"},"Desktop Background"),(0,i.kt)("p",null,'The GNOME desktop background can be changed by simply right clicking anywhere on the desktop and selecting "Change background".'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"GNOME Background Right Click Menu",src:n(6198).Z,width:"212",height:"150"})),(0,i.kt)("p",null,'Alternatively, you can open the Applications Overlay by clicking the applications icon in the dock and then finding and clicking on "Background".'),(0,i.kt)("p",null,'You will have two options, Background and Lock Screen. Click "Background".'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"GNOME Settings Background Section",src:n(7101).Z,width:"742",height:"515"})),(0,i.kt)("p",null,'In this section, you can choose between Solus wallpapers, pictures in your Pictures folder, or solid colors. After choosing, click "Select".'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"GNOME Background Selection",src:n(3276).Z,width:"830",height:"468"})),(0,i.kt)("h2",{id:"desktop-icons"},"Desktop Icons"),(0,i.kt)("p",null,"In GNOME, you can enable desktop items by opening the Overlay using the ",(0,i.kt)("inlineCode",{parentName:"p"},"Super"),' button on your keyboard or by clicking the Applications icon in the dock and then search for and open "Tweak Tool". You can then toggle them on and off by clicking "Icons on Desktop" under the Desktop section.'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"GNOME Tweak Tool",src:n(8338).Z,width:"904",height:"654"})),(0,i.kt)("p",null,'You may now add things to your Desktop. This can be done by dragging an item onto the Desktop or by right clicking an icon and selecting Copy to / Move to Desktop. Alternatively, click on the "Files" icon in the dock and then move the files you want to the Desktop folder (as shown in the image below). Please note, the Desktop folder is not visible in "Files" until you\'ve enabled the Desktop icons.'),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"GNOME Desktop Folder",src:n(2778).Z,width:"884",height:"415"})),(0,i.kt)("h2",{id:"workspaces"},"Workspaces"),(0,i.kt)("p",null,"GNOME enables the switching of workspaces via the Workspace Switcher on the right side of the Activities Overview screen. Application windows can be dragged from the Activities Overview to a workspace, whether it is empty / new, or one that already has windows in it."),(0,i.kt)("video",{src:"/help/vids/GNOME-Workspace-Switch.mp4",autoplay:"autoplay",loop:"loop",width:"740",height:"416"}),(0,i.kt)("h3",{id:"keyboard-shortcuts"},"Keyboard Shortcuts"),(0,i.kt)("p",null,"GNOME provides a variety of keyboard shortcuts for workspaces."),(0,i.kt)("p",null,"To view these shortcuts open the Keyboard application and scroll to the Navigation section."),(0,i.kt)("p",null,(0,i.kt)("img",{alt:"GNOME Workspaces Keyboard Shortcuts",src:n(6663).Z,width:"740",height:"395"})))}p.isMDXComponent=!0},8175:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/gnome-add-input-source-d437c5e7831ecdb1e489aa21ac60d526.png"},3854:(e,t,n)=>{n.d(t,{Z:()=>o});const o="data:image/jpeg;base64,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"},2158:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/gnome-add-user-dialog-4a76a1d5811db1f477173c3c1fabb43a.jpg"},9556:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/gnome-arrange-displays-c6b7dca4d418eed7a79be42eabbab2d1.png"},6198:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/gnome-background-right-click-296958d96e0cd78b4bd122538368baf6.jpg"},7101:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/gnome-background-section-ca69ba209a6e21b75235377cfe37096a.jpg"},3276:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/gnome-background-selection-2b69c07e0327d086c99d3925edefd0de.jpg"},3885:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/gnome-configuring-default-applications-c38e8846a0f5406e2a929ceed630e0ac.jpg"},6935:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/gnome-date-and-time-aa3c32f3601912751b47792bed13d861.jpg"},4798:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/gnome-display-confirm-73e76e471778f250fce7a77b06ebf4cc.jpg"},1729:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/gnome-display-right-click-0e3734d006161e208d66f1dbbfd5b284.jpg"},241:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/gnome-displays-overview-6bbedd44653525b6c3aba838cf30349d.jpg"},4287:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/gnome-individual-display-settings-2d5ef78b2175bb97fc2e729a90ee5774.jpg"},1361:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/gnome-keep-files-prompt-5b7532e8ea1cf62ad466bf6d2eec702f.jpg"},9580:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/gnome-mouse-settings-4652630acfe19020bb0b29d0155bf012.jpg"},1379:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/gnome-multiple-user-settings-e0957ed6affeef47726232f6fa2c22a0.jpg"},2778:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/gnome-nautilus-desktop-folder-d8e82c2d25e2d637fc2f63e85241c255.jpg"},9755:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/gnome-network-authentication-306d93017ccbe74f3760db30ad3be13c.jpg"},6258:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/gnome-network-hidden-0567bce591f6219bb35378032a3db3e9.jpg"},3917:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/gnome-network-overview-56ca62f1ff834202f557968bddfe6ae8.jpg"},9750:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/gnome-network-select-b153e6a0d6a6394708fd70d376d84dc9.jpg"},2964:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/gnome-open-with-right-click-f8c5019ecbc6f6cb589c6117c20c85b4.jpg"},2191:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/gnome-open-with-select-application-7c831e8489c82c5ac4df9f3bd5a85644.jpg"},9324:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/gnome-region-and-languages-newlang-4bb2078c2e13e3b57093c6b6c8b68695.jpg"},8684:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/gnome-region-and-languages-335dc9a1b149e6ee8b31960b2786e80f.jpg"},5623:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/gnome-selecting-language-search-0ef7ad4ad481eba3511f505c0d48dd64.png"},5905:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/gnome-selecting-language-1b584e15820bf752584efc6dd7b15aeb.png"},1215:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/gnome-single-user-settings-39514927d322f1eae5e257384a82106b.jpg"},1401:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/gnome-sound-settings-83f0c82715b44956569594953085dad1.jpg"},2837:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/gnome-top-panel-keyboard-layout-c727398da89fe9a7bbae669ab07699d7.jpg"},1694:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/gnome-top-panel-network-click-23903f435151287556210b48a2731783.jpg"},7121:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/gnome-top-panel-right-click-10a13ee21a2ed1ad21315bfdd76e4041.jpg"},2903:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/gnome-touchpad-settings-ee9690f056a1ed39ebddd5cd61936608.jpg"},8338:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/gnome-tweak-tool-desktop-46f30603727af27af46f394d0df8f07e.jpg"},4202:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/gnome-tweak-tool-top-bar-212f1978bc9194fbe0d5a1f49da0ef38.jpg"},4483:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/gnome-volume-control-fc9ad5c29a7859a4532adde7ed56df46.jpg"},6663:(e,t,n)=>{n.d(t,{Z:()=>o});const o=n.p+"assets/images/workspace-shortcuts-gcc-f4f5e863caf0c2532f4d3cbc633b5f8a.jpg"}}]); \ No newline at end of file diff --git a/assets/js/fb8d634e.089db480.js b/assets/js/fb8d634e.7413179b.js similarity index 98% rename from assets/js/fb8d634e.089db480.js rename to assets/js/fb8d634e.7413179b.js index f77437153..9ab4c3e92 100644 --- a/assets/js/fb8d634e.089db480.js +++ b/assets/js/fb8d634e.7413179b.js @@ -1 +1 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[999],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>m});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var l=n.createContext({}),c=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},u=function(e){var t=c(e.components);return n.createElement(l.Provider,{value:t},e.children)},p="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,i=e.originalType,l=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),p=c(r),f=o,m=p["".concat(l,".").concat(f)]||p[f]||d[f]||i;return r?n.createElement(m,a(a({ref:t},u),{},{components:r})):n.createElement(m,a({ref:t},u))}));function m(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=r.length,a=new Array(i);a[0]=f;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[p]="string"==typeof e?e:o,a[1]=s;for(var c=2;c{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>a,default:()=>d,frontMatter:()=>i,metadata:()=>s,toc:()=>c});var n=r(7462),o=(r(7294),r(3905));const i={title:"GNOME",summary:"A quick introduction to the GNOME Edition of Solus"},a="GNOME Shell",s={unversionedId:"user/editions/gnome/index",id:"user/editions/gnome/index",title:"GNOME",description:"GNOME Shell is provided by default with the GNOME Edition of Solus. They describe it as:",source:"@site/docs/user/editions/gnome/index.md",sourceDirName:"user/editions/gnome",slug:"/user/editions/gnome/",permalink:"/docs/user/editions/gnome/",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/editions/gnome/index.md",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"GNOME",summary:"A quick introduction to the GNOME Edition of Solus"},sidebar:"userSidebar",previous:{title:"Tips and Tricks",permalink:"/docs/user/editions/budgie/tips-and-tricks"},next:{title:"Configuration",permalink:"/docs/user/editions/gnome/configuration"}},l={},c=[],u={toc:c},p="wrapper";function d(e){let{components:t,...r}=e;return(0,o.kt)(p,(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"gnome-shell"},"GNOME Shell"),(0,o.kt)("p",null,"GNOME Shell is provided by default with the GNOME Edition of Solus. They describe it as:"),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"Provides core interface functions like switching windows, launching applications or see your notifications. It takes advantage of the capabilities of modern graphics hardware and introduces innovative user interface concepts to provide a delightful and easy to use experience. GNOME Shell is the defining technology of the GNOME 3 user experience.")),(0,o.kt)("p",null,"Here are some links related to this project that you may find helpful:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://www.gnome.org/"},"Homepage")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://thisweek.gnome.org/"},"News")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://help.gnome.org/users/gnome-help/stable/"},"Support"))),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"configuration"},"Go to GNOME Configuration")),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"tips-and-tricks"},"Go to GNOME Tips and Tricks")))}d.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[999],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>m});var n=r(7294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function a(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var l=n.createContext({}),c=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):a(a({},t),e)),r},u=function(e){var t=c(e.components);return n.createElement(l.Provider,{value:t},e.children)},p="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,i=e.originalType,l=e.parentName,u=s(e,["components","mdxType","originalType","parentName"]),p=c(r),f=o,m=p["".concat(l,".").concat(f)]||p[f]||d[f]||i;return r?n.createElement(m,a(a({ref:t},u),{},{components:r})):n.createElement(m,a({ref:t},u))}));function m(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=r.length,a=new Array(i);a[0]=f;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[p]="string"==typeof e?e:o,a[1]=s;for(var c=2;c{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>a,default:()=>d,frontMatter:()=>i,metadata:()=>s,toc:()=>c});var n=r(7462),o=(r(7294),r(3905));const i={title:"GNOME",summary:"A quick introduction to the GNOME Edition of Solus"},a="GNOME Shell",s={unversionedId:"user/editions/gnome/index",id:"user/editions/gnome/index",title:"GNOME",description:"GNOME Shell is provided by default with the GNOME Edition of Solus. They describe it as:",source:"@site/docs/user/editions/gnome/index.md",sourceDirName:"user/editions/gnome",slug:"/user/editions/gnome/",permalink:"/docs/user/editions/gnome/",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/editions/gnome/index.md",tags:[],version:"current",lastUpdatedAt:1695222528,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"GNOME",summary:"A quick introduction to the GNOME Edition of Solus"},sidebar:"userSidebar",previous:{title:"Tips and Tricks",permalink:"/docs/user/editions/budgie/tips-and-tricks"},next:{title:"Configuration",permalink:"/docs/user/editions/gnome/configuration"}},l={},c=[],u={toc:c},p="wrapper";function d(e){let{components:t,...r}=e;return(0,o.kt)(p,(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"gnome-shell"},"GNOME Shell"),(0,o.kt)("p",null,"GNOME Shell is provided by default with the GNOME Edition of Solus. They describe it as:"),(0,o.kt)("blockquote",null,(0,o.kt)("p",{parentName:"blockquote"},"Provides core interface functions like switching windows, launching applications or see your notifications. It takes advantage of the capabilities of modern graphics hardware and introduces innovative user interface concepts to provide a delightful and easy to use experience. GNOME Shell is the defining technology of the GNOME 3 user experience.")),(0,o.kt)("p",null,"Here are some links related to this project that you may find helpful:"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://www.gnome.org/"},"Homepage")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://thisweek.gnome.org/"},"News")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("a",{parentName:"li",href:"https://help.gnome.org/users/gnome-help/stable/"},"Support"))),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"configuration"},"Go to GNOME Configuration")),(0,o.kt)("p",null,(0,o.kt)("a",{parentName:"p",href:"tips-and-tricks"},"Go to GNOME Tips and Tricks")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/fc733b73.0aab545f.js b/assets/js/fc733b73.1757ec18.js similarity index 99% rename from assets/js/fc733b73.0aab545f.js rename to assets/js/fc733b73.1757ec18.js index 0ae4d48a4..0098025fc 100644 --- a/assets/js/fc733b73.0aab545f.js +++ b/assets/js/fc733b73.1757ec18.js @@ -1 +1 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[6042],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>h});var a=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function r(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=a.createContext({}),d=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):r(r({},t),e)),n},u=function(e){var t=d(e.components);return a.createElement(s.Provider,{value:t},e.children)},p="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,i=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),p=d(n),m=o,h=p["".concat(s,".").concat(m)]||p[m]||c[m]||i;return n?a.createElement(h,r(r({ref:t},u),{},{components:n})):a.createElement(h,r({ref:t},u))}));function h(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=n.length,r=new Array(i);r[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[p]="string"==typeof e?e:o,r[1]=l;for(var d=2;d{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>r,default:()=>c,frontMatter:()=>i,metadata:()=>l,toc:()=>d});var a=n(7462),o=(n(7294),n(3905));const i={title:"R and Rstudio",summary:"Quick start guide for R and Rstudio on Solus"},r="R and Rstudio",l={unversionedId:"user/software/development/r-and-rstudio",id:"user/software/development/r-and-rstudio",title:"R and Rstudio",description:"Covers the basics of how to install R and Rstudio on Solus and also covers how to install required dependencies for installing additional CRAN libraries.",source:"@site/docs/user/software/development/r-and-rstudio.md",sourceDirName:"user/software/development",slug:"/user/software/development/r-and-rstudio",permalink:"/docs/user/software/development/r-and-rstudio",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/development/r-and-rstudio.md",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"R and Rstudio",summary:"Quick start guide for R and Rstudio on Solus"},sidebar:"userSidebar",previous:{title:"PostgreSQL",permalink:"/docs/user/software/development/postgresql"},next:{title:"Rust",permalink:"/docs/user/software/development/rust"}},s={},d=[{value:"Downloading R",id:"downloading-r",level:2},{value:"Downloading Rstudio",id:"downloading-rstudio",level:2},{value:"How to use install.package() on Solus",id:"how-to-use-installpackage-on-solus",level:3},{value:"Additional Discovered Dependencies",id:"additional-discovered-dependencies",level:4}],u={toc:d},p="wrapper";function c(e){let{components:t,...n}=e;return(0,o.kt)(p,(0,a.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"r-and-rstudio"},"R and Rstudio"),(0,o.kt)("p",null,"Covers the basics of how to install R and Rstudio on Solus and also covers how to install required dependencies for installing additional CRAN libraries."),(0,o.kt)("h2",{id:"downloading-r"},"Downloading R"),(0,o.kt)("p",null,"It is recommended to download R before downloading Rstudio. This can be accomplished easily in any of three ways.\n",(0,o.kt)("strong",{parentName:"p"},"NOTE:")," Both R and Rstudio are available natively on Solus thanks to their amazing maintainers, it is not necessary to go to either softwares' respective website."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"The easiest way to do this is to search for R within the ",(0,o.kt)("strong",{parentName:"li"},"Software Center")),(0,o.kt)("li",{parentName:"ul"},"Alternatively you can enter the ",(0,o.kt)("strong",{parentName:"li"},"Software Center"),", select ",(0,o.kt)("strong",{parentName:"li"},"Programming Languages & Tools"),", then select ",(0,o.kt)("strong",{parentName:"li"},"Programming")," and scroll down until you see ",(0,o.kt)("strong",{parentName:"li"},"r"),". ",(0,o.kt)("em",{parentName:"li"},"The list itself is in alphabetical order so it will be near the bottom.")),(0,o.kt)("li",{parentName:"ul"},"The third option for install is to open your terminal and enter the command ",(0,o.kt)("inlineCode",{parentName:"li"},"sudo eopkg it r"))),(0,o.kt)("h2",{id:"downloading-rstudio"},"Downloading Rstudio"),(0,o.kt)("p",null,"The first step in setting up Rstudio is to download and install it. This can be accomplished in the same ways as R in the prior step."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"The easiest way to do this is to search for Rstudio within the ",(0,o.kt)("strong",{parentName:"li"},"Software Center")),(0,o.kt)("li",{parentName:"ul"},"Alternatively you can enter the ",(0,o.kt)("strong",{parentName:"li"},"Software Center"),", select ",(0,o.kt)("strong",{parentName:"li"},"Programming Languages & Tools"),", then select ",(0,o.kt)("strong",{parentName:"li"},"Integrated Development Environments")," and scroll down until you see ",(0,o.kt)("strong",{parentName:"li"},"r"),". ",(0,o.kt)("em",{parentName:"li"},"The list itself is in alphabetical order so it will be near the bottom.")),(0,o.kt)("li",{parentName:"ul"},"The third option for install is to open your terminal and enter the command ",(0,o.kt)("inlineCode",{parentName:"li"},"sudo eopkg it rstudio"))),(0,o.kt)("h3",{id:"how-to-use-installpackage-on-solus"},"How to use ",(0,o.kt)("inlineCode",{parentName:"h3"},"install.package()")," on Solus"),(0,o.kt)("p",null,"Unless you are only going to use base R functions, you will need to make use of ",(0,o.kt)("inlineCode",{parentName:"p"},"install.package()")," within R to install additional libraries. To use this function within R you need to install certain development packages which vary depending on the library you are trying to enable within R."),(0,o.kt)("p",null,"On other linux distros (like debian, ubuntu, and fedora) this is accomplished through the installation of r-devel. However since Solus does not have an r-devel package these dependencies have to be installed through other means."),(0,o.kt)("p",null,"There two main solus packages that will include many of the dependencies required that allow you to install most R CRAN packages. These are ",(0,o.kt)("inlineCode",{parentName:"p"},"system.devel")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"curl-devel"),"."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"system.devel")," can ",(0,o.kt)("strong",{parentName:"li"},"ONLY")," be installed from within terminal by running the command ",(0,o.kt)("inlineCode",{parentName:"li"},"sudo eopkg it -c system.devel")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"curl-devel")," can be found by searching in the ",(0,o.kt)("strong",{parentName:"li"},"Software Center")," or by running the command ",(0,o.kt)("inlineCode",{parentName:"li"},"sudo eopkg it curl-devel"))),(0,o.kt)("p",null,"Once these two Solus packages are installed ",(0,o.kt)("inlineCode",{parentName:"p"},"install.package()")," will work as usual within R for most packages like ",(0,o.kt)("inlineCode",{parentName:"p"},"tidyverse"),"."),(0,o.kt)("p",null,"If when you try to install a CRAN library with ",(0,o.kt)("inlineCode",{parentName:"p"},"install.package()")," from within R and you are presented with an error that says ",(0,o.kt)("inlineCode",{parentName:"p"},"...exited with non zero exit status")," this is most likely because one of the required dependencies, ",(0,o.kt)("em",{parentName:"p"},"which will be listed within the R console detailing the error"),", is contained within a Solus devel package you have not yet installed."),(0,o.kt)("h4",{id:"additional-discovered-dependencies"},"Additional Discovered Dependencies"),(0,o.kt)("p",null,"This section should be edited to help future users to know what Solus devel packages are needed to install additional, more specialized CRAN packages."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"To successfully run ",(0,o.kt)("inlineCode",{parentName:"li"},'install.package("RCurl")')," within R requires ",(0,o.kt)("inlineCode",{parentName:"li"},"nghttp2-devel"),", ",(0,o.kt)("inlineCode",{parentName:"li"},"libssh2-devel"),", and ",(0,o.kt)("inlineCode",{parentName:"li"},"kerberos-devel")," to be installed from the Solus ",(0,o.kt)("strong",{parentName:"li"},"Software Center"))))}c.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[6042],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>h});var a=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function r(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s=a.createContext({}),d=function(e){var t=a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):r(r({},t),e)),n},u=function(e){var t=d(e.components);return a.createElement(s.Provider,{value:t},e.children)},p="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var n=e.components,o=e.mdxType,i=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),p=d(n),m=o,h=p["".concat(s,".").concat(m)]||p[m]||c[m]||i;return n?a.createElement(h,r(r({ref:t},u),{},{components:n})):a.createElement(h,r({ref:t},u))}));function h(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var i=n.length,r=new Array(i);r[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[p]="string"==typeof e?e:o,r[1]=l;for(var d=2;d{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>r,default:()=>c,frontMatter:()=>i,metadata:()=>l,toc:()=>d});var a=n(7462),o=(n(7294),n(3905));const i={title:"R and Rstudio",summary:"Quick start guide for R and Rstudio on Solus"},r="R and Rstudio",l={unversionedId:"user/software/development/r-and-rstudio",id:"user/software/development/r-and-rstudio",title:"R and Rstudio",description:"Covers the basics of how to install R and Rstudio on Solus and also covers how to install required dependencies for installing additional CRAN libraries.",source:"@site/docs/user/software/development/r-and-rstudio.md",sourceDirName:"user/software/development",slug:"/user/software/development/r-and-rstudio",permalink:"/docs/user/software/development/r-and-rstudio",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/development/r-and-rstudio.md",tags:[],version:"current",lastUpdatedAt:1695222528,formattedLastUpdatedAt:"Sep 20, 2023",frontMatter:{title:"R and Rstudio",summary:"Quick start guide for R and Rstudio on Solus"},sidebar:"userSidebar",previous:{title:"PostgreSQL",permalink:"/docs/user/software/development/postgresql"},next:{title:"Rust",permalink:"/docs/user/software/development/rust"}},s={},d=[{value:"Downloading R",id:"downloading-r",level:2},{value:"Downloading Rstudio",id:"downloading-rstudio",level:2},{value:"How to use install.package() on Solus",id:"how-to-use-installpackage-on-solus",level:3},{value:"Additional Discovered Dependencies",id:"additional-discovered-dependencies",level:4}],u={toc:d},p="wrapper";function c(e){let{components:t,...n}=e;return(0,o.kt)(p,(0,a.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"r-and-rstudio"},"R and Rstudio"),(0,o.kt)("p",null,"Covers the basics of how to install R and Rstudio on Solus and also covers how to install required dependencies for installing additional CRAN libraries."),(0,o.kt)("h2",{id:"downloading-r"},"Downloading R"),(0,o.kt)("p",null,"It is recommended to download R before downloading Rstudio. This can be accomplished easily in any of three ways.\n",(0,o.kt)("strong",{parentName:"p"},"NOTE:")," Both R and Rstudio are available natively on Solus thanks to their amazing maintainers, it is not necessary to go to either softwares' respective website."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"The easiest way to do this is to search for R within the ",(0,o.kt)("strong",{parentName:"li"},"Software Center")),(0,o.kt)("li",{parentName:"ul"},"Alternatively you can enter the ",(0,o.kt)("strong",{parentName:"li"},"Software Center"),", select ",(0,o.kt)("strong",{parentName:"li"},"Programming Languages & Tools"),", then select ",(0,o.kt)("strong",{parentName:"li"},"Programming")," and scroll down until you see ",(0,o.kt)("strong",{parentName:"li"},"r"),". ",(0,o.kt)("em",{parentName:"li"},"The list itself is in alphabetical order so it will be near the bottom.")),(0,o.kt)("li",{parentName:"ul"},"The third option for install is to open your terminal and enter the command ",(0,o.kt)("inlineCode",{parentName:"li"},"sudo eopkg it r"))),(0,o.kt)("h2",{id:"downloading-rstudio"},"Downloading Rstudio"),(0,o.kt)("p",null,"The first step in setting up Rstudio is to download and install it. This can be accomplished in the same ways as R in the prior step."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"The easiest way to do this is to search for Rstudio within the ",(0,o.kt)("strong",{parentName:"li"},"Software Center")),(0,o.kt)("li",{parentName:"ul"},"Alternatively you can enter the ",(0,o.kt)("strong",{parentName:"li"},"Software Center"),", select ",(0,o.kt)("strong",{parentName:"li"},"Programming Languages & Tools"),", then select ",(0,o.kt)("strong",{parentName:"li"},"Integrated Development Environments")," and scroll down until you see ",(0,o.kt)("strong",{parentName:"li"},"r"),". ",(0,o.kt)("em",{parentName:"li"},"The list itself is in alphabetical order so it will be near the bottom.")),(0,o.kt)("li",{parentName:"ul"},"The third option for install is to open your terminal and enter the command ",(0,o.kt)("inlineCode",{parentName:"li"},"sudo eopkg it rstudio"))),(0,o.kt)("h3",{id:"how-to-use-installpackage-on-solus"},"How to use ",(0,o.kt)("inlineCode",{parentName:"h3"},"install.package()")," on Solus"),(0,o.kt)("p",null,"Unless you are only going to use base R functions, you will need to make use of ",(0,o.kt)("inlineCode",{parentName:"p"},"install.package()")," within R to install additional libraries. To use this function within R you need to install certain development packages which vary depending on the library you are trying to enable within R."),(0,o.kt)("p",null,"On other linux distros (like debian, ubuntu, and fedora) this is accomplished through the installation of r-devel. However since Solus does not have an r-devel package these dependencies have to be installed through other means."),(0,o.kt)("p",null,"There two main solus packages that will include many of the dependencies required that allow you to install most R CRAN packages. These are ",(0,o.kt)("inlineCode",{parentName:"p"},"system.devel")," and ",(0,o.kt)("inlineCode",{parentName:"p"},"curl-devel"),"."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"system.devel")," can ",(0,o.kt)("strong",{parentName:"li"},"ONLY")," be installed from within terminal by running the command ",(0,o.kt)("inlineCode",{parentName:"li"},"sudo eopkg it -c system.devel")),(0,o.kt)("li",{parentName:"ul"},(0,o.kt)("inlineCode",{parentName:"li"},"curl-devel")," can be found by searching in the ",(0,o.kt)("strong",{parentName:"li"},"Software Center")," or by running the command ",(0,o.kt)("inlineCode",{parentName:"li"},"sudo eopkg it curl-devel"))),(0,o.kt)("p",null,"Once these two Solus packages are installed ",(0,o.kt)("inlineCode",{parentName:"p"},"install.package()")," will work as usual within R for most packages like ",(0,o.kt)("inlineCode",{parentName:"p"},"tidyverse"),"."),(0,o.kt)("p",null,"If when you try to install a CRAN library with ",(0,o.kt)("inlineCode",{parentName:"p"},"install.package()")," from within R and you are presented with an error that says ",(0,o.kt)("inlineCode",{parentName:"p"},"...exited with non zero exit status")," this is most likely because one of the required dependencies, ",(0,o.kt)("em",{parentName:"p"},"which will be listed within the R console detailing the error"),", is contained within a Solus devel package you have not yet installed."),(0,o.kt)("h4",{id:"additional-discovered-dependencies"},"Additional Discovered Dependencies"),(0,o.kt)("p",null,"This section should be edited to help future users to know what Solus devel packages are needed to install additional, more specialized CRAN packages."),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"To successfully run ",(0,o.kt)("inlineCode",{parentName:"li"},'install.package("RCurl")')," within R requires ",(0,o.kt)("inlineCode",{parentName:"li"},"nghttp2-devel"),", ",(0,o.kt)("inlineCode",{parentName:"li"},"libssh2-devel"),", and ",(0,o.kt)("inlineCode",{parentName:"li"},"kerberos-devel")," to be installed from the Solus ",(0,o.kt)("strong",{parentName:"li"},"Software Center"))))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/ff402cbc.5df141a7.js b/assets/js/ff402cbc.5df141a7.js deleted file mode 100644 index ed6cae2ec..000000000 --- a/assets/js/ff402cbc.5df141a7.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[4628],{3905:(e,t,a)=>{a.d(t,{Zo:()=>s,kt:()=>d});var r=a(7294);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function o(e){for(var t=1;t=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var c=r.createContext({}),l=function(e){var t=r.useContext(c),a=t;return e&&(a="function"==typeof e?e(t):o(o({},t),e)),a},s=function(e){var t=l(e.components);return r.createElement(c.Provider,{value:t},e.children)},g="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},k=r.forwardRef((function(e,t){var a=e.components,n=e.mdxType,i=e.originalType,c=e.parentName,s=p(e,["components","mdxType","originalType","parentName"]),g=l(a),k=n,d=g["".concat(c,".").concat(k)]||g[k]||u[k]||i;return a?r.createElement(d,o(o({ref:t},s),{},{components:a})):r.createElement(d,o({ref:t},s))}));function d(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var i=a.length,o=new Array(i);o[0]=k;var p={};for(var c in t)hasOwnProperty.call(t,c)&&(p[c]=t[c]);p.originalType=e,p[g]="string"==typeof e?e:n,o[1]=p;for(var l=2;l{a.d(t,{ZP:()=>p});var r=a(7462),n=(a(7294),a(3905));const i={toc:[]},o="wrapper";function p(e){let{components:t,...a}=e;return(0,n.kt)(o,(0,r.Z)({},i,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("admonition",{type:"danger"},(0,n.kt)("p",{parentName:"admonition"},"We are currently in the process of migrating our source repositories from Phabricator to GitHub. If you have any repos checked out from Phabricator, ",(0,n.kt)("a",{parentName:"p",href:"/docs/packaging/procedures/migrate-repos-to-github"},"migrate them")," before proceeding."),(0,n.kt)("p",{parentName:"admonition"},"Updating all facets of the documentation will take some time.\nIf you notice any issues feel free to ",(0,n.kt)("a",{parentName:"p",href:"https://github.com/getsolus/help-center-docs/issues/new"},"file an issue")," on our docs tracker, or get in contact with us on our ",(0,n.kt)("a",{parentName:"p",href:"/docs/user/contributing/getting-involved#matrix-chat"},"Matrix")," channels.")))}p.isMDXComponent=!0},1599:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>p,default:()=>k,frontMatter:()=>o,metadata:()=>c,toc:()=>s});var r=a(7462),n=(a(7294),a(3905)),i=a(3110);const o={title:"Packaging Overview",summary:"Steps for setting up a packaging environment and submitting packages",sidebar_position:0},p=void 0,c={unversionedId:"packaging/index",id:"packaging/index",title:"Packaging Overview",description:"This is the overall workflow for creating or updating a package.",source:"@site/docs/packaging/index.mdx",sourceDirName:"packaging",slug:"/packaging/",permalink:"/docs/packaging/",draft:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/index.mdx",tags:[],version:"current",lastUpdatedAt:1695168316,formattedLastUpdatedAt:"Sep 20, 2023",sidebarPosition:0,frontMatter:{title:"Packaging Overview",summary:"Steps for setting up a packaging environment and submitting packages",sidebar_position:0},sidebar:"packagingSidebar",next:{title:"Prepare for Packaging",permalink:"/docs/packaging/prepare-for-packaging"}},l={},s=[{value:"Development Environment Preparation",id:"development-environment-preparation",level:2},{value:"Prior to Building a Package",id:"prior-to-building-a-package",level:2},{value:"Building Packages",id:"building-packages",level:2}],g={toc:s},u="wrapper";function k(e){let{components:t,...a}=e;return(0,n.kt)(u,(0,r.Z)({},g,a,{components:t,mdxType:"MDXLayout"}),(0,n.kt)(i.ZP,{mdxType:"MigrationWarning"}),(0,n.kt)("h1",{id:"packaging-overview"},"Packaging Overview"),(0,n.kt)("p",null,"This is the overall workflow for creating or updating a package."),(0,n.kt)("h2",{id:"development-environment-preparation"},"Development Environment Preparation"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("a",{parentName:"li",href:"/docs/packaging/prepare-for-packaging"},"Prepare for Packaging")),(0,n.kt)("li",{parentName:"ol"},"Review the ",(0,n.kt)("a",{parentName:"li",href:"/docs/packaging/package.yml"},"requirements for the package.yml file"),"."),(0,n.kt)("li",{parentName:"ol"},"Also review our ",(0,n.kt)("a",{parentName:"li",href:"/docs/packaging/packaging-practices"},"Packaging Practices"),".")),(0,n.kt)("h2",{id:"prior-to-building-a-package"},"Prior to Building a Package"),(0,n.kt)("p",null,"Please check the following:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"Search ",(0,n.kt)("a",{parentName:"li",href:"https://github.com/getsolus/packages/issues?q=label%3A%22Package+Request%22"},"open package requests")," to see if there is one for the package. If there isn't an existing issue, go ahead and submit your pull request. If there is already a pull request, please check its status to avoid duplicating work."),(0,n.kt)("li",{parentName:"ul"},"If you are submitting a pull request for the inclusion of software in the repo, the package has a corresponding package request that is ",(0,n.kt)("strong",{parentName:"li"},"accepted for inclusion")," or is a dependency of a package that has been accepted into the repository.")),(0,n.kt)("h2",{id:"building-packages"},"Building Packages"),(0,n.kt)("ol",null,(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("a",{parentName:"li",href:"/docs/packaging/update-dev-environment"},"Update your development environment")),(0,n.kt)("li",{parentName:"ol"},"Prepare the package directory and build the package")),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},"For a new package that does not yet exist in the repos see ",(0,n.kt)("a",{parentName:"li",href:"/docs/packaging/creating-a-new-package"},"Creating a New Package")),(0,n.kt)("li",{parentName:"ul"},"For updating a package that already is in the repos see ",(0,n.kt)("a",{parentName:"li",href:"/docs/packaging/updating-an-existing-package"},"Updating an Existing Package"))),(0,n.kt)("ol",{start:3},(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("a",{parentName:"li",href:"/docs/packaging/testing-a-package"},"Test the Package")),(0,n.kt)("li",{parentName:"ol"},(0,n.kt)("a",{parentName:"li",href:"/docs/packaging/submitting-a-pull-request"},"Submit a Pull Request for Review"))))}k.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/main.05c86a04.js b/assets/js/main.05c86a04.js new file mode 100644 index 000000000..6ca3db9b7 --- /dev/null +++ b/assets/js/main.05c86a04.js @@ -0,0 +1,2 @@ +/*! For license information please see main.05c86a04.js.LICENSE.txt */ +(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[179],{2717:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var r=n(7294),o=n(7462),a=n(8356),i=n.n(a),s=n(6887);const l={"042d98a6":[()=>n.e(5093).then(n.t.bind(n,2334,19)),"~docs/default/category-docs-usersidebar-category-software-e55.json",2334],"04b18502":[()=>n.e(1942).then(n.bind(n,2634)),"@site/docs/packaging/index.md",2634],"06b3584f":[()=>n.e(7876).then(n.t.bind(n,3909,19)),"~docs/default/category-docs-usersidebar-category-utilities-737.json",3909],"07a26486":[()=>n.e(9273).then(n.bind(n,1279)),"@site/docs/user/quick-start/package-management/eopkg.md",1279],"09dbd43b":[()=>n.e(9397).then(n.bind(n,5049)),"@site/docs/user/troubleshooting/boot-rescue.md",5049],"0b254e3a":[()=>n.e(6726).then(n.bind(n,2753)),"@site/docs/packaging/updating-an-existing-package.md",2753],"0e3c5e6b":[()=>n.e(4859).then(n.bind(n,3052)),"@site/docs/user/editions/plasma/index.md",3052],"0e862883":[()=>n.e(172).then(n.bind(n,631)),"@site/docs/user/contributing/testing-an-iso.md",631],"14488e92":[()=>n.e(4815).then(n.bind(n,5384)),"@site/docs/user/quick-start/default-applications.md",5384],"14eb3368":[()=>Promise.all([n.e(532),n.e(9817)]).then(n.bind(n,4976)),"@theme/DocCategoryGeneratedIndexPage",4976],17896441:[()=>Promise.all([n.e(532),n.e(7918)]).then(n.bind(n,167)),"@theme/DocItem",167],"1a5bd866":[()=>n.e(7180).then(n.t.bind(n,9758,19)),"~docs/default/category-docs-usersidebar-category-web-586.json",9758],"1a698c37":[()=>Promise.all([n.e(532),n.e(8646),n.e(3560),n.e(6126)]).then(n.bind(n,8600)),"@site/docs/user/editions/index.mdx",8600],"1ae709a2":[()=>n.e(355).then(n.bind(n,5898)),"@site/docs/user/package-management/history-and-rollback.md",5898],"1be78505":[()=>Promise.all([n.e(532),n.e(9514)]).then(n.bind(n,4274)),"@theme/DocPage",4274],"1df93b7f":[()=>Promise.all([n.e(8646),n.e(3237)]).then(n.bind(n,7327)),"@site/src/pages/index.tsx",7327],21944812:[()=>n.e(9873).then(n.bind(n,9409)),"@site/docs/user/software/desktops/index.md",9409],"257b9082":[()=>n.e(3192).then(n.bind(n,1456)),"@site/docs/user/software/development/containers.md",1456],"2598a3a5":[()=>n.e(5951).then(n.bind(n,5596)),"@site/docs/user/editions/mate/configuration.md",5596],"2609550e":[()=>n.e(3206).then(n.bind(n,541)),"@site/docs/user/software/networking/samba.md",541],"2a37c7d8":[()=>n.e(9995).then(n.bind(n,4762)),"@site/docs/user/editions/plasma/tips-and-tricks.md",4762],"2b4abe09":[()=>n.e(2413).then(n.bind(n,1583)),"@site/docs/user/troubleshooting/index.md",1583],"2b61a93c":[()=>n.e(9897).then(n.bind(n,2016)),"@site/docs/user/editions/mate/index.md",2016],"2c3e84bd":[()=>n.e(8157).then(n.bind(n,4245)),"@site/docs/user/quick-start/installation/disks.md",4245],"38920c38":[()=>n.e(5481).then(n.bind(n,119)),"@site/docs/user/hardware/peripherals/printers-and-scanners.md",119],"3fdfc7ff":[()=>n.e(4608).then(n.bind(n,6674)),"@site/docs/user/package-management/basics.md",6674],"3ff05326":[()=>n.e(2775).then(n.bind(n,1181)),"@site/docs/packaging/package.yml.md",1181],"41a4de91":[()=>n.e(7682).then(n.bind(n,4907)),"@site/docs/user/software/third-party/index.md",4907],"45e9d313":[()=>n.e(6114).then(n.bind(n,9299)),"@site/docs/packaging/testing-a-package.md",9299],"46a65d96":[()=>n.e(8092).then(n.bind(n,6018)),"@site/docs/user/package-management/repo-management.md",6018],"49b71c16":[()=>n.e(3783).then(n.bind(n,4436)),"@site/docs/packaging/packaging-practices.md",4436],"513b6405":[()=>n.e(4278).then(n.bind(n,2402)),"@site/docs/packaging/prepare-for-packaging.md",2402],"528b6a6b":[()=>n.e(7822).then(n.bind(n,9561)),"@site/docs/user/software/utilities/ksysguard.md",9561],"533eefa9":[()=>n.e(4002).then(n.bind(n,5858)),"@site/docs/user/quick-start/installation/index.md",5858],"5b7f3753":[()=>n.e(6413).then(n.bind(n,3761)),"@site/docs/packaging/git-basics.md",3761],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,6809)),"@generated/docusaurus.config",6809],"5f194406":[()=>n.e(7607).then(n.bind(n,4932)),"@site/docs/user/contributing/community-guidelines.md",4932],"61c953b4":[()=>n.e(8032).then(n.bind(n,5434)),"@site/docs/packaging/procedures/maintainership.md",5434],"631f4b15":[()=>n.e(3203).then(n.t.bind(n,9073,19)),"~docs/default/category-docs-usersidebar-category-quick-start-776.json",9073],64699048:[()=>n.e(2151).then(n.bind(n,8141)),"@site/docs/user/software/development/index.md",8141],"6787574e":[()=>n.e(4500).then(n.bind(n,7635)),"@site/docs/user/intro.md",7635],"6cfe09a0":[()=>n.e(1174).then(n.bind(n,3686)),"@site/docs/user/software/networking/tigervnc.md",3686],"74470af4":[()=>n.e(1896).then(n.bind(n,1984)),"@site/docs/user/software/virtualization/virtualbox.md",1984],"793c86b2":[()=>n.e(168).then(n.bind(n,868)),"@site/docs/user/software/command-line/index.md",868],"7a24477a":[()=>n.e(9135).then(n.bind(n,8614)),"@site/docs/user/contributing/getting-involved.md",8614],"7a9ac8db":[()=>n.e(5175).then(n.t.bind(n,5745,19)),"/home/runner/work/help-center-docs/help-center-docs/.docusaurus/docusaurus-plugin-content-pages/default/plugin-route-context-module-100.json",5745],"7e4100d6":[()=>n.e(6990).then(n.bind(n,7300)),"@site/docs/user/software/networking/wireshark.md",7300],"8490a22d":[()=>n.e(8575).then(n.bind(n,9742)),"@site/docs/packaging/advanced-config/local-repository.md",9742],"88a83a8c":[()=>n.e(1242).then(n.bind(n,1098)),"@site/docs/user/software/utilities/kwallet.md",1098],"8e3d5b32":[()=>n.e(8499).then(n.bind(n,1236)),"@site/docs/user/software/localization/ibus.md",1236],"8e861970":[()=>n.e(8026).then(n.bind(n,5710)),"@site/docs/packaging/procedures/request-a-package.md",5710],"8e886580":[()=>n.e(4978).then(n.bind(n,9107)),"@site/docs/user/software/development/rust.md",9107],"9284d474":[()=>n.e(7626).then(n.bind(n,3612)),"@site/docs/user/software/gaming/index.md",3612],"935f2afb":[()=>n.e(53).then(n.t.bind(n,1109,19)),"~docs/default/version-current-metadata-prop-751.json",1109],"947d9ca4":[()=>n.e(1944).then(n.bind(n,5883)),"@site/docs/user/software/development/web.md",5883],"9485dea6":[()=>n.e(2358).then(n.bind(n,954)),"@site/docs/user/hardware/compatibility/wifi.md",954],"96af6484":[()=>n.e(6225).then(n.bind(n,1290)),"@site/docs/user/hardware/peripherals/mice-and-touchpads.md",1290],"97c623e4":[()=>n.e(6427).then(n.bind(n,246)),"@site/docs/packaging/procedures/request-a-package-update.md",246],"99bedda9":[()=>n.e(8639).then(n.bind(n,6263)),"@site/docs/user/hardware/index.md",6263],a05bfad9:[()=>n.e(885).then(n.bind(n,3734)),"@site/docs/user/editions/budgie/tips-and-tricks.md",3734],a0baa67f:[()=>n.e(8149).then(n.t.bind(n,5307,19)),"~docs/default/category-docs-usersidebar-category-peripherals-aa8.json",5307],a398ef57:[()=>n.e(2586).then(n.bind(n,1268)),"@site/docs/user/hardware/mobile/apple.md",1268],a70a81b4:[()=>n.e(5259).then(n.t.bind(n,5960,19)),"~docs/default/category-docs-usersidebar-category-compatibility-3ab.json",5960],a9e19215:[()=>n.e(333).then(n.bind(n,4435)),"@site/docs/user/software/networking/xrdp.md",4435],b4302412:[()=>n.e(2081).then(n.bind(n,4330)),"@site/docs/user/editions/gnome/tips-and-tricks.md",4330],b4d4ace7:[()=>n.e(1554).then(n.bind(n,4887)),"@site/docs/packaging/submitting-a-pull-request.md",4887],baf1b6e8:[()=>n.e(9677).then(n.bind(n,9130)),"@site/docs/user/software/development/java.md",9130],bb4d5b57:[()=>n.e(5139).then(n.bind(n,1251)),"@site/docs/user/software/development/android.md",1251],be4ac66b:[()=>n.e(4869).then(n.bind(n,5108)),"@site/docs/user/hardware/compatibility/laptops.md",5108],be79d003:[()=>n.e(6012).then(n.bind(n,6069)),"@site/docs/packaging/update-dev-environment.md",6069],c30932c8:[()=>n.e(9668).then(n.t.bind(n,7252,19)),"~docs/default/category-docs-usersidebar-category-localization-344.json",7252],c55c138b:[()=>n.e(7465).then(n.bind(n,3017)),"@site/docs/packaging/packaging-changes.md",3017],c5de29d4:[()=>n.e(3851).then(n.bind(n,3284)),"@site/docs/packaging/creating-a-new-package.md",3284],c83790d5:[()=>n.e(3568).then(n.t.bind(n,7830,19)),"~docs/default/category-docs-packagingsidebar-category-advanced-configuration-bd0.json",7830],c9c1a3f4:[()=>n.e(6121).then(n.bind(n,1912)),"@site/docs/user/editions/budgie/configuration.md",1912],cca891e2:[()=>n.e(9773).then(n.bind(n,3620)),"@site/docs/packaging/procedures/package-inclusion.md",3620],cec10a63:[()=>n.e(8422).then(n.bind(n,2930)),"@site/docs/user/editions/plasma/configuration.md",2930],d00f7e62:[()=>n.e(255).then(n.bind(n,2731)),"@site/docs/packaging/your-first-package-update.md",2731],d0d2faf6:[()=>n.e(4507).then(n.bind(n,2430)),"@site/docs/packaging/procedures/release-processes.md",2430],d0e18f29:[()=>n.e(8944).then(n.t.bind(n,4713,19)),"~docs/default/category-docs-packagingsidebar-category-procedures-3af.json",4713],d4762887:[()=>n.e(3624).then(n.bind(n,7498)),"@site/docs/user/troubleshooting/installation.md",7498],da539e45:[()=>n.e(9986).then(n.t.bind(n,6050,19)),"~docs/default/category-docs-usersidebar-category-mobile-260.json",6050],dabd6b33:[()=>n.e(1059).then(n.bind(n,2921)),"@site/docs/packaging/advanced-config/eopkg-configuration.md",2921],db847870:[()=>n.e(8214).then(n.t.bind(n,6173,19)),"~docs/default/category-docs-usersidebar-category-networking-3ea.json",6173],ddc41e4a:[()=>n.e(9451).then(n.bind(n,8607)),"@site/docs/user/software/sound/index.md",8607],e5595530:[()=>n.e(1648).then(n.bind(n,6434)),"@site/docs/user/quick-start/boot-management.md",6434],e6b730ee:[()=>n.e(5021).then(n.t.bind(n,3769,19)),"/home/runner/work/help-center-docs/help-center-docs/.docusaurus/docusaurus-plugin-content-docs/default/plugin-route-context-module-100.json",3769],e747afee:[()=>n.e(748).then(n.t.bind(n,1341,19)),"~docs/default/category-docs-usersidebar-category-virtualization-e92.json",1341],eae77de0:[()=>n.e(6046).then(n.bind(n,306)),"@site/docs/user/quick-start/package-management/index.md",306],ec4e4367:[()=>n.e(4529).then(n.bind(n,1356)),"@site/docs/user/hardware/mobile/android.md",1356],ec9a4674:[()=>n.e(7331).then(n.t.bind(n,1239,19)),"~docs/default/category-docs-usersidebar-category-package-management-e37.json",1239],f0629c21:[()=>n.e(3375).then(n.bind(n,2882)),"@site/docs/user/software/web/obs.md",2882],f1d13e1b:[()=>n.e(5462).then(n.bind(n,6267)),"@site/docs/user/editions/mate/tips-and-tricks.md",6267],f4aa4739:[()=>n.e(9170).then(n.bind(n,8317)),"@site/docs/user/editions/budgie/index.md",8317],f4c9601b:[()=>n.e(2595).then(n.bind(n,6729)),"@site/docs/user/quick-start/installation/secure-boot.md",6729],f6faa2b4:[()=>n.e(8143).then(n.bind(n,9030)),"@site/docs/user/hardware/peripherals/midi-keyboard.md",9030],f8dd8223:[()=>n.e(7212).then(n.bind(n,267)),"@site/docs/user/software/development/postgresql.md",267],fb6dc457:[()=>n.e(5482).then(n.bind(n,8377)),"@site/docs/user/editions/gnome/configuration.md",8377],fb8d634e:[()=>n.e(999).then(n.bind(n,7612)),"@site/docs/user/editions/gnome/index.md",7612],fc733b73:[()=>n.e(6042).then(n.bind(n,1191)),"@site/docs/user/software/development/r-and-rstudio.md",1191],fed8ce91:[()=>n.e(3145).then(n.t.bind(n,5225,19)),"~docs/default/category-docs-usersidebar-category-contributing-387.json",5225]};function u(e){let{error:t,retry:n,pastDelay:o}=e;return t?r.createElement("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"}},r.createElement("p",null,String(t)),r.createElement("div",null,r.createElement("button",{type:"button",onClick:n},"Retry"))):o?r.createElement("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"}},r.createElement("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb"},r.createElement("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2"},r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"8"},r.createElement("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"}))))):null}var c=n(4912),d=n(5302);function p(e,t){if("*"===e)return i()({loading:u,loader:()=>n.e(1227).then(n.bind(n,1227)),modules:["@theme/NotFound"],webpack:()=>[1227],render(e,t){const n=e.default;return r.createElement(d.z,{value:{plugin:{name:"native",id:"default"}}},r.createElement(n,t))}});const a=s[`${e}-${t}`],p={},f=[],m=[],g=(0,c.Z)(a);return Object.entries(g).forEach((e=>{let[t,n]=e;const r=l[n];r&&(p[t]=r[0],f.push(r[1]),m.push(r[2]))})),i().Map({loading:u,loader:p,modules:f,webpack:()=>m,render(t,n){const i=JSON.parse(JSON.stringify(a));Object.entries(t).forEach((t=>{let[n,r]=t;const o=r.default;if(!o)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof o&&"function"!=typeof o||Object.keys(r).filter((e=>"default"!==e)).forEach((e=>{o[e]=r[e]}));let a=i;const s=n.split(".");s.slice(0,-1).forEach((e=>{a=a[e]})),a[s[s.length-1]]=o}));const s=i.__comp;delete i.__comp;const l=i.__context;return delete i.__context,r.createElement(d.z,{value:l},r.createElement(s,(0,o.Z)({},i,n)))}})}const f=[{path:"/docs",component:p("/docs","bf8"),routes:[{path:"/docs/category/advanced-configuration",component:p("/docs/category/advanced-configuration","067"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/category/compatibility",component:p("/docs/category/compatibility","745"),exact:!0,sidebar:"userSidebar"},{path:"/docs/category/contributing",component:p("/docs/category/contributing","069"),exact:!0,sidebar:"userSidebar"},{path:"/docs/category/localization",component:p("/docs/category/localization","b0c"),exact:!0,sidebar:"userSidebar"},{path:"/docs/category/mobile",component:p("/docs/category/mobile","7d4"),exact:!0,sidebar:"userSidebar"},{path:"/docs/category/networking",component:p("/docs/category/networking","edb"),exact:!0,sidebar:"userSidebar"},{path:"/docs/category/package-management",component:p("/docs/category/package-management","7f4"),exact:!0,sidebar:"userSidebar"},{path:"/docs/category/peripherals",component:p("/docs/category/peripherals","04b"),exact:!0,sidebar:"userSidebar"},{path:"/docs/category/procedures",component:p("/docs/category/procedures","dd2"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/category/quick-start",component:p("/docs/category/quick-start","9ec"),exact:!0,sidebar:"userSidebar"},{path:"/docs/category/software",component:p("/docs/category/software","c71"),exact:!0,sidebar:"userSidebar"},{path:"/docs/category/utilities",component:p("/docs/category/utilities","bed"),exact:!0,sidebar:"userSidebar"},{path:"/docs/category/virtualization",component:p("/docs/category/virtualization","432"),exact:!0,sidebar:"userSidebar"},{path:"/docs/category/web",component:p("/docs/category/web","057"),exact:!0,sidebar:"userSidebar"},{path:"/docs/packaging/",component:p("/docs/packaging/","55c"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/advanced-config/eopkg-configuration",component:p("/docs/packaging/advanced-config/eopkg-configuration","805"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/advanced-config/local-repository",component:p("/docs/packaging/advanced-config/local-repository","aa2"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/creating-a-new-package",component:p("/docs/packaging/creating-a-new-package","c49"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/git-basics",component:p("/docs/packaging/git-basics","7bf"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/package.yml",component:p("/docs/packaging/package.yml","2e6"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/packaging-changes",component:p("/docs/packaging/packaging-changes","38e"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/packaging-practices",component:p("/docs/packaging/packaging-practices","965"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/prepare-for-packaging",component:p("/docs/packaging/prepare-for-packaging","b00"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/procedures/maintainership",component:p("/docs/packaging/procedures/maintainership","0cf"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/procedures/package-inclusion",component:p("/docs/packaging/procedures/package-inclusion","50a"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/procedures/release-processes",component:p("/docs/packaging/procedures/release-processes","107"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/procedures/request-a-package",component:p("/docs/packaging/procedures/request-a-package","00d"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/procedures/request-a-package-update",component:p("/docs/packaging/procedures/request-a-package-update","478"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/submitting-a-pull-request",component:p("/docs/packaging/submitting-a-pull-request","210"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/testing-a-package",component:p("/docs/packaging/testing-a-package","838"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/update-dev-environment",component:p("/docs/packaging/update-dev-environment","2b8"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/updating-an-existing-package",component:p("/docs/packaging/updating-an-existing-package","9ac"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/your-first-package-update",component:p("/docs/packaging/your-first-package-update","261"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/user/contributing/community-guidelines",component:p("/docs/user/contributing/community-guidelines","ae9"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/contributing/getting-involved",component:p("/docs/user/contributing/getting-involved","ac6"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/contributing/testing-an-iso",component:p("/docs/user/contributing/testing-an-iso","f42"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/editions/",component:p("/docs/user/editions/","ae4"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/editions/budgie/",component:p("/docs/user/editions/budgie/","809"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/editions/budgie/configuration",component:p("/docs/user/editions/budgie/configuration","64f"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/editions/budgie/tips-and-tricks",component:p("/docs/user/editions/budgie/tips-and-tricks","c15"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/editions/gnome/",component:p("/docs/user/editions/gnome/","55e"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/editions/gnome/configuration",component:p("/docs/user/editions/gnome/configuration","469"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/editions/gnome/tips-and-tricks",component:p("/docs/user/editions/gnome/tips-and-tricks","9f2"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/editions/mate/",component:p("/docs/user/editions/mate/","28c"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/editions/mate/configuration",component:p("/docs/user/editions/mate/configuration","567"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/editions/mate/tips-and-tricks",component:p("/docs/user/editions/mate/tips-and-tricks","966"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/editions/plasma/",component:p("/docs/user/editions/plasma/","948"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/editions/plasma/configuration",component:p("/docs/user/editions/plasma/configuration","d00"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/editions/plasma/tips-and-tricks",component:p("/docs/user/editions/plasma/tips-and-tricks","9e4"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/hardware/",component:p("/docs/user/hardware/","29f"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/hardware/compatibility/laptops",component:p("/docs/user/hardware/compatibility/laptops","262"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/hardware/compatibility/wifi",component:p("/docs/user/hardware/compatibility/wifi","f76"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/hardware/mobile/android",component:p("/docs/user/hardware/mobile/android","6eb"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/hardware/mobile/apple",component:p("/docs/user/hardware/mobile/apple","8e3"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/hardware/peripherals/mice-and-touchpads",component:p("/docs/user/hardware/peripherals/mice-and-touchpads","ac1"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/hardware/peripherals/midi-keyboard",component:p("/docs/user/hardware/peripherals/midi-keyboard","6ba"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/hardware/peripherals/printers-and-scanners",component:p("/docs/user/hardware/peripherals/printers-and-scanners","819"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/intro",component:p("/docs/user/intro","577"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/package-management/basics",component:p("/docs/user/package-management/basics","3e0"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/package-management/history-and-rollback",component:p("/docs/user/package-management/history-and-rollback","5e1"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/package-management/repo-management",component:p("/docs/user/package-management/repo-management","01f"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/quick-start/boot-management",component:p("/docs/user/quick-start/boot-management","bef"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/quick-start/default-applications",component:p("/docs/user/quick-start/default-applications","8a8"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/quick-start/installation/",component:p("/docs/user/quick-start/installation/","c40"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/quick-start/installation/disks",component:p("/docs/user/quick-start/installation/disks","062"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/quick-start/installation/secure-boot",component:p("/docs/user/quick-start/installation/secure-boot","670"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/quick-start/package-management/",component:p("/docs/user/quick-start/package-management/","553"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/quick-start/package-management/eopkg",component:p("/docs/user/quick-start/package-management/eopkg","5d0"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/command-line/",component:p("/docs/user/software/command-line/","c34"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/desktops/",component:p("/docs/user/software/desktops/","775"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/development/",component:p("/docs/user/software/development/","43a"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/development/android",component:p("/docs/user/software/development/android","9bb"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/development/containers",component:p("/docs/user/software/development/containers","738"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/development/java",component:p("/docs/user/software/development/java","323"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/development/postgresql",component:p("/docs/user/software/development/postgresql","6f9"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/development/r-and-rstudio",component:p("/docs/user/software/development/r-and-rstudio","c90"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/development/rust",component:p("/docs/user/software/development/rust","1e5"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/development/web",component:p("/docs/user/software/development/web","c52"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/gaming/",component:p("/docs/user/software/gaming/","85f"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/localization/ibus",component:p("/docs/user/software/localization/ibus","5a9"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/networking/samba",component:p("/docs/user/software/networking/samba","857"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/networking/tigervnc",component:p("/docs/user/software/networking/tigervnc","ee9"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/networking/wireshark",component:p("/docs/user/software/networking/wireshark","355"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/networking/xrdp",component:p("/docs/user/software/networking/xrdp","0e1"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/sound/",component:p("/docs/user/software/sound/","8b4"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/third-party/",component:p("/docs/user/software/third-party/","160"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/utilities/ksysguard",component:p("/docs/user/software/utilities/ksysguard","e1f"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/utilities/kwallet",component:p("/docs/user/software/utilities/kwallet","b1a"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/virtualization/virtualbox",component:p("/docs/user/software/virtualization/virtualbox","338"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/web/obs",component:p("/docs/user/software/web/obs","753"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/troubleshooting/",component:p("/docs/user/troubleshooting/","9be"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/troubleshooting/boot-rescue",component:p("/docs/user/troubleshooting/boot-rescue","9ee"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/troubleshooting/installation",component:p("/docs/user/troubleshooting/installation","a33"),exact:!0,sidebar:"userSidebar"}]},{path:"/",component:p("/","b57"),exact:!0},{path:"*",component:p("*")}]},1347:(e,t,n)=>{var r,o;!function(){var a,i,s,l,u,c,d,p,f,m,g,h,b,v,y,w,k,S,E,_,x,O,P,C,T,I,A,L,N,j,R=function(e){var t=new R.Builder;return t.pipeline.add(R.trimmer,R.stopWordFilter,R.stemmer),t.searchPipeline.add(R.stemmer),e.call(t,t),t.build()};R.version="2.3.9",R.utils={},R.utils.warn=(a=this,function(e){a.console&&console.warn&&console.warn(e)}),R.utils.asString=function(e){return null==e?"":e.toString()},R.utils.clone=function(e){if(null==e)return e;for(var t=Object.create(null),n=Object.keys(e),r=0;r0){var l=R.utils.clone(t)||{};l.position=[i,s],l.index=o.length,o.push(new R.Token(n.slice(i,a),l))}i=a+1}}return o},R.tokenizer.separator=/[\s\-]+/,R.Pipeline=function(){this._stack=[]},R.Pipeline.registeredFunctions=Object.create(null),R.Pipeline.registerFunction=function(e,t){t in this.registeredFunctions&&R.utils.warn("Overwriting existing registered function: "+t),e.label=t,R.Pipeline.registeredFunctions[e.label]=e},R.Pipeline.warnIfFunctionNotRegistered=function(e){e.label&&e.label in this.registeredFunctions||R.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},R.Pipeline.load=function(e){var t=new R.Pipeline;return e.forEach((function(e){var n=R.Pipeline.registeredFunctions[e];if(!n)throw new Error("Cannot load unregistered function: "+e);t.add(n)})),t},R.Pipeline.prototype.add=function(){Array.prototype.slice.call(arguments).forEach((function(e){R.Pipeline.warnIfFunctionNotRegistered(e),this._stack.push(e)}),this)},R.Pipeline.prototype.after=function(e,t){R.Pipeline.warnIfFunctionNotRegistered(t);var n=this._stack.indexOf(e);if(-1==n)throw new Error("Cannot find existingFn");n+=1,this._stack.splice(n,0,t)},R.Pipeline.prototype.before=function(e,t){R.Pipeline.warnIfFunctionNotRegistered(t);var n=this._stack.indexOf(e);if(-1==n)throw new Error("Cannot find existingFn");this._stack.splice(n,0,t)},R.Pipeline.prototype.remove=function(e){var t=this._stack.indexOf(e);-1!=t&&this._stack.splice(t,1)},R.Pipeline.prototype.run=function(e){for(var t=this._stack.length,n=0;n1&&(ae&&(n=o),a!=e);)r=n-t,o=t+Math.floor(r/2),a=this.elements[2*o];return a==e||a>e?2*o:as?u+=2:i==s&&(t+=n[l+1]*r[u+1],l+=2,u+=2);return t},R.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},R.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),t=1,n=0;t0){var a,i=o.str.charAt(0);i in o.node.edges?a=o.node.edges[i]:(a=new R.TokenSet,o.node.edges[i]=a),1==o.str.length&&(a.final=!0),r.push({node:a,editsRemaining:o.editsRemaining,str:o.str.slice(1)})}if(0!=o.editsRemaining){if("*"in o.node.edges)var s=o.node.edges["*"];else{s=new R.TokenSet;o.node.edges["*"]=s}if(0==o.str.length&&(s.final=!0),r.push({node:s,editsRemaining:o.editsRemaining-1,str:o.str}),o.str.length>1&&r.push({node:o.node,editsRemaining:o.editsRemaining-1,str:o.str.slice(1)}),1==o.str.length&&(o.node.final=!0),o.str.length>=1){if("*"in o.node.edges)var l=o.node.edges["*"];else{l=new R.TokenSet;o.node.edges["*"]=l}1==o.str.length&&(l.final=!0),r.push({node:l,editsRemaining:o.editsRemaining-1,str:o.str.slice(1)})}if(o.str.length>1){var u,c=o.str.charAt(0),d=o.str.charAt(1);d in o.node.edges?u=o.node.edges[d]:(u=new R.TokenSet,o.node.edges[d]=u),1==o.str.length&&(u.final=!0),r.push({node:u,editsRemaining:o.editsRemaining-1,str:c+o.str.slice(2)})}}}return n},R.TokenSet.fromString=function(e){for(var t=new R.TokenSet,n=t,r=0,o=e.length;r=e;t--){var n=this.uncheckedNodes[t],r=n.child.toString();r in this.minimizedNodes?n.parent.edges[n.char]=this.minimizedNodes[r]:(n.child._str=r,this.minimizedNodes[r]=n.child),this.uncheckedNodes.pop()}},R.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},R.Index.prototype.search=function(e){return this.query((function(t){new R.QueryParser(e,t).parse()}))},R.Index.prototype.query=function(e){for(var t=new R.Query(this.fields),n=Object.create(null),r=Object.create(null),o=Object.create(null),a=Object.create(null),i=Object.create(null),s=0;s1?1:e},R.Builder.prototype.k1=function(e){this._k1=e},R.Builder.prototype.add=function(e,t){var n=e[this._ref],r=Object.keys(this._fields);this._documents[n]=t||{},this.documentCount+=1;for(var o=0;o=this.length)return R.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},R.QueryLexer.prototype.width=function(){return this.pos-this.start},R.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},R.QueryLexer.prototype.backup=function(){this.pos-=1},R.QueryLexer.prototype.acceptDigitRun=function(){var e,t;do{t=(e=this.next()).charCodeAt(0)}while(t>47&&t<58);e!=R.QueryLexer.EOS&&this.backup()},R.QueryLexer.prototype.more=function(){return this.pos1&&(e.backup(),e.emit(R.QueryLexer.TERM)),e.ignore(),e.more())return R.QueryLexer.lexText},R.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(R.QueryLexer.EDIT_DISTANCE),R.QueryLexer.lexText},R.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(R.QueryLexer.BOOST),R.QueryLexer.lexText},R.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(R.QueryLexer.TERM)},R.QueryLexer.termSeparator=R.tokenizer.separator,R.QueryLexer.lexText=function(e){for(;;){var t=e.next();if(t==R.QueryLexer.EOS)return R.QueryLexer.lexEOS;if(92!=t.charCodeAt(0)){if(":"==t)return R.QueryLexer.lexField;if("~"==t)return e.backup(),e.width()>0&&e.emit(R.QueryLexer.TERM),R.QueryLexer.lexEditDistance;if("^"==t)return e.backup(),e.width()>0&&e.emit(R.QueryLexer.TERM),R.QueryLexer.lexBoost;if("+"==t&&1===e.width())return e.emit(R.QueryLexer.PRESENCE),R.QueryLexer.lexText;if("-"==t&&1===e.width())return e.emit(R.QueryLexer.PRESENCE),R.QueryLexer.lexText;if(t.match(R.QueryLexer.termSeparator))return R.QueryLexer.lexTerm}else e.escapeCharacter()}},R.QueryParser=function(e,t){this.lexer=new R.QueryLexer(e),this.query=t,this.currentClause={},this.lexemeIdx=0},R.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=R.QueryParser.parseClause;e;)e=e(this);return this.query},R.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},R.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},R.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},R.QueryParser.parseClause=function(e){var t=e.peekLexeme();if(null!=t)switch(t.type){case R.QueryLexer.PRESENCE:return R.QueryParser.parsePresence;case R.QueryLexer.FIELD:return R.QueryParser.parseField;case R.QueryLexer.TERM:return R.QueryParser.parseTerm;default:var n="expected either a field or a term, found "+t.type;throw t.str.length>=1&&(n+=" with value '"+t.str+"'"),new R.QueryParseError(n,t.start,t.end)}},R.QueryParser.parsePresence=function(e){var t=e.consumeLexeme();if(null!=t){switch(t.str){case"-":e.currentClause.presence=R.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=R.Query.presence.REQUIRED;break;default:var n="unrecognised presence operator'"+t.str+"'";throw new R.QueryParseError(n,t.start,t.end)}var r=e.peekLexeme();if(null==r){n="expecting term or field, found nothing";throw new R.QueryParseError(n,t.start,t.end)}switch(r.type){case R.QueryLexer.FIELD:return R.QueryParser.parseField;case R.QueryLexer.TERM:return R.QueryParser.parseTerm;default:n="expecting term or field, found '"+r.type+"'";throw new R.QueryParseError(n,r.start,r.end)}}},R.QueryParser.parseField=function(e){var t=e.consumeLexeme();if(null!=t){if(-1==e.query.allFields.indexOf(t.str)){var n=e.query.allFields.map((function(e){return"'"+e+"'"})).join(", "),r="unrecognised field '"+t.str+"', possible fields: "+n;throw new R.QueryParseError(r,t.start,t.end)}e.currentClause.fields=[t.str];var o=e.peekLexeme();if(null==o){r="expecting term, found nothing";throw new R.QueryParseError(r,t.start,t.end)}if(o.type===R.QueryLexer.TERM)return R.QueryParser.parseTerm;r="expecting term, found '"+o.type+"'";throw new R.QueryParseError(r,o.start,o.end)}},R.QueryParser.parseTerm=function(e){var t=e.consumeLexeme();if(null!=t){e.currentClause.term=t.str.toLowerCase(),-1!=t.str.indexOf("*")&&(e.currentClause.usePipeline=!1);var n=e.peekLexeme();if(null!=n)switch(n.type){case R.QueryLexer.TERM:return e.nextClause(),R.QueryParser.parseTerm;case R.QueryLexer.FIELD:return e.nextClause(),R.QueryParser.parseField;case R.QueryLexer.EDIT_DISTANCE:return R.QueryParser.parseEditDistance;case R.QueryLexer.BOOST:return R.QueryParser.parseBoost;case R.QueryLexer.PRESENCE:return e.nextClause(),R.QueryParser.parsePresence;default:var r="Unexpected lexeme type '"+n.type+"'";throw new R.QueryParseError(r,n.start,n.end)}else e.nextClause()}},R.QueryParser.parseEditDistance=function(e){var t=e.consumeLexeme();if(null!=t){var n=parseInt(t.str,10);if(isNaN(n)){var r="edit distance must be numeric";throw new R.QueryParseError(r,t.start,t.end)}e.currentClause.editDistance=n;var o=e.peekLexeme();if(null!=o)switch(o.type){case R.QueryLexer.TERM:return e.nextClause(),R.QueryParser.parseTerm;case R.QueryLexer.FIELD:return e.nextClause(),R.QueryParser.parseField;case R.QueryLexer.EDIT_DISTANCE:return R.QueryParser.parseEditDistance;case R.QueryLexer.BOOST:return R.QueryParser.parseBoost;case R.QueryLexer.PRESENCE:return e.nextClause(),R.QueryParser.parsePresence;default:r="Unexpected lexeme type '"+o.type+"'";throw new R.QueryParseError(r,o.start,o.end)}else e.nextClause()}},R.QueryParser.parseBoost=function(e){var t=e.consumeLexeme();if(null!=t){var n=parseInt(t.str,10);if(isNaN(n)){var r="boost must be numeric";throw new R.QueryParseError(r,t.start,t.end)}e.currentClause.boost=n;var o=e.peekLexeme();if(null!=o)switch(o.type){case R.QueryLexer.TERM:return e.nextClause(),R.QueryParser.parseTerm;case R.QueryLexer.FIELD:return e.nextClause(),R.QueryParser.parseField;case R.QueryLexer.EDIT_DISTANCE:return R.QueryParser.parseEditDistance;case R.QueryLexer.BOOST:return R.QueryParser.parseBoost;case R.QueryLexer.PRESENCE:return e.nextClause(),R.QueryParser.parsePresence;default:r="Unexpected lexeme type '"+o.type+"'";throw new R.QueryParseError(r,o.start,o.end)}else e.nextClause()}},void 0===(o="function"==typeof(r=function(){return R})?r.call(t,n,t,e):r)||(e.exports=o)}()},7582:(e,t,n)=>{"use strict";n.d(t,{_:()=>o,t:()=>a});var r=n(7294);const o=r.createContext(!1);function a(e){let{children:t}=e;const[n,a]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{a(!0)}),[]),r.createElement(o.Provider,{value:n},t)}},9017:(e,t,n)=>{"use strict";var r=n(7294),o=n(3935),a=n(3727),i=n(405),s=n(70);const l=[n(5335),n(212),n(1803),n(8329)];var u=n(2717),c=n(6550),d=n(8790);function p(e){let{children:t}=e;return r.createElement(r.Fragment,null,t)}var f=n(7462),m=n(4425),g=n(1199),h=n(4132),b=n(9989),v=n(168),y=n(4739),w=n(8398),k=n(6424),S=n(9298);function E(){const{i18n:{defaultLocale:e,localeConfigs:t}}=(0,g.Z)(),n=(0,y.l)();return r.createElement(m.Z,null,Object.entries(t).map((e=>{let[t,{htmlLang:o}]=e;return r.createElement("link",{key:t,rel:"alternate",href:n.createUrl({locale:t,fullyQualified:!0}),hrefLang:o})})),r.createElement("link",{rel:"alternate",href:n.createUrl({locale:e,fullyQualified:!0}),hrefLang:"x-default"}))}function _(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,g.Z)(),o=function(){const{siteConfig:{url:e}}=(0,g.Z)(),{pathname:t}=(0,c.TH)();return e+(0,h.Z)(t)}(),a=t?`${n}${t}`:o;return r.createElement(m.Z,null,r.createElement("meta",{property:"og:url",content:a}),r.createElement("link",{rel:"canonical",href:a}))}function x(){const{i18n:{currentLocale:e}}=(0,g.Z)(),{metadata:t,image:n}=(0,b.L)();return r.createElement(r.Fragment,null,r.createElement(m.Z,null,r.createElement("meta",{name:"twitter:card",content:"summary_large_image"}),r.createElement("body",{className:w.h})),n&&r.createElement(v.d,{image:n}),r.createElement(_,null),r.createElement(E,null),r.createElement(S.Z,{tag:k.HX,locale:e}),r.createElement(m.Z,null,t.map(((e,t)=>r.createElement("meta",(0,f.Z)({key:t},e))))))}const O=new Map;function P(e){if(O.has(e.pathname))return{...e,pathname:O.get(e.pathname)};if((0,d.f)(u.Z,e.pathname).some((e=>{let{route:t}=e;return!0===t.exact})))return O.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return O.set(e.pathname,t),{...e,pathname:t}}var C=n(7582),T=n(536);function I(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r{const r=t.default?.[e]??t[e];return r?.(...n)}));return()=>o.forEach((e=>e?.()))}const A=function(e){let{children:t,location:n,previousLocation:o}=e;return(0,r.useLayoutEffect)((()=>{o!==n&&(!function(e){let{location:t,previousLocation:n}=e;if(!n)return;const r=t.pathname===n.pathname,o=t.hash===n.hash,a=t.search===n.search;if(r&&o&&!a)return;const{hash:i}=t;if(i){const e=decodeURIComponent(i.substring(1)),t=document.getElementById(e);t?.scrollIntoView()}else window.scrollTo(0,0)}({location:n,previousLocation:o}),I("onRouteDidUpdate",{previousLocation:o,location:n}))}),[o,n]),t};function L(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,d.f)(u.Z,e))).flat();return Promise.all(t.map((e=>e.route.component.preload?.())))}class N extends r.Component{previousLocation;routeUpdateCleanupCb;constructor(e){super(e),this.previousLocation=null,this.routeUpdateCleanupCb=s.Z.canUseDOM?I("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const n=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=I("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),L(n.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:t}=this.props;return r.createElement(A,{previousLocation:this.previousLocation,location:t},r.createElement(c.AW,{location:t,render:()=>e}))}}const j=N,R="__docusaurus-base-url-issue-banner-container",D="__docusaurus-base-url-issue-banner",M="__docusaurus-base-url-issue-banner-suggestion-container",F="__DOCUSAURUS_INSERT_BASEURL_BANNER";function B(e){return`\nwindow['${F}'] = true;\n\ndocument.addEventListener('DOMContentLoaded', maybeInsertBanner);\n\nfunction maybeInsertBanner() {\n var shouldInsert = window['${F}'];\n shouldInsert && insertBanner();\n}\n\nfunction insertBanner() {\n var bannerContainer = document.getElementById('${R}');\n if (!bannerContainer) {\n return;\n }\n var bannerHtml = ${JSON.stringify(function(e){return`\n
\n

Your Docusaurus site did not load properly.

\n

A very common reason is a wrong site baseUrl configuration.

\n

Current configured baseUrl = ${e} ${"/"===e?" (default value)":""}

\n

We suggest trying baseUrl =

\n
\n`}(e)).replace(/{window[F]=!1}),[]),r.createElement(r.Fragment,null,!s.Z.canUseDOM&&r.createElement(m.Z,null,r.createElement("script",null,B(e))),r.createElement("div",{id:R}))}function q(){const{siteConfig:{baseUrl:e,baseUrlIssueBanner:t}}=(0,g.Z)(),{pathname:n}=(0,c.TH)();return t&&n===e?r.createElement(z,null):null}function U(){const{siteConfig:{favicon:e,title:t,noIndex:n},i18n:{currentLocale:o,localeConfigs:a}}=(0,g.Z)(),i=(0,h.Z)(e),{htmlLang:s,direction:l}=a[o];return r.createElement(m.Z,null,r.createElement("html",{lang:s,dir:l}),r.createElement("title",null,t),r.createElement("meta",{property:"og:title",content:t}),r.createElement("meta",{name:"viewport",content:"width=device-width, initial-scale=1.0"}),n&&r.createElement("meta",{name:"robots",content:"noindex, nofollow"}),e&&r.createElement("link",{rel:"icon",href:i}))}var $=n(7590);function H(){const e=(0,d.H)(u.Z),t=(0,c.TH)();return r.createElement($.Z,null,r.createElement(T.M,null,r.createElement(C.t,null,r.createElement(p,null,r.createElement(U,null),r.createElement(x,null),r.createElement(q,null),r.createElement(j,{location:P(t)},e)))))}var G=n(6887);const V=function(e){try{return document.createElement("link").relList.supports(e)}catch{return!1}}("prefetch")?function(e){return new Promise(((t,n)=>{if("undefined"==typeof document)return void n();const r=document.createElement("link");r.setAttribute("rel","prefetch"),r.setAttribute("href",e),r.onload=()=>t(),r.onerror=()=>n();const o=document.getElementsByTagName("head")[0]??document.getElementsByName("script")[0]?.parentNode;o?.appendChild(r)}))}:function(e){return new Promise(((t,n)=>{const r=new XMLHttpRequest;r.open("GET",e,!0),r.withCredentials=!0,r.onload=()=>{200===r.status?t():n()},r.send(null)}))};var Q=n(4912);const Z=new Set,W=new Set,K=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,Y={prefetch(e){if(!(e=>!K()&&!W.has(e)&&!Z.has(e))(e))return!1;Z.add(e);const t=(0,d.f)(u.Z,e).flatMap((e=>{return t=e.route.path,Object.entries(G).filter((e=>{let[n]=e;return n.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,Q.Z)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?V(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!K()&&!W.has(e))(e)&&(W.add(e),L(e))},X=Object.freeze(Y);if(s.Z.canUseDOM){window.docusaurus=X;const e=o.hydrate;L(window.location.pathname).then((()=>{e(r.createElement(i.B6,null,r.createElement(a.VK,null,r.createElement(H,null))),document.getElementById("__docusaurus"))}))}},536:(e,t,n)=>{"use strict";n.d(t,{_:()=>c,M:()=>d});var r=n(7294),o=n(6809);const a=JSON.parse('{"@cmfcmf/docusaurus-search-local":{"default":{"titleBoost":5,"contentBoost":1,"tagsBoost":3,"parentCategoriesBoost":2,"indexDocSidebarParentCategories":0,"maxSearchResults":8}},"docusaurus-plugin-content-docs":{"default":{"path":"/docs","versions":[{"name":"current","label":"Next","isLast":true,"path":"/docs","mainDocId":"user/intro","docs":[{"id":"packaging/advanced-config/eopkg-configuration","path":"/docs/packaging/advanced-config/eopkg-configuration","sidebar":"packagingSidebar"},{"id":"packaging/advanced-config/local-repository","path":"/docs/packaging/advanced-config/local-repository","sidebar":"packagingSidebar"},{"id":"packaging/creating-a-new-package","path":"/docs/packaging/creating-a-new-package","sidebar":"packagingSidebar"},{"id":"packaging/git-basics","path":"/docs/packaging/git-basics","sidebar":"packagingSidebar"},{"id":"packaging/index","path":"/docs/packaging/","sidebar":"packagingSidebar"},{"id":"packaging/package.yml","path":"/docs/packaging/package.yml","sidebar":"packagingSidebar"},{"id":"packaging/packaging-changes","path":"/docs/packaging/packaging-changes","sidebar":"packagingSidebar"},{"id":"packaging/packaging-practices","path":"/docs/packaging/packaging-practices","sidebar":"packagingSidebar"},{"id":"packaging/prepare-for-packaging","path":"/docs/packaging/prepare-for-packaging","sidebar":"packagingSidebar"},{"id":"packaging/procedures/maintainership","path":"/docs/packaging/procedures/maintainership","sidebar":"packagingSidebar"},{"id":"packaging/procedures/package-inclusion","path":"/docs/packaging/procedures/package-inclusion","sidebar":"packagingSidebar"},{"id":"packaging/procedures/release-processes","path":"/docs/packaging/procedures/release-processes","sidebar":"packagingSidebar"},{"id":"packaging/procedures/request-a-package","path":"/docs/packaging/procedures/request-a-package","sidebar":"packagingSidebar"},{"id":"packaging/procedures/request-a-package-update","path":"/docs/packaging/procedures/request-a-package-update","sidebar":"packagingSidebar"},{"id":"packaging/submitting-a-pull-request","path":"/docs/packaging/submitting-a-pull-request","sidebar":"packagingSidebar"},{"id":"packaging/testing-a-package","path":"/docs/packaging/testing-a-package","sidebar":"packagingSidebar"},{"id":"packaging/update-dev-environment","path":"/docs/packaging/update-dev-environment","sidebar":"packagingSidebar"},{"id":"packaging/updating-an-existing-package","path":"/docs/packaging/updating-an-existing-package","sidebar":"packagingSidebar"},{"id":"packaging/your-first-package-update","path":"/docs/packaging/your-first-package-update","sidebar":"packagingSidebar"},{"id":"user/contributing/community-guidelines","path":"/docs/user/contributing/community-guidelines","sidebar":"userSidebar"},{"id":"user/contributing/getting-involved","path":"/docs/user/contributing/getting-involved","sidebar":"userSidebar"},{"id":"user/contributing/testing-an-iso","path":"/docs/user/contributing/testing-an-iso","sidebar":"userSidebar"},{"id":"user/editions/budgie/configuration","path":"/docs/user/editions/budgie/configuration","sidebar":"userSidebar"},{"id":"user/editions/budgie/index","path":"/docs/user/editions/budgie/","sidebar":"userSidebar"},{"id":"user/editions/budgie/tips-and-tricks","path":"/docs/user/editions/budgie/tips-and-tricks","sidebar":"userSidebar"},{"id":"user/editions/gnome/configuration","path":"/docs/user/editions/gnome/configuration","sidebar":"userSidebar"},{"id":"user/editions/gnome/index","path":"/docs/user/editions/gnome/","sidebar":"userSidebar"},{"id":"user/editions/gnome/tips-and-tricks","path":"/docs/user/editions/gnome/tips-and-tricks","sidebar":"userSidebar"},{"id":"user/editions/index","path":"/docs/user/editions/","sidebar":"userSidebar"},{"id":"user/editions/mate/configuration","path":"/docs/user/editions/mate/configuration","sidebar":"userSidebar"},{"id":"user/editions/mate/index","path":"/docs/user/editions/mate/","sidebar":"userSidebar"},{"id":"user/editions/mate/tips-and-tricks","path":"/docs/user/editions/mate/tips-and-tricks","sidebar":"userSidebar"},{"id":"user/editions/plasma/configuration","path":"/docs/user/editions/plasma/configuration","sidebar":"userSidebar"},{"id":"user/editions/plasma/index","path":"/docs/user/editions/plasma/","sidebar":"userSidebar"},{"id":"user/editions/plasma/tips-and-tricks","path":"/docs/user/editions/plasma/tips-and-tricks","sidebar":"userSidebar"},{"id":"user/hardware/compatibility/laptops","path":"/docs/user/hardware/compatibility/laptops","sidebar":"userSidebar"},{"id":"user/hardware/compatibility/wifi","path":"/docs/user/hardware/compatibility/wifi","sidebar":"userSidebar"},{"id":"user/hardware/index","path":"/docs/user/hardware/","sidebar":"userSidebar"},{"id":"user/hardware/mobile/android","path":"/docs/user/hardware/mobile/android","sidebar":"userSidebar"},{"id":"user/hardware/mobile/apple","path":"/docs/user/hardware/mobile/apple","sidebar":"userSidebar"},{"id":"user/hardware/peripherals/mice-and-touchpads","path":"/docs/user/hardware/peripherals/mice-and-touchpads","sidebar":"userSidebar"},{"id":"user/hardware/peripherals/midi-keyboard","path":"/docs/user/hardware/peripherals/midi-keyboard","sidebar":"userSidebar"},{"id":"user/hardware/peripherals/printers-and-scanners","path":"/docs/user/hardware/peripherals/printers-and-scanners","sidebar":"userSidebar"},{"id":"user/intro","path":"/docs/user/intro","sidebar":"userSidebar"},{"id":"user/package-management/basics","path":"/docs/user/package-management/basics","sidebar":"userSidebar"},{"id":"user/package-management/history-and-rollback","path":"/docs/user/package-management/history-and-rollback","sidebar":"userSidebar"},{"id":"user/package-management/repo-management","path":"/docs/user/package-management/repo-management","sidebar":"userSidebar"},{"id":"user/quick-start/boot-management","path":"/docs/user/quick-start/boot-management","sidebar":"userSidebar"},{"id":"user/quick-start/default-applications","path":"/docs/user/quick-start/default-applications","sidebar":"userSidebar"},{"id":"user/quick-start/installation/disks","path":"/docs/user/quick-start/installation/disks","sidebar":"userSidebar"},{"id":"user/quick-start/installation/index","path":"/docs/user/quick-start/installation/","sidebar":"userSidebar"},{"id":"user/quick-start/installation/secure-boot","path":"/docs/user/quick-start/installation/secure-boot","sidebar":"userSidebar"},{"id":"user/quick-start/package-management/eopkg","path":"/docs/user/quick-start/package-management/eopkg","sidebar":"userSidebar"},{"id":"user/quick-start/package-management/index","path":"/docs/user/quick-start/package-management/","sidebar":"userSidebar"},{"id":"user/software/command-line/index","path":"/docs/user/software/command-line/","sidebar":"userSidebar"},{"id":"user/software/desktops/index","path":"/docs/user/software/desktops/","sidebar":"userSidebar"},{"id":"user/software/development/android","path":"/docs/user/software/development/android","sidebar":"userSidebar"},{"id":"user/software/development/containers","path":"/docs/user/software/development/containers","sidebar":"userSidebar"},{"id":"user/software/development/index","path":"/docs/user/software/development/","sidebar":"userSidebar"},{"id":"user/software/development/java","path":"/docs/user/software/development/java","sidebar":"userSidebar"},{"id":"user/software/development/postgresql","path":"/docs/user/software/development/postgresql","sidebar":"userSidebar"},{"id":"user/software/development/r-and-rstudio","path":"/docs/user/software/development/r-and-rstudio","sidebar":"userSidebar"},{"id":"user/software/development/rust","path":"/docs/user/software/development/rust","sidebar":"userSidebar"},{"id":"user/software/development/web","path":"/docs/user/software/development/web","sidebar":"userSidebar"},{"id":"user/software/gaming/index","path":"/docs/user/software/gaming/","sidebar":"userSidebar"},{"id":"user/software/localization/ibus","path":"/docs/user/software/localization/ibus","sidebar":"userSidebar"},{"id":"user/software/networking/samba","path":"/docs/user/software/networking/samba","sidebar":"userSidebar"},{"id":"user/software/networking/tigervnc","path":"/docs/user/software/networking/tigervnc","sidebar":"userSidebar"},{"id":"user/software/networking/wireshark","path":"/docs/user/software/networking/wireshark","sidebar":"userSidebar"},{"id":"user/software/networking/xrdp","path":"/docs/user/software/networking/xrdp","sidebar":"userSidebar"},{"id":"user/software/sound/index","path":"/docs/user/software/sound/","sidebar":"userSidebar"},{"id":"user/software/third-party/index","path":"/docs/user/software/third-party/","sidebar":"userSidebar"},{"id":"user/software/utilities/ksysguard","path":"/docs/user/software/utilities/ksysguard","sidebar":"userSidebar"},{"id":"user/software/utilities/kwallet","path":"/docs/user/software/utilities/kwallet","sidebar":"userSidebar"},{"id":"user/software/virtualization/virtualbox","path":"/docs/user/software/virtualization/virtualbox","sidebar":"userSidebar"},{"id":"user/software/web/obs","path":"/docs/user/software/web/obs","sidebar":"userSidebar"},{"id":"user/troubleshooting/boot-rescue","path":"/docs/user/troubleshooting/boot-rescue","sidebar":"userSidebar"},{"id":"user/troubleshooting/index","path":"/docs/user/troubleshooting/","sidebar":"userSidebar"},{"id":"user/troubleshooting/installation","path":"/docs/user/troubleshooting/installation","sidebar":"userSidebar"},{"id":"/category/quick-start","path":"/docs/category/quick-start","sidebar":"userSidebar"},{"id":"/category/contributing","path":"/docs/category/contributing","sidebar":"userSidebar"},{"id":"/category/compatibility","path":"/docs/category/compatibility","sidebar":"userSidebar"},{"id":"/category/mobile","path":"/docs/category/mobile","sidebar":"userSidebar"},{"id":"/category/peripherals","path":"/docs/category/peripherals","sidebar":"userSidebar"},{"id":"/category/package-management","path":"/docs/category/package-management","sidebar":"userSidebar"},{"id":"/category/software","path":"/docs/category/software","sidebar":"userSidebar"},{"id":"/category/localization","path":"/docs/category/localization","sidebar":"userSidebar"},{"id":"/category/networking","path":"/docs/category/networking","sidebar":"userSidebar"},{"id":"/category/utilities","path":"/docs/category/utilities","sidebar":"userSidebar"},{"id":"/category/virtualization","path":"/docs/category/virtualization","sidebar":"userSidebar"},{"id":"/category/web","path":"/docs/category/web","sidebar":"userSidebar"},{"id":"/category/advanced-configuration","path":"/docs/category/advanced-configuration","sidebar":"packagingSidebar"},{"id":"/category/procedures","path":"/docs/category/procedures","sidebar":"packagingSidebar"}],"draftIds":[],"sidebars":{"userSidebar":{"link":{"path":"/docs/user/intro","label":"user/intro"}},"packagingSidebar":{"link":{"path":"/docs/packaging/","label":"packaging/index"}}}}],"breadcrumbs":true}}}'),i=JSON.parse('{"defaultLocale":"en","locales":["en"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"}}}');var s=n(7529);const l=JSON.parse('{"docusaurusVersion":"2.4.1","siteVersion":"0.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"2.4.1"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"2.4.1"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"2.4.1"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"2.4.1"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"2.4.1"},"@cmfcmf/docusaurus-search-local":{"type":"package","name":"@cmfcmf/docusaurus-search-local","version":"1.1.0"},"docusaurus-plugin-ideal-image":{"type":"package","name":"@docusaurus/plugin-ideal-image","version":"2.4.1"}}}'),u={siteConfig:o.default,siteMetadata:l,globalData:a,i18n:i,codeTranslations:s},c=r.createContext(u);function d(e){let{children:t}=e;return r.createElement(c.Provider,{value:u},t)}},7590:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var r=n(7294),o=n(70),a=n(4425),i=n(482),s=n(3003);function l(e){let{error:t,tryAgain:n}=e;return r.createElement("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"}},r.createElement("h1",{style:{fontSize:"3rem"}},"This page crashed"),r.createElement("button",{type:"button",onClick:n,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"}},"Try again"),r.createElement(u,{error:t}))}function u(e){let{error:t}=e;const n=(0,i.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return r.createElement("p",{style:{whiteSpace:"pre-wrap"}},n)}function c(e){let{error:t,tryAgain:n}=e;return r.createElement(p,{fallback:()=>r.createElement(l,{error:t,tryAgain:n})},r.createElement(a.Z,null,r.createElement("title",null,"Page Error")),r.createElement(s.Z,null,r.createElement(l,{error:t,tryAgain:n})))}const d=e=>r.createElement(c,e);class p extends r.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){o.Z.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:t}=this.state;if(t){const e={error:t,tryAgain:()=>this.setState({error:null})};return(this.props.fallback??d)(e)}return e??null}}},70:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});const r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,o={canUseDOM:r,canUseEventListeners:r&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&"screen"in window}},4425:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294),o=n(405);function a(e){return r.createElement(o.ql,e)}},9415:(e,t,n)=>{"use strict";n.d(t,{Z:()=>f});var r=n(7462),o=n(7294),a=n(3727),i=n(482),s=n(1199),l=n(7561),u=n(70);const c=o.createContext({collectLink:()=>{}});var d=n(4132);function p(e,t){let{isNavLink:n,to:p,href:f,activeClassName:m,isActive:g,"data-noBrokenLinkCheck":h,autoAddBaseUrl:b=!0,...v}=e;const{siteConfig:{trailingSlash:y,baseUrl:w}}=(0,s.Z)(),{withBaseUrl:k}=(0,d.C)(),S=(0,o.useContext)(c),E=(0,o.useRef)(null);(0,o.useImperativeHandle)(t,(()=>E.current));const _=p||f;const x=(0,l.Z)(_),O=_?.replace("pathname://","");let P=void 0!==O?(C=O,b&&(e=>e.startsWith("/"))(C)?k(C):C):void 0;var C;P&&x&&(P=(0,i.applyTrailingSlash)(P,{trailingSlash:y,baseUrl:w}));const T=(0,o.useRef)(!1),I=n?a.OL:a.rU,A=u.Z.canUseIntersectionObserver,L=(0,o.useRef)(),N=()=>{T.current||null==P||(window.docusaurus.preload(P),T.current=!0)};(0,o.useEffect)((()=>(!A&&x&&null!=P&&window.docusaurus.prefetch(P),()=>{A&&L.current&&L.current.disconnect()})),[L,P,A,x]);const j=P?.startsWith("#")??!1,R=!P||!x||j;return R||h||S.collectLink(P),R?o.createElement("a",(0,r.Z)({ref:E,href:P},_&&!x&&{target:"_blank",rel:"noopener noreferrer"},v)):o.createElement(I,(0,r.Z)({},v,{onMouseEnter:N,onTouchStart:N,innerRef:e=>{E.current=e,A&&e&&x&&(L.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(L.current.unobserve(e),L.current.disconnect(),null!=P&&window.docusaurus.prefetch(P))}))})),L.current.observe(e))},to:P},n&&{isActive:g,activeClassName:m}))}const f=o.forwardRef(p)},6062:(e,t,n)=>{"use strict";n.d(t,{Z:()=>l,I:()=>s});var r=n(7294);function o(e,t){const n=e.split(/(\{\w+\})/).map(((e,n)=>{if(n%2==1){const n=t?.[e.slice(1,-1)];if(void 0!==n)return n}return e}));return n.some((e=>(0,r.isValidElement)(e)))?n.map(((e,t)=>(0,r.isValidElement)(e)?r.cloneElement(e,{key:t}):e)).filter((e=>""!==e)):n.join("")}var a=n(7529);function i(e){let{id:t,message:n}=e;if(void 0===t&&void 0===n)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return a[t??n]??n??t}function s(e,t){let{message:n,id:r}=e;return o(i({message:n,id:r}),t)}function l(e){let{children:t,id:n,values:a}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal children",t),new Error("The Docusaurus component only accept simple string values");const s=i({message:t,id:n});return r.createElement(r.Fragment,null,o(s,a))}},9277:(e,t,n)=>{"use strict";n.d(t,{m:()=>r});const r="default"},7561:(e,t,n)=>{"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function o(e){return void 0!==e&&!r(e)}n.d(t,{Z:()=>o,b:()=>r})},4132:(e,t,n)=>{"use strict";n.d(t,{C:()=>i,Z:()=>s});var r=n(7294),o=n(1199),a=n(7561);function i(){const{siteConfig:{baseUrl:e,url:t}}=(0,o.Z)(),n=(0,r.useCallback)(((n,r)=>function(e,t,n,r){let{forcePrependBaseUrl:o=!1,absolute:i=!1}=void 0===r?{}:r;if(!n||n.startsWith("#")||(0,a.b)(n))return n;if(o)return t+n.replace(/^\//,"");if(n===t.replace(/\/$/,""))return t;const s=n.startsWith(t)?n:t+n.replace(/^\//,"");return i?e+s:s}(t,e,n,r)),[t,e]);return{withBaseUrl:n}}function s(e,t){void 0===t&&(t={});const{withBaseUrl:n}=i();return n(e,t)}},1199:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294),o=n(536);function a(){return(0,r.useContext)(o._)}},9162:(e,t,n)=>{"use strict";n.d(t,{OD:()=>a,eZ:()=>i});var r=n(1199),o=n(9277);function a(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,r.Z)();return e}()[e];if(!n&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}function i(e,t,n){void 0===t&&(t=o.m),void 0===n&&(n={});const r=a(e),i=r?.[t];if(!i&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return i}},573:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294),o=n(7582);function a(){return(0,r.useContext)(o._)}},4912:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});const r=e=>"object"==typeof e&&!!e&&Object.keys(e).length>0;function o(e){const t={};return function e(n,o){Object.entries(n).forEach((n=>{let[a,i]=n;const s=o?`${o}.${a}`:a;r(i)?e(i,s):t[s]=i}))}(e),t}},5302:(e,t,n)=>{"use strict";n.d(t,{_:()=>o,z:()=>a});var r=n(7294);const o=r.createContext(null);function a(e){let{children:t,value:n}=e;const a=r.useContext(o),i=(0,r.useMemo)((()=>function(e){let{parent:t,value:n}=e;if(!t){if(!n)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in n))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return n}const r={...t.data,...n?.data};return{plugin:t.plugin,data:r}}({parent:a,value:n})),[a,n]);return r.createElement(o.Provider,{value:i},t)}},7102:(e,t,n)=>{"use strict";n.d(t,{Iw:()=>g,gA:()=>d,WS:()=>p,_r:()=>u,Jo:()=>h,zh:()=>c,yW:()=>m,gB:()=>f});var r=n(6550),o=n(9162);const a=e=>e.versions.find((e=>e.isLast));function i(e,t){const n=a(e);return[...e.versions.filter((e=>e!==n)),n].find((e=>!!(0,r.LX)(t,{path:e.path,exact:!1,strict:!1})))}function s(e,t){const n=i(e,t),o=n?.docs.find((e=>!!(0,r.LX)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:o,alternateDocVersions:o?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((r=>{r.id===t&&(n[e.name]=r)}))})),n}(o.id):{}}}const l={},u=()=>(0,o.OD)("docusaurus-plugin-content-docs")??l,c=e=>(0,o.eZ)("docusaurus-plugin-content-docs",e,{failfast:!0});function d(e){void 0===e&&(e={});const t=u(),{pathname:n}=(0,r.TH)();return function(e,t,n){void 0===n&&(n={});const o=Object.entries(e).sort(((e,t)=>t[1].path.localeCompare(e[1].path))).find((e=>{let[,n]=e;return!!(0,r.LX)(t,{path:n.path,exact:!1,strict:!1})})),a=o?{pluginId:o[0],pluginData:o[1]}:void 0;if(!a&&n.failfast)throw new Error(`Can't find active docs plugin for "${t}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(e).map((e=>e.path)).join(", ")}`);return a}(t,n,e)}function p(e){void 0===e&&(e={});const t=d(e),{pathname:n}=(0,r.TH)();if(!t)return;return{activePlugin:t,activeVersion:i(t.pluginData,n)}}function f(e){return c(e).versions}function m(e){const t=c(e);return a(t)}function g(e){const t=c(e),{pathname:n}=(0,r.TH)();return s(t,n)}function h(e){const t=c(e),{pathname:n}=(0,r.TH)();return function(e,t){const n=a(e);return{latestDocSuggestion:s(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},1803:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>a});var r=n(4865),o=n.n(r);o().configure({showSpinner:!1});const a={onRouteUpdate(e){let{location:t,previousLocation:n}=e;if(n&&t.pathname!==n.pathname){const e=window.setTimeout((()=>{o().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){o().done()}}},212:(e,t,n)=>{"use strict";n.r(t);var r=n(7410),o=n(6809);!function(e){const{themeConfig:{prism:t}}=o.default,{additionalLanguages:r}=t;globalThis.Prism=e,r.forEach((e=>{n(6726)(`./prism-${e}`)})),delete globalThis.Prism}(r.Z)},925:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294);const o={iconExternalLink:"iconExternalLink_nPIU"};function a(e){let{width:t=13.5,height:n=13.5}=e;return r.createElement("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:o.iconExternalLink},r.createElement("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"}))}},3003:(e,t,n)=>{"use strict";n.d(t,{Z:()=>li});var r=n(7294),o=n(6010),a=n(7590),i=n(168),s=n(7462),l=n(6550),u=n(6062),c=n(2414);const d="__docusaurus_skipToContent_fallback";function p(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function f(){const e=(0,r.useRef)(null),{action:t}=(0,l.k6)(),n=(0,r.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.getElementById(d);t&&p(t)}),[]);return(0,c.S)((n=>{let{location:r}=n;e.current&&!r.hash&&"PUSH"===t&&p(e.current)})),{containerRef:e,onClick:n}}const m=(0,u.I)({id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation",message:"Skip to main content"});function g(e){const t=e.children??m,{containerRef:n,onClick:o}=f();return r.createElement("div",{ref:n,role:"region","aria-label":m},r.createElement("a",(0,s.Z)({},e,{href:`#${d}`,onClick:o}),t))}var h=n(6702),b=n(8398);const v={skipToContent:"skipToContent_fXgn"};function y(){return r.createElement(g,{className:v.skipToContent})}var w=n(9989),k=n(8264);function S(e){let{width:t=21,height:n=21,color:o="currentColor",strokeWidth:a=1.2,className:i,...l}=e;return r.createElement("svg",(0,s.Z)({viewBox:"0 0 15 15",width:t,height:n},l),r.createElement("g",{stroke:o,strokeWidth:a},r.createElement("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})))}const E={closeButton:"closeButton_CVFx"};function _(e){return r.createElement("button",(0,s.Z)({type:"button","aria-label":(0,u.I)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"})},e,{className:(0,o.Z)("clean-btn close",E.closeButton,e.className)}),r.createElement(S,{width:14,height:14,strokeWidth:3.1}))}const x={content:"content_knG7"};function O(e){const{announcementBar:t}=(0,w.L)(),{content:n}=t;return r.createElement("div",(0,s.Z)({},e,{className:(0,o.Z)(x.content,e.className),dangerouslySetInnerHTML:{__html:n}}))}const P={announcementBar:"announcementBar_mb4j",announcementBarPlaceholder:"announcementBarPlaceholder_vyr4",announcementBarClose:"announcementBarClose_gvF7",announcementBarContent:"announcementBarContent_xLdY"};function C(){const{announcementBar:e}=(0,w.L)(),{isActive:t,close:n}=(0,k.nT)();if(!t)return null;const{backgroundColor:o,textColor:a,isCloseable:i}=e;return r.createElement("div",{className:P.announcementBar,style:{backgroundColor:o,color:a},role:"banner"},i&&r.createElement("div",{className:P.announcementBarPlaceholder}),r.createElement(O,{className:P.announcementBarContent}),i&&r.createElement(_,{onClick:n,className:P.announcementBarClose}))}var T=n(8227),I=n(2924);var A=n(4515),L=n(7929);const N=r.createContext(null);function j(e){let{children:t}=e;const n=function(){const e=(0,T.e)(),t=(0,L.HY)(),[n,o]=(0,r.useState)(!1),a=null!==t.component,i=(0,A.D9)(a);return(0,r.useEffect)((()=>{a&&!i&&o(!0)}),[a,i]),(0,r.useEffect)((()=>{a?e.shown||o(!0):o(!1)}),[e.shown,a]),(0,r.useMemo)((()=>[n,o]),[n])}();return r.createElement(N.Provider,{value:n},t)}function R(e){if(e.component){const t=e.component;return r.createElement(t,e.props)}}function D(){const e=(0,r.useContext)(N);if(!e)throw new A.i6("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,o=(0,r.useCallback)((()=>n(!1)),[n]),a=(0,L.HY)();return(0,r.useMemo)((()=>({shown:t,hide:o,content:R(a)})),[o,a,t])}function M(e){let{header:t,primaryMenu:n,secondaryMenu:a}=e;const{shown:i}=D();return r.createElement("div",{className:"navbar-sidebar"},t,r.createElement("div",{className:(0,o.Z)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":i})},r.createElement("div",{className:"navbar-sidebar__item menu"},n),r.createElement("div",{className:"navbar-sidebar__item menu"},a)))}var F=n(9507),B=n(573);function z(e){return r.createElement("svg",(0,s.Z)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"}))}function q(e){return r.createElement("svg",(0,s.Z)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"}))}const U={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"};function $(e){let{className:t,buttonClassName:n,value:a,onChange:i}=e;const s=(0,B.Z)(),l=(0,u.I)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===a?(0,u.I)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,u.I)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return r.createElement("div",{className:(0,o.Z)(U.toggle,t)},r.createElement("button",{className:(0,o.Z)("clean-btn",U.toggleButton,!s&&U.toggleButtonDisabled,n),type:"button",onClick:()=>i("dark"===a?"light":"dark"),disabled:!s,title:l,"aria-label":l,"aria-live":"polite"},r.createElement(z,{className:(0,o.Z)(U.toggleIcon,U.lightToggleIcon)}),r.createElement(q,{className:(0,o.Z)(U.toggleIcon,U.darkToggleIcon)})))}const H=r.memo($),G={darkNavbarColorModeToggle:"darkNavbarColorModeToggle_X3D1"};function V(e){let{className:t}=e;const n=(0,w.L)().navbar.style,o=(0,w.L)().colorMode.disableSwitch,{colorMode:a,setColorMode:i}=(0,F.I)();return o?null:r.createElement(H,{className:t,buttonClassName:"dark"===n?G.darkNavbarColorModeToggle:void 0,value:a,onChange:i})}var Q=n(7509);function Z(){return r.createElement(Q.Z,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function W(){const e=(0,T.e)();return r.createElement("button",{type:"button","aria-label":(0,u.I)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle()},r.createElement(S,{color:"var(--ifm-color-emphasis-600)"}))}function K(){return r.createElement("div",{className:"navbar-sidebar__brand"},r.createElement(Z,null),r.createElement(V,{className:"margin-right--md"}),r.createElement(W,null))}var Y=n(9415),X=n(4132),J=n(7561);function ee(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}var te=n(925);function ne(e){let{activeBasePath:t,activeBaseRegex:n,to:o,href:a,label:i,html:l,isDropdownLink:u,prependBaseUrlToHref:c,...d}=e;const p=(0,X.Z)(o),f=(0,X.Z)(t),m=(0,X.Z)(a,{forcePrependBaseUrl:!0}),g=i&&a&&!(0,J.Z)(a),h=l?{dangerouslySetInnerHTML:{__html:l}}:{children:r.createElement(r.Fragment,null,i,g&&r.createElement(te.Z,u&&{width:12,height:12}))};return a?r.createElement(Y.Z,(0,s.Z)({href:c?m:a},d,h)):r.createElement(Y.Z,(0,s.Z)({to:p,isNavLink:!0},(t||n)&&{isActive:(e,t)=>n?ee(n,t.pathname):t.pathname.startsWith(f)},d,h))}function re(e){let{className:t,isDropdownItem:n=!1,...a}=e;const i=r.createElement(ne,(0,s.Z)({className:(0,o.Z)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n},a));return n?r.createElement("li",null,i):i}function oe(e){let{className:t,isDropdownItem:n,...a}=e;return r.createElement("li",{className:"menu__list-item"},r.createElement(ne,(0,s.Z)({className:(0,o.Z)("menu__link",t)},a)))}function ae(e){let{mobile:t=!1,position:n,...o}=e;const a=t?oe:re;return r.createElement(a,(0,s.Z)({},o,{activeClassName:o.activeClassName??(t?"menu__link--active":"navbar__link--active")}))}var ie=n(8924),se=n(6224),le=n(1199);function ue(e,t){return e.some((e=>function(e,t){return!!(0,se.Mg)(e.to,t)||!!ee(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function ce(e){let{items:t,position:n,className:a,onClick:i,...l}=e;const u=(0,r.useRef)(null),[c,d]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{const e=e=>{u.current&&!u.current.contains(e.target)&&d(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),document.addEventListener("focusin",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e),document.removeEventListener("focusin",e)}}),[u]),r.createElement("div",{ref:u,className:(0,o.Z)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":c})},r.createElement(ne,(0,s.Z)({"aria-haspopup":"true","aria-expanded":c,role:"button",href:l.to?void 0:"#",className:(0,o.Z)("navbar__link",a)},l,{onClick:l.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),d(!c))}}),l.children??l.label),r.createElement("ul",{className:"dropdown__menu"},t.map(((e,t)=>r.createElement(ka,(0,s.Z)({isDropdownItem:!0,activeClassName:"dropdown__link--active"},e,{key:t}))))))}function de(e){let{items:t,className:n,position:a,onClick:i,...u}=e;const c=function(){const{siteConfig:{baseUrl:e}}=(0,le.Z)(),{pathname:t}=(0,l.TH)();return t.replace(e,"/")}(),d=ue(t,c),{collapsed:p,toggleCollapsed:f,setCollapsed:m}=(0,ie.u)({initialState:()=>!d});return(0,r.useEffect)((()=>{d&&m(!d)}),[c,d,m]),r.createElement("li",{className:(0,o.Z)("menu__list-item",{"menu__list-item--collapsed":p})},r.createElement(ne,(0,s.Z)({role:"button",className:(0,o.Z)("menu__link menu__link--sublist menu__link--sublist-caret",n)},u,{onClick:e=>{e.preventDefault(),f()}}),u.children??u.label),r.createElement(ie.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:p},t.map(((e,t)=>r.createElement(ka,(0,s.Z)({mobile:!0,isDropdownItem:!0,onClick:i,activeClassName:"menu__link--active"},e,{key:t}))))))}function pe(e){let{mobile:t=!1,...n}=e;const o=t?de:ce;return r.createElement(o,n)}var fe=n(4739);function me(e){let{width:t=20,height:n=20,...o}=e;return r.createElement("svg",(0,s.Z)({viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0},o),r.createElement("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"}))}const ge="iconLanguage_nlXk";var he=n(3935);function be(e,t){var n=void 0;return function(){for(var r=arguments.length,o=new Array(r),a=0;ae.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Ae(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Le(e){for(var t=1;t=3||2===n&&r>=4||1===n&&r>=10}(e);function n(n,r,o){if(t&&void 0!==o){var a=o[0].__autocomplete_algoliaCredentials,i={"X-Algolia-Application-Id":a.appId,"X-Algolia-API-Key":a.apiKey};e.apply(void 0,[n].concat(Ce(r),[{headers:i}]))}else e.apply(void 0,[n].concat(Ce(r)))}return{init:function(t,n){e("init",{appId:t,apiKey:n})},setUserToken:function(t){e("setUserToken",t)},clickedObjectIDsAfterSearch:function(){for(var e=arguments.length,t=new Array(e),r=0;r0&&n("clickedObjectIDsAfterSearch",je(t),t[0].items)},clickedObjectIDs:function(){for(var e=arguments.length,t=new Array(e),r=0;r0&&n("clickedObjectIDs",je(t),t[0].items)},clickedFilters:function(){for(var t=arguments.length,n=new Array(t),r=0;r0&&e.apply(void 0,["clickedFilters"].concat(n))},convertedObjectIDsAfterSearch:function(){for(var e=arguments.length,t=new Array(e),r=0;r0&&n("convertedObjectIDsAfterSearch",je(t),t[0].items)},convertedObjectIDs:function(){for(var e=arguments.length,t=new Array(e),r=0;r0&&n("convertedObjectIDs",je(t),t[0].items)},convertedFilters:function(){for(var t=arguments.length,n=new Array(t),r=0;r0&&e.apply(void 0,["convertedFilters"].concat(n))},viewedObjectIDs:function(){for(var e=arguments.length,t=new Array(e),r=0;r0&&t.reduce((function(e,t){var n=t.items,r=Ie(t,Oe);return[].concat(Ce(e),Ce(function(e){for(var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:20,n=[],r=0;r0&&e.apply(void 0,["viewedFilters"].concat(n))}}}function De(e){var t=e.items.reduce((function(e,t){var n;return e[t.__autocomplete_indexName]=(null!==(n=e[t.__autocomplete_indexName])&&void 0!==n?n:[]).concat(t),e}),{});return Object.keys(t).map((function(e){return{index:e,items:t[e],algoliaSource:["autocomplete"]}}))}function Me(e){return e.objectID&&e.__autocomplete_indexName&&e.__autocomplete_queryID}function Fe(e){return Fe="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Fe(e)}function Be(e){return function(e){if(Array.isArray(e))return ze(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return ze(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return ze(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function ze(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n0&&Ve({onItemsChange:r,items:n,insights:s,state:t}))}}),0);return{name:"aa.algoliaInsightsPlugin",subscribe:function(e){var t=e.setContext,n=e.onSelect,r=e.onActive;i("addAlgoliaAgent","insights-plugin"),t({algoliaInsightsPlugin:{__algoliaSearchParameters:{clickAnalytics:!0},insights:s}}),n((function(e){var t=e.item,n=e.state,r=e.event;Me(t)&&o({state:n,event:r,insights:s,item:t,insightsEvents:[Ue({eventName:"Item Selected"},Se({item:t,items:l.current}))]})})),r((function(e){var t=e.item,n=e.state,r=e.event;Me(t)&&a({state:n,event:r,insights:s,item:t,insightsEvents:[Ue({eventName:"Item Active"},Se({item:t,items:l.current}))]})}))},onStateChange:function(e){var t=e.state;u({state:t})},__autocomplete_pluginOptions:e}}function Ze(e){return Ze="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Ze(e)}function We(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Ke(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==Ze(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==Ze(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===Ze(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Ye(e,t,n){var r,o=t.initialState;return{getState:function(){return o},dispatch:function(r,a){var i=function(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n0},reshape:function(e){return e.sources}},e),{},{id:null!==(n=e.id)&&void 0!==n?n:at(),plugins:o,initialState:mt({activeItemId:null,query:"",completion:null,collections:[],isOpen:!1,status:"idle",context:{}},e.initialState),onStateChange:function(t){var n;null===(n=e.onStateChange)||void 0===n||n.call(e,t),o.forEach((function(e){var n;return null===(n=e.onStateChange)||void 0===n?void 0:n.call(e,t)}))},onSubmit:function(t){var n;null===(n=e.onSubmit)||void 0===n||n.call(e,t),o.forEach((function(e){var n;return null===(n=e.onSubmit)||void 0===n?void 0:n.call(e,t)}))},onReset:function(t){var n;null===(n=e.onReset)||void 0===n||n.call(e,t),o.forEach((function(e){var n;return null===(n=e.onReset)||void 0===n?void 0:n.call(e,t)}))},getSources:function(n){return Promise.all([].concat(dt(o.map((function(e){return e.getSources}))),[e.getSources]).filter(Boolean).map((function(e){return function(e,t){var n=[];return Promise.resolve(e(t)).then((function(e){return Array.isArray(e),Promise.all(e.filter((function(e){return Boolean(e)})).map((function(e){if(e.sourceId,n.includes(e.sourceId))throw new Error("[Autocomplete] The `sourceId` ".concat(JSON.stringify(e.sourceId)," is not unique."));n.push(e.sourceId);var t={getItemInputValue:function(e){return e.state.query},getItemUrl:function(){},onSelect:function(e){(0,e.setIsOpen)(!1)},onActive:ke,onResolve:ke};Object.keys(t).forEach((function(e){t[e].__default=!0}));var r=st(st({},t),e);return Promise.resolve(r)})))}))}(e,n)}))).then((function(e){return Xe(e)})).then((function(e){return e.map((function(e){return mt(mt({},e),{},{onSelect:function(n){e.onSelect(n),t.forEach((function(e){var t;return null===(t=e.onSelect)||void 0===t?void 0:t.call(e,n)}))},onActive:function(n){e.onActive(n),t.forEach((function(e){var t;return null===(t=e.onActive)||void 0===t?void 0:t.call(e,n)}))},onResolve:function(n){e.onResolve(n),t.forEach((function(e){var t;return null===(t=e.onResolve)||void 0===t?void 0:t.call(e,n)}))}})}))}))},navigator:mt({navigate:function(e){var t=e.itemUrl;r.location.assign(t)},navigateNewTab:function(e){var t=e.itemUrl,n=r.open(t,"_blank","noopener");null==n||n.focus()},navigateNewWindow:function(e){var t=e.itemUrl;r.open(t,"_blank","noopener")}},e.navigator)})}function bt(e){return bt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},bt(e)}function vt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function yt(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var Vt,Qt,Zt,Wt=null,Kt=(Vt=-1,Qt=-1,Zt=void 0,function(e){var t=++Vt;return Promise.resolve(e).then((function(e){return Zt&&t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var on=/((gt|sm)-|galaxy nexus)|samsung[- ]/i;function an(e){return an="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},an(e)}var sn=["props","refresh","store"],ln=["inputElement","formElement","panelElement"],un=["inputElement"],cn=["inputElement","maxLength"],dn=["sourceIndex"],pn=["sourceIndex"],fn=["item","source","sourceIndex"];function mn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function gn(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function vn(e){var t=e.props,n=e.refresh,r=e.store,o=bn(e,sn),a=function(e,t){return void 0!==t?"".concat(e,"-").concat(t):e};return{getEnvironmentProps:function(e){var n=e.inputElement,o=e.formElement,a=e.panelElement;function i(e){!r.getState().isOpen&&r.pendingRequests.isEmpty()||e.target===n||!1===[o,a].some((function(t){return n=t,r=e.target,n===r||n.contains(r);var n,r}))&&(r.dispatch("blur",null),t.debug||r.pendingRequests.cancelAll())}return gn({onTouchStart:i,onMouseDown:i,onTouchMove:function(e){!1!==r.getState().isOpen&&n===t.environment.document.activeElement&&e.target!==n&&n.blur()}},bn(e,ln))},getRootProps:function(e){return gn({role:"combobox","aria-expanded":r.getState().isOpen,"aria-haspopup":"listbox","aria-owns":r.getState().isOpen?"".concat(t.id,"-list"):void 0,"aria-labelledby":"".concat(t.id,"-label")},e)},getFormProps:function(e){e.inputElement;return gn({action:"",noValidate:!0,role:"search",onSubmit:function(a){var i;a.preventDefault(),t.onSubmit(gn({event:a,refresh:n,state:r.getState()},o)),r.dispatch("submit",null),null===(i=e.inputElement)||void 0===i||i.blur()},onReset:function(a){var i;a.preventDefault(),t.onReset(gn({event:a,refresh:n,state:r.getState()},o)),r.dispatch("reset",null),null===(i=e.inputElement)||void 0===i||i.focus()}},bn(e,un))},getLabelProps:function(e){var n=e||{},r=n.sourceIndex,o=bn(n,dn);return gn({htmlFor:"".concat(a(t.id,r),"-input"),id:"".concat(a(t.id,r),"-label")},o)},getInputProps:function(e){var a;function i(e){(t.openOnFocus||Boolean(r.getState().query))&&Yt(gn({event:e,props:t,query:r.getState().completion||r.getState().query,refresh:n,store:r},o)),r.dispatch("focus",null)}var s=e||{},l=(s.inputElement,s.maxLength),u=void 0===l?512:l,c=bn(s,cn),d=Bt(r.getState()),p=function(e){return Boolean(e&&e.match(on))}((null===(a=t.environment.navigator)||void 0===a?void 0:a.userAgent)||""),f=null!=d&&d.itemUrl&&!p?"go":"search";return gn({"aria-autocomplete":"both","aria-activedescendant":r.getState().isOpen&&null!==r.getState().activeItemId?"".concat(t.id,"-item-").concat(r.getState().activeItemId):void 0,"aria-controls":r.getState().isOpen?"".concat(t.id,"-list"):void 0,"aria-labelledby":"".concat(t.id,"-label"),value:r.getState().completion||r.getState().query,id:"".concat(t.id,"-input"),autoComplete:"off",autoCorrect:"off",autoCapitalize:"off",enterKeyHint:f,spellCheck:"false",autoFocus:t.autoFocus,placeholder:t.placeholder,maxLength:u,type:"search",onChange:function(e){Yt(gn({event:e,props:t,query:e.currentTarget.value.slice(0,u),refresh:n,store:r},o))},onKeyDown:function(e){!function(e){var t=e.event,n=e.props,r=e.refresh,o=e.store,a=rn(e,Jt);if("ArrowUp"===t.key||"ArrowDown"===t.key){var i=function(){var e=n.environment.document.getElementById("".concat(n.id,"-item-").concat(o.getState().activeItemId));e&&(e.scrollIntoViewIfNeeded?e.scrollIntoViewIfNeeded(!1):e.scrollIntoView(!1))},s=function(){var e=Bt(o.getState());if(null!==o.getState().activeItemId&&e){var n=e.item,i=e.itemInputValue,s=e.itemUrl,l=e.source;l.onActive(tn({event:t,item:n,itemInputValue:i,itemUrl:s,refresh:r,source:l,state:o.getState()},a))}};t.preventDefault(),!1===o.getState().isOpen&&(n.openOnFocus||Boolean(o.getState().query))?Yt(tn({event:t,props:n,query:o.getState().query,refresh:r,store:o},a)).then((function(){o.dispatch(t.key,{nextActiveItemId:n.defaultActiveItemId}),s(),setTimeout(i,0)})):(o.dispatch(t.key,{}),s(),i())}else if("Escape"===t.key)t.preventDefault(),o.dispatch(t.key,null),o.pendingRequests.cancelAll();else if("Tab"===t.key)o.dispatch("blur",null),o.pendingRequests.cancelAll();else if("Enter"===t.key){if(null===o.getState().activeItemId||o.getState().collections.every((function(e){return 0===e.items.length})))return void(n.debug||o.pendingRequests.cancelAll());t.preventDefault();var l=Bt(o.getState()),u=l.item,c=l.itemInputValue,d=l.itemUrl,p=l.source;if(t.metaKey||t.ctrlKey)void 0!==d&&(p.onSelect(tn({event:t,item:u,itemInputValue:c,itemUrl:d,refresh:r,source:p,state:o.getState()},a)),n.navigator.navigateNewTab({itemUrl:d,item:u,state:o.getState()}));else if(t.shiftKey)void 0!==d&&(p.onSelect(tn({event:t,item:u,itemInputValue:c,itemUrl:d,refresh:r,source:p,state:o.getState()},a)),n.navigator.navigateNewWindow({itemUrl:d,item:u,state:o.getState()}));else if(t.altKey);else{if(void 0!==d)return p.onSelect(tn({event:t,item:u,itemInputValue:c,itemUrl:d,refresh:r,source:p,state:o.getState()},a)),void n.navigator.navigate({itemUrl:d,item:u,state:o.getState()});Yt(tn({event:t,nextState:{isOpen:!1},props:n,query:c,refresh:r,store:o},a)).then((function(){p.onSelect(tn({event:t,item:u,itemInputValue:c,itemUrl:d,refresh:r,source:p,state:o.getState()},a))}))}}}(gn({event:e,props:t,refresh:n,store:r},o))},onFocus:i,onBlur:ke,onClick:function(n){e.inputElement!==t.environment.document.activeElement||r.getState().isOpen||i(n)}},c)},getPanelProps:function(e){return gn({onMouseDown:function(e){e.preventDefault()},onMouseLeave:function(){r.dispatch("mouseleave",null)}},e)},getListProps:function(e){var n=e||{},r=n.sourceIndex,o=bn(n,pn);return gn({role:"listbox","aria-labelledby":"".concat(a(t.id,r),"-label"),id:"".concat(a(t.id,r),"-list")},o)},getItemProps:function(e){var i=e.item,s=e.source,l=e.sourceIndex,u=bn(e,fn);return gn({id:"".concat(a(t.id,l),"-item-").concat(i.__autocomplete_id),role:"option","aria-selected":r.getState().activeItemId===i.__autocomplete_id,onMouseMove:function(e){if(i.__autocomplete_id!==r.getState().activeItemId){r.dispatch("mousemove",i.__autocomplete_id);var t=Bt(r.getState());if(null!==r.getState().activeItemId&&t){var a=t.item,s=t.itemInputValue,l=t.itemUrl,u=t.source;u.onActive(gn({event:e,item:a,itemInputValue:s,itemUrl:l,refresh:n,source:u,state:r.getState()},o))}}},onMouseDown:function(e){e.preventDefault()},onClick:function(e){var a=s.getItemInputValue({item:i,state:r.getState()}),l=s.getItemUrl({item:i,state:r.getState()});(l?Promise.resolve():Yt(gn({event:e,nextState:{isOpen:!1},props:t,query:a,refresh:n,store:r},o))).then((function(){s.onSelect(gn({event:e,item:i,itemInputValue:a,itemUrl:l,refresh:n,source:s,state:r.getState()},o))}))}},u)}}}var yn="1.9.2",wn=[{segment:"autocomplete-core",version:yn}];function kn(e){return kn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},kn(e)}function Sn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function En(e){for(var t=1;t=n?null===r?null:0:o}function Cn(e){return Cn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Cn(e)}function Tn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function In(e){for(var t=1;t=5&&((o||!e&&5===r)&&(i.push(r,0,o,n),r=6),e&&(i.push(r,e,0,n),r=6)),o=""},l=0;l"===t?(r=1,o=""):o=t+o[0]:a?t===a?a="":o+=t:'"'===t||"'"===t?a=t:">"===t?(s(),r=1):r&&("="===t?(r=5,n=o,o=""):"/"===t&&(r<5||">"===e[l][u+1])?(s(),3===r&&(i=i[0]),r=i,(i=i[0]).push(2,0,r),r=0):" "===t||"\t"===t||"\n"===t||"\r"===t?(s(),r=2):o+=t),3===r&&"!--"===o&&(r=4,i=i[0])}return s(),i}(e)),t),arguments,[])).length>1?t:t[0]}var qn=function(e){var t=e.environment,n=t.document.createElementNS("http://www.w3.org/2000/svg","svg");n.setAttribute("class","aa-SubmitIcon"),n.setAttribute("viewBox","0 0 24 24"),n.setAttribute("width","20"),n.setAttribute("height","20"),n.setAttribute("fill","currentColor");var r=t.document.createElementNS("http://www.w3.org/2000/svg","path");return r.setAttribute("d","M16.041 15.856c-0.034 0.026-0.067 0.055-0.099 0.087s-0.060 0.064-0.087 0.099c-1.258 1.213-2.969 1.958-4.855 1.958-1.933 0-3.682-0.782-4.95-2.050s-2.050-3.017-2.050-4.95 0.782-3.682 2.050-4.95 3.017-2.050 4.95-2.050 3.682 0.782 4.95 2.050 2.050 3.017 2.050 4.95c0 1.886-0.745 3.597-1.959 4.856zM21.707 20.293l-3.675-3.675c1.231-1.54 1.968-3.493 1.968-5.618 0-2.485-1.008-4.736-2.636-6.364s-3.879-2.636-6.364-2.636-4.736 1.008-6.364 2.636-2.636 3.879-2.636 6.364 1.008 4.736 2.636 6.364 3.879 2.636 6.364 2.636c2.125 0 4.078-0.737 5.618-1.968l3.675 3.675c0.391 0.391 1.024 0.391 1.414 0s0.391-1.024 0-1.414z"),n.appendChild(r),n},Un=function(e){var t=e.environment,n=t.document.createElementNS("http://www.w3.org/2000/svg","svg");n.setAttribute("class","aa-ClearIcon"),n.setAttribute("viewBox","0 0 24 24"),n.setAttribute("width","18"),n.setAttribute("height","18"),n.setAttribute("fill","currentColor");var r=t.document.createElementNS("http://www.w3.org/2000/svg","path");return r.setAttribute("d","M5.293 6.707l5.293 5.293-5.293 5.293c-0.391 0.391-0.391 1.024 0 1.414s1.024 0.391 1.414 0l5.293-5.293 5.293 5.293c0.391 0.391 1.024 0.391 1.414 0s0.391-1.024 0-1.414l-5.293-5.293 5.293-5.293c0.391-0.391 0.391-1.024 0-1.414s-1.024-0.391-1.414 0l-5.293 5.293-5.293-5.293c-0.391-0.391-1.024-0.391-1.414 0s-0.391 1.024 0 1.414z"),n.appendChild(r),n},$n=function(e){var t=e.environment.document.createElementNS("http://www.w3.org/2000/svg","svg");return t.setAttribute("class","aa-LoadingIcon"),t.setAttribute("viewBox","0 0 100 100"),t.setAttribute("width","20"),t.setAttribute("height","20"),t.innerHTML='\n \n',t},Hn=["ontouchstart","ontouchend","ontouchmove","ontouchcancel"];function Gn(e,t,n){e[t]=null===n?"":"number"!=typeof n?n:n+"px"}function Vn(e){this._listeners[e.type](e)}function Qn(e,t,n){var r,o,a=e[t];if("style"===t)if("string"==typeof n)e.style=n;else if(null===n)e.style="";else for(t in n)a&&n[t]===a[t]||Gn(e.style,t,n[t]);else"o"===t[0]&&"n"===t[1]?(r=t!==(t=t.replace(/Capture$/,"")),((o=t.toLowerCase())in e||Hn.includes(o))&&(t=o),t=t.slice(2),e._listeners||(e._listeners={}),e._listeners[t]=n,n?a||e.addEventListener(t,Vn,r):e.removeEventListener(t,Vn,r)):"list"!==t&&"tagName"!==t&&"form"!==t&&"type"!==t&&"size"!==t&&"download"!==t&&"href"!==t&&t in e?e[t]=null==n?"":n:"function"!=typeof n&&"dangerouslySetInnerHTML"!==t&&(null==n||!1===n&&!/^ar/.test(t)?e.removeAttribute(t):e.setAttribute(t,n))}function Zn(e){return"onChange"===e?"onInput":e}function Wn(e,t){for(var n in t)Qn(e,Zn(n),t[n])}function Kn(e,t){for(var n in t)"o"===n[0]&&"n"===n[1]||Qn(e,Zn(n),t[n])}var Yn=["children"];function Xn(e){return function(e){if(Array.isArray(e))return Jn(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return Jn(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Jn(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Jn(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function tr(e){return function(t,n){var r=n.children,o=void 0===r?[]:r,a=er(n,Yn),i=e.document.createElement(t);return Wn(i,a),i.append.apply(i,Xn(o)),i}}function nr(e){return nr="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},nr(e)}var rr=["autocompleteScopeApi","environment","classNames","getInputProps","getInputPropsCore","isDetached","state"];function or(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function ar(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var lr=function(e){var t=e.autocompleteScopeApi,n=e.environment,r=(e.classNames,e.getInputProps),o=e.getInputPropsCore,a=e.isDetached,i=e.state,s=sr(e,rr),l=tr(n)("input",s),u=r(ar({state:i,props:o({inputElement:l}),inputElement:l},t));return Wn(l,ar(ar({},u),{},{onKeyDown:function(e){a&&"Tab"===e.key||u.onKeyDown(e)}})),l};function ur(e){return ur="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ur(e)}function cr(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function dr(e){for(var t=1;t2&&(i.children=arguments.length>3?fr.call(arguments,2):n),"function"==typeof e&&null!=e.defaultProps)for(a in e.defaultProps)void 0===i[a]&&(i[a]=e.defaultProps[a]);return Pr(e,i,r,o,null)}function Pr(e,t,n,r,o){var a={type:e,props:t,key:n,ref:r,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,__h:null,constructor:void 0,__v:null==o?++gr:o};return null==o&&null!=mr.vnode&&mr.vnode(a),a}function Cr(e){return e.children}function Tr(e,t){this.props=e,this.context=t}function Ir(e,t){if(null==t)return e.__?Ir(e.__,e.__.__k.indexOf(e)+1):null;for(var n;tt&&hr.sort(yr));Nr.__r=0}function jr(e,t,n,r,o,a,i,s,l,u){var c,d,p,f,m,g,h,b=r&&r.__k||kr,v=b.length;for(n.__k=[],c=0;c0?Pr(f.type,f.props,f.key,f.ref?f.ref:null,f.__v):f)){if(f.__=n,f.__b=n.__b+1,null===(p=b[c])||p&&f.key==p.key&&f.type===p.type)b[c]=void 0;else for(d=0;d=0;t--)if((n=e.__k[t])&&(r=Mr(n)))return r;return null}function Fr(e,t,n){"-"===t[0]?e.setProperty(t,null==n?"":n):e[t]=null==n?"":"number"!=typeof n||Sr.test(t)?n:n+"px"}function Br(e,t,n,r,o){var a;e:if("style"===t)if("string"==typeof n)e.style.cssText=n;else{if("string"==typeof r&&(e.style.cssText=r=""),r)for(t in r)n&&t in n||Fr(e.style,t,"");if(n)for(t in n)r&&n[t]===r[t]||Fr(e.style,t,n[t])}else if("o"===t[0]&&"n"===t[1])a=t!==(t=t.replace(/Capture$/,"")),t=t.toLowerCase()in e?t.toLowerCase().slice(2):t.slice(2),e.l||(e.l={}),e.l[t+a]=n,n?r||e.addEventListener(t,a?qr:zr,a):e.removeEventListener(t,a?qr:zr,a);else if("dangerouslySetInnerHTML"!==t){if(o)t=t.replace(/xlink(H|:h)/,"h").replace(/sName$/,"s");else if("width"!==t&&"height"!==t&&"href"!==t&&"list"!==t&&"form"!==t&&"tabIndex"!==t&&"download"!==t&&"rowSpan"!==t&&"colSpan"!==t&&t in e)try{e[t]=null==n?"":n;break e}catch(e){}"function"==typeof n||(null==n||!1===n&&"-"!==t[4]?e.removeAttribute(t):e.setAttribute(t,n))}}function zr(e){return this.l[e.type+!1](mr.event?mr.event(e):e)}function qr(e){return this.l[e.type+!0](mr.event?mr.event(e):e)}function Ur(e,t,n,r,o,a,i,s,l){var u,c,d,p,f,m,g,h,b,v,y,w,k,S,E,_=t.type;if(void 0!==t.constructor)return null;null!=n.__h&&(l=n.__h,s=t.__e=n.__e,t.__h=null,a=[s]),(u=mr.__b)&&u(t);try{e:if("function"==typeof _){if(h=t.props,b=(u=_.contextType)&&r[u.__c],v=u?b?b.props.value:u.__:r,n.__c?g=(c=t.__c=n.__c).__=c.__E:("prototype"in _&&_.prototype.render?t.__c=c=new _(h,v):(t.__c=c=new Tr(h,v),c.constructor=_,c.render=Qr),b&&b.sub(c),c.props=h,c.state||(c.state={}),c.context=v,c.__n=r,d=c.__d=!0,c.__h=[],c._sb=[]),null==c.__s&&(c.__s=c.state),null!=_.getDerivedStateFromProps&&(c.__s==c.state&&(c.__s=_r({},c.__s)),_r(c.__s,_.getDerivedStateFromProps(h,c.__s))),p=c.props,f=c.state,c.__v=t,d)null==_.getDerivedStateFromProps&&null!=c.componentWillMount&&c.componentWillMount(),null!=c.componentDidMount&&c.__h.push(c.componentDidMount);else{if(null==_.getDerivedStateFromProps&&h!==p&&null!=c.componentWillReceiveProps&&c.componentWillReceiveProps(h,v),!c.__e&&null!=c.shouldComponentUpdate&&!1===c.shouldComponentUpdate(h,c.__s,v)||t.__v===n.__v){for(t.__v!==n.__v&&(c.props=h,c.state=c.__s,c.__d=!1),c.__e=!1,t.__e=n.__e,t.__k=n.__k,t.__k.forEach((function(e){e&&(e.__=t)})),y=0;y0&&void 0!==arguments[0]?arguments[0]:[];return{get:function(){return e},add:function(t){var n=e[e.length-1];(null==n?void 0:n.isHighlighted)===t.isHighlighted?e[e.length-1]={value:n.value+t.value,isHighlighted:n.isHighlighted}:e.push(t)}}}(n?[{value:n,isHighlighted:!1}]:[]);return t.forEach((function(e){var t=e.split(Yr);r.add({value:t[0],isHighlighted:!0}),""!==t[1]&&r.add({value:t[1],isHighlighted:!1})})),r.get()}function Jr(e){return function(e){if(Array.isArray(e))return eo(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return eo(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return eo(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function eo(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n",""":'"',"'":"'"},oo=new RegExp(/\w/i),ao=/&(amp|quot|lt|gt|#39);/g,io=RegExp(ao.source);function so(e,t){var n,r,o,a=e[t],i=(null===(n=e[t+1])||void 0===n?void 0:n.isHighlighted)||!0,s=(null===(r=e[t-1])||void 0===r?void 0:r.isHighlighted)||!0;return oo.test((o=a.value)&&io.test(o)?o.replace(ao,(function(e){return ro[e]})):o)||s!==i?a.isHighlighted:s}function lo(e){return lo="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},lo(e)}function uo(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function co(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var Co={clearButton:"aa-ClearButton",detachedCancelButton:"aa-DetachedCancelButton",detachedContainer:"aa-DetachedContainer",detachedFormContainer:"aa-DetachedFormContainer",detachedOverlay:"aa-DetachedOverlay",detachedSearchButton:"aa-DetachedSearchButton",detachedSearchButtonIcon:"aa-DetachedSearchButtonIcon",detachedSearchButtonPlaceholder:"aa-DetachedSearchButtonPlaceholder",detachedSearchButtonQuery:"aa-DetachedSearchButtonQuery",form:"aa-Form",input:"aa-Input",inputWrapper:"aa-InputWrapper",inputWrapperPrefix:"aa-InputWrapperPrefix",inputWrapperSuffix:"aa-InputWrapperSuffix",item:"aa-Item",label:"aa-Label",list:"aa-List",loadingIndicator:"aa-LoadingIndicator",panel:"aa-Panel",panelLayout:"aa-PanelLayout aa-Panel--scrollable",root:"aa-Autocomplete",source:"aa-Source",sourceFooter:"aa-SourceFooter",sourceHeader:"aa-SourceHeader",sourceNoResults:"aa-SourceNoResults",submitButton:"aa-SubmitButton"},To=function(e,t){var n=e.children;(0,e.render)(n,t)},Io={createElement:Or,Fragment:Cr,render:Zr};function Ao(e){var t=e.panelPlacement,n=e.container,r=e.form,o=e.environment,a=n.getBoundingClientRect(),i=(o.pageYOffset||o.document.documentElement.scrollTop||o.document.body.scrollTop||0)+a.top+a.height;switch(t){case"start":return{top:i,left:a.left};case"end":return{top:i,right:o.document.documentElement.clientWidth-(a.left+a.width)};case"full-width":return{top:i,left:0,right:0,width:"unset",maxWidth:"unset"};case"input-wrapper-width":var s=r.getBoundingClientRect();return{top:i,left:s.left,right:o.document.documentElement.clientWidth-(s.left+s.width),width:"unset",maxWidth:"unset"};default:throw new Error("[Autocomplete] The `panelPlacement` value ".concat(JSON.stringify(t)," is not valid."))}}function Lo(e){return Lo="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Lo(e)}function No(){return No=Object.assign?Object.assign.bind():function(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Xo(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Jo(e){for(var t=1;t0;if(!p.value.core.openOnFocus&&!t.query)return n;var r=Boolean(u.current||p.value.renderer.renderNoResults);return!n&&r||n},__autocomplete_metadata:{userAgents:Mo,options:e}}))})),g=ve(Jo({collections:[],completion:null,context:{},isOpen:!1,query:"",activeItemId:null,status:"idle"},p.value.core.initialState)),h={getEnvironmentProps:p.value.renderer.getEnvironmentProps,getFormProps:p.value.renderer.getFormProps,getInputProps:p.value.renderer.getInputProps,getItemProps:p.value.renderer.getItemProps,getLabelProps:p.value.renderer.getLabelProps,getListProps:p.value.renderer.getListProps,getPanelProps:p.value.renderer.getPanelProps,getRootProps:p.value.renderer.getRootProps},b={setActiveItemId:m.value.setActiveItemId,setQuery:m.value.setQuery,setCollections:m.value.setCollections,setIsOpen:m.value.setIsOpen,setStatus:m.value.setStatus,setContext:m.value.setContext,refresh:m.value.refresh,navigator:m.value.navigator},v=s((function(){return zn.bind(p.value.renderer.renderer.createElement)})),y=s((function(){return function(e){var t=e.autocomplete,n=e.autocompleteScopeApi,r=e.classNames,o=e.environment,a=e.isDetached,i=e.placeholder,s=void 0===i?"Search":i,l=e.propGetters,u=e.setIsModalOpen,c=e.state,d=e.translations,p=tr(o),f=l.getRootProps(dr({state:c,props:t.getRootProps({})},n)),m=p("div",dr({class:r.root},f)),g=p("div",{class:r.detachedContainer,onMouseDown:function(e){e.stopPropagation()}}),h=p("div",{class:r.detachedOverlay,children:[g],onMouseDown:function(){u(!1),t.setIsOpen(!1)}}),b=l.getLabelProps(dr({state:c,props:t.getLabelProps({})},n)),v=p("button",{class:r.submitButton,type:"submit",title:d.submitButtonTitle,children:[qn({environment:o})]}),y=p("label",dr({class:r.label,children:[v]},b)),w=p("button",{class:r.clearButton,type:"reset",title:d.clearButtonTitle,children:[Un({environment:o})]}),k=p("div",{class:r.loadingIndicator,children:[$n({environment:o})]}),S=lr({class:r.input,environment:o,state:c,getInputProps:l.getInputProps,getInputPropsCore:t.getInputProps,autocompleteScopeApi:n,isDetached:a}),E=p("div",{class:r.inputWrapperPrefix,children:[y,k]}),_=p("div",{class:r.inputWrapperSuffix,children:[w]}),x=p("div",{class:r.inputWrapper,children:[S]}),O=l.getFormProps(dr({state:c,props:t.getFormProps({inputElement:S})},n)),P=p("form",dr({class:r.form,children:[E,x,_]},O)),C=l.getPanelProps(dr({state:c,props:t.getPanelProps({})},n)),T=p("div",dr({class:r.panel},C)),I=p("div",{class:r.detachedSearchButtonQuery,textContent:c.query}),A=p("div",{class:r.detachedSearchButtonPlaceholder,hidden:Boolean(c.query),textContent:s});if(a){var L=p("div",{class:r.detachedSearchButtonIcon,children:[qn({environment:o})]}),N=p("button",{type:"button",class:r.detachedSearchButton,onClick:function(){u(!0)},children:[L,A,I]}),j=p("button",{type:"button",class:r.detachedCancelButton,textContent:d.detachedCancelButtonText,onTouchStart:function(e){e.stopPropagation()},onClick:function(){t.setIsOpen(!1),u(!1)}}),R=p("div",{class:r.detachedFormContainer,children:[P,j]});g.appendChild(R),m.appendChild(N)}else m.appendChild(P);return{detachedContainer:g,detachedOverlay:h,detachedSearchButtonQuery:I,detachedSearchButtonPlaceholder:A,inputWrapper:x,input:S,root:m,form:P,label:y,submitButton:v,clearButton:w,loadingIndicator:k,panel:T}}({autocomplete:m.value,autocompleteScopeApi:b,classNames:p.value.renderer.classNames,environment:p.value.core.environment,isDetached:f.value,placeholder:p.value.core.placeholder,propGetters:h,setIsModalOpen:E,state:g.current,translations:p.value.renderer.translations})}));function w(){Wn(y.value.panel,{style:f.value?{}:Ao({panelPlacement:p.value.renderer.panelPlacement,container:y.value.root,form:y.value.form,environment:p.value.core.environment})})}function k(e){g.current=e;var t={autocomplete:m.value,autocompleteScopeApi:b,classNames:p.value.renderer.classNames,components:p.value.renderer.components,container:p.value.renderer.container,html:v.value,dom:y.value,panelContainer:f.value?y.value.detachedContainer:p.value.renderer.panelContainer,propGetters:h,state:g.current,renderer:p.value.renderer.renderer},n=!rt(e)&&!u.current&&p.value.renderer.renderNoResults||p.value.renderer.render;!function(e){var t=e.autocomplete,n=e.autocompleteScopeApi,r=e.dom,o=e.propGetters,a=e.state;Kn(r.root,o.getRootProps(Ro({state:a,props:t.getRootProps({})},n))),Kn(r.input,o.getInputProps(Ro({state:a,props:t.getInputProps({inputElement:r.input}),inputElement:r.input},n))),Wn(r.label,{hidden:"stalled"===a.status}),Wn(r.loadingIndicator,{hidden:"stalled"!==a.status}),Wn(r.clearButton,{hidden:!a.query}),Wn(r.detachedSearchButtonQuery,{textContent:a.query}),Wn(r.detachedSearchButtonPlaceholder,{hidden:Boolean(a.query)})}(t),function(e,t){var n=t.autocomplete,r=t.autocompleteScopeApi,o=t.classNames,a=t.html,i=t.dom,s=t.panelContainer,l=t.propGetters,u=t.state,c=t.components,d=t.renderer;if(u.isOpen){s.contains(i.panel)||"loading"===u.status||s.appendChild(i.panel),i.panel.classList.toggle("aa-Panel--stalled","stalled"===u.status);var p=u.collections.filter((function(e){var t=e.source,n=e.items;return t.templates.noResults||n.length>0})).map((function(e,t){var i=e.source,s=e.items;return d.createElement("section",{key:t,className:o.source,"data-autocomplete-source-id":i.sourceId},i.templates.header&&d.createElement("div",{className:o.sourceHeader},i.templates.header({components:c,createElement:d.createElement,Fragment:d.Fragment,items:s,source:i,state:u,html:a})),i.templates.noResults&&0===s.length?d.createElement("div",{className:o.sourceNoResults},i.templates.noResults({components:c,createElement:d.createElement,Fragment:d.Fragment,source:i,state:u,html:a})):d.createElement("ul",No({className:o.list},l.getListProps(Ro({state:u,props:n.getListProps({sourceIndex:t})},r))),s.map((function(e){var s=n.getItemProps({item:e,source:i,sourceIndex:t});return d.createElement("li",No({key:s.id,className:o.item},l.getItemProps(Ro({state:u,props:s},r))),i.templates.item({components:c,createElement:d.createElement,Fragment:d.Fragment,item:e,state:u,html:a}))}))),i.templates.footer&&d.createElement("div",{className:o.sourceFooter},i.templates.footer({components:c,createElement:d.createElement,Fragment:d.Fragment,items:s,source:i,state:u,html:a})))})),f=d.createElement(d.Fragment,null,d.createElement("div",{className:o.panelLayout},p),d.createElement("div",{className:"aa-GradientBottom"})),m=p.reduce((function(e,t){return e[t.props["data-autocomplete-source-id"]]=t,e}),{});e(Ro(Ro({children:f,state:u,sections:p,elements:m},d),{},{components:c,html:a},r),i.panel)}else s.contains(i.panel)&&s.removeChild(i.panel)}(n,t)}function S(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};o();var t,n,r=p.value.renderer,i=r.components,s=Yo(r,Wo);c.current=Uo(s,p.value.core,{components:(t=i,n=function(e){return!e.value.hasOwnProperty("__autocomplete_componentName")},Object.entries(t).reduce((function(e,t){var r=Qo(t,2),o=r[0],a=r[1];return n({key:o,value:a})?Go(Go({},e),{},Vo({},o,a)):e}),{})),initialState:g.current},e),l(),a(),m.value.refresh().then((function(){k(g.current)}))}function E(e){requestAnimationFrame((function(){var t=p.value.core.environment.document.body.contains(y.value.detachedOverlay);e!==t&&(e?(p.value.core.environment.document.body.appendChild(y.value.detachedOverlay),p.value.core.environment.document.body.classList.add("aa-Detached"),y.value.input.focus()):(p.value.core.environment.document.body.removeChild(y.value.detachedOverlay),p.value.core.environment.document.body.classList.remove("aa-Detached")))}))}return r((function(){var e=m.value.getEnvironmentProps({formElement:y.value.form,panelElement:y.value.panel,inputElement:y.value.input});return Wn(p.value.core.environment,e),function(){Wn(p.value.core.environment,Object.keys(e).reduce((function(e,t){return Jo(Jo({},e),{},ea({},t,void 0))}),{}))}})),r((function(){var e=f.value?p.value.core.environment.document.body:p.value.renderer.panelContainer,t=f.value?y.value.detachedOverlay:y.value.panel;return f.value&&g.current.isOpen&&E(!0),k(g.current),function(){e.contains(t)&&e.removeChild(t)}})),r((function(){var e=p.value.renderer.container;return e.appendChild(y.value.root),function(){e.removeChild(y.value.root)}})),r((function(){var e=be((function(e){k(e.state)}),0);return d.current=function(t){var n=t.state,r=t.prevState;(f.value&&r.isOpen!==n.isOpen&&E(n.isOpen),f.value||!n.isOpen||r.isOpen||w(),n.query!==r.query)&&p.value.core.environment.document.querySelectorAll(".aa-Panel--scrollable").forEach((function(e){0!==e.scrollTop&&(e.scrollTop=0)}));e({state:n})},function(){d.current=void 0}})),r((function(){var e=be((function(){var e=f.value;f.value=p.value.core.environment.matchMedia(p.value.renderer.detachedMediaQuery).matches,e!==f.value?S({}):requestAnimationFrame(w)}),20);return p.value.core.environment.addEventListener("resize",e),function(){p.value.core.environment.removeEventListener("resize",e)}})),r((function(){if(!f.value)return function(){};function e(e){y.value.detachedContainer.classList.toggle("aa-DetachedContainer--modal",e)}function t(t){e(t.matches)}var n=p.value.core.environment.matchMedia(getComputedStyle(p.value.core.environment.document.documentElement).getPropertyValue("--aa-detached-modal-media-query"));e(n.matches);var r=Boolean(n.addEventListener);return r?n.addEventListener("change",t):n.addListener(t),function(){r?n.removeEventListener("change",t):n.removeListener(t)}})),r((function(){return requestAnimationFrame(w),function(){}})),Jo(Jo({},b),{},{update:S,destroy:function(){o()}})}var na=n(4425);const ra=n(1347),oa=ra;var aa=n(813),ia=n.n(aa);function sa(){const e=(0,l.TH)(),t=(0,l.k6)(),{siteConfig:{baseUrl:n}}=(0,le.Z)(),[o,a]=(0,r.useState)({terms:[],isDocsOrBlog:!1});return(0,r.useEffect)((()=>{if(!e.state?.cmfcmfhighlight||0===e.state.cmfcmfhighlight.terms.length)return;a(e.state.cmfcmfhighlight);const{cmfcmfhighlight:n,...r}=e.state;t.replace({...e,state:r})}),[e.state?.cmfcmfhighlight,t,e]),(0,r.useEffect)((()=>{if(0===o.terms.length)return;const e=o.isDocsOrBlog?document.getElementsByTagName("article")[0]:document.getElementsByTagName("main")[0];if(!e)return;const t=new(ia())(e),n={ignoreJoiners:!0};return t.mark(o.terms,n),()=>t.unmark(n)}),[o,n]),null}var la=n(9162),ua=n(6424);function ca(e){let{document:t}=e;const[n,r]=t.sectionRoute.split("#");let o=n;return r&&(o+="#"+r),o}const da={documents:[],index:oa((function(){this.ref("id"),this.field("title"),this.field("content")}))};const pa=()=>{const e=(0,B.Z)(),[t,n]=(0,r.useState)((()=>!!e&&"dark"===document.documentElement.getAttribute("data-theme")));(0,r.useEffect)((()=>{const e=new MutationObserver((()=>{n("dark"===document.documentElement.getAttribute("data-theme"))}));return e.observe(document.documentElement,{attributes:!0,attributeFilter:["data-theme"]}),()=>e.disconnect()}),[]);const{siteConfig:{baseUrl:o}}=(0,le.Z)(),{titleBoost:a,contentBoost:i,tagsBoost:s,parentCategoriesBoost:c,indexDocSidebarParentCategories:d,maxSearchResults:p}=(0,la.eZ)("@cmfcmf/docusaurus-search-local"),f=(0,l.k6)(),{tags:m}=(0,ua._q)(),g=(0,r.useRef)(m);(0,r.useEffect)((()=>{g.current=m}),[m]);const h=(0,r.useRef)({}),b=async e=>{const t=h.current[e];switch(t?.state){case"ready":return t;case void 0:{const t=[];h.current[e]={state:"loading",callbacks:t};const n=await async function(e,t){{let r;try{const n=await fetch(`${e}search-index-${t}.json`);if(!n.ok)return da;r=await n.json()}catch(n){return da}return{documents:r.documents,index:oa.Index.load(r.index)}}}(o,e);return t.forEach((e=>e(n))),h.current[e]={state:"ready",...n}}case"loading":return new Promise((e=>{t.callbacks.push(e)}))}},v=(0,u.I)({message:"cmfcmf/d-s-l.searchBar.placeholder",description:"Placeholder shown in the searchbar"}),y=(0,r.useRef)(null),w=(0,r.useRef)(null);return(0,r.useEffect)((()=>{if(y.current)return w.current=ta({container:y.current,placeholder:v,renderer:{createElement:r.createElement,Fragment:r.Fragment,render:he.render},navigator:{navigate(e){let{item:t,itemUrl:n}=e;f.push(n,{cmfcmfhighlight:{terms:t.terms,isDocsOrBlog:"docs"===t.document.type||"blog"===t.document.type}})}},detachedMediaQuery:"",defaultActiveItemId:0,translations:{clearButtonTitle:(0,u.I)({message:"cmfcmf/d-s-l.searchBar.clearButtonTitle",description:"Title of the button to clear the current search input"}),detachedCancelButtonText:(0,u.I)({message:"cmfcmf/d-s-l.searchBar.detachedCancelButtonText",description:"Text of the button to close the detached search window"}),submitButtonTitle:(0,u.I)({message:"cmfcmf/d-s-l.searchBar.submitButtonTitle",description:"Title of the button to submit a new search"})},getSources(e){let{query:t}=e;return[{sourceId:"search-results",templates:{item(e){let{item:t}=e;const n=ca(t);return r.createElement("a",{href:n,className:"aa-ItemLink",onClick:e=>{e.preventDefault(),f.push(n,{cmfcmfhighlight:{terms:t.terms,isDocsOrBlog:"docs"===t.document.type||"blog"===t.document.type}})}},r.createElement("div",{className:"aa-ItemContent"},r.createElement("div",{className:"aa-ItemContentBody"},r.createElement("div",{className:"aa-ItemContentTitle"},t.document.sectionTitle),t.document.pageTitle!==t.document.sectionTitle&&r.createElement("div",{className:"aa-ItemContentDescription"},t.document.pageTitle))),r.createElement("div",{className:"aa-ItemActions"},r.createElement("button",{className:"aa-ItemActionButton aa-DesktopOnly aa-ActiveOnly",type:"button",title:"Select"},r.createElement("svg",{viewBox:"0 0 24 24",width:"20",height:"20",fill:"currentColor"},r.createElement("path",{d:"M18.984 6.984h2.016v6h-15.188l3.609 3.609-1.406 1.406-6-6 6-6 1.406 1.406-3.609 3.609h13.172v-4.031z"})))))},noResults:()=>r.createElement("div",{className:"aa-ItemContent"},r.createElement("div",{className:"aa-ItemContentBody"},(0,u.I)({message:"cmfcmf/d-s-l.searchBar.noResults",description:"message shown if no results are found"})))},getItemUrl(e){let{item:t}=e;return ca(t)},async getItems(){const e=g.current,n=await Promise.all(e.map((e=>b(e)))),r=(e=>ra.tokenizer(e).map((e=>e.str)))(t);return n.flatMap((e=>{let{index:t,documents:n}=e;return t.query((e=>{e.term(r,{fields:["title"],boost:a}),e.term(r,{fields:["title"],boost:a,wildcard:oa.Query.wildcard.TRAILING}),e.term(r,{fields:["content"],boost:i}),e.term(r,{fields:["content"],boost:i,wildcard:oa.Query.wildcard.TRAILING}),e.term(r,{fields:["tags"],boost:s}),e.term(r,{fields:["tags"],boost:s,wildcard:oa.Query.wildcard.TRAILING}),d&&(e.term(r,{fields:["sidebarParentCategories"],boost:c}),e.term(r,{fields:["sidebarParentCategories"],boost:c,wildcard:oa.Query.wildcard.TRAILING}))})).slice(0,p).map((e=>({document:n.find((t=>t.id.toString()===e.ref)),score:e.score,terms:r})))})).sort(((e,t)=>t.score-e.score)).slice(0,p)}}]}}),()=>w.current?.destroy()}),[p]),r.createElement(r.Fragment,null,r.createElement(na.Z,null,r.createElement("body",{"data-theme":t?"dark":"light"})),r.createElement(sa,null),r.createElement("div",{className:"dsla-search-wrapper"},r.createElement("div",{className:"dsla-search-field",ref:y,"data-tags":m.join(",")})))},fa={searchBox:"searchBox_ZlJk"};function ma(e){let{children:t,className:n}=e;return r.createElement("div",{className:(0,o.Z)(n,fa.searchBox)},t)}var ga=n(7102),ha=n(6425);var ba=n(932);const va=e=>e.docs.find((t=>t.id===e.mainDocId));const ya={default:ae,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:o,...a}=e;const{i18n:{currentLocale:i,locales:c,localeConfigs:d}}=(0,le.Z)(),p=(0,fe.l)(),{search:f,hash:m}=(0,l.TH)(),g=[...n,...c.map((e=>{const n=`${`pathname://${p.createUrl({locale:e,fullyQualified:!1})}`}${f}${m}`;return{label:d[e].label,lang:d[e].htmlLang,to:n,target:"_self",autoAddBaseUrl:!1,className:e===i?t?"menu__link--active":"dropdown__link--active":""}})),...o],h=t?(0,u.I)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):d[i].label;return r.createElement(pe,(0,s.Z)({},a,{mobile:t,label:r.createElement(r.Fragment,null,r.createElement(me,{className:ge}),h),items:g}))},search:function(e){let{mobile:t,className:n}=e;return t?null:r.createElement(ma,{className:n},r.createElement(pa,null))},dropdown:pe,html:function(e){let{value:t,className:n,mobile:a=!1,isDropdownItem:i=!1}=e;const s=i?"li":"div";return r.createElement(s,{className:(0,o.Z)({navbar__item:!a&&!i,"menu__list-item":a},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:o,...a}=e;const{activeDoc:i}=(0,ga.Iw)(o),l=(0,ha.vY)(t,o);return null===l?null:r.createElement(ae,(0,s.Z)({exact:!0},a,{isActive:()=>i?.path===l.path||!!i?.sidebar&&i.sidebar===l.sidebar,label:n??l.id,to:l.path}))},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:o,...a}=e;const{activeDoc:i}=(0,ga.Iw)(o),l=(0,ha.oz)(t,o).link;if(!l)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return r.createElement(ae,(0,s.Z)({exact:!0},a,{isActive:()=>i?.sidebar===t,label:n??l.label,to:l.path}))},docsVersion:function(e){let{label:t,to:n,docsPluginId:o,...a}=e;const i=(0,ha.lO)(o)[0],l=t??i.label,u=n??(e=>e.docs.find((t=>t.id===e.mainDocId)))(i).path;return r.createElement(ae,(0,s.Z)({},a,{label:l,to:u}))},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:o,dropdownItemsBefore:a,dropdownItemsAfter:i,...c}=e;const{search:d,hash:p}=(0,l.TH)(),f=(0,ga.Iw)(n),m=(0,ga.gB)(n),{savePreferredVersionName:g}=(0,ba.J)(n),h=m.map((e=>{const t=f.alternateDocVersions[e.name]??va(e);return{label:e.label,to:`${t.path}${d}${p}`,isActive:()=>e===f.activeVersion,onClick:()=>g(e.name)}})),b=[...a,...h,...i],v=(0,ha.lO)(n)[0],y=t&&b.length>1?(0,u.I)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):v.label,w=t&&b.length>1?void 0:va(v).path;return b.length<=1?r.createElement(ae,(0,s.Z)({},c,{mobile:t,label:y,to:w,isActive:o?()=>!1:void 0})):r.createElement(pe,(0,s.Z)({},c,{mobile:t,label:y,to:w,items:b,isActive:o?()=>!1:void 0}))}},wa=ya;function ka(e){let{type:t,...n}=e;const o=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),a=wa[o];if(!a)throw new Error(`No NavbarItem component found for type "${t}".`);return r.createElement(a,n)}function Sa(){const e=(0,T.e)(),t=(0,w.L)().navbar.items;return r.createElement("ul",{className:"menu__list"},t.map(((t,n)=>r.createElement(ka,(0,s.Z)({mobile:!0},t,{onClick:()=>e.toggle(),key:n})))))}function Ea(e){return r.createElement("button",(0,s.Z)({},e,{type:"button",className:"clean-btn navbar-sidebar__back"}),r.createElement(u.Z,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)"},"\u2190 Back to main menu"))}function _a(){const e=0===(0,w.L)().navbar.items.length,t=D();return r.createElement(r.Fragment,null,!e&&r.createElement(Ea,{onClick:()=>t.hide()}),t.content)}function xa(){const e=(0,T.e)();var t;return void 0===(t=e.shown)&&(t=!0),(0,r.useEffect)((()=>(document.body.style.overflow=t?"hidden":"visible",()=>{document.body.style.overflow="visible"})),[t]),e.shouldRender?r.createElement(M,{header:r.createElement(K,null),primaryMenu:r.createElement(Sa,null),secondaryMenu:r.createElement(_a,null)}):null}const Oa={navbarHideable:"navbarHideable_m1mJ",navbarHidden:"navbarHidden_jGov"};function Pa(e){return r.createElement("div",(0,s.Z)({role:"presentation"},e,{className:(0,o.Z)("navbar-sidebar__backdrop",e.className)}))}function Ca(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:a}}=(0,w.L)(),i=(0,T.e)(),{navbarRef:s,isNavbarVisible:l}=function(e){const[t,n]=(0,r.useState)(e),o=(0,r.useRef)(!1),a=(0,r.useRef)(0),i=(0,r.useCallback)((e=>{null!==e&&(a.current=e.getBoundingClientRect().height)}),[]);return(0,I.RF)(((t,r)=>{let{scrollY:i}=t;if(!e)return;if(i=s?n(!1):i+u{if(!e)return;const r=t.location.hash;if(r?document.getElementById(r.substring(1)):void 0)return o.current=!0,void n(!1);n(!0)})),{navbarRef:i,isNavbarVisible:t}}(n);return r.createElement("nav",{ref:s,"aria-label":(0,u.I)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,o.Z)("navbar","navbar--fixed-top",n&&[Oa.navbarHideable,!l&&Oa.navbarHidden],{"navbar--dark":"dark"===a,"navbar--primary":"primary"===a,"navbar-sidebar--show":i.shown})},t,r.createElement(Pa,{onClick:i.toggle}),r.createElement(xa,null))}var Ta=n(482);const Ia={errorBoundaryError:"errorBoundaryError_a6uf"};function Aa(e){return r.createElement("button",(0,s.Z)({type:"button"},e),r.createElement(u.Z,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again rendering when the React error boundary captures an error"},"Try again"))}function La(e){let{error:t}=e;const n=(0,Ta.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return r.createElement("p",{className:Ia.errorBoundaryError},n)}class Na extends r.Component{componentDidCatch(e,t){throw this.props.onError(e,t)}render(){return this.props.children}}const ja="right";function Ra(e){let{width:t=30,height:n=30,className:o,...a}=e;return r.createElement("svg",(0,s.Z)({className:o,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true"},a),r.createElement("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"}))}function Da(){const{toggle:e,shown:t}=(0,T.e)();return r.createElement("button",{onClick:e,"aria-label":(0,u.I)({id:"theme.docs.sidebar.toggleSidebarButtonAriaLabel",message:"Toggle navigation bar",description:"The ARIA label for hamburger menu button of mobile navigation"}),"aria-expanded":t,className:"navbar__toggle clean-btn",type:"button"},r.createElement(Ra,null))}const Ma={colorModeToggle:"colorModeToggle_DEke"};function Fa(e){let{items:t}=e;return r.createElement(r.Fragment,null,t.map(((e,t)=>r.createElement(Na,{key:t,onError:t=>new Error(`A theme navbar item failed to render.\nPlease double-check the following navbar item (themeConfig.navbar.items) of your Docusaurus config:\n${JSON.stringify(e,null,2)}`,{cause:t})},r.createElement(ka,e)))))}function Ba(e){let{left:t,right:n}=e;return r.createElement("div",{className:"navbar__inner"},r.createElement("div",{className:"navbar__items"},t),r.createElement("div",{className:"navbar__items navbar__items--right"},n))}function za(){const e=(0,T.e)(),t=(0,w.L)().navbar.items,[n,o]=function(e){function t(e){return"left"===(e.position??ja)}return[e.filter(t),e.filter((e=>!t(e)))]}(t),a=t.find((e=>"search"===e.type));return r.createElement(Ba,{left:r.createElement(r.Fragment,null,!e.disabled&&r.createElement(Da,null),r.createElement(Z,null),r.createElement(Fa,{items:n})),right:r.createElement(r.Fragment,null,r.createElement(Fa,{items:o}),r.createElement(V,{className:Ma.colorModeToggle}),!a&&r.createElement(ma,null,r.createElement(pa,null)))})}function qa(){return r.createElement(Ca,null,r.createElement(za,null))}function Ua(e){let{item:t}=e;const{to:n,href:o,label:a,prependBaseUrlToHref:i,...l}=t,u=(0,X.Z)(n),c=(0,X.Z)(o,{forcePrependBaseUrl:!0});return r.createElement(Y.Z,(0,s.Z)({className:"footer__link-item"},o?{href:i?c:o}:{to:u},l),a,o&&!(0,J.Z)(o)&&r.createElement(te.Z,null))}function $a(e){let{item:t}=e;return t.html?r.createElement("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):r.createElement("li",{key:t.href??t.to,className:"footer__item"},r.createElement(Ua,{item:t}))}function Ha(e){let{column:t}=e;return r.createElement("div",{className:"col footer__col"},r.createElement("div",{className:"footer__title"},t.title),r.createElement("ul",{className:"footer__items clean-list"},t.items.map(((e,t)=>r.createElement($a,{key:t,item:e})))))}function Ga(e){let{columns:t}=e;return r.createElement("div",{className:"row footer__links"},t.map(((e,t)=>r.createElement(Ha,{key:t,column:e}))))}function Va(){return r.createElement("span",{className:"footer__link-separator"},"\xb7")}function Qa(e){let{item:t}=e;return t.html?r.createElement("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):r.createElement(Ua,{item:t})}function Za(e){let{links:t}=e;return r.createElement("div",{className:"footer__links text--center"},r.createElement("div",{className:"footer__links"},t.map(((e,n)=>r.createElement(r.Fragment,{key:n},r.createElement(Qa,{item:e}),t.length!==n+1&&r.createElement(Va,null))))))}function Wa(e){let{links:t}=e;return function(e){return"title"in e[0]}(t)?r.createElement(Ga,{columns:t}):r.createElement(Za,{links:t})}var Ka=n(3352);const Ya={footerLogoLink:"footerLogoLink_BH7S"};function Xa(e){let{logo:t}=e;const{withBaseUrl:n}=(0,X.C)(),a={light:n(t.src),dark:n(t.srcDark??t.src)};return r.createElement(Ka.Z,{className:(0,o.Z)("footer__logo",t.className),alt:t.alt,sources:a,width:t.width,height:t.height,style:t.style})}function Ja(e){let{logo:t}=e;return t.href?r.createElement(Y.Z,{href:t.href,className:Ya.footerLogoLink,target:t.target},r.createElement(Xa,{logo:t})):r.createElement(Xa,{logo:t})}function ei(e){let{copyright:t}=e;return r.createElement("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function ti(e){let{style:t,links:n,logo:a,copyright:i}=e;return r.createElement("footer",{className:(0,o.Z)("footer",{"footer--dark":"dark"===t})},r.createElement("div",{className:"container container-fluid"},n,(a||i)&&r.createElement("div",{className:"footer__bottom text--center"},a&&r.createElement("div",{className:"margin-bottom--sm"},a),i)))}function ni(){const{footer:e}=(0,w.L)();if(!e)return null;const{copyright:t,links:n,logo:o,style:a}=e;return r.createElement(ti,{style:a,links:n&&n.length>0&&r.createElement(Wa,{links:n}),logo:o&&r.createElement(Ja,{logo:o}),copyright:t&&r.createElement(ei,{copyright:t})})}const ri=r.memo(ni),oi=(0,A.Qc)([F.S,k.pl,I.OC,ba.L5,i.VC,function(e){let{children:t}=e;return r.createElement(L.n2,null,r.createElement(T.M,null,r.createElement(j,null,t)))}]);function ai(e){let{children:t}=e;return r.createElement(oi,null,t)}function ii(e){let{error:t,tryAgain:n}=e;return r.createElement("main",{className:"container margin-vert--xl"},r.createElement("div",{className:"row"},r.createElement("div",{className:"col col--6 col--offset-3"},r.createElement("h1",{className:"hero__title"},r.createElement(u.Z,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed"},"This page crashed.")),r.createElement("div",{className:"margin-vert--lg"},r.createElement(Aa,{onClick:n,className:"button button--primary shadow--lw"})),r.createElement("hr",null),r.createElement("div",{className:"margin-vert--md"},r.createElement(La,{error:t})))))}const si={mainWrapper:"mainWrapper_z2l0"};function li(e){const{children:t,noFooter:n,wrapperClassName:s,title:l,description:u}=e;return(0,b.t)(),r.createElement(ai,null,r.createElement(i.d,{title:l,description:u}),r.createElement(y,null),r.createElement(C,null),r.createElement(qa,null),r.createElement("div",{id:d,className:(0,o.Z)(h.k.wrapper.main,si.mainWrapper,s)},r.createElement(a.Z,{fallback:e=>r.createElement(ii,e)},t)),!n&&r.createElement(ri,null))}},7509:(e,t,n)=>{"use strict";n.d(t,{Z:()=>d});var r=n(7462),o=n(7294),a=n(9415),i=n(4132),s=n(1199),l=n(9989),u=n(3352);function c(e){let{logo:t,alt:n,imageClassName:r}=e;const a={light:(0,i.Z)(t.src),dark:(0,i.Z)(t.srcDark||t.src)},s=o.createElement(u.Z,{className:t.className,sources:a,height:t.height,width:t.width,alt:n,style:t.style});return r?o.createElement("div",{className:r},s):s}function d(e){const{siteConfig:{title:t}}=(0,s.Z)(),{navbar:{title:n,logo:u}}=(0,l.L)(),{imageClassName:d,titleClassName:p,...f}=e,m=(0,i.Z)(u?.href||"/"),g=n?"":t,h=u?.alt??g;return o.createElement(a.Z,(0,r.Z)({to:m},f,u?.target&&{target:u.target}),u&&o.createElement(c,{logo:u,alt:h,imageClassName:d}),null!=n&&o.createElement("b",{className:p},n))}},9298:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(7294),o=n(4425);function a(e){let{locale:t,version:n,tag:a}=e;const i=t;return r.createElement(o.Z,null,t&&r.createElement("meta",{name:"docusaurus_locale",content:t}),n&&r.createElement("meta",{name:"docusaurus_version",content:n}),a&&r.createElement("meta",{name:"docusaurus_tag",content:a}),i&&r.createElement("meta",{name:"docsearch:language",content:i}),n&&r.createElement("meta",{name:"docsearch:version",content:n}),a&&r.createElement("meta",{name:"docsearch:docusaurus_tag",content:a}))}},3352:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});var r=n(7462),o=n(7294),a=n(6010),i=n(573),s=n(9507);const l={themedImage:"themedImage_ToTc","themedImage--light":"themedImage--light_HNdA","themedImage--dark":"themedImage--dark_i4oU"};function u(e){const t=(0,i.Z)(),{colorMode:n}=(0,s.I)(),{sources:u,className:c,alt:d,...p}=e,f=t?"dark"===n?["dark"]:["light"]:["light","dark"];return o.createElement(o.Fragment,null,f.map((e=>o.createElement("img",(0,r.Z)({key:e,src:u[e],alt:d,className:(0,a.Z)(l.themedImage,l[`themedImage--${e}`],c)},p)))))}},8924:(e,t,n)=>{"use strict";n.d(t,{u:()=>l,z:()=>h});var r=n(7462),o=n(7294),a=n(70),i=n(9638);const s="ease-in-out";function l(e){let{initialState:t}=e;const[n,r]=(0,o.useState)(t??!1),a=(0,o.useCallback)((()=>{r((e=>!e))}),[]);return{collapsed:n,setCollapsed:r,toggleCollapsed:a}}const u={display:"none",overflow:"hidden",height:"0px"},c={display:"block",overflow:"visible",height:"auto"};function d(e,t){const n=t?u:c;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function p(e){let{collapsibleRef:t,collapsed:n,animation:r}=e;const a=(0,o.useRef)(!1);(0,o.useEffect)((()=>{const e=t.current;function o(){const t=e.scrollHeight,n=r?.duration??function(e){if((0,i.n)())return 1;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(t);return{transition:`height ${n}ms ${r?.easing??s}`,height:`${t}px`}}function l(){const t=o();e.style.transition=t.transition,e.style.height=t.height}if(!a.current)return d(e,n),void(a.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(l(),requestAnimationFrame((()=>{e.style.height=u.height,e.style.overflow=u.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{l()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,r])}function f(e){if(!a.Z.canUseDOM)return e?u:c}function m(e){let{as:t="div",collapsed:n,children:r,animation:a,onCollapseTransitionEnd:i,className:s,disableSSRStyle:l}=e;const u=(0,o.useRef)(null);return p({collapsibleRef:u,collapsed:n,animation:a}),o.createElement(t,{ref:u,style:l?void 0:f(n),onTransitionEnd:e=>{"height"===e.propertyName&&(d(u.current,n),i?.(n))},className:s},r)}function g(e){let{collapsed:t,...n}=e;const[a,i]=(0,o.useState)(!t),[s,l]=(0,o.useState)(t);return(0,o.useLayoutEffect)((()=>{t||i(!0)}),[t]),(0,o.useLayoutEffect)((()=>{a&&l(t)}),[a,t]),a?o.createElement(m,(0,r.Z)({},n,{collapsed:s})):null}function h(e){let{lazy:t,...n}=e;const r=t?g:m;return o.createElement(r,n)}},8264:(e,t,n)=>{"use strict";n.d(t,{nT:()=>m,pl:()=>f});var r=n(7294),o=n(573),a=n(2345),i=n(4515),s=n(9989);const l=(0,a.WA)("docusaurus.announcement.dismiss"),u=(0,a.WA)("docusaurus.announcement.id"),c=()=>"true"===l.get(),d=e=>l.set(String(e)),p=r.createContext(null);function f(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,s.L)(),t=(0,o.Z)(),[n,a]=(0,r.useState)((()=>!!t&&c()));(0,r.useEffect)((()=>{a(c())}),[]);const i=(0,r.useCallback)((()=>{d(!0),a(!0)}),[]);return(0,r.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=u.get();"annoucement-bar"===n&&(n="announcement-bar");const r=t!==n;u.set(t),r&&d(!1),!r&&c()||a(!1)}),[e]),(0,r.useMemo)((()=>({isActive:!!e&&!n,close:i})),[e,n,i])}();return r.createElement(p.Provider,{value:n},t)}function m(){const e=(0,r.useContext)(p);if(!e)throw new i.i6("AnnouncementBarProvider");return e}},9507:(e,t,n)=>{"use strict";n.d(t,{I:()=>h,S:()=>g});var r=n(7294),o=n(70),a=n(4515),i=n(2345),s=n(9989);const l=r.createContext(void 0),u="theme",c=(0,i.WA)(u),d={light:"light",dark:"dark"},p=e=>e===d.dark?d.dark:d.light,f=e=>o.Z.canUseDOM?p(document.documentElement.getAttribute("data-theme")):p(e),m=e=>{c.set(p(e))};function g(e){let{children:t}=e;const n=function(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,s.L)(),[o,a]=(0,r.useState)(f(e));(0,r.useEffect)((()=>{t&&c.del()}),[t]);const i=(0,r.useCallback)((function(t,r){void 0===r&&(r={});const{persist:o=!0}=r;t?(a(t),o&&m(t)):(a(n?window.matchMedia("(prefers-color-scheme: dark)").matches?d.dark:d.light:e),c.del())}),[n,e]);(0,r.useEffect)((()=>{document.documentElement.setAttribute("data-theme",p(o))}),[o]),(0,r.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==u)return;const t=c.get();null!==t&&i(p(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,i]);const l=(0,r.useRef)(!1);return(0,r.useEffect)((()=>{if(t&&!n)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),r=()=>{window.matchMedia("print").matches||l.current?l.current=window.matchMedia("print").matches:i(null)};return e.addListener(r),()=>e.removeListener(r)}),[i,t,n]),(0,r.useMemo)((()=>({colorMode:o,setColorMode:i,get isDarkTheme(){return o===d.dark},setLightTheme(){i(d.light)},setDarkTheme(){i(d.dark)}})),[o,i])}();return r.createElement(l.Provider,{value:n},t)}function h(){const e=(0,r.useContext)(l);if(null==e)throw new a.i6("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},932:(e,t,n)=>{"use strict";n.d(t,{J:()=>v,L5:()=>h,Oh:()=>y});var r=n(7294),o=n(7102),a=n(9277),i=n(9989),s=n(6425),l=n(4515),u=n(2345);const c=e=>`docs-preferred-version-${e}`,d={save:(e,t,n)=>{(0,u.WA)(c(e),{persistence:t}).set(n)},read:(e,t)=>(0,u.WA)(c(e),{persistence:t}).get(),clear:(e,t)=>{(0,u.WA)(c(e),{persistence:t}).del()}},p=e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}])));const f=r.createContext(null);function m(){const e=(0,o._r)(),t=(0,i.L)().docs.versionPersistence,n=(0,r.useMemo)((()=>Object.keys(e)),[e]),[a,s]=(0,r.useState)((()=>p(n)));(0,r.useEffect)((()=>{s(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:r}=e;function o(e){const t=d.read(e,n);return r[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(d.clear(e,n),{preferredVersionName:null})}return Object.fromEntries(t.map((e=>[e,o(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[a,(0,r.useMemo)((()=>({savePreferredVersion:function(e,n){d.save(e,t,n),s((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function g(e){let{children:t}=e;const n=m();return r.createElement(f.Provider,{value:n},t)}function h(e){let{children:t}=e;return s.cE?r.createElement(g,null,t):r.createElement(r.Fragment,null,t)}function b(){const e=(0,r.useContext)(f);if(!e)throw new l.i6("DocsPreferredVersionContextProvider");return e}function v(e){void 0===e&&(e=a.m);const t=(0,o.zh)(e),[n,i]=b(),{preferredVersionName:s}=n[e];return{preferredVersion:t.versions.find((e=>e.name===s))??null,savePreferredVersionName:(0,r.useCallback)((t=>{i.savePreferredVersion(e,t)}),[i,e])}}function y(){const e=(0,o._r)(),[t]=b();function n(n){const r=e[n],{preferredVersionName:o}=t[n];return r.versions.find((e=>e.name===o))??null}const r=Object.keys(e);return Object.fromEntries(r.map((e=>[e,n(e)])))}},4260:(e,t,n)=>{"use strict";n.d(t,{V:()=>l,b:()=>s});var r=n(7294),o=n(4515);const a=Symbol("EmptyContext"),i=r.createContext(a);function s(e){let{children:t,name:n,items:o}=e;const a=(0,r.useMemo)((()=>n&&o?{name:n,items:o}:null),[n,o]);return r.createElement(i.Provider,{value:a},t)}function l(){const e=(0,r.useContext)(i);if(e===a)throw new o.i6("DocsSidebarProvider");return e}},9560:(e,t,n)=>{"use strict";n.d(t,{E:()=>s,q:()=>i});var r=n(7294),o=n(4515);const a=r.createContext(null);function i(e){let{children:t,version:n}=e;return r.createElement(a.Provider,{value:n},t)}function s(){const e=(0,r.useContext)(a);if(null===e)throw new o.i6("DocsVersionProvider");return e}},8227:(e,t,n)=>{"use strict";n.d(t,{M:()=>p,e:()=>f});var r=n(7294),o=n(7929),a=n(2944),i=n(6550),s=(n(1688),n(4515));function l(e){!function(e){const t=(0,i.k6)(),n=(0,s.zX)(e);(0,r.useEffect)((()=>t.block(((e,t)=>n(e,t)))),[t,n])}(((t,n)=>{if("POP"===n)return e(t,n)}))}var u=n(9989);const c=r.createContext(void 0);function d(){const e=function(){const e=(0,o.HY)(),{items:t}=(0,u.L)().navbar;return 0===t.length&&!e.component}(),t=(0,a.i)(),n=!e&&"mobile"===t,[i,s]=(0,r.useState)(!1);l((()=>{if(i)return s(!1),!1}));const c=(0,r.useCallback)((()=>{s((e=>!e))}),[]);return(0,r.useEffect)((()=>{"desktop"===t&&s(!1)}),[t]),(0,r.useMemo)((()=>({disabled:e,shouldRender:n,toggle:c,shown:i})),[e,n,c,i])}function p(e){let{children:t}=e;const n=d();return r.createElement(c.Provider,{value:n},t)}function f(){const e=r.useContext(c);if(void 0===e)throw new s.i6("NavbarMobileSidebarProvider");return e}},7929:(e,t,n)=>{"use strict";n.d(t,{HY:()=>s,Zo:()=>l,n2:()=>i});var r=n(7294),o=n(4515);const a=r.createContext(null);function i(e){let{children:t}=e;const n=(0,r.useState)({component:null,props:null});return r.createElement(a.Provider,{value:n},t)}function s(){const e=(0,r.useContext)(a);if(!e)throw new o.i6("NavbarSecondaryMenuContentProvider");return e[0]}function l(e){let{component:t,props:n}=e;const i=(0,r.useContext)(a);if(!i)throw new o.i6("NavbarSecondaryMenuContentProvider");const[,s]=i,l=(0,o.Ql)(n);return(0,r.useEffect)((()=>{s({component:t,props:l})}),[s,t,l]),(0,r.useEffect)((()=>()=>s({component:null,props:null})),[s]),null}},8398:(e,t,n)=>{"use strict";n.d(t,{h:()=>o,t:()=>a});var r=n(7294);const o="navigation-with-keyboard";function a(){(0,r.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(o),"mousedown"===e.type&&document.body.classList.remove(o)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(o),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},2944:(e,t,n)=>{"use strict";n.d(t,{i:()=>u});var r=n(7294),o=n(70);const a={desktop:"desktop",mobile:"mobile",ssr:"ssr"},i=996;function s(){return o.Z.canUseDOM?window.innerWidth>i?a.desktop:a.mobile:a.ssr}const l=!1;function u(){const[e,t]=(0,r.useState)((()=>l?"ssr":s()));return(0,r.useEffect)((()=>{function e(){t(s())}const n=l?window.setTimeout(e,1e3):void 0;return window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e),clearTimeout(n)}}),[]),e}},6702:(e,t,n)=>{"use strict";n.d(t,{k:()=>r});const r={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",admonitionType:e=>`theme-admonition-${e}`},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>`theme-doc-sidebar-item-category-level-${e}`,docSidebarItemLinkLevel:e=>`theme-doc-sidebar-item-link-level-${e}`},blog:{}}},9638:(e,t,n)=>{"use strict";function r(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}n.d(t,{n:()=>r})},6425:(e,t,n)=>{"use strict";n.d(t,{MN:()=>x,Wl:()=>m,_F:()=>v,cE:()=>p,jA:()=>g,xz:()=>f,hI:()=>_,lO:()=>k,vY:()=>E,oz:()=>S,s1:()=>w});var r=n(7294),o=n(6550),a=n(8790),i=n(7102),s=n(932),l=n(9560),u=n(4260);function c(e){return Array.from(new Set(e))}var d=n(6224);const p=!!i._r;function f(e){const t=(0,l.E)();if(!e)return;const n=t.docs[e];if(!n)throw new Error(`no version doc found by id=${e}`);return n}function m(e){if(e.href)return e.href;for(const t of e.items){if("link"===t.type)return t.href;if("category"===t.type){const e=m(t);if(e)return e}}}function g(){const{pathname:e}=(0,o.TH)(),t=(0,u.V)();if(!t)throw new Error("Unexpected: cant find current sidebar in context");const n=y({sidebarItems:t.items,pathname:e,onlyCategories:!0}).slice(-1)[0];if(!n)throw new Error(`${e} is not associated with a category. useCurrentSidebarCategory() should only be used on category index pages.`);return n}const h=(e,t)=>void 0!==e&&(0,d.Mg)(e,t),b=(e,t)=>e.some((e=>v(e,t)));function v(e,t){return"link"===e.type?h(e.href,t):"category"===e.type&&(h(e.href,t)||b(e.items,t))}function y(e){let{sidebarItems:t,pathname:n,onlyCategories:r=!1}=e;const o=[];return function e(t){for(const a of t)if("category"===a.type&&((0,d.Mg)(a.href,n)||e(a.items))||"link"===a.type&&(0,d.Mg)(a.href,n)){return r&&"category"!==a.type||o.unshift(a),!0}return!1}(t),o}function w(){const e=(0,u.V)(),{pathname:t}=(0,o.TH)(),n=(0,i.gA)()?.pluginData.breadcrumbs;return!1!==n&&e?y({sidebarItems:e.items,pathname:t}):null}function k(e){const{activeVersion:t}=(0,i.Iw)(e),{preferredVersion:n}=(0,s.J)(e),o=(0,i.yW)(e);return(0,r.useMemo)((()=>c([t,n,o].filter(Boolean))),[t,n,o])}function S(e,t){const n=k(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.sidebars?Object.entries(e.sidebars):[])),r=t.find((t=>t[0]===e));if(!r)throw new Error(`Can't find any sidebar with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\nAvailable sidebar ids are:\n- ${t.map((e=>e[0])).join("\n- ")}`);return r[1]}),[e,n])}function E(e,t){const n=k(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.docs)),r=t.find((t=>t.id===e));if(!r){if(n.flatMap((e=>e.draftIds)).includes(e))return null;throw new Error(`Couldn't find any doc with id "${e}" in version${n.length>1?"s":""} "${n.map((e=>e.name)).join(", ")}".\nAvailable doc ids are:\n- ${c(t.map((e=>e.id))).join("\n- ")}`)}return r}),[e,n])}function _(e){let{route:t,versionMetadata:n}=e;const r=(0,o.TH)(),i=t.routes,s=i.find((e=>(0,o.LX)(r.pathname,e)));if(!s)return null;const l=s.sidebar,u=l?n.docsSidebars[l]:void 0;return{docElement:(0,a.H)(i),sidebarName:l,sidebarItems:u}}function x(e){return e.filter((e=>"category"!==e.type||!!m(e)))}},168:(e,t,n)=>{"use strict";n.d(t,{FG:()=>p,d:()=>c,VC:()=>f});var r=n(7294),o=n(6010),a=n(4425),i=n(5302);function s(){const e=r.useContext(i._);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var l=n(4132),u=n(1199);function c(e){let{title:t,description:n,keywords:o,image:i,children:s}=e;const c=function(e){const{siteConfig:t}=(0,u.Z)(),{title:n,titleDelimiter:r}=t;return e?.trim().length?`${e.trim()} ${r} ${n}`:n}(t),{withBaseUrl:d}=(0,l.C)(),p=i?d(i,{absolute:!0}):void 0;return r.createElement(a.Z,null,t&&r.createElement("title",null,c),t&&r.createElement("meta",{property:"og:title",content:c}),n&&r.createElement("meta",{name:"description",content:n}),n&&r.createElement("meta",{property:"og:description",content:n}),o&&r.createElement("meta",{name:"keywords",content:Array.isArray(o)?o.join(","):o}),p&&r.createElement("meta",{property:"og:image",content:p}),p&&r.createElement("meta",{name:"twitter:image",content:p}),s)}const d=r.createContext(void 0);function p(e){let{className:t,children:n}=e;const i=r.useContext(d),s=(0,o.Z)(i,t);return r.createElement(d.Provider,{value:s},r.createElement(a.Z,null,r.createElement("html",{className:s})),n)}function f(e){let{children:t}=e;const n=s(),a=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const i=`plugin-id-${n.plugin.id}`;return r.createElement(p,{className:(0,o.Z)(a,i)},t)}},4515:(e,t,n)=>{"use strict";n.d(t,{D9:()=>i,Qc:()=>u,Ql:()=>l,i6:()=>s,zX:()=>a});var r=n(7294);const o=n(70).Z.canUseDOM?r.useLayoutEffect:r.useEffect;function a(e){const t=(0,r.useRef)(e);return o((()=>{t.current=e}),[e]),(0,r.useCallback)((function(){return t.current(...arguments)}),[])}function i(e){const t=(0,r.useRef)();return o((()=>{t.current=e})),t.current}class s extends Error{constructor(e,t){super(),this.name="ReactContextError",this.message=`Hook ${this.stack?.split("\n")[1]?.match(/at (?:\w+\.)?(?\w+)/)?.groups.name??""} is called outside the <${e}>. ${t??""}`}}function l(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,r.useMemo)((()=>e),t.flat())}function u(e){return t=>{let{children:n}=t;return r.createElement(r.Fragment,null,e.reduceRight(((e,t)=>r.createElement(t,null,e)),n))}}},6224:(e,t,n)=>{"use strict";n.d(t,{Mg:()=>i,Ns:()=>s});var r=n(7294),o=n(2717),a=n(1199);function i(e,t){const n=e=>(!e||e.endsWith("/")?e:`${e}/`)?.toLowerCase();return n(e)===n(t)}function s(){const{baseUrl:e}=(0,a.Z)().siteConfig;return(0,r.useMemo)((()=>function(e){let{baseUrl:t,routes:n}=e;function r(e){return e.path===t&&!0===e.exact}function o(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(r)||e(t.filter(o).flatMap((e=>e.routes??[])))}(n)}({routes:o.Z,baseUrl:e})),[e])}},2924:(e,t,n)=>{"use strict";n.d(t,{Ct:()=>p,OC:()=>l,RF:()=>d});var r=n(7294),o=n(70),a=n(573),i=n(4515);const s=r.createContext(void 0);function l(e){let{children:t}=e;const n=function(){const e=(0,r.useRef)(!0);return(0,r.useMemo)((()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}})),[])}();return r.createElement(s.Provider,{value:n},t)}function u(){const e=(0,r.useContext)(s);if(null==e)throw new i.i6("ScrollControllerProvider");return e}const c=()=>o.Z.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function d(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=u(),o=(0,r.useRef)(c()),a=(0,i.zX)(e);(0,r.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=c();a(e,o.current),o.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[a,n,...t])}function p(){const e=(0,r.useRef)(null),t=(0,a.Z)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:n=>{e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),()=>{}}(n):function(e){let t=null;const n=document.documentElement.scrollTop>e;return function r(){const o=document.documentElement.scrollTop;(n&&o>e||!n&&ot&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>e.current?.()}}},6424:(e,t,n)=>{"use strict";n.d(t,{HX:()=>i,_q:()=>l,os:()=>s});var r=n(7102),o=n(1199),a=n(932);const i="default";function s(e,t){return`docs-${e}-${t}`}function l(){const{i18n:e}=(0,o.Z)(),t=(0,r._r)(),n=(0,r.WS)(),l=(0,a.Oh)();const u=[i,...Object.keys(t).map((function(e){const r=n?.activePlugin.pluginId===e?n.activeVersion:void 0,o=l[e],a=t[e].versions.find((e=>e.isLast));return s(e,(r??o??a).name)}))];return{locale:e.currentLocale,tags:u}}},2345:(e,t,n)=>{"use strict";n.d(t,{WA:()=>l});n(7294),n(1688);const r="localStorage";function o(e){let{key:t,oldValue:n,newValue:r,storage:o}=e;if(n===r)return;const a=document.createEvent("StorageEvent");a.initStorageEvent("storage",!1,!1,t,n,r,window.location.href,o),window.dispatchEvent(a)}function a(e){if(void 0===e&&(e=r),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(n){return t=n,i||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),i=!0),null}var t}let i=!1;const s={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function l(e,t){if("undefined"==typeof window)return function(e){function t(){throw new Error(`Illegal storage API usage for storage key "${e}".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.`)}return{get:t,set:t,del:t,listen:t}}(e);const n=a(t?.persistence);return null===n?s:{get:()=>{try{return n.getItem(e)}catch(t){return console.error(`Docusaurus storage error, can't get key=${e}`,t),null}},set:t=>{try{const r=n.getItem(e);n.setItem(e,t),o({key:e,oldValue:r,newValue:t,storage:n})}catch(r){console.error(`Docusaurus storage error, can't set ${e}=${t}`,r)}},del:()=>{try{const t=n.getItem(e);n.removeItem(e),o({key:e,oldValue:t,newValue:null,storage:n})}catch(t){console.error(`Docusaurus storage error, can't delete key=${e}`,t)}},listen:t=>{try{const r=r=>{r.storageArea===n&&r.key===e&&t(r)};return window.addEventListener("storage",r),()=>window.removeEventListener("storage",r)}catch(r){return console.error(`Docusaurus storage error, can't listen for changes of key=${e}`,r),()=>{}}}}}},4739:(e,t,n)=>{"use strict";n.d(t,{l:()=>a});var r=n(1199),o=n(6550);function a(){const{siteConfig:{baseUrl:e,url:t},i18n:{defaultLocale:n,currentLocale:a}}=(0,r.Z)(),{pathname:i}=(0,o.TH)(),s=a===n?e:e.replace(`/${a}/`,"/"),l=i.replace(e,"");return{createUrl:function(e){let{locale:r,fullyQualified:o}=e;return`${o?t:""}${function(e){return e===n?`${s}`:`${s}${e}/`}(r)}${l}`}}}},2414:(e,t,n)=>{"use strict";n.d(t,{S:()=>i});var r=n(7294),o=n(6550),a=n(4515);function i(e){const t=(0,o.TH)(),n=(0,a.D9)(t),i=(0,a.zX)(e);(0,r.useEffect)((()=>{n&&t!==n&&i({location:t,previousLocation:n})}),[i,t,n])}},9989:(e,t,n)=>{"use strict";n.d(t,{L:()=>o});var r=n(1199);function o(){return(0,r.Z)().siteConfig.themeConfig}},6081:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const{trailingSlash:n,baseUrl:r}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[o]=e.split(/[#?]/),a="/"===o||o===r?o:(i=o,n?function(e){return e.endsWith("/")?e:`${e}/`}(i):function(e){return e.endsWith("/")?e.slice(0,-1):e}(i));var i;return e.replace(o,a)}},6029:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=void 0,t.getErrorCausalChain=function e(t){return t.cause?[t,...e(t.cause)]:[t]}},482:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=t.applyTrailingSlash=t.blogPostContainerID=void 0,t.blogPostContainerID="__blog-post-container";var o=n(6081);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return r(o).default}});var a=n(6029);Object.defineProperty(t,"getErrorCausalChain",{enumerable:!0,get:function(){return a.getErrorCausalChain}})},6010:(e,t,n)=>{"use strict";function r(e){var t,n,o="";if("string"==typeof e||"number"==typeof e)o+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;to});const o=function(){for(var e,t,n=0,o="";n{"use strict";n.d(t,{lX:()=>w,q_:()=>O,ob:()=>f,PP:()=>C,Ep:()=>p});var r=n(7462);function o(e){return"/"===e.charAt(0)}function a(e,t){for(var n=t,r=n+1,o=e.length;r=0;p--){var f=i[p];"."===f?a(i,p):".."===f?(a(i,p),d++):d&&(a(i,p),d--)}if(!u)for(;d--;d)i.unshift("..");!u||""===i[0]||i[0]&&o(i[0])||i.unshift("");var m=i.join("/");return n&&"/"!==m.substr(-1)&&(m+="/"),m};var s=n(8776);function l(e){return"/"===e.charAt(0)?e:"/"+e}function u(e){return"/"===e.charAt(0)?e.substr(1):e}function c(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function d(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function p(e){var t=e.pathname,n=e.search,r=e.hash,o=t||"/";return n&&"?"!==n&&(o+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(o+="#"===r.charAt(0)?r:"#"+r),o}function f(e,t,n,o){var a;"string"==typeof e?(a=function(e){var t=e||"/",n="",r="",o=t.indexOf("#");-1!==o&&(r=t.substr(o),t=t.substr(0,o));var a=t.indexOf("?");return-1!==a&&(n=t.substr(a),t=t.substr(0,a)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),a.state=t):(void 0===(a=(0,r.Z)({},e)).pathname&&(a.pathname=""),a.search?"?"!==a.search.charAt(0)&&(a.search="?"+a.search):a.search="",a.hash?"#"!==a.hash.charAt(0)&&(a.hash="#"+a.hash):a.hash="",void 0!==t&&void 0===a.state&&(a.state=t));try{a.pathname=decodeURI(a.pathname)}catch(s){throw s instanceof URIError?new URIError('Pathname "'+a.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):s}return n&&(a.key=n),o?a.pathname?"/"!==a.pathname.charAt(0)&&(a.pathname=i(a.pathname,o.pathname)):a.pathname=o.pathname:a.pathname||(a.pathname="/"),a}function m(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,o){if(null!=e){var a="function"==typeof e?e(t,n):e;"string"==typeof a?"function"==typeof r?r(a,o):o(!0):o(!1!==a)}else o(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;rt?n.splice(t,n.length-t,o):n.push(o),d({action:r,location:o,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",o=f(e,t,g(),w.location);c.confirmTransitionTo(o,r,n,(function(e){e&&(w.entries[w.index]=o,d({action:r,location:o}))}))},go:y,goBack:function(){y(-1)},goForward:function(){y(1)},canGo:function(e){var t=w.index+e;return t>=0&&t{"use strict";var r=n(1296),o={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},a={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},s={};function l(e){return r.isMemo(e)?i:s[e.$$typeof]||o}s[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},s[r.Memo]=i;var u=Object.defineProperty,c=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,p=Object.getOwnPropertyDescriptor,f=Object.getPrototypeOf,m=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(m){var o=f(n);o&&o!==m&&e(t,o,r)}var i=c(n);d&&(i=i.concat(d(n)));for(var s=l(t),g=l(n),h=0;h{"use strict";var n="function"==typeof Symbol&&Symbol.for,r=n?Symbol.for("react.element"):60103,o=n?Symbol.for("react.portal"):60106,a=n?Symbol.for("react.fragment"):60107,i=n?Symbol.for("react.strict_mode"):60108,s=n?Symbol.for("react.profiler"):60114,l=n?Symbol.for("react.provider"):60109,u=n?Symbol.for("react.context"):60110,c=n?Symbol.for("react.async_mode"):60111,d=n?Symbol.for("react.concurrent_mode"):60111,p=n?Symbol.for("react.forward_ref"):60112,f=n?Symbol.for("react.suspense"):60113,m=n?Symbol.for("react.suspense_list"):60120,g=n?Symbol.for("react.memo"):60115,h=n?Symbol.for("react.lazy"):60116,b=n?Symbol.for("react.block"):60121,v=n?Symbol.for("react.fundamental"):60117,y=n?Symbol.for("react.responder"):60118,w=n?Symbol.for("react.scope"):60119;function k(e){if("object"==typeof e&&null!==e){var t=e.$$typeof;switch(t){case r:switch(e=e.type){case c:case d:case a:case s:case i:case f:return e;default:switch(e=e&&e.$$typeof){case u:case p:case h:case g:case l:return e;default:return t}}case o:return t}}}function S(e){return k(e)===d}t.AsyncMode=c,t.ConcurrentMode=d,t.ContextConsumer=u,t.ContextProvider=l,t.Element=r,t.ForwardRef=p,t.Fragment=a,t.Lazy=h,t.Memo=g,t.Portal=o,t.Profiler=s,t.StrictMode=i,t.Suspense=f,t.isAsyncMode=function(e){return S(e)||k(e)===c},t.isConcurrentMode=S,t.isContextConsumer=function(e){return k(e)===u},t.isContextProvider=function(e){return k(e)===l},t.isElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===r},t.isForwardRef=function(e){return k(e)===p},t.isFragment=function(e){return k(e)===a},t.isLazy=function(e){return k(e)===h},t.isMemo=function(e){return k(e)===g},t.isPortal=function(e){return k(e)===o},t.isProfiler=function(e){return k(e)===s},t.isStrictMode=function(e){return k(e)===i},t.isSuspense=function(e){return k(e)===f},t.isValidElementType=function(e){return"string"==typeof e||"function"==typeof e||e===a||e===d||e===s||e===i||e===f||e===m||"object"==typeof e&&null!==e&&(e.$$typeof===h||e.$$typeof===g||e.$$typeof===l||e.$$typeof===u||e.$$typeof===p||e.$$typeof===v||e.$$typeof===y||e.$$typeof===w||e.$$typeof===b)},t.typeOf=k},1296:(e,t,n)=>{"use strict";e.exports=n(6103)},1143:e=>{"use strict";e.exports=function(e,t,n,r,o,a,i,s){if(!e){var l;if(void 0===t)l=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var u=[n,r,o,a,i,s],c=0;(l=new Error(t.replace(/%s/g,(function(){return u[c++]})))).name="Invariant Violation"}throw l.framesToPop=1,l}}},5826:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},813:function(e){e.exports=function(){"use strict";var e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},t=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},n=function(){function e(e,t){for(var n=0;n1&&void 0!==arguments[1])||arguments[1],o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:5e3;t(this,e),this.ctx=n,this.iframes=r,this.exclude=o,this.iframesTimeout=a}return n(e,[{key:"getContexts",value:function(){var e=[];return(void 0!==this.ctx&&this.ctx?NodeList.prototype.isPrototypeOf(this.ctx)?Array.prototype.slice.call(this.ctx):Array.isArray(this.ctx)?this.ctx:"string"==typeof this.ctx?Array.prototype.slice.call(document.querySelectorAll(this.ctx)):[this.ctx]:[]).forEach((function(t){var n=e.filter((function(e){return e.contains(t)})).length>0;-1!==e.indexOf(t)||n||e.push(t)})),e}},{key:"getIframeContents",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:function(){},r=void 0;try{var o=e.contentWindow;if(r=o.document,!o||!r)throw new Error("iframe inaccessible")}catch(a){n()}r&&t(r)}},{key:"isIframeBlank",value:function(e){var t="about:blank",n=e.getAttribute("src").trim();return e.contentWindow.location.href===t&&n!==t&&n}},{key:"observeIframeLoad",value:function(e,t,n){var r=this,o=!1,a=null,i=function i(){if(!o){o=!0,clearTimeout(a);try{r.isIframeBlank(e)||(e.removeEventListener("load",i),r.getIframeContents(e,t,n))}catch(s){n()}}};e.addEventListener("load",i),a=setTimeout(i,this.iframesTimeout)}},{key:"onIframeReady",value:function(e,t,n){try{"complete"===e.contentWindow.document.readyState?this.isIframeBlank(e)?this.observeIframeLoad(e,t,n):this.getIframeContents(e,t,n):this.observeIframeLoad(e,t,n)}catch(r){n()}}},{key:"waitForIframes",value:function(e,t){var n=this,r=0;this.forEachIframe(e,(function(){return!0}),(function(e){r++,n.waitForIframes(e.querySelector("html"),(function(){--r||t()}))}),(function(e){e||t()}))}},{key:"forEachIframe",value:function(t,n,r){var o=this,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:function(){},i=t.querySelectorAll("iframe"),s=i.length,l=0;i=Array.prototype.slice.call(i);var u=function(){--s<=0&&a(l)};s||u(),i.forEach((function(t){e.matches(t,o.exclude)?u():o.onIframeReady(t,(function(e){n(t)&&(l++,r(e)),u()}),u)}))}},{key:"createIterator",value:function(e,t,n){return document.createNodeIterator(e,t,n,!1)}},{key:"createInstanceOnIframe",value:function(t){return new e(t.querySelector("html"),this.iframes)}},{key:"compareNodeIframe",value:function(e,t,n){if(e.compareDocumentPosition(n)&Node.DOCUMENT_POSITION_PRECEDING){if(null===t)return!0;if(t.compareDocumentPosition(n)&Node.DOCUMENT_POSITION_FOLLOWING)return!0}return!1}},{key:"getIteratorNode",value:function(e){var t=e.previousNode();return{prevNode:t,node:(null===t||e.nextNode())&&e.nextNode()}}},{key:"checkIframeFilter",value:function(e,t,n,r){var o=!1,a=!1;return r.forEach((function(e,t){e.val===n&&(o=t,a=e.handled)})),this.compareNodeIframe(e,t,n)?(!1!==o||a?!1===o||a||(r[o].handled=!0):r.push({val:n,handled:!0}),!0):(!1===o&&r.push({val:n,handled:!1}),!1)}},{key:"handleOpenIframes",value:function(e,t,n,r){var o=this;e.forEach((function(e){e.handled||o.getIframeContents(e.val,(function(e){o.createInstanceOnIframe(e).forEachNode(t,n,r)}))}))}},{key:"iterateThroughNodes",value:function(e,t,n,r,o){for(var a=this,i=this.createIterator(t,e,r),s=[],l=[],u=void 0,c=void 0,d=function(){var e=a.getIteratorNode(i);return c=e.prevNode,u=e.node};d();)this.iframes&&this.forEachIframe(t,(function(e){return a.checkIframeFilter(u,c,e,s)}),(function(t){a.createInstanceOnIframe(t).forEachNode(e,(function(e){return l.push(e)}),r)})),l.push(u);l.forEach((function(e){n(e)})),this.iframes&&this.handleOpenIframes(s,e,n,r),o()}},{key:"forEachNode",value:function(e,t,n){var r=this,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:function(){},a=this.getContexts(),i=a.length;i||o(),a.forEach((function(a){var s=function(){r.iterateThroughNodes(e,a,t,n,(function(){--i<=0&&o()}))};r.iframes?r.waitForIframes(a,s):s()}))}}],[{key:"matches",value:function(e,t){var n="string"==typeof t?[t]:t,r=e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.oMatchesSelector||e.webkitMatchesSelector;if(r){var o=!1;return n.every((function(t){return!r.call(e,t)||(o=!0,!1)})),o}return!1}}]),e}(),a=function(){function a(e){t(this,a),this.ctx=e,this.ie=!1;var n=window.navigator.userAgent;(n.indexOf("MSIE")>-1||n.indexOf("Trident")>-1)&&(this.ie=!0)}return n(a,[{key:"log",value:function(t){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"debug",r=this.opt.log;this.opt.debug&&"object"===(void 0===r?"undefined":e(r))&&"function"==typeof r[n]&&r[n]("mark.js: "+t)}},{key:"escapeStr",value:function(e){return e.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}},{key:"createRegExp",value:function(e){return"disabled"!==this.opt.wildcards&&(e=this.setupWildcardsRegExp(e)),e=this.escapeStr(e),Object.keys(this.opt.synonyms).length&&(e=this.createSynonymsRegExp(e)),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),this.opt.diacritics&&(e=this.createDiacriticsRegExp(e)),e=this.createMergedBlanksRegExp(e),(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.createJoinersRegExp(e)),"disabled"!==this.opt.wildcards&&(e=this.createWildcardsRegExp(e)),e=this.createAccuracyRegExp(e)}},{key:"createSynonymsRegExp",value:function(e){var t=this.opt.synonyms,n=this.opt.caseSensitive?"":"i",r=this.opt.ignoreJoiners||this.opt.ignorePunctuation.length?"\0":"";for(var o in t)if(t.hasOwnProperty(o)){var a=t[o],i="disabled"!==this.opt.wildcards?this.setupWildcardsRegExp(o):this.escapeStr(o),s="disabled"!==this.opt.wildcards?this.setupWildcardsRegExp(a):this.escapeStr(a);""!==i&&""!==s&&(e=e.replace(new RegExp("("+this.escapeStr(i)+"|"+this.escapeStr(s)+")","gm"+n),r+"("+this.processSynomyms(i)+"|"+this.processSynomyms(s)+")"+r))}return e}},{key:"processSynomyms",value:function(e){return(this.opt.ignoreJoiners||this.opt.ignorePunctuation.length)&&(e=this.setupIgnoreJoinersRegExp(e)),e}},{key:"setupWildcardsRegExp",value:function(e){return(e=e.replace(/(?:\\)*\?/g,(function(e){return"\\"===e.charAt(0)?"?":"\x01"}))).replace(/(?:\\)*\*/g,(function(e){return"\\"===e.charAt(0)?"*":"\x02"}))}},{key:"createWildcardsRegExp",value:function(e){var t="withSpaces"===this.opt.wildcards;return e.replace(/\u0001/g,t?"[\\S\\s]?":"\\S?").replace(/\u0002/g,t?"[\\S\\s]*?":"\\S*")}},{key:"setupIgnoreJoinersRegExp",value:function(e){return e.replace(/[^(|)\\]/g,(function(e,t,n){var r=n.charAt(t+1);return/[(|)\\]/.test(r)||""===r?e:e+"\0"}))}},{key:"createJoinersRegExp",value:function(e){var t=[],n=this.opt.ignorePunctuation;return Array.isArray(n)&&n.length&&t.push(this.escapeStr(n.join(""))),this.opt.ignoreJoiners&&t.push("\\u00ad\\u200b\\u200c\\u200d"),t.length?e.split(/\u0000+/).join("["+t.join("")+"]*"):e}},{key:"createDiacriticsRegExp",value:function(e){var t=this.opt.caseSensitive?"":"i",n=this.opt.caseSensitive?["a\xe0\xe1\u1ea3\xe3\u1ea1\u0103\u1eb1\u1eaf\u1eb3\u1eb5\u1eb7\xe2\u1ea7\u1ea5\u1ea9\u1eab\u1ead\xe4\xe5\u0101\u0105","A\xc0\xc1\u1ea2\xc3\u1ea0\u0102\u1eb0\u1eae\u1eb2\u1eb4\u1eb6\xc2\u1ea6\u1ea4\u1ea8\u1eaa\u1eac\xc4\xc5\u0100\u0104","c\xe7\u0107\u010d","C\xc7\u0106\u010c","d\u0111\u010f","D\u0110\u010e","e\xe8\xe9\u1ebb\u1ebd\u1eb9\xea\u1ec1\u1ebf\u1ec3\u1ec5\u1ec7\xeb\u011b\u0113\u0119","E\xc8\xc9\u1eba\u1ebc\u1eb8\xca\u1ec0\u1ebe\u1ec2\u1ec4\u1ec6\xcb\u011a\u0112\u0118","i\xec\xed\u1ec9\u0129\u1ecb\xee\xef\u012b","I\xcc\xcd\u1ec8\u0128\u1eca\xce\xcf\u012a","l\u0142","L\u0141","n\xf1\u0148\u0144","N\xd1\u0147\u0143","o\xf2\xf3\u1ecf\xf5\u1ecd\xf4\u1ed3\u1ed1\u1ed5\u1ed7\u1ed9\u01a1\u1edf\u1ee1\u1edb\u1edd\u1ee3\xf6\xf8\u014d","O\xd2\xd3\u1ece\xd5\u1ecc\xd4\u1ed2\u1ed0\u1ed4\u1ed6\u1ed8\u01a0\u1ede\u1ee0\u1eda\u1edc\u1ee2\xd6\xd8\u014c","r\u0159","R\u0158","s\u0161\u015b\u0219\u015f","S\u0160\u015a\u0218\u015e","t\u0165\u021b\u0163","T\u0164\u021a\u0162","u\xf9\xfa\u1ee7\u0169\u1ee5\u01b0\u1eeb\u1ee9\u1eed\u1eef\u1ef1\xfb\xfc\u016f\u016b","U\xd9\xda\u1ee6\u0168\u1ee4\u01af\u1eea\u1ee8\u1eec\u1eee\u1ef0\xdb\xdc\u016e\u016a","y\xfd\u1ef3\u1ef7\u1ef9\u1ef5\xff","Y\xdd\u1ef2\u1ef6\u1ef8\u1ef4\u0178","z\u017e\u017c\u017a","Z\u017d\u017b\u0179"]:["a\xe0\xe1\u1ea3\xe3\u1ea1\u0103\u1eb1\u1eaf\u1eb3\u1eb5\u1eb7\xe2\u1ea7\u1ea5\u1ea9\u1eab\u1ead\xe4\xe5\u0101\u0105A\xc0\xc1\u1ea2\xc3\u1ea0\u0102\u1eb0\u1eae\u1eb2\u1eb4\u1eb6\xc2\u1ea6\u1ea4\u1ea8\u1eaa\u1eac\xc4\xc5\u0100\u0104","c\xe7\u0107\u010dC\xc7\u0106\u010c","d\u0111\u010fD\u0110\u010e","e\xe8\xe9\u1ebb\u1ebd\u1eb9\xea\u1ec1\u1ebf\u1ec3\u1ec5\u1ec7\xeb\u011b\u0113\u0119E\xc8\xc9\u1eba\u1ebc\u1eb8\xca\u1ec0\u1ebe\u1ec2\u1ec4\u1ec6\xcb\u011a\u0112\u0118","i\xec\xed\u1ec9\u0129\u1ecb\xee\xef\u012bI\xcc\xcd\u1ec8\u0128\u1eca\xce\xcf\u012a","l\u0142L\u0141","n\xf1\u0148\u0144N\xd1\u0147\u0143","o\xf2\xf3\u1ecf\xf5\u1ecd\xf4\u1ed3\u1ed1\u1ed5\u1ed7\u1ed9\u01a1\u1edf\u1ee1\u1edb\u1edd\u1ee3\xf6\xf8\u014dO\xd2\xd3\u1ece\xd5\u1ecc\xd4\u1ed2\u1ed0\u1ed4\u1ed6\u1ed8\u01a0\u1ede\u1ee0\u1eda\u1edc\u1ee2\xd6\xd8\u014c","r\u0159R\u0158","s\u0161\u015b\u0219\u015fS\u0160\u015a\u0218\u015e","t\u0165\u021b\u0163T\u0164\u021a\u0162","u\xf9\xfa\u1ee7\u0169\u1ee5\u01b0\u1eeb\u1ee9\u1eed\u1eef\u1ef1\xfb\xfc\u016f\u016bU\xd9\xda\u1ee6\u0168\u1ee4\u01af\u1eea\u1ee8\u1eec\u1eee\u1ef0\xdb\xdc\u016e\u016a","y\xfd\u1ef3\u1ef7\u1ef9\u1ef5\xffY\xdd\u1ef2\u1ef6\u1ef8\u1ef4\u0178","z\u017e\u017c\u017aZ\u017d\u017b\u0179"],r=[];return e.split("").forEach((function(o){n.every((function(n){if(-1!==n.indexOf(o)){if(r.indexOf(n)>-1)return!1;e=e.replace(new RegExp("["+n+"]","gm"+t),"["+n+"]"),r.push(n)}return!0}))})),e}},{key:"createMergedBlanksRegExp",value:function(e){return e.replace(/[\s]+/gim,"[\\s]+")}},{key:"createAccuracyRegExp",value:function(e){var t=this,n="!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~\xa1\xbf",r=this.opt.accuracy,o="string"==typeof r?r:r.value,a="string"==typeof r?[]:r.limiters,i="";switch(a.forEach((function(e){i+="|"+t.escapeStr(e)})),o){case"partially":default:return"()("+e+")";case"complementary":return"()([^"+(i="\\s"+(i||this.escapeStr(n)))+"]*"+e+"[^"+i+"]*)";case"exactly":return"(^|\\s"+i+")("+e+")(?=$|\\s"+i+")"}}},{key:"getSeparatedKeywords",value:function(e){var t=this,n=[];return e.forEach((function(e){t.opt.separateWordSearch?e.split(" ").forEach((function(e){e.trim()&&-1===n.indexOf(e)&&n.push(e)})):e.trim()&&-1===n.indexOf(e)&&n.push(e)})),{keywords:n.sort((function(e,t){return t.length-e.length})),length:n.length}}},{key:"isNumeric",value:function(e){return Number(parseFloat(e))==e}},{key:"checkRanges",value:function(e){var t=this;if(!Array.isArray(e)||"[object Object]"!==Object.prototype.toString.call(e[0]))return this.log("markRanges() will only accept an array of objects"),this.opt.noMatch(e),[];var n=[],r=0;return e.sort((function(e,t){return e.start-t.start})).forEach((function(e){var o=t.callNoMatchOnInvalidRanges(e,r),a=o.start,i=o.end;o.valid&&(e.start=a,e.length=i-a,n.push(e),r=i)})),n}},{key:"callNoMatchOnInvalidRanges",value:function(e,t){var n=void 0,r=void 0,o=!1;return e&&void 0!==e.start?(r=(n=parseInt(e.start,10))+parseInt(e.length,10),this.isNumeric(e.start)&&this.isNumeric(e.length)&&r-t>0&&r-n>0?o=!0:(this.log("Ignoring invalid or overlapping range: "+JSON.stringify(e)),this.opt.noMatch(e))):(this.log("Ignoring invalid range: "+JSON.stringify(e)),this.opt.noMatch(e)),{start:n,end:r,valid:o}}},{key:"checkWhitespaceRanges",value:function(e,t,n){var r=void 0,o=!0,a=n.length,i=t-a,s=parseInt(e.start,10)-i;return(r=(s=s>a?a:s)+parseInt(e.length,10))>a&&(r=a,this.log("End range automatically set to the max value of "+a)),s<0||r-s<0||s>a||r>a?(o=!1,this.log("Invalid range: "+JSON.stringify(e)),this.opt.noMatch(e)):""===n.substring(s,r).replace(/\s+/g,"")&&(o=!1,this.log("Skipping whitespace only range: "+JSON.stringify(e)),this.opt.noMatch(e)),{start:s,end:r,valid:o}}},{key:"getTextNodes",value:function(e){var t=this,n="",r=[];this.iterator.forEachNode(NodeFilter.SHOW_TEXT,(function(e){r.push({start:n.length,end:(n+=e.textContent).length,node:e})}),(function(e){return t.matchesExclude(e.parentNode)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT}),(function(){e({value:n,nodes:r})}))}},{key:"matchesExclude",value:function(e){return o.matches(e,this.opt.exclude.concat(["script","style","title","head","html"]))}},{key:"wrapRangeInTextNode",value:function(e,t,n){var r=this.opt.element?this.opt.element:"mark",o=e.splitText(t),a=o.splitText(n-t),i=document.createElement(r);return i.setAttribute("data-markjs","true"),this.opt.className&&i.setAttribute("class",this.opt.className),i.textContent=o.textContent,o.parentNode.replaceChild(i,o),a}},{key:"wrapRangeInMappedTextNode",value:function(e,t,n,r,o){var a=this;e.nodes.every((function(i,s){var l=e.nodes[s+1];if(void 0===l||l.start>t){if(!r(i.node))return!1;var u=t-i.start,c=(n>i.end?i.end:n)-i.start,d=e.value.substr(0,i.start),p=e.value.substr(c+i.start);if(i.node=a.wrapRangeInTextNode(i.node,u,c),e.value=d+p,e.nodes.forEach((function(t,n){n>=s&&(e.nodes[n].start>0&&n!==s&&(e.nodes[n].start-=c),e.nodes[n].end-=c)})),n-=c,o(i.node.previousSibling,i.start),!(n>i.end))return!1;t=i.end}return!0}))}},{key:"wrapMatches",value:function(e,t,n,r,o){var a=this,i=0===t?0:t+1;this.getTextNodes((function(t){t.nodes.forEach((function(t){t=t.node;for(var o=void 0;null!==(o=e.exec(t.textContent))&&""!==o[i];)if(n(o[i],t)){var s=o.index;if(0!==i)for(var l=1;l{"use strict";n.r(t)},8329:(e,t,n)=>{"use strict";n.r(t)},4865:function(e,t,n){var r,o;r=function(){var e,t,n={version:"0.2.0"},r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'
'};function o(e,t,n){return en?n:e}function a(e){return 100*(-1+e)}function i(e,t,n){var o;return(o="translate3d"===r.positionUsing?{transform:"translate3d("+a(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+a(e)+"%,0)"}:{"margin-left":a(e)+"%"}).transition="all "+t+"ms "+n,o}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(r[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=o(e,r.minimum,1),n.status=1===e?null:e;var a=n.render(!t),u=a.querySelector(r.barSelector),c=r.speed,d=r.easing;return a.offsetWidth,s((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),l(u,i(e,c,d)),1===e?(l(a,{transition:"none",opacity:1}),a.offsetWidth,setTimeout((function(){l(a,{transition:"all "+c+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),c)}),c)):setTimeout(t,c)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),r.trickleSpeed)};return r.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*o(Math.random()*t,.1,.95)),t=o(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},e=0,t=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===t&&n.start(),e++,t++,r.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");c(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=r.template;var o,i=t.querySelector(r.barSelector),s=e?"-100":a(n.status||0),u=document.querySelector(r.parent);return l(i,{transition:"all 0 linear",transform:"translate3d("+s+"%,0,0)"}),r.showSpinner||(o=t.querySelector(r.spinnerSelector))&&f(o),u!=document.body&&c(u,"nprogress-custom-parent"),u.appendChild(t),t},n.remove=function(){d(document.documentElement,"nprogress-busy"),d(document.querySelector(r.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&f(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var s=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),l=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function r(t){var n=document.body.style;if(t in n)return t;for(var r,o=e.length,a=t.charAt(0).toUpperCase()+t.slice(1);o--;)if((r=e[o]+a)in n)return r;return t}function o(e){return e=n(e),t[e]||(t[e]=r(e))}function a(e,t,n){t=o(t),e.style[t]=n}return function(e,t){var n,r,o=arguments;if(2==o.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&a(e,n,r);else a(e,o[1],o[2])}}();function u(e,t){return("string"==typeof e?e:p(e)).indexOf(" "+t+" ")>=0}function c(e,t){var n=p(e),r=n+t;u(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=p(e);u(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function p(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function f(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(o="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=o)},7418:e=>{"use strict";var t=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(o){return!1}}()?Object.assign:function(e,o){for(var a,i,s=function(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}(e),l=1;l{"use strict";n.d(t,{Z:()=>a});var r=function(){var e=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,t=0,n={},r={util:{encode:function e(t){return t instanceof o?new o(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,"&").replace(/=d.reach);E+=S.value.length,S=S.next){var _=S.value;if(t.length>e.length)return;if(!(_ instanceof o)){var x,O=1;if(v){if(!(x=a(k,E,e,b))||x.index>=e.length)break;var P=x.index,C=x.index+x[0].length,T=E;for(T+=S.value.length;P>=T;)T+=(S=S.next).value.length;if(E=T-=S.value.length,S.value instanceof o)continue;for(var I=S;I!==t.tail&&(Td.reach&&(d.reach=j);var R=S.prev;if(L&&(R=l(t,R,L),E+=L.length),u(t,R,O),S=l(t,R,new o(p,h?r.tokenize(A,h):A,y,A)),N&&l(t,S,N),O>1){var D={cause:p+","+m,reach:j};i(e,t,n,S.prev,E,D),d&&D.reach>d.reach&&(d.reach=D.reach)}}}}}}function s(){var e={value:null,prev:null,next:null},t={value:null,prev:e,next:null};e.next=t,this.head=e,this.tail=t,this.length=0}function l(e,t,n){var r=t.next,o={value:n,prev:t,next:r};return t.next=o,r.prev=o,e.length++,o}function u(e,t,n){for(var r=t.next,o=0;o"+a.content+""},r}(),o=r;r.default=r,o.languages.markup={comment:{pattern://,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern://i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},o.languages.markup.tag.inside["attr-value"].inside.entity=o.languages.markup.entity,o.languages.markup.doctype.inside["internal-subset"].inside=o.languages.markup,o.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(o.languages.markup.tag,"addInlined",{value:function(e,t){var n={};n["language-"+t]={pattern:/(^$)/i,lookbehind:!0,inside:o.languages[t]},n.cdata=/^$/i;var r={"included-cdata":{pattern://i,inside:n}};r["language-"+t]={pattern:/[\s\S]+/,inside:o.languages[t]};var a={};a[e]={pattern:RegExp(/(<__[^>]*>)(?:))*\]\]>|(?!)/.source.replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:r},o.languages.insertBefore("markup","cdata",a)}}),Object.defineProperty(o.languages.markup.tag,"addAttribute",{value:function(e,t){o.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+e+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[t,"language-"+t],inside:o.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),o.languages.html=o.languages.markup,o.languages.mathml=o.languages.markup,o.languages.svg=o.languages.markup,o.languages.xml=o.languages.extend("markup",{}),o.languages.ssml=o.languages.xml,o.languages.atom=o.languages.xml,o.languages.rss=o.languages.xml,function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},r={bash:n,environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:r},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:n}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:r},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:r.entity}}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:r.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},n.inside=e.languages.bash;for(var o=["comment","function-name","for-or-select","assign-left","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],a=r.variable[1].inside,i=0;i]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},o.languages.c=o.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),o.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),o.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},o.languages.c.string],char:o.languages.c.char,comment:o.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:o.languages.c}}}}),o.languages.insertBefore("c","function",{constant:/\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/}),delete o.languages.c.boolean,function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,n=/\b(?!)\w+(?:\s*\.\s*\w+)*\b/.source.replace(//g,(function(){return t.source}));e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!)\w+/.source.replace(//g,(function(){return t.source}))),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp(/(\b(?:import|module)\s+)/.source+"(?:"+/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source+"|"+/(?:\s*:\s*)?|:\s*/.source.replace(//g,(function(){return n}))+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(o),function(e){var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-](?:[^;{\s]|\s+(?![\s{]))*(?:;|(?=\s*\{))/,inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var n=e.languages.markup;n&&(n.tag.addInlined("style","css"),n.tag.addAttribute("style","css"))}(o),function(e){var t,n=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;e.languages.css.selector={pattern:e.languages.css.selector.pattern,lookbehind:!0,inside:t={"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+/,class:/\.[-\w]+/,id:/#[-\w]+/,attribute:{pattern:RegExp("\\[(?:[^[\\]\"']|"+n.source+")*\\]"),greedy:!0,inside:{punctuation:/^\[|\]$/,"case-sensitivity":{pattern:/(\s)[si]$/i,lookbehind:!0,alias:"keyword"},namespace:{pattern:/^(\s*)(?:(?!\s)[-*\w\xA0-\uFFFF])*\|(?!=)/,lookbehind:!0,inside:{punctuation:/\|$/}},"attr-name":{pattern:/^(\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+/,lookbehind:!0},"attr-value":[n,{pattern:/(=\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+(?=\s*$)/,lookbehind:!0}],operator:/[|~*^$]?=/}},"n-th":[{pattern:/(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,lookbehind:!0,inside:{number:/[\dn]+/,operator:/[+-]/}},{pattern:/(\(\s*)(?:even|odd)(?=\s*\))/i,lookbehind:!0}],combinator:/>|\+|~|\|\|/,punctuation:/[(),]/}},e.languages.css.atrule.inside["selector-function-argument"].inside=t,e.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*/i,lookbehind:!0}});var r={pattern:/(\b\d+)(?:%|[a-z]+(?![\w-]))/,lookbehind:!0},o={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0};e.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:{pattern:/\B#[\da-f]{3,8}\b/i,alias:"color"},color:[{pattern:/(^|[^\w-])(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)(?![\w-])/i,lookbehind:!0},{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:r,number:o,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:r,number:o})}(o),o.languages.javascript=o.languages.extend("clike",{"class-name":[o.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),o.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,o.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:o.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:o.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:o.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:o.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:o.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),o.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:o.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),o.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),o.languages.markup&&(o.languages.markup.tag.addInlined("script","javascript"),o.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),o.languages.js=o.languages.javascript,function(e){var t=/#(?!\{).+/,n={pattern:/#\{[^}]+\}/,alias:"variable"};e.languages.coffeescript=e.languages.extend("javascript",{comment:t,string:[{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,inside:{interpolation:n}}],keyword:/\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,"class-member":{pattern:/@(?!\d)\w+/,alias:"variable"}}),e.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:t,interpolation:n}}}),e.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\[\s\S]|[^\\`])*`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},script:{pattern:/[\s\S]+/,alias:"language-javascript",inside:e.languages.javascript}}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,greedy:!0,alias:"string"},{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string",inside:{interpolation:n}}]}),e.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/}),delete e.languages.coffeescript["template-string"],e.languages.coffee=e.languages.coffeescript}(o),function(e){var t=/[*&][^\s[\]{},]+/,n=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,r="(?:"+n.source+"(?:[ \t]+"+t.source+")?|"+t.source+"(?:[ \t]+"+n.source+")?)",o=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-])(?:[ \t]*(?:(?![#:])|:))*/.source.replace(//g,(function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source})),a=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function i(e,t){t=(t||"").replace(/m/g,"")+"m";var n=/([:\-,[{]\s*(?:\s<>[ \t]+)?)(?:<>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<>/g,(function(){return r})).replace(/<>/g,(function(){return e}));return RegExp(n,t)}e.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s<>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<>/g,(function(){return r}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<>[ \t]+)?)<>(?=\s*:\s)/.source.replace(/<>/g,(function(){return r})).replace(/<>/g,(function(){return"(?:"+o+"|"+a+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:i(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:i(/false|true/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:i(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:i(a),lookbehind:!0,greedy:!0},number:{pattern:i(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:n,important:t,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(o),function(e){var t=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?![\r\n]))/.source;function n(e){return e=e.replace(//g,(function(){return t})),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+e+")")}var r=/(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,o=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,(function(){return r})),a=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source;e.languages.markdown=e.languages.extend("markup",{}),e.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:e.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+o+a+"(?:"+o+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+o+a+")(?:"+o+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(r),inside:e.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+o+")"+a+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+o+"$"),inside:{"table-header":{pattern:RegExp(r),alias:"important",inside:e.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:n(/\b__(?:(?!_)|_(?:(?!_))+_)+__\b|\*\*(?:(?!\*)|\*(?:(?!\*))+\*)+\*\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:n(/\b_(?:(?!_)|__(?:(?!_))+__)+_\b|\*(?:(?!\*)|\*\*(?:(?!\*))+\*\*)+\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:n(/(~~?)(?:(?!~))+\2/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:n(/!?\[(?:(?!\]))+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\]))+\])/.source),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach((function(t){["url","bold","italic","strike","code-snippet"].forEach((function(n){t!==n&&(e.languages.markdown[t].inside.content.inside[n]=e.languages.markdown[n])}))})),e.hooks.add("after-tokenize",(function(e){"markdown"!==e.language&&"md"!==e.language||function e(t){if(t&&"string"!=typeof t)for(var n=0,r=t.length;n",quot:'"'},l=String.fromCodePoint||String.fromCharCode;e.languages.md=e.languages.markdown}(o),o.languages.graphql={comment:/#.*/,description:{pattern:/(?:"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*")(?=\s*[a-z_])/i,greedy:!0,alias:"string",inside:{"language-markdown":{pattern:/(^"(?:"")?)(?!\1)[\s\S]+(?=\1$)/,lookbehind:!0,inside:o.languages.markdown}}},string:{pattern:/"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},number:/(?:\B-|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,boolean:/\b(?:false|true)\b/,variable:/\$[a-z_]\w*/i,directive:{pattern:/@[a-z_]\w*/i,alias:"function"},"attr-name":{pattern:/\b[a-z_]\w*(?=\s*(?:\((?:[^()"]|"(?:\\.|[^\\"\r\n])*")*\))?:)/i,greedy:!0},"atom-input":{pattern:/\b[A-Z]\w*Input\b/,alias:"class-name"},scalar:/\b(?:Boolean|Float|ID|Int|String)\b/,constant:/\b[A-Z][A-Z_\d]*\b/,"class-name":{pattern:/(\b(?:enum|implements|interface|on|scalar|type|union)\s+|&\s*|:\s*|\[)[A-Z_]\w*/,lookbehind:!0},fragment:{pattern:/(\bfragment\s+|\.{3}\s*(?!on\b))[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-mutation":{pattern:/(\bmutation\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-query":{pattern:/(\bquery\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},keyword:/\b(?:directive|enum|extend|fragment|implements|input|interface|mutation|on|query|repeatable|scalar|schema|subscription|type|union)\b/,operator:/[!=|&]|\.{3}/,"property-query":/\w+(?=\s*\()/,object:/\w+(?=\s*\{)/,punctuation:/[!(){}\[\]:=,]/,property:/\w+/},o.hooks.add("after-tokenize",(function(e){if("graphql"===e.language)for(var t=e.tokens.filter((function(e){return"string"!=typeof e&&"comment"!==e.type&&"scalar"!==e.type})),n=0;n0)){var s=p(/^\{$/,/^\}$/);if(-1===s)continue;for(var l=n;l=0&&f(u,"variable-input")}}}}function c(e){return t[n+e]}function d(e,t){t=t||0;for(var n=0;n?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/},function(e){var t=e.languages.javascript["template-string"],n=t.pattern.source,r=t.inside.interpolation,o=r.inside["interpolation-punctuation"],a=r.pattern.source;function i(t,r){if(e.languages[t])return{pattern:RegExp("((?:"+r+")\\s*)"+n),lookbehind:!0,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},"embedded-code":{pattern:/[\s\S]+/,alias:t}}}}function s(e,t){return"___"+t.toUpperCase()+"_"+e+"___"}function l(t,n,r){var o={code:t,grammar:n,language:r};return e.hooks.run("before-tokenize",o),o.tokens=e.tokenize(o.code,o.grammar),e.hooks.run("after-tokenize",o),o.tokens}function u(t){var n={};n["interpolation-punctuation"]=o;var a=e.tokenize(t,n);if(3===a.length){var i=[1,1];i.push.apply(i,l(a[1],e.languages.javascript,"javascript")),a.splice.apply(a,i)}return new e.Token("interpolation",a,r.alias,t)}function c(t,n,r){var o=e.tokenize(t,{interpolation:{pattern:RegExp(a),lookbehind:!0}}),i=0,c={},d=l(o.map((function(e){if("string"==typeof e)return e;for(var n,o=e.content;-1!==t.indexOf(n=s(i++,r)););return c[n]=o,n})).join(""),n,r),p=Object.keys(c);return i=0,function e(t){for(var n=0;n=p.length)return;var r=t[n];if("string"==typeof r||"string"==typeof r.content){var o=p[i],a="string"==typeof r?r:r.content,s=a.indexOf(o);if(-1!==s){++i;var l=a.substring(0,s),d=u(c[o]),f=a.substring(s+o.length),m=[];if(l&&m.push(l),m.push(d),f){var g=[f];e(g),m.push.apply(m,g)}"string"==typeof r?(t.splice.apply(t,[n,1].concat(m)),n+=m.length-1):r.content=m}}else{var h=r.content;Array.isArray(h)?e(h):e([h])}}}(d),new e.Token(r,d,"language-"+r,t)}e.languages.javascript["template-string"]=[i("css",/\b(?:styled(?:\([^)]*\))?(?:\s*\.\s*\w+(?:\([^)]*\))*)*|css(?:\s*\.\s*(?:global|resolve))?|createGlobalStyle|keyframes)/.source),i("html",/\bhtml|\.\s*(?:inner|outer)HTML\s*\+?=/.source),i("svg",/\bsvg/.source),i("markdown",/\b(?:markdown|md)/.source),i("graphql",/\b(?:gql|graphql(?:\s*\.\s*experimental)?)/.source),i("sql",/\bsql/.source),t].filter(Boolean);var d={javascript:!0,js:!0,typescript:!0,ts:!0,jsx:!0,tsx:!0};function p(e){return"string"==typeof e?e:Array.isArray(e)?e.map(p).join(""):p(e.content)}e.hooks.add("after-tokenize",(function(t){t.language in d&&function t(n){for(var r=0,o=n.length;r]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),e.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete e.languages.typescript.parameter,delete e.languages.typescript["literal-property"];var t=e.languages.extend("typescript",{});delete t["class-name"],e.languages.typescript["class-name"].inside=t,e.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:t}}}}),e.languages.ts=e.languages.typescript}(o),function(e){function t(e,t){return RegExp(e.replace(//g,(function(){return/(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/.source})),t)}e.languages.insertBefore("javascript","function-variable",{"method-variable":{pattern:RegExp("(\\.\\s*)"+e.languages.javascript["function-variable"].pattern.source),lookbehind:!0,alias:["function-variable","method","function","property-access"]}}),e.languages.insertBefore("javascript","function",{method:{pattern:RegExp("(\\.\\s*)"+e.languages.javascript.function.source),lookbehind:!0,alias:["function","property-access"]}}),e.languages.insertBefore("javascript","constant",{"known-class-name":[{pattern:/\b(?:(?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|(?:Weak)?(?:Map|Set)|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|WebAssembly)\b/,alias:"class-name"},{pattern:/\b(?:[A-Z]\w*)Error\b/,alias:"class-name"}]}),e.languages.insertBefore("javascript","keyword",{imports:{pattern:t(/(\bimport\b\s*)(?:(?:\s*,\s*(?:\*\s*as\s+|\{[^{}]*\}))?|\*\s*as\s+|\{[^{}]*\})(?=\s*\bfrom\b)/.source),lookbehind:!0,inside:e.languages.javascript},exports:{pattern:t(/(\bexport\b\s*)(?:\*(?:\s*as\s+)?(?=\s*\bfrom\b)|\{[^{}]*\})/.source),lookbehind:!0,inside:e.languages.javascript}}),e.languages.javascript.keyword.unshift({pattern:/\b(?:as|default|export|from|import)\b/,alias:"module"},{pattern:/\b(?:await|break|catch|continue|do|else|finally|for|if|return|switch|throw|try|while|yield)\b/,alias:"control-flow"},{pattern:/\bnull\b/,alias:["null","nil"]},{pattern:/\bundefined\b/,alias:"nil"}),e.languages.insertBefore("javascript","operator",{spread:{pattern:/\.{3}/,alias:"operator"},arrow:{pattern:/=>/,alias:"operator"}}),e.languages.insertBefore("javascript","punctuation",{"property-access":{pattern:t(/(\.\s*)#?/.source),lookbehind:!0},"maybe-class-name":{pattern:/(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,lookbehind:!0},dom:{pattern:/\b(?:document|(?:local|session)Storage|location|navigator|performance|window)\b/,alias:"variable"},console:{pattern:/\bconsole(?=\s*\.)/,alias:"class-name"}});for(var n=["function","function-variable","method","method-variable","property-access"],r=0;r*\.{3}(?:[^{}]|)*\})/.source;function a(e,t){return e=e.replace(//g,(function(){return n})).replace(//g,(function(){return r})).replace(//g,(function(){return o})),RegExp(e,t)}o=a(o).source,e.languages.jsx=e.languages.extend("markup",t),e.languages.jsx.tag.pattern=a(/<\/?(?:[\w.:-]+(?:+(?:[\w.:$-]+(?:=(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s{'"/>=]+|))?|))**\/?)?>/.source),e.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/,e.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s'">]+)/,e.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,e.languages.jsx.tag.inside.comment=t.comment,e.languages.insertBefore("inside","attr-name",{spread:{pattern:a(//.source),inside:e.languages.jsx}},e.languages.jsx.tag),e.languages.insertBefore("inside","special-attr",{script:{pattern:a(/=/.source),alias:"language-javascript",inside:{"script-punctuation":{pattern:/^=(?=\{)/,alias:"punctuation"},rest:e.languages.jsx}}},e.languages.jsx.tag);var i=function(e){return e?"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(i).join(""):""},s=function(t){for(var n=[],r=0;r0&&n[n.length-1].tagName===i(o.content[0].content[1])&&n.pop():"/>"===o.content[o.content.length-1].content||n.push({tagName:i(o.content[0].content[1]),openedBraces:0}):n.length>0&&"punctuation"===o.type&&"{"===o.content?n[n.length-1].openedBraces++:n.length>0&&n[n.length-1].openedBraces>0&&"punctuation"===o.type&&"}"===o.content?n[n.length-1].openedBraces--:a=!0),(a||"string"==typeof o)&&n.length>0&&0===n[n.length-1].openedBraces){var l=i(o);r0&&("string"==typeof t[r-1]||"plain-text"===t[r-1].type)&&(l=i(t[r-1])+l,t.splice(r-1,1),r--),t[r]=new e.Token("plain-text",l,null,l)}o.content&&"string"!=typeof o.content&&s(o.content)}};e.hooks.add("after-tokenize",(function(e){"jsx"!==e.language&&"tsx"!==e.language||s(e.tokens)}))}(o),function(e){e.languages.diff={coord:[/^(?:\*{3}|-{3}|\+{3}).*$/m,/^@@.*@@$/m,/^\d.*$/m]};var t={"deleted-sign":"-","deleted-arrow":"<","inserted-sign":"+","inserted-arrow":">",unchanged:" ",diff:"!"};Object.keys(t).forEach((function(n){var r=t[n],o=[];/^\w+$/.test(n)||o.push(/\w+/.exec(n)[0]),"diff"===n&&o.push("bold"),e.languages.diff[n]={pattern:RegExp("^(?:["+r+"].*(?:\r\n?|\n|(?![\\s\\S])))+","m"),alias:o,inside:{line:{pattern:/(.)(?=[\s\S]).*(?:\r\n?|\n)?/,lookbehind:!0},prefix:{pattern:/[\s\S]/,alias:/\w+/.exec(n)[0]}}}})),Object.defineProperty(e.languages.diff,"PREFIXES",{value:t})}(o),o.languages.git={comment:/^#.*/m,deleted:/^[-\u2013].*/m,inserted:/^\+.*/m,string:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,command:{pattern:/^.*\$ git .*$/m,inside:{parameter:/\s--?\w+/}},coord:/^@@.*@@$/m,"commit-sha1":/^commit \w{40}$/m},o.languages.go=o.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"|`[^`]*`/,lookbehind:!0,greedy:!0},keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,boolean:/\b(?:_|false|iota|nil|true)\b/,number:[/\b0(?:b[01_]+|o[0-7_]+)i?\b/i,/\b0x(?:[a-f\d_]+(?:\.[a-f\d_]*)?|\.[a-f\d_]+)(?:p[+-]?\d+(?:_\d+)*)?i?(?!\w)/i,/(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?[\d_]+)?i?(?!\w)/i],operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,builtin:/\b(?:append|bool|byte|cap|close|complex|complex(?:64|128)|copy|delete|error|float(?:32|64)|u?int(?:8|16|32|64)?|imag|len|make|new|panic|print(?:ln)?|real|recover|rune|string|uintptr)\b/}),o.languages.insertBefore("go","string",{char:{pattern:/'(?:\\.|[^'\\\r\n]){0,10}'/,greedy:!0}}),delete o.languages.go["class-name"],function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,r,o,a){if(n.language===r){var i=n.tokenStack=[];n.code=n.code.replace(o,(function(e){if("function"==typeof a&&!a(e))return e;for(var o,s=i.length;-1!==n.code.indexOf(o=t(r,s));)++s;return i[s]=e,o})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,r){if(n.language===r&&n.tokenStack){n.grammar=e.languages[r];var o=0,a=Object.keys(n.tokenStack);!function i(s){for(var l=0;l=a.length);l++){var u=s[l];if("string"==typeof u||u.content&&"string"==typeof u.content){var c=a[o],d=n.tokenStack[c],p="string"==typeof u?u:u.content,f=t(r,c),m=p.indexOf(f);if(m>-1){++o;var g=p.substring(0,m),h=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),b=p.substring(m+f.length),v=[];g&&v.push.apply(v,i([g])),v.push(h),b&&v.push.apply(v,i([b])),"string"==typeof u?s.splice.apply(s,[l,1].concat(v)):u.content=v}}else u.content&&i(u.content)}return s}(n.tokens)}}}})}(o),function(e){e.languages.handlebars={comment:/\{\{![\s\S]*?\}\}/,delimiter:{pattern:/^\{\{\{?|\}\}\}?$/,alias:"punctuation"},string:/(["'])(?:\\.|(?!\1)[^\\\r\n])*\1/,number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d+)?/,boolean:/\b(?:false|true)\b/,block:{pattern:/^(\s*(?:~\s*)?)[#\/]\S+?(?=\s*(?:~\s*)?$|\s)/,lookbehind:!0,alias:"keyword"},brackets:{pattern:/\[[^\]]+\]/,inside:{punctuation:/\[|\]/,variable:/[\s\S]+/}},punctuation:/[!"#%&':()*+,.\/;<=>@\[\\\]^`{|}~]/,variable:/[^!"#%&'()*+,\/;<=>@\[\\\]^`{|}~\s]+/},e.hooks.add("before-tokenize",(function(t){e.languages["markup-templating"].buildPlaceholders(t,"handlebars",/\{\{\{[\s\S]+?\}\}\}|\{\{[\s\S]+?\}\}/g)})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"handlebars")})),e.languages.hbs=e.languages.handlebars}(o),o.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},o.languages.webmanifest=o.languages.json,o.languages.less=o.languages.extend("css",{comment:[/\/\*[\s\S]*?\*\//,{pattern:/(^|[^\\])\/\/.*/,lookbehind:!0}],atrule:{pattern:/@[\w-](?:\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{punctuation:/[:()]/}},selector:{pattern:/(?:@\{[\w-]+\}|[^{};\s@])(?:@\{[\w-]+\}|\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};@\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{variable:/@+[\w-]+/}},property:/(?:@\{[\w-]+\}|[\w-])+(?:\+_?)?(?=\s*:)/,operator:/[+\-*\/]/}),o.languages.insertBefore("less","property",{variable:[{pattern:/@[\w-]+\s*:/,inside:{punctuation:/:/}},/@@?[\w-]+/],"mixin-usage":{pattern:/([{;]\s*)[.#](?!\d)[\w-].*?(?=[(;])/,lookbehind:!0,alias:"function"}}),o.languages.makefile={comment:{pattern:/(^|[^\\])#(?:\\(?:\r\n|[\s\S])|[^\\\r\n])*/,lookbehind:!0},string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"builtin-target":{pattern:/\.[A-Z][^:#=\s]+(?=\s*:(?!=))/,alias:"builtin"},target:{pattern:/^(?:[^:=\s]|[ \t]+(?![\s:]))+(?=\s*:(?!=))/m,alias:"symbol",inside:{variable:/\$+(?:(?!\$)[^(){}:#=\s]+|(?=[({]))/}},variable:/\$+(?:(?!\$)[^(){}:#=\s]+|\([@*%<^+?][DF]\)|(?=[({]))/,keyword:/-include\b|\b(?:define|else|endef|endif|export|ifn?def|ifn?eq|include|override|private|sinclude|undefine|unexport|vpath)\b/,function:{pattern:/(\()(?:abspath|addsuffix|and|basename|call|dir|error|eval|file|filter(?:-out)?|findstring|firstword|flavor|foreach|guile|if|info|join|lastword|load|notdir|or|origin|patsubst|realpath|shell|sort|strip|subst|suffix|value|warning|wildcard|word(?:list|s)?)(?=[ \t])/,lookbehind:!0},operator:/(?:::|[?:+!])?=|[|@]/,punctuation:/[:;(){}]/},o.languages.objectivec=o.languages.extend("c",{string:{pattern:/@?"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},keyword:/\b(?:asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|in|inline|int|long|register|return|self|short|signed|sizeof|static|struct|super|switch|typedef|typeof|union|unsigned|void|volatile|while)\b|(?:@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\b/,operator:/-[->]?|\+\+?|!=?|<>?=?|==?|&&?|\|\|?|[~^%?*\/@]/}),delete o.languages.objectivec["class-name"],o.languages.objc=o.languages.objectivec,o.languages.ocaml={comment:{pattern:/\(\*[\s\S]*?\*\)/,greedy:!0},char:{pattern:/'(?:[^\\\r\n']|\\(?:.|[ox]?[0-9a-f]{1,3}))'/i,greedy:!0},string:[{pattern:/"(?:\\(?:[\s\S]|\r\n)|[^\\\r\n"])*"/,greedy:!0},{pattern:/\{([a-z_]*)\|[\s\S]*?\|\1\}/,greedy:!0}],number:[/\b(?:0b[01][01_]*|0o[0-7][0-7_]*)\b/i,/\b0x[a-f0-9][a-f0-9_]*(?:\.[a-f0-9_]*)?(?:p[+-]?\d[\d_]*)?(?!\w)/i,/\b\d[\d_]*(?:\.[\d_]*)?(?:e[+-]?\d[\d_]*)?(?!\w)/i],directive:{pattern:/\B#\w+/,alias:"property"},label:{pattern:/\B~\w+/,alias:"property"},"type-variable":{pattern:/\B'\w+/,alias:"function"},variant:{pattern:/`\w+/,alias:"symbol"},keyword:/\b(?:as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|match|method|module|mutable|new|nonrec|object|of|open|private|rec|sig|struct|then|to|try|type|val|value|virtual|when|where|while|with)\b/,boolean:/\b(?:false|true)\b/,"operator-like-punctuation":{pattern:/\[[<>|]|[>|]\]|\{<|>\}/,alias:"punctuation"},operator:/\.[.~]|:[=>]|[=<>@^|&+\-*\/$%!?~][!$%&*+\-.\/:<=>?@^|~]*|\b(?:and|asr|land|lor|lsl|lsr|lxor|mod|or)\b/,punctuation:/;;|::|[(){}\[\].,:;#]|\b_\b/},o.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},o.languages.python["string-interpolation"].inside.interpolation.inside.rest=o.languages.python,o.languages.py=o.languages.python,o.languages.reason=o.languages.extend("clike",{string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,greedy:!0},"class-name":/\b[A-Z]\w*/,keyword:/\b(?:and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|sig|struct|switch|then|to|try|type|val|virtual|when|while|with)\b/,operator:/\.{3}|:[:=]|\|>|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*\/]\.?|\b(?:asr|land|lor|lsl|lsr|lxor|mod)\b/}),o.languages.insertBefore("reason","class-name",{char:{pattern:/'(?:\\x[\da-f]{2}|\\o[0-3][0-7][0-7]|\\\d{3}|\\.|[^'\\\r\n])'/,greedy:!0},constructor:/\b[A-Z]\w*\b(?!\s*\.)/,label:{pattern:/\b[a-z]\w*(?=::)/,alias:"symbol"}}),delete o.languages.reason.function,function(e){e.languages.sass=e.languages.extend("css",{comment:{pattern:/^([ \t]*)\/[\/*].*(?:(?:\r?\n|\r)\1[ \t].+)*/m,lookbehind:!0,greedy:!0}}),e.languages.insertBefore("sass","atrule",{"atrule-line":{pattern:/^(?:[ \t]*)[@+=].+/m,greedy:!0,inside:{atrule:/(?:@[\w-]+|[+=])/}}}),delete e.languages.sass.atrule;var t=/\$[-\w]+|#\{\$[-\w]+\}/,n=[/[+*\/%]|[=!]=|<=?|>=?|\b(?:and|not|or)\b/,{pattern:/(\s)-(?=\s)/,lookbehind:!0}];e.languages.insertBefore("sass","property",{"variable-line":{pattern:/^[ \t]*\$.+/m,greedy:!0,inside:{punctuation:/:/,variable:t,operator:n}},"property-line":{pattern:/^[ \t]*(?:[^:\s]+ *:.*|:[^:\s].*)/m,greedy:!0,inside:{property:[/[^:\s]+(?=\s*:)/,{pattern:/(:)[^:\s]+/,lookbehind:!0}],punctuation:/:/,variable:t,operator:n,important:e.languages.sass.important}}}),delete e.languages.sass.property,delete e.languages.sass.important,e.languages.insertBefore("sass","punctuation",{selector:{pattern:/^([ \t]*)\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*(?:,(?:\r?\n|\r)\1[ \t]+\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*)*/m,lookbehind:!0,greedy:!0}})}(o),o.languages.scss=o.languages.extend("css",{comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},atrule:{pattern:/@[\w-](?:\([^()]+\)|[^()\s]|\s+(?!\s))*?(?=\s+[{;])/,inside:{rule:/@[\w-]+/}},url:/(?:[-a-z]+-)?url(?=\()/i,selector:{pattern:/(?=\S)[^@;{}()]?(?:[^@;{}()\s]|\s+(?!\s)|#\{\$[-\w]+\})+(?=\s*\{(?:\}|\s|[^}][^:{}]*[:{][^}]))/,inside:{parent:{pattern:/&/,alias:"important"},placeholder:/%[-\w]+/,variable:/\$[-\w]+|#\{\$[-\w]+\}/}},property:{pattern:/(?:[-\w]|\$[-\w]|#\{\$[-\w]+\})+(?=\s*:)/,inside:{variable:/\$[-\w]+|#\{\$[-\w]+\}/}}}),o.languages.insertBefore("scss","atrule",{keyword:[/@(?:content|debug|each|else(?: if)?|extend|for|forward|function|if|import|include|mixin|return|use|warn|while)\b/i,{pattern:/( )(?:from|through)(?= )/,lookbehind:!0}]}),o.languages.insertBefore("scss","important",{variable:/\$[-\w]+|#\{\$[-\w]+\}/}),o.languages.insertBefore("scss","function",{"module-modifier":{pattern:/\b(?:as|hide|show|with)\b/i,alias:"keyword"},placeholder:{pattern:/%[-\w]+/,alias:"selector"},statement:{pattern:/\B!(?:default|optional)\b/i,alias:"keyword"},boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"},operator:{pattern:/(\s)(?:[-+*\/%]|[=!]=|<=?|>=?|and|not|or)(?=\s)/,lookbehind:!0}}),o.languages.scss.atrule.inside.rest=o.languages.scss,function(e){var t={pattern:/(\b\d+)(?:%|[a-z]+)/,lookbehind:!0},n={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0},r={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},url:{pattern:/\burl\((["']?).*?\1\)/i,greedy:!0},string:{pattern:/("|')(?:(?!\1)[^\\\r\n]|\\(?:\r\n|[\s\S]))*\1/,greedy:!0},interpolation:null,func:null,important:/\B!(?:important|optional)\b/i,keyword:{pattern:/(^|\s+)(?:(?:else|for|if|return|unless)(?=\s|$)|@[\w-]+)/,lookbehind:!0},hexcode:/#[\da-f]{3,6}/i,color:[/\b(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)\b/i,{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:t,number:n,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:t,boolean:/\b(?:false|true)\b/,operator:[/~|[+!\/%<>?=]=?|[-:]=|\*[*=]?|\.{2,3}|&&|\|\||\B-\B|\b(?:and|in|is(?: a| defined| not|nt)?|not|or)\b/],number:n,punctuation:/[{}()\[\];:,]/};r.interpolation={pattern:/\{[^\r\n}:]+\}/,alias:"variable",inside:{delimiter:{pattern:/^\{|\}$/,alias:"punctuation"},rest:r}},r.func={pattern:/[\w-]+\([^)]*\).*/,inside:{function:/^[^(]+/,rest:r}},e.languages.stylus={"atrule-declaration":{pattern:/(^[ \t]*)@.+/m,lookbehind:!0,inside:{atrule:/^@[\w-]+/,rest:r}},"variable-declaration":{pattern:/(^[ \t]*)[\w$-]+\s*.?=[ \t]*(?:\{[^{}]*\}|\S.*|$)/m,lookbehind:!0,inside:{variable:/^\S+/,rest:r}},statement:{pattern:/(^[ \t]*)(?:else|for|if|return|unless)[ \t].+/m,lookbehind:!0,inside:{keyword:/^\S+/,rest:r}},"property-declaration":{pattern:/((?:^|\{)([ \t]*))(?:[\w-]|\{[^}\r\n]+\})+(?:\s*:\s*|[ \t]+)(?!\s)[^{\r\n]*(?:;|[^{\r\n,]$(?!(?:\r?\n|\r)(?:\{|\2[ \t])))/m,lookbehind:!0,inside:{property:{pattern:/^[^\s:]+/,inside:{interpolation:r.interpolation}},rest:r}},selector:{pattern:/(^[ \t]*)(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)(?:(?:\r?\n|\r)(?:\1(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)))*(?:,$|\{|(?=(?:\r?\n|\r)(?:\{|\1[ \t])))/m,lookbehind:!0,inside:{interpolation:r.interpolation,comment:r.comment,punctuation:/[{},]/}},func:r.func,string:r.string,comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0,greedy:!0},interpolation:r.interpolation,punctuation:/[{}()\[\];:.]/}}(o),function(e){var t=e.util.clone(e.languages.typescript);e.languages.tsx=e.languages.extend("jsx",t),delete e.languages.tsx.parameter,delete e.languages.tsx["literal-property"];var n=e.languages.tsx.tag;n.pattern=RegExp(/(^|[^\w$]|(?=<\/))/.source+"(?:"+n.pattern.source+")",n.pattern.flags),n.lookbehind=!0}(o),o.languages.wasm={comment:[/\(;[\s\S]*?;\)/,{pattern:/;;.*/,greedy:!0}],string:{pattern:/"(?:\\[\s\S]|[^"\\])*"/,greedy:!0},keyword:[{pattern:/\b(?:align|offset)=/,inside:{operator:/=/}},{pattern:/\b(?:(?:f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|neg?|nearest|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|sqrt|store(?:8|16|32)?|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))?|memory\.(?:grow|size))\b/,inside:{punctuation:/\./}},/\b(?:anyfunc|block|br(?:_if|_table)?|call(?:_indirect)?|data|drop|elem|else|end|export|func|get_(?:global|local)|global|if|import|local|loop|memory|module|mut|nop|offset|param|result|return|select|set_(?:global|local)|start|table|tee_local|then|type|unreachable)\b/],variable:/\$[\w!#$%&'*+\-./:<=>?@\\^`|~]+/,number:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/,punctuation:/[()]/};const a=o},9901:e=>{e.exports&&(e.exports={core:{meta:{path:"components/prism-core.js",option:"mandatory"},core:"Core"},themes:{meta:{path:"themes/{id}.css",link:"index.html?theme={id}",exclusive:!0},prism:{title:"Default",option:"default"},"prism-dark":"Dark","prism-funky":"Funky","prism-okaidia":{title:"Okaidia",owner:"ocodia"},"prism-twilight":{title:"Twilight",owner:"remybach"},"prism-coy":{title:"Coy",owner:"tshedor"},"prism-solarizedlight":{title:"Solarized Light",owner:"hectormatos2011 "},"prism-tomorrow":{title:"Tomorrow Night",owner:"Rosey"}},languages:{meta:{path:"components/prism-{id}",noCSS:!0,examplesPath:"examples/prism-{id}",addCheckAll:!0},markup:{title:"Markup",alias:["html","xml","svg","mathml","ssml","atom","rss"],aliasTitles:{html:"HTML",xml:"XML",svg:"SVG",mathml:"MathML",ssml:"SSML",atom:"Atom",rss:"RSS"},option:"default"},css:{title:"CSS",option:"default",modify:"markup"},clike:{title:"C-like",option:"default"},javascript:{title:"JavaScript",require:"clike",modify:"markup",optional:"regex",alias:"js",option:"default"},abap:{title:"ABAP",owner:"dellagustin"},abnf:{title:"ABNF",owner:"RunDevelopment"},actionscript:{title:"ActionScript",require:"javascript",modify:"markup",owner:"Golmote"},ada:{title:"Ada",owner:"Lucretia"},agda:{title:"Agda",owner:"xy-ren"},al:{title:"AL",owner:"RunDevelopment"},antlr4:{title:"ANTLR4",alias:"g4",owner:"RunDevelopment"},apacheconf:{title:"Apache Configuration",owner:"GuiTeK"},apex:{title:"Apex",require:["clike","sql"],owner:"RunDevelopment"},apl:{title:"APL",owner:"ngn"},applescript:{title:"AppleScript",owner:"Golmote"},aql:{title:"AQL",owner:"RunDevelopment"},arduino:{title:"Arduino",require:"cpp",alias:"ino",owner:"dkern"},arff:{title:"ARFF",owner:"Golmote"},armasm:{title:"ARM Assembly",alias:"arm-asm",owner:"RunDevelopment"},arturo:{title:"Arturo",alias:"art",optional:["bash","css","javascript","markup","markdown","sql"],owner:"drkameleon"},asciidoc:{alias:"adoc",title:"AsciiDoc",owner:"Golmote"},aspnet:{title:"ASP.NET (C#)",require:["markup","csharp"],owner:"nauzilus"},asm6502:{title:"6502 Assembly",owner:"kzurawel"},asmatmel:{title:"Atmel AVR Assembly",owner:"cerkit"},autohotkey:{title:"AutoHotkey",owner:"aviaryan"},autoit:{title:"AutoIt",owner:"Golmote"},avisynth:{title:"AviSynth",alias:"avs",owner:"Zinfidel"},"avro-idl":{title:"Avro IDL",alias:"avdl",owner:"RunDevelopment"},awk:{title:"AWK",alias:"gawk",aliasTitles:{gawk:"GAWK"},owner:"RunDevelopment"},bash:{title:"Bash",alias:["sh","shell"],aliasTitles:{sh:"Shell",shell:"Shell"},owner:"zeitgeist87"},basic:{title:"BASIC",owner:"Golmote"},batch:{title:"Batch",owner:"Golmote"},bbcode:{title:"BBcode",alias:"shortcode",aliasTitles:{shortcode:"Shortcode"},owner:"RunDevelopment"},bbj:{title:"BBj",owner:"hyyan"},bicep:{title:"Bicep",owner:"johnnyreilly"},birb:{title:"Birb",require:"clike",owner:"Calamity210"},bison:{title:"Bison",require:"c",owner:"Golmote"},bnf:{title:"BNF",alias:"rbnf",aliasTitles:{rbnf:"RBNF"},owner:"RunDevelopment"},bqn:{title:"BQN",owner:"yewscion"},brainfuck:{title:"Brainfuck",owner:"Golmote"},brightscript:{title:"BrightScript",owner:"RunDevelopment"},bro:{title:"Bro",owner:"wayward710"},bsl:{title:"BSL (1C:Enterprise)",alias:"oscript",aliasTitles:{oscript:"OneScript"},owner:"Diversus23"},c:{title:"C",require:"clike",owner:"zeitgeist87"},csharp:{title:"C#",require:"clike",alias:["cs","dotnet"],owner:"mvalipour"},cpp:{title:"C++",require:"c",owner:"zeitgeist87"},cfscript:{title:"CFScript",require:"clike",alias:"cfc",owner:"mjclemente"},chaiscript:{title:"ChaiScript",require:["clike","cpp"],owner:"RunDevelopment"},cil:{title:"CIL",owner:"sbrl"},cilkc:{title:"Cilk/C",require:"c",alias:"cilk-c",owner:"OpenCilk"},cilkcpp:{title:"Cilk/C++",require:"cpp",alias:["cilk-cpp","cilk"],owner:"OpenCilk"},clojure:{title:"Clojure",owner:"troglotit"},cmake:{title:"CMake",owner:"mjrogozinski"},cobol:{title:"COBOL",owner:"RunDevelopment"},coffeescript:{title:"CoffeeScript",require:"javascript",alias:"coffee",owner:"R-osey"},concurnas:{title:"Concurnas",alias:"conc",owner:"jasontatton"},csp:{title:"Content-Security-Policy",owner:"ScottHelme"},cooklang:{title:"Cooklang",owner:"ahue"},coq:{title:"Coq",owner:"RunDevelopment"},crystal:{title:"Crystal",require:"ruby",owner:"MakeNowJust"},"css-extras":{title:"CSS Extras",require:"css",modify:"css",owner:"milesj"},csv:{title:"CSV",owner:"RunDevelopment"},cue:{title:"CUE",owner:"RunDevelopment"},cypher:{title:"Cypher",owner:"RunDevelopment"},d:{title:"D",require:"clike",owner:"Golmote"},dart:{title:"Dart",require:"clike",owner:"Golmote"},dataweave:{title:"DataWeave",owner:"machaval"},dax:{title:"DAX",owner:"peterbud"},dhall:{title:"Dhall",owner:"RunDevelopment"},diff:{title:"Diff",owner:"uranusjr"},django:{title:"Django/Jinja2",require:"markup-templating",alias:"jinja2",owner:"romanvm"},"dns-zone-file":{title:"DNS zone file",owner:"RunDevelopment",alias:"dns-zone"},docker:{title:"Docker",alias:"dockerfile",owner:"JustinBeckwith"},dot:{title:"DOT (Graphviz)",alias:"gv",optional:"markup",owner:"RunDevelopment"},ebnf:{title:"EBNF",owner:"RunDevelopment"},editorconfig:{title:"EditorConfig",owner:"osipxd"},eiffel:{title:"Eiffel",owner:"Conaclos"},ejs:{title:"EJS",require:["javascript","markup-templating"],owner:"RunDevelopment",alias:"eta",aliasTitles:{eta:"Eta"}},elixir:{title:"Elixir",owner:"Golmote"},elm:{title:"Elm",owner:"zwilias"},etlua:{title:"Embedded Lua templating",require:["lua","markup-templating"],owner:"RunDevelopment"},erb:{title:"ERB",require:["ruby","markup-templating"],owner:"Golmote"},erlang:{title:"Erlang",owner:"Golmote"},"excel-formula":{title:"Excel Formula",alias:["xlsx","xls"],owner:"RunDevelopment"},fsharp:{title:"F#",require:"clike",owner:"simonreynolds7"},factor:{title:"Factor",owner:"catb0t"},false:{title:"False",owner:"edukisto"},"firestore-security-rules":{title:"Firestore security rules",require:"clike",owner:"RunDevelopment"},flow:{title:"Flow",require:"javascript",owner:"Golmote"},fortran:{title:"Fortran",owner:"Golmote"},ftl:{title:"FreeMarker Template Language",require:"markup-templating",owner:"RunDevelopment"},gml:{title:"GameMaker Language",alias:"gamemakerlanguage",require:"clike",owner:"LiarOnce"},gap:{title:"GAP (CAS)",owner:"RunDevelopment"},gcode:{title:"G-code",owner:"RunDevelopment"},gdscript:{title:"GDScript",owner:"RunDevelopment"},gedcom:{title:"GEDCOM",owner:"Golmote"},gettext:{title:"gettext",alias:"po",owner:"RunDevelopment"},gherkin:{title:"Gherkin",owner:"hason"},git:{title:"Git",owner:"lgiraudel"},glsl:{title:"GLSL",require:"c",owner:"Golmote"},gn:{title:"GN",alias:"gni",owner:"RunDevelopment"},"linker-script":{title:"GNU Linker Script",alias:"ld",owner:"RunDevelopment"},go:{title:"Go",require:"clike",owner:"arnehormann"},"go-module":{title:"Go module",alias:"go-mod",owner:"RunDevelopment"},gradle:{title:"Gradle",require:"clike",owner:"zeabdelkhalek-badido18"},graphql:{title:"GraphQL",optional:"markdown",owner:"Golmote"},groovy:{title:"Groovy",require:"clike",owner:"robfletcher"},haml:{title:"Haml",require:"ruby",optional:["css","css-extras","coffeescript","erb","javascript","less","markdown","scss","textile"],owner:"Golmote"},handlebars:{title:"Handlebars",require:"markup-templating",alias:["hbs","mustache"],aliasTitles:{mustache:"Mustache"},owner:"Golmote"},haskell:{title:"Haskell",alias:"hs",owner:"bholst"},haxe:{title:"Haxe",require:"clike",optional:"regex",owner:"Golmote"},hcl:{title:"HCL",owner:"outsideris"},hlsl:{title:"HLSL",require:"c",owner:"RunDevelopment"},hoon:{title:"Hoon",owner:"matildepark"},http:{title:"HTTP",optional:["csp","css","hpkp","hsts","javascript","json","markup","uri"],owner:"danielgtaylor"},hpkp:{title:"HTTP Public-Key-Pins",owner:"ScottHelme"},hsts:{title:"HTTP Strict-Transport-Security",owner:"ScottHelme"},ichigojam:{title:"IchigoJam",owner:"BlueCocoa"},icon:{title:"Icon",owner:"Golmote"},"icu-message-format":{title:"ICU Message Format",owner:"RunDevelopment"},idris:{title:"Idris",alias:"idr",owner:"KeenS",require:"haskell"},ignore:{title:".ignore",owner:"osipxd",alias:["gitignore","hgignore","npmignore"],aliasTitles:{gitignore:".gitignore",hgignore:".hgignore",npmignore:".npmignore"}},inform7:{title:"Inform 7",owner:"Golmote"},ini:{title:"Ini",owner:"aviaryan"},io:{title:"Io",owner:"AlesTsurko"},j:{title:"J",owner:"Golmote"},java:{title:"Java",require:"clike",owner:"sherblot"},javadoc:{title:"JavaDoc",require:["markup","java","javadoclike"],modify:"java",optional:"scala",owner:"RunDevelopment"},javadoclike:{title:"JavaDoc-like",modify:["java","javascript","php"],owner:"RunDevelopment"},javastacktrace:{title:"Java stack trace",owner:"RunDevelopment"},jexl:{title:"Jexl",owner:"czosel"},jolie:{title:"Jolie",require:"clike",owner:"thesave"},jq:{title:"JQ",owner:"RunDevelopment"},jsdoc:{title:"JSDoc",require:["javascript","javadoclike","typescript"],modify:"javascript",optional:["actionscript","coffeescript"],owner:"RunDevelopment"},"js-extras":{title:"JS Extras",require:"javascript",modify:"javascript",optional:["actionscript","coffeescript","flow","n4js","typescript"],owner:"RunDevelopment"},json:{title:"JSON",alias:"webmanifest",aliasTitles:{webmanifest:"Web App Manifest"},owner:"CupOfTea696"},json5:{title:"JSON5",require:"json",owner:"RunDevelopment"},jsonp:{title:"JSONP",require:"json",owner:"RunDevelopment"},jsstacktrace:{title:"JS stack trace",owner:"sbrl"},"js-templates":{title:"JS Templates",require:"javascript",modify:"javascript",optional:["css","css-extras","graphql","markdown","markup","sql"],owner:"RunDevelopment"},julia:{title:"Julia",owner:"cdagnino"},keepalived:{title:"Keepalived Configure",owner:"dev-itsheng"},keyman:{title:"Keyman",owner:"mcdurdin"},kotlin:{title:"Kotlin",alias:["kt","kts"],aliasTitles:{kts:"Kotlin Script"},require:"clike",owner:"Golmote"},kumir:{title:"KuMir (\u041a\u0443\u041c\u0438\u0440)",alias:"kum",owner:"edukisto"},kusto:{title:"Kusto",owner:"RunDevelopment"},latex:{title:"LaTeX",alias:["tex","context"],aliasTitles:{tex:"TeX",context:"ConTeXt"},owner:"japborst"},latte:{title:"Latte",require:["clike","markup-templating","php"],owner:"nette"},less:{title:"Less",require:"css",optional:"css-extras",owner:"Golmote"},lilypond:{title:"LilyPond",require:"scheme",alias:"ly",owner:"RunDevelopment"},liquid:{title:"Liquid",require:"markup-templating",owner:"cinhtau"},lisp:{title:"Lisp",alias:["emacs","elisp","emacs-lisp"],owner:"JuanCaicedo"},livescript:{title:"LiveScript",owner:"Golmote"},llvm:{title:"LLVM IR",owner:"porglezomp"},log:{title:"Log file",optional:"javastacktrace",owner:"RunDevelopment"},lolcode:{title:"LOLCODE",owner:"Golmote"},lua:{title:"Lua",owner:"Golmote"},magma:{title:"Magma (CAS)",owner:"RunDevelopment"},makefile:{title:"Makefile",owner:"Golmote"},markdown:{title:"Markdown",require:"markup",optional:"yaml",alias:"md",owner:"Golmote"},"markup-templating":{title:"Markup templating",require:"markup",owner:"Golmote"},mata:{title:"Mata",owner:"RunDevelopment"},matlab:{title:"MATLAB",owner:"Golmote"},maxscript:{title:"MAXScript",owner:"RunDevelopment"},mel:{title:"MEL",owner:"Golmote"},mermaid:{title:"Mermaid",owner:"RunDevelopment"},metafont:{title:"METAFONT",owner:"LaeriExNihilo"},mizar:{title:"Mizar",owner:"Golmote"},mongodb:{title:"MongoDB",owner:"airs0urce",require:"javascript"},monkey:{title:"Monkey",owner:"Golmote"},moonscript:{title:"MoonScript",alias:"moon",owner:"RunDevelopment"},n1ql:{title:"N1QL",owner:"TMWilds"},n4js:{title:"N4JS",require:"javascript",optional:"jsdoc",alias:"n4jsd",owner:"bsmith-n4"},"nand2tetris-hdl":{title:"Nand To Tetris HDL",owner:"stephanmax"},naniscript:{title:"Naninovel Script",owner:"Elringus",alias:"nani"},nasm:{title:"NASM",owner:"rbmj"},neon:{title:"NEON",owner:"nette"},nevod:{title:"Nevod",owner:"nezaboodka"},nginx:{title:"nginx",owner:"volado"},nim:{title:"Nim",owner:"Golmote"},nix:{title:"Nix",owner:"Golmote"},nsis:{title:"NSIS",owner:"idleberg"},objectivec:{title:"Objective-C",require:"c",alias:"objc",owner:"uranusjr"},ocaml:{title:"OCaml",owner:"Golmote"},odin:{title:"Odin",owner:"edukisto"},opencl:{title:"OpenCL",require:"c",modify:["c","cpp"],owner:"Milania1"},openqasm:{title:"OpenQasm",alias:"qasm",owner:"RunDevelopment"},oz:{title:"Oz",owner:"Golmote"},parigp:{title:"PARI/GP",owner:"Golmote"},parser:{title:"Parser",require:"markup",owner:"Golmote"},pascal:{title:"Pascal",alias:"objectpascal",aliasTitles:{objectpascal:"Object Pascal"},owner:"Golmote"},pascaligo:{title:"Pascaligo",owner:"DefinitelyNotAGoat"},psl:{title:"PATROL Scripting Language",owner:"bertysentry"},pcaxis:{title:"PC-Axis",alias:"px",owner:"RunDevelopment"},peoplecode:{title:"PeopleCode",alias:"pcode",owner:"RunDevelopment"},perl:{title:"Perl",owner:"Golmote"},php:{title:"PHP",require:"markup-templating",owner:"milesj"},phpdoc:{title:"PHPDoc",require:["php","javadoclike"],modify:"php",owner:"RunDevelopment"},"php-extras":{title:"PHP Extras",require:"php",modify:"php",owner:"milesj"},"plant-uml":{title:"PlantUML",alias:"plantuml",owner:"RunDevelopment"},plsql:{title:"PL/SQL",require:"sql",owner:"Golmote"},powerquery:{title:"PowerQuery",alias:["pq","mscript"],owner:"peterbud"},powershell:{title:"PowerShell",owner:"nauzilus"},processing:{title:"Processing",require:"clike",owner:"Golmote"},prolog:{title:"Prolog",owner:"Golmote"},promql:{title:"PromQL",owner:"arendjr"},properties:{title:".properties",owner:"Golmote"},protobuf:{title:"Protocol Buffers",require:"clike",owner:"just-boris"},pug:{title:"Pug",require:["markup","javascript"],optional:["coffeescript","ejs","handlebars","less","livescript","markdown","scss","stylus","twig"],owner:"Golmote"},puppet:{title:"Puppet",owner:"Golmote"},pure:{title:"Pure",optional:["c","cpp","fortran"],owner:"Golmote"},purebasic:{title:"PureBasic",require:"clike",alias:"pbfasm",owner:"HeX0R101"},purescript:{title:"PureScript",require:"haskell",alias:"purs",owner:"sriharshachilakapati"},python:{title:"Python",alias:"py",owner:"multipetros"},qsharp:{title:"Q#",require:"clike",alias:"qs",owner:"fedonman"},q:{title:"Q (kdb+ database)",owner:"Golmote"},qml:{title:"QML",require:"javascript",owner:"RunDevelopment"},qore:{title:"Qore",require:"clike",owner:"temnroegg"},r:{title:"R",owner:"Golmote"},racket:{title:"Racket",require:"scheme",alias:"rkt",owner:"RunDevelopment"},cshtml:{title:"Razor C#",alias:"razor",require:["markup","csharp"],optional:["css","css-extras","javascript","js-extras"],owner:"RunDevelopment"},jsx:{title:"React JSX",require:["markup","javascript"],optional:["jsdoc","js-extras","js-templates"],owner:"vkbansal"},tsx:{title:"React TSX",require:["jsx","typescript"]},reason:{title:"Reason",require:"clike",owner:"Golmote"},regex:{title:"Regex",owner:"RunDevelopment"},rego:{title:"Rego",owner:"JordanSh"},renpy:{title:"Ren'py",alias:"rpy",owner:"HyuchiaDiego"},rescript:{title:"ReScript",alias:"res",owner:"vmarcosp"},rest:{title:"reST (reStructuredText)",owner:"Golmote"},rip:{title:"Rip",owner:"ravinggenius"},roboconf:{title:"Roboconf",owner:"Golmote"},robotframework:{title:"Robot Framework",alias:"robot",owner:"RunDevelopment"},ruby:{title:"Ruby",require:"clike",alias:"rb",owner:"samflores"},rust:{title:"Rust",owner:"Golmote"},sas:{title:"SAS",optional:["groovy","lua","sql"],owner:"Golmote"},sass:{title:"Sass (Sass)",require:"css",optional:"css-extras",owner:"Golmote"},scss:{title:"Sass (SCSS)",require:"css",optional:"css-extras",owner:"MoOx"},scala:{title:"Scala",require:"java",owner:"jozic"},scheme:{title:"Scheme",owner:"bacchus123"},"shell-session":{title:"Shell session",require:"bash",alias:["sh-session","shellsession"],owner:"RunDevelopment"},smali:{title:"Smali",owner:"RunDevelopment"},smalltalk:{title:"Smalltalk",owner:"Golmote"},smarty:{title:"Smarty",require:"markup-templating",optional:"php",owner:"Golmote"},sml:{title:"SML",alias:"smlnj",aliasTitles:{smlnj:"SML/NJ"},owner:"RunDevelopment"},solidity:{title:"Solidity (Ethereum)",alias:"sol",require:"clike",owner:"glachaud"},"solution-file":{title:"Solution file",alias:"sln",owner:"RunDevelopment"},soy:{title:"Soy (Closure Template)",require:"markup-templating",owner:"Golmote"},sparql:{title:"SPARQL",require:"turtle",owner:"Triply-Dev",alias:"rq"},"splunk-spl":{title:"Splunk SPL",owner:"RunDevelopment"},sqf:{title:"SQF: Status Quo Function (Arma 3)",require:"clike",owner:"RunDevelopment"},sql:{title:"SQL",owner:"multipetros"},squirrel:{title:"Squirrel",require:"clike",owner:"RunDevelopment"},stan:{title:"Stan",owner:"RunDevelopment"},stata:{title:"Stata Ado",require:["mata","java","python"],owner:"RunDevelopment"},iecst:{title:"Structured Text (IEC 61131-3)",owner:"serhioromano"},stylus:{title:"Stylus",owner:"vkbansal"},supercollider:{title:"SuperCollider",alias:"sclang",owner:"RunDevelopment"},swift:{title:"Swift",owner:"chrischares"},systemd:{title:"Systemd configuration file",owner:"RunDevelopment"},"t4-templating":{title:"T4 templating",owner:"RunDevelopment"},"t4-cs":{title:"T4 Text Templates (C#)",require:["t4-templating","csharp"],alias:"t4",owner:"RunDevelopment"},"t4-vb":{title:"T4 Text Templates (VB)",require:["t4-templating","vbnet"],owner:"RunDevelopment"},tap:{title:"TAP",owner:"isaacs",require:"yaml"},tcl:{title:"Tcl",owner:"PeterChaplin"},tt2:{title:"Template Toolkit 2",require:["clike","markup-templating"],owner:"gflohr"},textile:{title:"Textile",require:"markup",optional:"css",owner:"Golmote"},toml:{title:"TOML",owner:"RunDevelopment"},tremor:{title:"Tremor",alias:["trickle","troy"],owner:"darach",aliasTitles:{trickle:"trickle",troy:"troy"}},turtle:{title:"Turtle",alias:"trig",aliasTitles:{trig:"TriG"},owner:"jakubklimek"},twig:{title:"Twig",require:"markup-templating",owner:"brandonkelly"},typescript:{title:"TypeScript",require:"javascript",optional:"js-templates",alias:"ts",owner:"vkbansal"},typoscript:{title:"TypoScript",alias:"tsconfig",aliasTitles:{tsconfig:"TSConfig"},owner:"dkern"},unrealscript:{title:"UnrealScript",alias:["uscript","uc"],owner:"RunDevelopment"},uorazor:{title:"UO Razor Script",owner:"jaseowns"},uri:{title:"URI",alias:"url",aliasTitles:{url:"URL"},owner:"RunDevelopment"},v:{title:"V",require:"clike",owner:"taggon"},vala:{title:"Vala",require:"clike",optional:"regex",owner:"TemplarVolk"},vbnet:{title:"VB.Net",require:"basic",owner:"Bigsby"},velocity:{title:"Velocity",require:"markup",owner:"Golmote"},verilog:{title:"Verilog",owner:"a-rey"},vhdl:{title:"VHDL",owner:"a-rey"},vim:{title:"vim",owner:"westonganger"},"visual-basic":{title:"Visual Basic",alias:["vb","vba"],aliasTitles:{vba:"VBA"},owner:"Golmote"},warpscript:{title:"WarpScript",owner:"RunDevelopment"},wasm:{title:"WebAssembly",owner:"Golmote"},"web-idl":{title:"Web IDL",alias:"webidl",owner:"RunDevelopment"},wgsl:{title:"WGSL",owner:"Dr4gonthree"},wiki:{title:"Wiki markup",require:"markup",owner:"Golmote"},wolfram:{title:"Wolfram language",alias:["mathematica","nb","wl"],aliasTitles:{mathematica:"Mathematica",nb:"Mathematica Notebook"},owner:"msollami"},wren:{title:"Wren",owner:"clsource"},xeora:{title:"Xeora",require:"markup",alias:"xeoracube",aliasTitles:{xeoracube:"XeoraCube"},owner:"freakmaxi"},"xml-doc":{title:"XML doc (.net)",require:"markup",modify:["csharp","fsharp","vbnet"],owner:"RunDevelopment"},xojo:{title:"Xojo (REALbasic)",owner:"Golmote"},xquery:{title:"XQuery",require:"markup",owner:"Golmote"},yaml:{title:"YAML",alias:"yml",owner:"hason"},yang:{title:"YANG",owner:"RunDevelopment"},zig:{title:"Zig",owner:"RunDevelopment"}},plugins:{meta:{path:"plugins/{id}/prism-{id}",link:"plugins/{id}/"},"line-highlight":{title:"Line Highlight",description:"Highlights specific lines and/or line ranges."},"line-numbers":{title:"Line Numbers",description:"Line number at the beginning of code lines.",owner:"kuba-kubula"},"show-invisibles":{title:"Show Invisibles",description:"Show hidden characters such as tabs and line breaks.",optional:["autolinker","data-uri-highlight"]},autolinker:{title:"Autolinker",description:"Converts URLs and emails in code to clickable links. Parses Markdown links in comments."},wpd:{title:"WebPlatform Docs",description:'Makes tokens link to WebPlatform.org documentation. The links open in a new tab.'},"custom-class":{title:"Custom Class",description:"This plugin allows you to prefix Prism's default classes (.comment can become .namespace--comment) or replace them with your defined ones (like .editor__comment). You can even add new classes.",owner:"dvkndn",noCSS:!0},"file-highlight":{title:"File Highlight",description:"Fetch external files and highlight them with Prism. Used on the Prism website itself.",noCSS:!0},"show-language":{title:"Show Language",description:"Display the highlighted language in code blocks (inline code does not show the label).",owner:"nauzilus",noCSS:!0,require:"toolbar"},"jsonp-highlight":{title:"JSONP Highlight",description:"Fetch content with JSONP and highlight some interesting content (e.g. GitHub/Gists or Bitbucket API).",noCSS:!0,owner:"nauzilus"},"highlight-keywords":{title:"Highlight Keywords",description:"Adds special CSS classes for each keyword for fine-grained highlighting.",owner:"vkbansal",noCSS:!0},"remove-initial-line-feed":{title:"Remove initial line feed",description:"Removes the initial line feed in code blocks.",owner:"Golmote",noCSS:!0},"inline-color":{title:"Inline color",description:"Adds a small inline preview for colors in style sheets.",require:"css-extras",owner:"RunDevelopment"},previewers:{title:"Previewers",description:"Previewers for angles, colors, gradients, easing and time.",require:"css-extras",owner:"Golmote"},autoloader:{title:"Autoloader",description:"Automatically loads the needed languages to highlight the code blocks.",owner:"Golmote",noCSS:!0},"keep-markup":{title:"Keep Markup",description:"Prevents custom markup from being dropped out during highlighting.",owner:"Golmote",optional:"normalize-whitespace",noCSS:!0},"command-line":{title:"Command Line",description:"Display a command line with a prompt and, optionally, the output/response from the commands.",owner:"chriswells0"},"unescaped-markup":{title:"Unescaped Markup",description:"Write markup without having to escape anything."},"normalize-whitespace":{title:"Normalize Whitespace",description:"Supports multiple operations to normalize whitespace in code blocks.",owner:"zeitgeist87",optional:"unescaped-markup",noCSS:!0},"data-uri-highlight":{title:"Data-URI Highlight",description:"Highlights data-URI contents.",owner:"Golmote",noCSS:!0},toolbar:{title:"Toolbar",description:"Attach a toolbar for plugins to easily register buttons on the top of a code block.",owner:"mAAdhaTTah"},"copy-to-clipboard":{title:"Copy to Clipboard Button",description:"Add a button that copies the code block to the clipboard when clicked.",owner:"mAAdhaTTah",require:"toolbar",noCSS:!0},"download-button":{title:"Download Button",description:"A button in the toolbar of a code block adding a convenient way to download a code file.",owner:"Golmote",require:"toolbar",noCSS:!0},"match-braces":{title:"Match braces",description:"Highlights matching braces.",owner:"RunDevelopment"},"diff-highlight":{title:"Diff Highlight",description:"Highlights the code inside diff blocks.",owner:"RunDevelopment",require:"diff"},"filter-highlight-all":{title:"Filter highlightAll",description:"Filters the elements the highlightAll and highlightAllUnder methods actually highlight.",owner:"RunDevelopment",noCSS:!0},treeview:{title:"Treeview",description:"A language with special styles to highlight file system tree structures.",owner:"Golmote"}}})},2885:(e,t,n)=>{const r=n(9901),o=n(9642),a=new Set;function i(e){void 0===e?e=Object.keys(r.languages).filter((e=>"meta"!=e)):Array.isArray(e)||(e=[e]);const t=[...a,...Object.keys(Prism.languages)];o(r,e,t).load((e=>{if(!(e in r.languages))return void(i.silent||console.warn("Language does not exist: "+e));const t="./prism-"+e;delete n.c[n(6500).resolve(t)],delete Prism.languages[e],n(6500)(t),a.add(e)}))}i.silent=!1,e.exports=i},6726:(e,t,n)=>{var r={"./":2885};function o(e){var t=a(e);return n(t)}function a(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=a,e.exports=o,o.id=6726},6500:(e,t,n)=>{var r={"./":2885};function o(e){var t=a(e);return n(t)}function a(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=a,e.exports=o,o.id=6500},9642:e=>{"use strict";var t=function(){var e=function(){};function t(e,t){Array.isArray(e)?e.forEach(t):null!=e&&t(e,0)}function n(e){for(var t={},n=0,r=e.length;n "));var s={},l=e[r];if(l){function u(t){if(!(t in e))throw new Error(r+" depends on an unknown component "+t);if(!(t in s))for(var i in o(t,a),s[t]=!0,n[t])s[i]=!0}t(l.require,u),t(l.optional,u),t(l.modify,u)}n[r]=s,a.pop()}}return function(e){var t=n[e];return t||(o(e,r),t=n[e]),t}}function o(e){for(var t in e)return!0;return!1}return function(a,i,s){var l=function(e){var t={};for(var n in e){var r=e[n];for(var o in r)if("meta"!=o){var a=r[o];t[o]="string"==typeof a?{title:a}:a}}return t}(a),u=function(e){var n;return function(r){if(r in e)return r;if(!n)for(var o in n={},e){var a=e[o];t(a&&a.alias,(function(t){if(t in n)throw new Error(t+" cannot be alias for both "+o+" and "+n[t]);if(t in e)throw new Error(t+" cannot be alias of "+o+" because it is a component.");n[t]=o}))}return n[r]||r}}(l);i=i.map(u),s=(s||[]).map(u);var c=n(i),d=n(s);i.forEach((function e(n){var r=l[n];t(r&&r.require,(function(t){t in d||(c[t]=!0,e(t))}))}));for(var p,f=r(l),m=c;o(m);){for(var g in p={},m){var h=l[g];t(h&&h.modify,(function(e){e in d&&(p[e]=!0)}))}for(var b in d)if(!(b in c))for(var v in f(b))if(v in c){p[b]=!0;break}for(var y in m=p)c[y]=!0}var w={getIds:function(){var e=[];return w.load((function(t){e.push(t)})),e},load:function(t,n){return function(t,n,r,o){var a=o?o.series:void 0,i=o?o.parallel:e,s={},l={};function u(e){if(e in s)return s[e];l[e]=!0;var o,c=[];for(var d in t(e))d in n&&c.push(d);if(0===c.length)o=r(e);else{var p=i(c.map((function(e){var t=u(e);return delete l[e],t})));a?o=a(p,(function(){return r(e)})):r(e)}return s[e]=o}for(var c in n)u(c);var d=[];for(var p in l)d.push(s[p]);return i(d)}(f,c,t,n)}};return w}}();e.exports=t},2703:(e,t,n)=>{"use strict";var r=n(414);function o(){}function a(){}a.resetWarningCache=o,e.exports=function(){function e(e,t,n,o,a,i){if(i!==r){var s=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name="Invariant Violation",s}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:a,resetWarningCache:o};return n.PropTypes=n,n}},5697:(e,t,n)=>{e.exports=n(2703)()},414:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},4448:(e,t,n)=>{"use strict";var r=n(7294),o=n(7418),a=n(3840);function i(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n