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.
diff --git a/404.html b/404.html index 02fa06fc1..5565e30eb 100644 --- a/404.html +++ b/404.html @@ -5,8 +5,8 @@
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.
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",id:"commit-message-format",level:2},{value:"Package update",id:"package-update",level:3},{value:"Other commit message format examples",id:"other-commit-message-format-examples",level:3}];function d(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"updating-an-existing-package",children:"Updating an Existing Package"}),"\n",(0,i.jsx)(n.p,{children:"This article will go over updating a package that is already in the Solus package repositories."}),"\n",(0,i.jsxs)(n.admonition,{type:"note",children:[(0,i.jsxs)(n.p,{children:[(0,i.jsxs)(n.strong,{children:["Please ",(0,i.jsx)(n.a,{href:"https://github.com/getsolus/packages/issues?q=label%3A%22Package+Request%22",children:"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.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"This PR resolves software update request https://github.com/getsolus/packages/issues/123\n"})})]}),"\n",(0,i.jsx)(n.h3,{id:"update-your-clone-of-the-packages-repository",children:"Update your clone of the packages repository"}),"\n",(0,i.jsxs)(n.p,{children:["If you do not have a local clone set up yet, see ",(0,i.jsx)(n.a,{href:"/docs/packaging/prepare-for-packaging#fork-the-getsoluspackages-repository",children:"Prepare for Packaging"})]}),"\n",(0,i.jsx)(n.p,{children:"Bring your local clone up to date. Run:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"cd ~/solus-packages/packages/n/nano\ngit switch main\ngit pull\n"})}),"\n",(0,i.jsx)(n.h2,{id:"switch-to-a-new-git-branch",children:"Switch to a new git branch"}),"\n",(0,i.jsx)(n.p,{children:"It's always a good idea to switch to a new git branch before beginning packaging work. This helps to 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:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"git switch -c update_nano\n"})}),"\n",(0,i.jsx)(n.h2,{id:"updating-a-package",children:"Updating a package"}),"\n",(0,i.jsx)(n.p,{children:"There are two types of package updates: a package bump, and moving a package to a different version."}),"\n",(0,i.jsxs)(n.p,{children:["Bumping a package is typically done when rebuilding against a changed dependency, such as ",(0,i.jsx)(n.code,{children:"imagemagick"})," needing to be rebuilt if ",(0,i.jsx)(n.code,{children:"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."]}),"\n",(0,i.jsx)(n.h3,{id:"bumping-a-package",children:"Bumping a package"}),"\n",(0,i.jsxs)(n.p,{children:["Bumping can be achieved by running the ",(0,i.jsx)(n.code,{children:"bump"})," task, which increments the release number by 1."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"go-task bump\n"})}),"\n",(0,i.jsx)(n.p,{children:"Check to make sure that the result is as expected."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"git diff package.yml\n"})}),"\n",(0,i.jsx)(n.admonition,{type:"note",children:(0,i.jsx)(n.p,{children:"Certain packages with long descriptions might have their description messed up when this is run. Check if this happened, and fix it if necessary."})}),"\n",(0,i.jsx)(n.h3,{id:"using-a-different-version",children:"Using a different version"}),"\n",(0,i.jsxs)(n.p,{children:["To update the package to a newer version, use the ",(0,i.jsx)(n.code,{children:"update"})," task."]}),"\n",(0,i.jsx)(n.p,{children:"This task takes two arguments, in the following order:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsx)(n.li,{children:"Version"}),"\n",(0,i.jsx)(n.li,{children:"Source URL"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"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."}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"go-task update -- 1.0 https://example.com/example-1.0.tar.xz\n"})}),"\n",(0,i.jsxs)(n.h2,{id:"the-maintainersmd-file",children:["The ",(0,i.jsx)(n.code,{children:"MAINTAINERS.md"})," file"]}),"\n",(0,i.jsxs)(n.p,{children:["There must be a file called ",(0,i.jsx)(n.code,{children:"MAINTAINERS.md"})," using the template in ",(0,i.jsx)(n.a,{href:"/docs/packaging/procedures/maintainership",children:"Maintainership"}),". Add it if it does not already exist. It should name the current maintainer(s) of the package."]}),"\n",(0,i.jsx)(n.h2,{id:"build-the-package",children:"Build the package"}),"\n",(0,i.jsxs)(n.p,{children:["Build the package using ",(0,i.jsx)(n.code,{children:"go-task"}),". The default task will build the package against the Unstable repository, so you don't have to specify a task here."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"go-task\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Once your package has built successfully, you will need to ",(0,i.jsx)(n.a,{href:"testing-a-package",children:"test it"}),"."]}),"\n",(0,i.jsx)(n.h2,{id:"commit-your-changes",children:"Commit your changes"}),"\n",(0,i.jsxs)(n.p,{children:["Check the ",(0,i.jsx)(n.a,{href:"git-basics#check-the-changes-in-your-files",children:"changes in your files"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.a,{href:"/docs/packaging/git-basics",children:"Add / remove files as necessary to the commit"}),". Then, ",(0,i.jsx)(n.strong,{children:"check your branch"}),"."]}),"\n",(0,i.jsx)(n.p,{children:"Double-check that everything looks correct and all of the files have been staged before committing."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"git status\n"})}),"\n",(0,i.jsx)(n.p,{children:"If all looks well, commit your changes."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"git commit\n"})}),"\n",(0,i.jsx)(n.h2,{id:"commit-message-format",children:"Commit message format"}),"\n",(0,i.jsx)(n.p,{children:'With the switch to a single large package git repository, having a regular, easy-to-read, and standardized commit message format helps enable quick and efficient "at-a-glance" reading of git commit messages for packagers and Staff alike.'}),"\n",(0,i.jsx)(n.p,{children:"Each commit message should consist of a meaningful summary line (which starts with the package name), a blank line, and then the rest of the commit message body."}),"\n",(0,i.jsxs)(n.p,{children:["Note that ",(0,i.jsx)(n.code,{children:"[NFC]"}),' (listed in an example below) is an abbreviation for "No Functional Change".']}),"\n",(0,i.jsx)(n.h3,{id:"package-update",children:"Package update"}),"\n",(0,i.jsx)(n.p,{children:"The following guidelines apply to the commit message body:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Bullet point lists should start with a dash."}),"\n",(0,i.jsx)(n.li,{children:"Include a changelog with a brief list of updates from the upstream release notes, with no links or issue numbers."}),"\n",(0,i.jsx)(n.li,{children:"There may also be a section for Solus specific work (e.g. rebuild against x / rework to remove dependency)."}),"\n",(0,i.jsx)(n.li,{children:"Optional: A link to the upstream release notes page."}),"\n",(0,i.jsx)(n.li,{children:"Include your Test Plan."}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.code,{children:"git commit"})," on ",(0,i.jsx)(n.a,{href:"/docs/packaging/prepare-for-packaging#initialize-git-hooks",children:"an initialized repository"})," will automatically open your editor with the correct template.\nNote that lines starting with a ",(0,i.jsx)(n.code,{children:"#"})," will be ignored by Git and do not need to be removed."]}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.em,{children:"Important"}),": Do not include issue numbers in changelogs. This will incorrectly link your issue to another one in our repository."]}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"- #123 fixed a thing\n"})}),"\n",(0,i.jsx)(n.p,{children:"If you want to intentionally link to another issue in this repository, the right way is to use our repository name:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"Fixes getsolus/packages#issuenumber\n"})}),"\n",(0,i.jsx)(n.p,{children:"Here is an example in our standard format:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"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\nFull release notes:\n\n- [1.2.3](https://github.com/foo/foo/releases/tag/v1.2.3)\n\n**Test Plan**\n\n\x3c!-- Short description of how the package was tested --\x3e\n\n**Checklist**\n\n- [ ] Package was built and tested against unstable\n"})}),"\n",(0,i.jsx)(n.h3,{id:"other-commit-message-format-examples",children:"Other commit message format examples"}),"\n",(0,i.jsx)(n.p,{children:"In the cases where you are not updating a package to a new version, but simply applying a patch or fixing an existing version, the following commit messages are considered suitable:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Add the ",(0,i.jsx)(n.code,{children:"homepage"})," metadata key:","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"package: Add homepage"})}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Fix a packaging issue (including adding a patch to fix the package)","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"package: Fix (...)"})}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Updating a README, ",(0,i.jsx)(n.a,{href:"/docs/packaging/monitoring.yml",children:"monitoring.yml file"})," or other stuff that does not directly ",(0,i.jsx)(n.em,{children:"change"})," the package, meaning the package release number didn't need a bump:","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"package: [NFC] Add README.md and monitoring.yml"})}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["As stated previously, ",(0,i.jsx)(n.code,{children:"[NFC]"}),' is an abbreviation of "No Functional Change".']}),"\n",(0,i.jsxs)(n.p,{children:["For more information on suitable commit messages, please check the ",(0,i.jsx)(n.a,{href:"https://github.com/solus-project/tooling-central/blob/master/README.rst#using-git",children:"tooling central documentation"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["Next, you'll ",(0,i.jsx)(n.a,{href:"/docs/packaging/submitting-a-pull-request",children:"submit a pull request for review"}),"."]})]})}function h(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},11151:(e,n,a)=>{a.d(n,{Z:()=>o,a:()=>r});var i=a(67294);const s={},t=i.createContext(s);function r(e){const n=i.useContext(t);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),i.createElement(t.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/0b254e3a.bcc930ea.js b/assets/js/0b254e3a.bcc930ea.js
deleted file mode 100644
index 17d2b5e5d..000000000
--- a/assets/js/0b254e3a.bcc930ea.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[6726],{2604:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>c,contentTitle:()=>r,default:()=>h,frontMatter:()=>t,metadata:()=>o,toc:()=>l});var i=a(85893),s=a(11151);const t={title:"Updating an Existing Package",summary:"Updating an Existing Package",sidebar_position:4},r="Updating an Existing Package",o={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,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/updating-an-existing-package.md",tags:[],version:"current",lastUpdatedAt:171439918e4,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"}},c={},l=[{value:"Update your clone of the packages repository",id:"update-your-clone-of-the-packages-repository",level:3},{value:"Switch to a new git branch",id:"switch-to-a-new-git-branch",level:2},{value:"Updating a package",id:"updating-a-package",level:2},{value:"Bumping a package",id:"bumping-a-package",level:3},{value:"Using a different version",id:"using-a-different-version",level:3},{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",id:"commit-message-format",level:2},{value:"Package update",id:"package-update",level:3},{value:"Other commit message format examples",id:"other-commit-message-format-examples",level:3}];function d(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"updating-an-existing-package",children:"Updating an Existing Package"}),"\n",(0,i.jsx)(n.p,{children:"This article will go over updating a package that is already in the Solus package repositories."}),"\n",(0,i.jsxs)(n.admonition,{type:"note",children:[(0,i.jsxs)(n.p,{children:[(0,i.jsxs)(n.strong,{children:["Please ",(0,i.jsx)(n.a,{href:"https://github.com/getsolus/packages/issues?q=label%3A%22Package+Request%22",children:"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.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"This PR resolves software update request https://github.com/getsolus/packages/issues/123\n"})})]}),"\n",(0,i.jsx)(n.h3,{id:"update-your-clone-of-the-packages-repository",children:"Update your clone of the packages repository"}),"\n",(0,i.jsxs)(n.p,{children:["If you do not have a local clone set up yet, see ",(0,i.jsx)(n.a,{href:"/docs/packaging/prepare-for-packaging#fork-the-getsoluspackages-repository",children:"Prepare for Packaging"})]}),"\n",(0,i.jsx)(n.p,{children:"Bring your local clone up to date. Run:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"cd ~/solus-packages/packages/n/nano\ngit switch main\ngit pull\n"})}),"\n",(0,i.jsx)(n.h2,{id:"switch-to-a-new-git-branch",children:"Switch to a new git branch"}),"\n",(0,i.jsx)(n.p,{children:"It's always a good idea to switch to a new git branch before beginning packaging work. This helps to 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:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"git switch -c update_nano\n"})}),"\n",(0,i.jsx)(n.h2,{id:"updating-a-package",children:"Updating a package"}),"\n",(0,i.jsx)(n.p,{children:"There are two types of package updates: a package bump, and moving a package to a different version."}),"\n",(0,i.jsxs)(n.p,{children:["Bumping a package is typically done when rebuilding against a changed dependency, such as ",(0,i.jsx)(n.code,{children:"imagemagick"})," needing to be rebuilt if ",(0,i.jsx)(n.code,{children:"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."]}),"\n",(0,i.jsx)(n.h3,{id:"bumping-a-package",children:"Bumping a package"}),"\n",(0,i.jsxs)(n.p,{children:["Bumping can be achieved by running the ",(0,i.jsx)(n.code,{children:"bump"})," task, which increments the release number by 1."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"go-task bump\n"})}),"\n",(0,i.jsx)(n.p,{children:"Check to make sure that the result is as expected."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"git diff package.yml\n"})}),"\n",(0,i.jsx)(n.admonition,{type:"note",children:(0,i.jsx)(n.p,{children:"Certain packages with long descriptions might have their description messed up when this is run. Check if this happened, and fix it if necessary."})}),"\n",(0,i.jsx)(n.h3,{id:"using-a-different-version",children:"Using a different version"}),"\n",(0,i.jsxs)(n.p,{children:["To update the package to a newer version, use the ",(0,i.jsx)(n.code,{children:"update"})," task."]}),"\n",(0,i.jsx)(n.p,{children:"This task takes two arguments, in the following order:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsx)(n.li,{children:"Version"}),"\n",(0,i.jsx)(n.li,{children:"Source URL"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"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."}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"go-task update -- 1.0 https://example.com/example-1.0.tar.xz\n"})}),"\n",(0,i.jsxs)(n.h2,{id:"the-maintainersmd-file",children:["The ",(0,i.jsx)(n.code,{children:"MAINTAINERS.md"})," file"]}),"\n",(0,i.jsxs)(n.p,{children:["There must be a file called ",(0,i.jsx)(n.code,{children:"MAINTAINERS.md"})," using the template in ",(0,i.jsx)(n.a,{href:"/docs/packaging/procedures/maintainership",children:"Maintainership"}),". Add it if it does not already exist. It should name the current maintainer(s) of the package."]}),"\n",(0,i.jsx)(n.h2,{id:"build-the-package",children:"Build the package"}),"\n",(0,i.jsxs)(n.p,{children:["Build the package using ",(0,i.jsx)(n.code,{children:"go-task"}),". The default task will build the package against the Unstable repository, so you don't have to specify a task here."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"go-task\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Once your package has built successfully, you will need to ",(0,i.jsx)(n.a,{href:"testing-a-package",children:"test it"}),"."]}),"\n",(0,i.jsx)(n.h2,{id:"commit-your-changes",children:"Commit your changes"}),"\n",(0,i.jsxs)(n.p,{children:["Check the ",(0,i.jsx)(n.a,{href:"git-basics#check-the-changes-in-your-files",children:"changes in your files"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.a,{href:"/docs/packaging/git-basics",children:"Add / remove files as necessary to the commit"}),". Then, ",(0,i.jsx)(n.strong,{children:"check your branch"}),"."]}),"\n",(0,i.jsx)(n.p,{children:"Double-check that everything looks correct and all of the files have been staged before committing."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"git status\n"})}),"\n",(0,i.jsx)(n.p,{children:"If all looks well, commit your changes."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"git commit\n"})}),"\n",(0,i.jsx)(n.h2,{id:"commit-message-format",children:"Commit message format"}),"\n",(0,i.jsx)(n.p,{children:'With the switch to a single large package git repository, having a regular, easy-to-read, and standardized commit message format helps enable quick and efficient "at-a-glance" reading of git commit messages for packagers and Staff alike.'}),"\n",(0,i.jsx)(n.p,{children:"Each commit message should consist of a meaningful summary line (which starts with the package name), a blank line, and then the rest of the commit message body."}),"\n",(0,i.jsxs)(n.p,{children:["Note that ",(0,i.jsx)(n.code,{children:"[NFC]"}),' (listed in an example below) is an abbreviation for "No Functional Change".']}),"\n",(0,i.jsx)(n.h3,{id:"package-update",children:"Package update"}),"\n",(0,i.jsx)(n.p,{children:"The following guidelines apply to the commit message body:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Bullet point lists should start with a dash."}),"\n",(0,i.jsx)(n.li,{children:"Include a changelog with a brief list of updates from the upstream release notes, with no links or issue numbers."}),"\n",(0,i.jsx)(n.li,{children:"There may also be a section for Solus specific work (e.g. rebuild against x / rework to remove dependency)."}),"\n",(0,i.jsx)(n.li,{children:"Optional: A link to the upstream release notes page."}),"\n",(0,i.jsx)(n.li,{children:"Include your Test Plan."}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.code,{children:"git commit"})," on ",(0,i.jsx)(n.a,{href:"/docs/packaging/prepare-for-packaging#initialize-git-hooks",children:"an initialized repository"})," will automatically open your editor with the correct template.\nNote that lines starting with a ",(0,i.jsx)(n.code,{children:"#"})," will be ignored by Git and do not need to be removed."]}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.em,{children:"Important"}),": Do not include issue numbers in changelogs. This will incorrectly link your issue to another one in our repository."]}),"\n",(0,i.jsx)(n.p,{children:"Example:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"- #123 fixed a thing\n"})}),"\n",(0,i.jsx)(n.p,{children:"If you want to intentionally link to another issue in this repository, the right way is to use our repository name:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"Fixes getsolus/packages#issuenumber\n"})}),"\n",(0,i.jsx)(n.p,{children:"Here is an example in our standard format:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"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\nFull release notes:\n\n- [1.2.3](https://github.com/foo/foo/releases/tag/v1.2.3)\n\n**Test Plan**\n\n\x3c!-- Short description of how the package was tested --\x3e\n\n**Checklist**\n\n- [ ] Package was built and tested against unstable\n"})}),"\n",(0,i.jsx)(n.h3,{id:"other-commit-message-format-examples",children:"Other commit message format examples"}),"\n",(0,i.jsx)(n.p,{children:"In the cases where you are not updating a package to a new version, but simply applying a patch or fixing an existing version, the following commit messages are considered suitable:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Add the ",(0,i.jsx)(n.code,{children:"homepage"})," metadata key:","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"package: Add homepage"})}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Fix a packaging issue (including adding a patch to fix the package)","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"package: Fix (...)"})}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.li,{children:["Updating a README, ",(0,i.jsx)(n.a,{href:"/docs/packaging/monitoring.yml",children:"monitoring.yml file"})," or other stuff that does not directly ",(0,i.jsx)(n.em,{children:"change"})," the package, meaning the package release number didn't need a bump:","\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.code,{children:"package: [NFC] Add README.md and monitoring.yml"})}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["As stated previously, ",(0,i.jsx)(n.code,{children:"[NFC]"}),' is an abbreviation of "No Functional Change".']}),"\n",(0,i.jsxs)(n.p,{children:["For more information on suitable commit messages, please check the ",(0,i.jsx)(n.a,{href:"https://github.com/solus-project/tooling-central/blob/master/README.rst#using-git",children:"tooling central documentation"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["Next, you'll ",(0,i.jsx)(n.a,{href:"/docs/packaging/submitting-a-pull-request",children:"submit a pull request for review"}),"."]})]})}function h(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},11151:(e,n,a)=>{a.d(n,{Z:()=>o,a:()=>r});var i=a(67294);const s={},t=i.createContext(s);function r(e){const n=i.useContext(t);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),i.createElement(t.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/0e3c5e6b.9cbdbf58.js b/assets/js/0e3c5e6b.9cbdbf58.js
new file mode 100644
index 000000000..2b18d4046
--- /dev/null
+++ b/assets/js/0e3c5e6b.9cbdbf58.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[4859],{24109:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>l,contentTitle:()=>a,default:()=>u,frontMatter:()=>r,metadata:()=>o,toc:()=>d});var n=t(85893),i=t(11151);const r={title:"Plasma",summary:"A quick introduction to the Plasma edition of Solus"},a="Plasma",o={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,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/editions/plasma/index.md",tags:[],version:"current",lastUpdatedAt:1714518504e3,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={},d=[];function c(e){const s={a:"a",em:"em",h1:"h1",hr:"hr",img:"img",li:"li",p:"p",ul:"ul",...(0,i.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.h1,{id:"plasma",children:"Plasma"}),"\n",(0,n.jsx)(s.p,{children:(0,n.jsx)(s.img,{alt:"Solus Plasma",src:t(52603).Z+"",width:"1920",height:"1080"})}),"\n",(0,n.jsxs)(s.p,{children:["The ",(0,n.jsx)(s.em,{children:"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."]}),"\n",(0,n.jsx)(s.p,{children:"To learn more about the Plasma desktop and KDE, refer to the following pages:"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://kde.org/plasma-desktop/",children:"https://kde.org/plasma-desktop/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://kde.org/announcements/",children:"https://kde.org/announcements/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://kde.org/support/",children:"https://kde.org/support/"})}),"\n"]}),"\n",(0,n.jsx)(s.hr,{}),"\n",(0,n.jsx)(s.p,{children:(0,n.jsx)(s.a,{href:"configuration",children:"Configuration"})}),"\n",(0,n.jsx)(s.p,{children:"Learn how to customize and configure the Plasma Desktop on Solus."}),"\n",(0,n.jsx)(s.p,{children:(0,n.jsx)(s.a,{href:"tips-and-tricks",children:"Tips and Tricks"})}),"\n",(0,n.jsx)(s.p,{children:"Helpful tips and tricks for using Plasma on Solus."})]})}function u(e={}){const{wrapper:s}={...(0,i.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},52603:(e,s,t)=>{t.d(s,{Z:()=>n});const n=t.p+"assets/images/plasma-32bee314c05b57e65e0b26b6bf23f14f.jpg"},11151:(e,s,t)=>{t.d(s,{Z:()=>o,a:()=>a});var n=t(67294);const i={},r=n.createContext(i);function a(e){const s=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function o(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),n.createElement(r.Provider,{value:s},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/0e3c5e6b.de13df82.js b/assets/js/0e3c5e6b.de13df82.js
deleted file mode 100644
index 568b06019..000000000
--- a/assets/js/0e3c5e6b.de13df82.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[4859],{24109:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>l,contentTitle:()=>a,default:()=>u,frontMatter:()=>r,metadata:()=>o,toc:()=>d});var n=t(85893),i=t(11151);const r={title:"Plasma",summary:"A quick introduction to the Plasma edition of Solus"},a="Plasma",o={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,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/editions/plasma/index.md",tags:[],version:"current",lastUpdatedAt:171439918e4,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={},d=[];function c(e){const s={a:"a",em:"em",h1:"h1",hr:"hr",img:"img",li:"li",p:"p",ul:"ul",...(0,i.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.h1,{id:"plasma",children:"Plasma"}),"\n",(0,n.jsx)(s.p,{children:(0,n.jsx)(s.img,{alt:"Solus Plasma",src:t(52603).Z+"",width:"1920",height:"1080"})}),"\n",(0,n.jsxs)(s.p,{children:["The ",(0,n.jsx)(s.em,{children:"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."]}),"\n",(0,n.jsx)(s.p,{children:"To learn more about the Plasma desktop and KDE, refer to the following pages:"}),"\n",(0,n.jsxs)(s.ul,{children:["\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://kde.org/plasma-desktop/",children:"https://kde.org/plasma-desktop/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://kde.org/announcements/",children:"https://kde.org/announcements/"})}),"\n",(0,n.jsx)(s.li,{children:(0,n.jsx)(s.a,{href:"https://kde.org/support/",children:"https://kde.org/support/"})}),"\n"]}),"\n",(0,n.jsx)(s.hr,{}),"\n",(0,n.jsx)(s.p,{children:(0,n.jsx)(s.a,{href:"configuration",children:"Configuration"})}),"\n",(0,n.jsx)(s.p,{children:"Learn how to customize and configure the Plasma Desktop on Solus."}),"\n",(0,n.jsx)(s.p,{children:(0,n.jsx)(s.a,{href:"tips-and-tricks",children:"Tips and Tricks"})}),"\n",(0,n.jsx)(s.p,{children:"Helpful tips and tricks for using Plasma on Solus."})]})}function u(e={}){const{wrapper:s}={...(0,i.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},52603:(e,s,t)=>{t.d(s,{Z:()=>n});const n=t.p+"assets/images/plasma-32bee314c05b57e65e0b26b6bf23f14f.jpg"},11151:(e,s,t)=>{t.d(s,{Z:()=>o,a:()=>a});var n=t(67294);const i={},r=n.createContext(i);function a(e){const s=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function o(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:a(e.components),n.createElement(r.Provider,{value:s},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/0e862883.868af564.js b/assets/js/0e862883.868af564.js
new file mode 100644
index 000000000..11fab0a82
--- /dev/null
+++ b/assets/js/0e862883.868af564.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[172],{56087:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>r,default:()=>h,frontMatter:()=>o,metadata:()=>l,toc:()=>c});var s=t(85893),i=t(11151);const o={},r="Testing an ISO",l={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,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/contributing/testing-an-iso.md",tags:[],version:"current",lastUpdatedAt:1714518504e3,frontMatter:{},sidebar:"userSidebar",previous:{title:"Solus Style Guide",permalink:"/docs/user/contributing/style"},next:{title:"Editions",permalink:"/docs/user/editions/"}},a={},c=[{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}];function d(e){const n={a:"a",em:"em",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",ul:"ul",...(0,i.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"testing-an-iso",children:"Testing an ISO"}),"\n",(0,s.jsx)(n.p,{children:"A handy checklist anyone can use for testing an ISO."}),"\n",(0,s.jsx)(n.p,{children:"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."}),"\n",(0,s.jsx)(n.p,{children:"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?"}),"\n",(0,s.jsx)(n.h2,{id:"for-any-release",children:"For any release"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"ISO can be written to a USB, used to boot a system and install"}),"\n",(0,s.jsx)(n.li,{children:"Can unlock the device if the live ISO lock screen engages"}),"\n",(0,s.jsx)(n.li,{children:"Installer is easy to follow"}),"\n",(0,s.jsx)(n.li,{children:"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."}),"\n",(0,s.jsx)(n.li,{children:"Start menu works, has search"}),"\n",(0,s.jsx)(n.li,{children:"Can scan / print / use your peripherals"}),"\n",(0,s.jsx)(n.li,{children:"Sound over speakers"}),"\n",(0,s.jsx)(n.li,{children:"Bluetooth device connects, has high fidelity and headphone modes, you can hear sound"}),"\n",(0,s.jsx)(n.li,{children:"Install your usual software and just make sure basic functionality works"}),"\n",(0,s.jsx)(n.li,{children:"Plugging in a USB drive allows user to mount the drive and access files"}),"\n",(0,s.jsx)(n.li,{children:"System can be put to sleep and woken, things still work after waking (display, keyboard, mouse, sound, network)"}),"\n",(0,s.jsxs)(n.li,{children:["Able to create and use samba shares via file manager (you must ",(0,s.jsx)(n.a,{href:"/docs/user/software/networking/samba#samba-on-solus",children:"enable smb after installation"}),")"]}),"\n",(0,s.jsx)(n.li,{children:"Anything that's been flaky in your experience (LVM, for instance)"}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"laptops",children:"Laptops"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Multi-monitor display behaves properly with docking and undocking."}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"vms",children:"VMs"}),"\n",(0,s.jsx)(n.p,{children:"This functionality might be affected by the settings of the VM."}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Copy and paste works from host to guest ",(0,s.jsx)(n.em,{children:"before"})," install, while booted into the live ISO"]}),"\n",(0,s.jsxs)(n.li,{children:["Copy and paste works ",(0,s.jsx)(n.em,{children:"after"})," installation and rebooting the VM"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"for-the-specific-release",children:"For the specific release"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Any issues that have been recently fixed, or are known to be recently flaky."}),"\n",(0,s.jsx)(n.li,{children:"Check the ISO task in the tracker for other potential areas of interest."}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},11151:(e,n,t)=>{t.d(n,{Z:()=>l,a:()=>r});var s=t(67294);const i={},o=s.createContext(i);function r(e){const n=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),s.createElement(o.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/0e862883.af557bc9.js b/assets/js/0e862883.af557bc9.js
deleted file mode 100644
index 37c2872ca..000000000
--- a/assets/js/0e862883.af557bc9.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[172],{56087:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>r,default:()=>h,frontMatter:()=>o,metadata:()=>l,toc:()=>c});var s=t(85893),i=t(11151);const o={},r="Testing an ISO",l={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,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/contributing/testing-an-iso.md",tags:[],version:"current",lastUpdatedAt:171439918e4,frontMatter:{},sidebar:"userSidebar",previous:{title:"Solus Style Guide",permalink:"/docs/user/contributing/style"},next:{title:"Editions",permalink:"/docs/user/editions/"}},a={},c=[{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}];function d(e){const n={a:"a",em:"em",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",ul:"ul",...(0,i.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"testing-an-iso",children:"Testing an ISO"}),"\n",(0,s.jsx)(n.p,{children:"A handy checklist anyone can use for testing an ISO."}),"\n",(0,s.jsx)(n.p,{children:"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."}),"\n",(0,s.jsx)(n.p,{children:"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?"}),"\n",(0,s.jsx)(n.h2,{id:"for-any-release",children:"For any release"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"ISO can be written to a USB, used to boot a system and install"}),"\n",(0,s.jsx)(n.li,{children:"Can unlock the device if the live ISO lock screen engages"}),"\n",(0,s.jsx)(n.li,{children:"Installer is easy to follow"}),"\n",(0,s.jsx)(n.li,{children:"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."}),"\n",(0,s.jsx)(n.li,{children:"Start menu works, has search"}),"\n",(0,s.jsx)(n.li,{children:"Can scan / print / use your peripherals"}),"\n",(0,s.jsx)(n.li,{children:"Sound over speakers"}),"\n",(0,s.jsx)(n.li,{children:"Bluetooth device connects, has high fidelity and headphone modes, you can hear sound"}),"\n",(0,s.jsx)(n.li,{children:"Install your usual software and just make sure basic functionality works"}),"\n",(0,s.jsx)(n.li,{children:"Plugging in a USB drive allows user to mount the drive and access files"}),"\n",(0,s.jsx)(n.li,{children:"System can be put to sleep and woken, things still work after waking (display, keyboard, mouse, sound, network)"}),"\n",(0,s.jsxs)(n.li,{children:["Able to create and use samba shares via file manager (you must ",(0,s.jsx)(n.a,{href:"/docs/user/software/networking/samba#samba-on-solus",children:"enable smb after installation"}),")"]}),"\n",(0,s.jsx)(n.li,{children:"Anything that's been flaky in your experience (LVM, for instance)"}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"laptops",children:"Laptops"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Multi-monitor display behaves properly with docking and undocking."}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"vms",children:"VMs"}),"\n",(0,s.jsx)(n.p,{children:"This functionality might be affected by the settings of the VM."}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Copy and paste works from host to guest ",(0,s.jsx)(n.em,{children:"before"})," install, while booted into the live ISO"]}),"\n",(0,s.jsxs)(n.li,{children:["Copy and paste works ",(0,s.jsx)(n.em,{children:"after"})," installation and rebooting the VM"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"for-the-specific-release",children:"For the specific release"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Any issues that have been recently fixed, or are known to be recently flaky."}),"\n",(0,s.jsx)(n.li,{children:"Check the ISO task in the tracker for other potential areas of interest."}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},11151:(e,n,t)=>{t.d(n,{Z:()=>l,a:()=>r});var s=t(67294);const i={},o=s.createContext(i);function r(e){const n=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:r(e.components),s.createElement(o.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/14488e92.628dfa53.js b/assets/js/14488e92.628dfa53.js
deleted file mode 100644
index cd4c136d6..000000000
--- a/assets/js/14488e92.628dfa53.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[4815],{83474:(e,i,s)=>{s.r(i),s.d(i,{assets:()=>l,contentTitle:()=>A,default:()=>o,frontMatter:()=>n,metadata:()=>r,toc:()=>d});var t=s(85893),c=s(11151);const n={title:"Default Applications",summary:"A guide to the default applications included with Solus."},A="Default applications",r={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,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/quick-start/default-applications.md",tags:[],version:"current",lastUpdatedAt:171439918e4,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/"}},l={},d=[{value:"Web browser",id:"web-browser",level:2},{value:"Email client",id:"email-client",level:2},{value:"Managing your files",id:"managing-your-files",level:2},{value:"Nemo",id:"nemo",level:3},{value:"GNOME Files",id:"gnome-files",level:3},{value:"Dolphin",id:"dolphin",level:3},{value:"Office suite",id:"office-suite",level:2},{value:"Calc",id:"calc",level:3},{value:"Draw",id:"draw",level:3},{value:"Impress",id:"impress",level:3},{value:"Math",id:"math",level:3},{value:"Writer",id:"writer",level:3},{value:"Spell-checking",id:"spell-checking",level:3},{value:"Finnish",id:"finnish",level:4},{value:"Music",id:"music",level:2},{value:"Rhythmbox",id:"rhythmbox",level:3},{value:"Elisa",id:"elisa",level:3},{value:"Video",id:"video",level:2},{value:"Celluloid",id:"celluloid",level:3},{value:"Haruna",id:"haruna",level:3},{value:"Parole",id:"parole",level:3}];function a(e){const i={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",img:"img",li:"li",ol:"ol",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,c.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(i.h1,{id:"default-applications",children:"Default applications"}),"\n",(0,t.jsx)(i.p,{children:"Each version of Solus comes with a pre-installed collection of desktop applications that can help you perform common tasks."}),"\n",(0,t.jsx)(i.h2,{id:"web-browser",children:"Web browser"}),"\n",(0,t.jsxs)(i.p,{children:["Solus comes pre-installed with Firefox, a secure and trustworthy web browser provided by the non-profit organization ",(0,t.jsx)(i.a,{href:"https://www.mozilla.org/",children:"Mozilla"}),"."]}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"Firefox Screenshot",src:s(34133).Z+"",width:"1920",height:"1046"})}),"\n",(0,t.jsx)(i.h2,{id:"email-client",children:"Email client"}),"\n",(0,t.jsxs)(i.p,{children:["Solus comes pre-installed with the powerful ",(0,t.jsx)(i.a,{href:"https://www.thunderbird.net/",children:"Thunderbird"})," email, newsgroup, and feeds client."]}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"Thunderbird Screenshot",src:s(80649).Z+"",width:"982",height:"822"})}),"\n",(0,t.jsx)(i.h2,{id:"managing-your-files",children:"Managing your files"}),"\n",(0,t.jsx)(i.p,{children:"Each Linux desktop environment has its own graphical application for managing files:"}),"\n",(0,t.jsxs)(i.table,{children:[(0,t.jsx)(i.thead,{children:(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.th,{children:"Desktop"}),(0,t.jsx)(i.th,{children:"Application"})]})}),(0,t.jsxs)(i.tbody,{children:[(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"Budgie"}),(0,t.jsx)(i.td,{children:"Nemo"})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"GNOME"}),(0,t.jsx)(i.td,{children:"GNOME Files (formerly Nautilus)"})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"Plasma"}),(0,t.jsx)(i.td,{children:"Dolphin"})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"XFCE"}),(0,t.jsx)(i.td,{children:"Nemo"})]})]})]}),"\n",(0,t.jsx)(i.h3,{id:"nemo",children:"Nemo"}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"Nemo Screenshot",src:s(80274).Z+"",width:"800",height:"586"})}),"\n",(0,t.jsx)(i.h3,{id:"gnome-files",children:"GNOME Files"}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"GNOME Files Screenshot",src:s(51055).Z+"",width:"886",height:"548"})}),"\n",(0,t.jsx)(i.h3,{id:"dolphin",children:"Dolphin"}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"Dolphin Screenshot",src:s(3638).Z+"",width:"1022",height:"721"})}),"\n",(0,t.jsx)(i.h2,{id:"office-suite",children:"Office suite"}),"\n",(0,t.jsxs)(i.p,{children:["Solus comes pre-installed with ",(0,t.jsx)(i.a,{href:"https://www.libreoffice.org",children:"LibreOffice"}),", an office suite that is capable of replacing Microsoft",(0,t.jsx)("sup",{children:"TM"})," Office for the most common tasks."]}),"\n",(0,t.jsx)(i.p,{children:"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."}),"\n",(0,t.jsxs)(i.table,{children:[(0,t.jsx)(i.thead,{children:(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.th,{children:"LibreOffice"}),(0,t.jsx)(i.th,{children:"Microsoft Office Equivalent"}),(0,t.jsx)(i.th,{children:"Apple Equivalent"})]})}),(0,t.jsxs)(i.tbody,{children:[(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"Writer"}),(0,t.jsx)(i.td,{children:"Word"}),(0,t.jsx)(i.td,{children:"Pages"})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"Calc"}),(0,t.jsx)(i.td,{children:"Excel"}),(0,t.jsx)(i.td,{children:"Numbers"})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"Impress"}),(0,t.jsx)(i.td,{children:"PowerPoint"}),(0,t.jsx)(i.td,{children:"Keynote"})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"Draw"}),(0,t.jsx)(i.td,{children:"Visio"}),(0,t.jsx)(i.td,{})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"Math"}),(0,t.jsx)(i.td,{}),(0,t.jsx)(i.td,{})]})]})]}),"\n",(0,t.jsx)(i.h3,{id:"calc",children:"Calc"}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"LibreOffice Calc Screenshot",src:s(85353).Z+"",width:"1068",height:"607"})}),"\n",(0,t.jsxs)(i.p,{children:["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,t.jsx)("sup",{children:"TM"})," Office compatible document formats such as (but not limited to): ",(0,t.jsx)(i.code,{children:"xls"}),", ",(0,t.jsx)(i.code,{children:"xlsx"}),", and ",(0,t.jsx)(i.code,{children:"ods"}),"."]}),"\n",(0,t.jsx)(i.h3,{id:"draw",children:"Draw"}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"LibreOffice Draw Screenshot",src:s(91955).Z+"",width:"1068",height:"637"})}),"\n",(0,t.jsxs)(i.p,{children:["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,t.jsx)(i.code,{children:"libreoffice-draw"}),"."]}),"\n",(0,t.jsx)(i.h3,{id:"impress",children:"Impress"}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"LibreOffice Impress Screenshot",src:s(8017).Z+"",width:"1068",height:"605"})}),"\n",(0,t.jsxs)(i.p,{children:["Impress is a presentation viewer and editor. You can view, create, edit, and export presentations in common open formats or Microsoft",(0,t.jsx)("sup",{children:"TM"})," Office compatible document formats such as (but not limited to): ",(0,t.jsx)(i.code,{children:"ppt"}),", ",(0,t.jsx)(i.code,{children:"pptx"}),", and ",(0,t.jsx)(i.code,{children:"odp"}),"."]}),"\n",(0,t.jsx)(i.h3,{id:"math",children:"Math"}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"LibreOffice Math Screenshot",src:s(56243).Z+"",width:"1068",height:"598"})}),"\n",(0,t.jsxs)(i.p,{children:["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,t.jsx)(i.code,{children:"libreoffice-math"}),"."]}),"\n",(0,t.jsx)(i.h3,{id:"writer",children:"Writer"}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"LibreOffice Writer Screenshot",src:s(51304).Z+"",width:"1068",height:"748"})}),"\n",(0,t.jsxs)(i.p,{children:["Writer is a document editor. You can view, create, edit, and export documents in common open formats or Microsoft",(0,t.jsx)("sup",{children:"TM"})," Office compatible document formats such as (but not limited to): ",(0,t.jsx)(i.code,{children:"doc"}),", ",(0,t.jsx)(i.code,{children:"docx"}),", and ",(0,t.jsx)(i.code,{children:"odt"}),"."]}),"\n",(0,t.jsx)(i.h3,{id:"spell-checking",children:"Spell-checking"}),"\n",(0,t.jsxs)(i.p,{children:["LibreOffice Writer users may want to install the package ",(0,t.jsx)(i.code,{children:"libreoffice-common-dictionaries"})," from Software Center to automatically enable spell-checking support."]}),"\n",(0,t.jsx)(i.h4,{id:"finnish",children:"Finnish"}),"\n",(0,t.jsxs)(i.p,{children:["Finnish language support is provided by installing ",(0,t.jsx)(i.code,{children:"libreoffice-voikko"}),". After installation of this package, there is further configuration required to properly leverage the Voikko spell-checking and Finnish dictionary support."]}),"\n",(0,t.jsxs)(i.ol,{children:["\n",(0,t.jsx)(i.li,{children:"Open up LibreOffice Writer"}),"\n",(0,t.jsxs)(i.li,{children:["In the menubar, go to ",(0,t.jsx)(i.code,{children:"Tools"})," then ",(0,t.jsx)(i.code,{children:"Options"}),". This will open up the Options dialog."]}),"\n",(0,t.jsx)(i.li,{children:"Go to the Language Settings, listed on the left of Options."}),"\n",(0,t.jsx)(i.li,{children:'Under Language Settings, click Writing Aids and ensure the "Spellchecker (Voikko)", "Grammar checker (Voikko)", and "Hyphenator (Voikko)" are under the "Available language modules" section.'}),"\n",(0,t.jsx)(i.li,{children:'Under Language Settings, click Voikko and ensure "standard: suomi (perussanasto)" is selected under the "Vocabulary" section.'}),"\n"]}),"\n",(0,t.jsx)(i.h2,{id:"music",children:"Music"}),"\n",(0,t.jsxs)(i.table,{children:[(0,t.jsx)(i.thead,{children:(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.th,{children:"Desktop"}),(0,t.jsx)(i.th,{children:"Application"})]})}),(0,t.jsxs)(i.tbody,{children:[(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"Budgie"}),(0,t.jsx)(i.td,{children:"Rhythmbox"})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"GNOME"}),(0,t.jsx)(i.td,{children:"Rhythmbox"})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"Plasma"}),(0,t.jsx)(i.td,{children:"Elisa"})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"XFCE"}),(0,t.jsx)(i.td,{children:"Rhythmbox"})]})]})]}),"\n",(0,t.jsx)(i.h3,{id:"rhythmbox",children:"Rhythmbox"}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"Rhythmbox Screenshot",src:s(48392).Z+"",width:"789",height:"606"})}),"\n",(0,t.jsx)(i.h3,{id:"elisa",children:"Elisa"}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"Elisa Screenshot",src:s(92304).Z+"",width:"1020",height:"720"})}),"\n",(0,t.jsx)(i.h2,{id:"video",children:"Video"}),"\n",(0,t.jsxs)(i.table,{children:[(0,t.jsx)(i.thead,{children:(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.th,{children:"Desktop"}),(0,t.jsx)(i.th,{children:"Application"})]})}),(0,t.jsxs)(i.tbody,{children:[(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"Budgie"}),(0,t.jsx)(i.td,{children:"Celluloid (formerly GNOME MPV)"})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"GNOME"}),(0,t.jsx)(i.td,{children:"Celluloid (formerly GNOME MPV)"})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"Plasma"}),(0,t.jsx)(i.td,{children:"Haruna"})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"XFCE"}),(0,t.jsx)(i.td,{children:"Parole"})]})]})]}),"\n",(0,t.jsx)(i.h3,{id:"celluloid",children:"Celluloid"}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"Celluloid Screenshot",src:s(18646).Z+"",width:"651",height:"491"})}),"\n",(0,t.jsx)(i.h3,{id:"haruna",children:"Haruna"}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"Haruna Screenshot",src:s(13289).Z+"",width:"1190",height:"749"})}),"\n",(0,t.jsx)(i.h3,{id:"parole",children:"Parole"}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"Parole Screenshot",src:s(22407).Z+"",width:"764",height:"450"})})]})}function o(e={}){const{wrapper:i}={...(0,c.a)(),...e.components};return i?(0,t.jsx)(i,{...e,children:(0,t.jsx)(a,{...e})}):a(e)}},18646:(e,i,s)=>{s.d(i,{Z:()=>t});const t="data:image/webp;base64,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"},3638:(e,i,s)=>{s.d(i,{Z:()=>t});const t=s.p+"assets/images/dolphin-06132e0261dad073f7f27bbee6bcbfba.jpg"},92304:(e,i,s)=>{s.d(i,{Z:()=>t});const t=s.p+"assets/images/elisa-63e84725c74e3606d527b80a49234bdf.jpg"},34133:(e,i,s)=>{s.d(i,{Z:()=>t});const t=s.p+"assets/images/firefox-0510dce504768afbd216c0fd00abe580.jpg"},13289:(e,i,s)=>{s.d(i,{Z:()=>t});const t=s.p+"assets/images/haruna-aee9cd480cd936456de187af2cb0ecfb.jpg"},85353:(e,i,s)=>{s.d(i,{Z:()=>t});const t=s.p+"assets/images/libreoffice-calc-d000f05dad58cf8e0877111b52108ecb.jpg"},91955:(e,i,s)=>{s.d(i,{Z:()=>t});const t=s.p+"assets/images/libreoffice-draw-46b341512a31da6fdf6505368197b96e.jpg"},8017:(e,i,s)=>{s.d(i,{Z:()=>t});const t=s.p+"assets/images/libreoffice-impress-8851e5e8a47c676d011846d7a919f95d.jpg"},56243:(e,i,s)=>{s.d(i,{Z:()=>t});const t=s.p+"assets/images/libreoffice-math-0fb2b8bfd4c3f8736d107cb81b546a13.jpg"},51304:(e,i,s)=>{s.d(i,{Z:()=>t});const t=s.p+"assets/images/libreoffice-writer-aeca166c3f0379a027c3d34f7d2c5d2c.jpg"},51055:(e,i,s)=>{s.d(i,{Z:()=>t});const t=s.p+"assets/images/nautilus-33ea265420bee017f2cdad24b84e912d.jpg"},80274:(e,i,s)=>{s.d(i,{Z:()=>t});const t=s.p+"assets/images/nemo-b369a1bfe8c00fd1e524e56bd0369e0c.jpg"},22407:(e,i,s)=>{s.d(i,{Z:()=>t});const t=s.p+"assets/images/parole-06df9f8c261a82dbfa968ee1482b4ec0.png"},48392:(e,i,s)=>{s.d(i,{Z:()=>t});const t=s.p+"assets/images/rhythmbox-eb6d0894497e065d9512c2c8454f25e6.jpg"},80649:(e,i,s)=>{s.d(i,{Z:()=>t});const t=s.p+"assets/images/thunderbird-95db449fb1a8d3241f691334bf0b2eb3.jpg"},11151:(e,i,s)=>{s.d(i,{Z:()=>r,a:()=>A});var t=s(67294);const c={},n=t.createContext(c);function A(e){const i=t.useContext(n);return t.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function r(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(c):e.components||c:A(e.components),t.createElement(n.Provider,{value:i},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/14488e92.942a9c62.js b/assets/js/14488e92.942a9c62.js
new file mode 100644
index 000000000..28f14705f
--- /dev/null
+++ b/assets/js/14488e92.942a9c62.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[4815],{83474:(e,i,s)=>{s.r(i),s.d(i,{assets:()=>l,contentTitle:()=>A,default:()=>o,frontMatter:()=>n,metadata:()=>r,toc:()=>d});var t=s(85893),c=s(11151);const n={title:"Default Applications",summary:"A guide to the default applications included with Solus."},A="Default applications",r={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,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/quick-start/default-applications.md",tags:[],version:"current",lastUpdatedAt:1714518504e3,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/"}},l={},d=[{value:"Web browser",id:"web-browser",level:2},{value:"Email client",id:"email-client",level:2},{value:"Managing your files",id:"managing-your-files",level:2},{value:"Nemo",id:"nemo",level:3},{value:"GNOME Files",id:"gnome-files",level:3},{value:"Dolphin",id:"dolphin",level:3},{value:"Office suite",id:"office-suite",level:2},{value:"Calc",id:"calc",level:3},{value:"Draw",id:"draw",level:3},{value:"Impress",id:"impress",level:3},{value:"Math",id:"math",level:3},{value:"Writer",id:"writer",level:3},{value:"Spell-checking",id:"spell-checking",level:3},{value:"Finnish",id:"finnish",level:4},{value:"Music",id:"music",level:2},{value:"Rhythmbox",id:"rhythmbox",level:3},{value:"Elisa",id:"elisa",level:3},{value:"Video",id:"video",level:2},{value:"Celluloid",id:"celluloid",level:3},{value:"Haruna",id:"haruna",level:3},{value:"Parole",id:"parole",level:3}];function a(e){const i={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",img:"img",li:"li",ol:"ol",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,c.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(i.h1,{id:"default-applications",children:"Default applications"}),"\n",(0,t.jsx)(i.p,{children:"Each version of Solus comes with a pre-installed collection of desktop applications that can help you perform common tasks."}),"\n",(0,t.jsx)(i.h2,{id:"web-browser",children:"Web browser"}),"\n",(0,t.jsxs)(i.p,{children:["Solus comes pre-installed with Firefox, a secure and trustworthy web browser provided by the non-profit organization ",(0,t.jsx)(i.a,{href:"https://www.mozilla.org/",children:"Mozilla"}),"."]}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"Firefox Screenshot",src:s(34133).Z+"",width:"1920",height:"1046"})}),"\n",(0,t.jsx)(i.h2,{id:"email-client",children:"Email client"}),"\n",(0,t.jsxs)(i.p,{children:["Solus comes pre-installed with the powerful ",(0,t.jsx)(i.a,{href:"https://www.thunderbird.net/",children:"Thunderbird"})," email, newsgroup, and feeds client."]}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"Thunderbird Screenshot",src:s(80649).Z+"",width:"982",height:"822"})}),"\n",(0,t.jsx)(i.h2,{id:"managing-your-files",children:"Managing your files"}),"\n",(0,t.jsx)(i.p,{children:"Each Linux desktop environment has its own graphical application for managing files:"}),"\n",(0,t.jsxs)(i.table,{children:[(0,t.jsx)(i.thead,{children:(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.th,{children:"Desktop"}),(0,t.jsx)(i.th,{children:"Application"})]})}),(0,t.jsxs)(i.tbody,{children:[(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"Budgie"}),(0,t.jsx)(i.td,{children:"Nemo"})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"GNOME"}),(0,t.jsx)(i.td,{children:"GNOME Files (formerly Nautilus)"})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"Plasma"}),(0,t.jsx)(i.td,{children:"Dolphin"})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"XFCE"}),(0,t.jsx)(i.td,{children:"Nemo"})]})]})]}),"\n",(0,t.jsx)(i.h3,{id:"nemo",children:"Nemo"}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"Nemo Screenshot",src:s(80274).Z+"",width:"800",height:"586"})}),"\n",(0,t.jsx)(i.h3,{id:"gnome-files",children:"GNOME Files"}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"GNOME Files Screenshot",src:s(51055).Z+"",width:"886",height:"548"})}),"\n",(0,t.jsx)(i.h3,{id:"dolphin",children:"Dolphin"}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"Dolphin Screenshot",src:s(3638).Z+"",width:"1022",height:"721"})}),"\n",(0,t.jsx)(i.h2,{id:"office-suite",children:"Office suite"}),"\n",(0,t.jsxs)(i.p,{children:["Solus comes pre-installed with ",(0,t.jsx)(i.a,{href:"https://www.libreoffice.org",children:"LibreOffice"}),", an office suite that is capable of replacing Microsoft",(0,t.jsx)("sup",{children:"TM"})," Office for the most common tasks."]}),"\n",(0,t.jsx)(i.p,{children:"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."}),"\n",(0,t.jsxs)(i.table,{children:[(0,t.jsx)(i.thead,{children:(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.th,{children:"LibreOffice"}),(0,t.jsx)(i.th,{children:"Microsoft Office Equivalent"}),(0,t.jsx)(i.th,{children:"Apple Equivalent"})]})}),(0,t.jsxs)(i.tbody,{children:[(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"Writer"}),(0,t.jsx)(i.td,{children:"Word"}),(0,t.jsx)(i.td,{children:"Pages"})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"Calc"}),(0,t.jsx)(i.td,{children:"Excel"}),(0,t.jsx)(i.td,{children:"Numbers"})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"Impress"}),(0,t.jsx)(i.td,{children:"PowerPoint"}),(0,t.jsx)(i.td,{children:"Keynote"})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"Draw"}),(0,t.jsx)(i.td,{children:"Visio"}),(0,t.jsx)(i.td,{})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"Math"}),(0,t.jsx)(i.td,{}),(0,t.jsx)(i.td,{})]})]})]}),"\n",(0,t.jsx)(i.h3,{id:"calc",children:"Calc"}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"LibreOffice Calc Screenshot",src:s(85353).Z+"",width:"1068",height:"607"})}),"\n",(0,t.jsxs)(i.p,{children:["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,t.jsx)("sup",{children:"TM"})," Office compatible document formats such as (but not limited to): ",(0,t.jsx)(i.code,{children:"xls"}),", ",(0,t.jsx)(i.code,{children:"xlsx"}),", and ",(0,t.jsx)(i.code,{children:"ods"}),"."]}),"\n",(0,t.jsx)(i.h3,{id:"draw",children:"Draw"}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"LibreOffice Draw Screenshot",src:s(91955).Z+"",width:"1068",height:"637"})}),"\n",(0,t.jsxs)(i.p,{children:["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,t.jsx)(i.code,{children:"libreoffice-draw"}),"."]}),"\n",(0,t.jsx)(i.h3,{id:"impress",children:"Impress"}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"LibreOffice Impress Screenshot",src:s(8017).Z+"",width:"1068",height:"605"})}),"\n",(0,t.jsxs)(i.p,{children:["Impress is a presentation viewer and editor. You can view, create, edit, and export presentations in common open formats or Microsoft",(0,t.jsx)("sup",{children:"TM"})," Office compatible document formats such as (but not limited to): ",(0,t.jsx)(i.code,{children:"ppt"}),", ",(0,t.jsx)(i.code,{children:"pptx"}),", and ",(0,t.jsx)(i.code,{children:"odp"}),"."]}),"\n",(0,t.jsx)(i.h3,{id:"math",children:"Math"}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"LibreOffice Math Screenshot",src:s(56243).Z+"",width:"1068",height:"598"})}),"\n",(0,t.jsxs)(i.p,{children:["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,t.jsx)(i.code,{children:"libreoffice-math"}),"."]}),"\n",(0,t.jsx)(i.h3,{id:"writer",children:"Writer"}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"LibreOffice Writer Screenshot",src:s(51304).Z+"",width:"1068",height:"748"})}),"\n",(0,t.jsxs)(i.p,{children:["Writer is a document editor. You can view, create, edit, and export documents in common open formats or Microsoft",(0,t.jsx)("sup",{children:"TM"})," Office compatible document formats such as (but not limited to): ",(0,t.jsx)(i.code,{children:"doc"}),", ",(0,t.jsx)(i.code,{children:"docx"}),", and ",(0,t.jsx)(i.code,{children:"odt"}),"."]}),"\n",(0,t.jsx)(i.h3,{id:"spell-checking",children:"Spell-checking"}),"\n",(0,t.jsxs)(i.p,{children:["LibreOffice Writer users may want to install the package ",(0,t.jsx)(i.code,{children:"libreoffice-common-dictionaries"})," from Software Center to automatically enable spell-checking support."]}),"\n",(0,t.jsx)(i.h4,{id:"finnish",children:"Finnish"}),"\n",(0,t.jsxs)(i.p,{children:["Finnish language support is provided by installing ",(0,t.jsx)(i.code,{children:"libreoffice-voikko"}),". After installation of this package, there is further configuration required to properly leverage the Voikko spell-checking and Finnish dictionary support."]}),"\n",(0,t.jsxs)(i.ol,{children:["\n",(0,t.jsx)(i.li,{children:"Open up LibreOffice Writer"}),"\n",(0,t.jsxs)(i.li,{children:["In the menubar, go to ",(0,t.jsx)(i.code,{children:"Tools"})," then ",(0,t.jsx)(i.code,{children:"Options"}),". This will open up the Options dialog."]}),"\n",(0,t.jsx)(i.li,{children:"Go to the Language Settings, listed on the left of Options."}),"\n",(0,t.jsx)(i.li,{children:'Under Language Settings, click Writing Aids and ensure the "Spellchecker (Voikko)", "Grammar checker (Voikko)", and "Hyphenator (Voikko)" are under the "Available language modules" section.'}),"\n",(0,t.jsx)(i.li,{children:'Under Language Settings, click Voikko and ensure "standard: suomi (perussanasto)" is selected under the "Vocabulary" section.'}),"\n"]}),"\n",(0,t.jsx)(i.h2,{id:"music",children:"Music"}),"\n",(0,t.jsxs)(i.table,{children:[(0,t.jsx)(i.thead,{children:(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.th,{children:"Desktop"}),(0,t.jsx)(i.th,{children:"Application"})]})}),(0,t.jsxs)(i.tbody,{children:[(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"Budgie"}),(0,t.jsx)(i.td,{children:"Rhythmbox"})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"GNOME"}),(0,t.jsx)(i.td,{children:"Rhythmbox"})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"Plasma"}),(0,t.jsx)(i.td,{children:"Elisa"})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"XFCE"}),(0,t.jsx)(i.td,{children:"Rhythmbox"})]})]})]}),"\n",(0,t.jsx)(i.h3,{id:"rhythmbox",children:"Rhythmbox"}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"Rhythmbox Screenshot",src:s(48392).Z+"",width:"789",height:"606"})}),"\n",(0,t.jsx)(i.h3,{id:"elisa",children:"Elisa"}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"Elisa Screenshot",src:s(92304).Z+"",width:"1020",height:"720"})}),"\n",(0,t.jsx)(i.h2,{id:"video",children:"Video"}),"\n",(0,t.jsxs)(i.table,{children:[(0,t.jsx)(i.thead,{children:(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.th,{children:"Desktop"}),(0,t.jsx)(i.th,{children:"Application"})]})}),(0,t.jsxs)(i.tbody,{children:[(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"Budgie"}),(0,t.jsx)(i.td,{children:"Celluloid (formerly GNOME MPV)"})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"GNOME"}),(0,t.jsx)(i.td,{children:"Celluloid (formerly GNOME MPV)"})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"Plasma"}),(0,t.jsx)(i.td,{children:"Haruna"})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:"XFCE"}),(0,t.jsx)(i.td,{children:"Parole"})]})]})]}),"\n",(0,t.jsx)(i.h3,{id:"celluloid",children:"Celluloid"}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"Celluloid Screenshot",src:s(18646).Z+"",width:"651",height:"491"})}),"\n",(0,t.jsx)(i.h3,{id:"haruna",children:"Haruna"}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"Haruna Screenshot",src:s(13289).Z+"",width:"1190",height:"749"})}),"\n",(0,t.jsx)(i.h3,{id:"parole",children:"Parole"}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"Parole Screenshot",src:s(22407).Z+"",width:"764",height:"450"})})]})}function o(e={}){const{wrapper:i}={...(0,c.a)(),...e.components};return i?(0,t.jsx)(i,{...e,children:(0,t.jsx)(a,{...e})}):a(e)}},18646:(e,i,s)=>{s.d(i,{Z:()=>t});const t="data:image/webp;base64,UklGRmwRAABXRUJQVlA4WAoAAAAwAAAAigIA6gEASUNDUKACAAAAAAKgbGNtcwRAAABtbnRyUkdCIFhZWiAH5wAHAAgAFgA2ACZhY3NwQVBQTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9tYAAQAAAADTLWxjbXMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1kZXNjAAABIAAAAEBjcHJ0AAABYAAAADZ3dHB0AAABmAAAABRjaGFkAAABrAAAACxyWFlaAAAB2AAAABRiWFlaAAAB7AAAABRnWFlaAAACAAAAABRyVFJDAAACFAAAACBnVFJDAAACFAAAACBiVFJDAAACFAAAACBjaHJtAAACNAAAACRkbW5kAAACWAAAACRkbWRkAAACfAAAACRtbHVjAAAAAAAAAAEAAAAMZW5VUwAAACQAAAAcAEcASQBNAFAAIABiAHUAaQBsAHQALQBpAG4AIABzAFIARwBCbWx1YwAAAAAAAAABAAAADGVuVVMAAAAaAAAAHABQAHUAYgBsAGkAYwAgAEQAbwBtAGEAaQBuAABYWVogAAAAAAAA9tYAAQAAAADTLXNmMzIAAAAAAAEMQgAABd7///MlAAAHkwAA/ZD///uh///9ogAAA9wAAMBuWFlaIAAAAAAAAG+gAAA49QAAA5BYWVogAAAAAAAAJJ8AAA+EAAC2xFhZWiAAAAAAAABilwAAt4cAABjZcGFyYQAAAAAAAwAAAAJmZgAA8qcAAA1ZAAAT0AAACltjaHJtAAAAAAADAAAAAKPXAABUfAAATM0AAJmaAAAmZwAAD1xtbHVjAAAAAAAAAAEAAAAMZW5VUwAAAAgAAAAcAEcASQBNAFBtbHVjAAAAAAAAAAEAAAAMZW5VUwAAAAgAAAAcAHMAUgBHAEJBTFBI2gIAAB2ga9vase1Z6/oR27Zt9n8XG+dgVl8X4wxc/eOvvjOInZRubfN97x0n9R1cETEBWyKFilIixV+WOTT85UHIICEJgwhGggiRvzOTiH8NiBCCxID8ViRiYvxLs2qMhkgIvxWMKcAMFDPJGBLKAMMYxFFjTTBx7dq1yDwbFotFNLisUdFRGByu2+yMSw7bhnm2+OqNjc/+8FMqGEYZTYW45RnXMdnWtkdfuf99z34bcZiIEVizxS07MOPuc9tnd3y3BGIUiG5+D7PueRtu+D4REGNqs1uZd8/ecPsPw5gKNWrNGTtMPJz32bPLUQOKUa67jqn3tvt+yiiMsuY05t69939+SaJD11w0+XD5pmVSIqkjZp+jXxsSibrV7LPtN0kUoJh9y8FvBacfKhAEM/9ooIbMwAIRTOYfNEzGZhIy/FuxmYbkv8/NRDQfO/+YP2r/t//b/+3/9n/7v/3f/m//t//b/+3/9n/7v/3f/m//t//b/+3/9n/7v/3f/m//t//b/+3/9n/7v/3f/m//t//b/+3/9n/7v/3f/m//t//b/+3/9n/7v/3f/m//t//b/+3/9n/7v/3f/m//t//b/+3/9n/7v/3f/m//t//b/+3/9n+HMk4/8Y9m4TgR/W4+3mXy+WhngfxmvHX45PP6IfU7wbx60uTz8gkGg+SnF86efJ46Zp0EQvLuq+dMPasn7KlIiPy48eqp59Hj1hNJkIx3HlyZeFZO2askRBL5/vHXr5l2Hjj86M2JEgcQf1h9bWXSWTni2M0iUIkkku+fePCqcyac1cdOPWZziZLgUoL88O6mV8846bBdJpqP3nj52RNO3HMzgmRNQmpAIssf33v51bc/qmlm7HLwCSfusX4NUahhICYGYCxGHNNMxVpbAEYjDAyQCMmapKaZoUuFKGAYFSCRYXAg82yoYIooYCIERjEwAE4yATAUo0AIDITUomBgIDjBBMFQMNYOIRRWUDggxAsAALCIAJ0BKosC6wE+MRiLRCIhoRCohKAgAwS0t3C7HwFbrcc/OH94/Dzwo/sn40fuZ25vd31w/cbSM/hn1Z+1/kB+T3O7wAvUf9Z/Iv+uftV6o3dhTAeoR6ifJ/75/Y/2d/sH7gexj+d/kBzpv5f/Zv49+w/76/Rn97/sflxd8f1X3AP4X/Mv8H/PP7X/0v8j8P/9D/lv3N/uHtx+b/9V/j/7n/0PoJ/l/8u/xH9s/x3/U/yP///7X3E+tP9nPYf/Uv/5gUfN7FwnUqS8UlHeFLLAM2/t9hZ1lEqodvsLOsolVDt9hZ1lEqodvVVaW9o0ikTiEf/fOaWMaovNJCB1DRC/PuC9wXgEkwsAPuXnLA6pQyANRtwDo9VgCHYETeUE/a4q4SHIGhQcYP2ywWGKLDhmxiBsjDyXyQYNgKaT6V7Z/OJrevVLUEGO/NjTkYqyoPIUBwLVM4wqxOf6ZFEOLO/PjX0Oh0UUoWwVZZsEZSmgIUpkiqGONTQ29OJJklSFd/sQKqVbHLpuQEfPzmNqBFGx/rm8PRSvFo7wpZYBm39vsLOsolVDszhKFh0qodvsLOsolPjszhKFlElEQIZgMP7izvz7gvcF7gvcF7gvcF7gvgydNWF7gvcF7gvcF7gvcF7gvcGDaQpqwvcF7gvcF7gvcF7gvcF7g8vUFNWF7gvcF7gvcF7gvcF7gvccFjvz7gvcF7gvcF7gvcF7gvcF8GTpqwvcF7gvcF7gvcF7gvcF7gwbSFNWF7gvcF7gvcF7gvcF7gvcHl6gpqwvcF7gvcF7gvcF7gvcF7jgsd+fcF7gvcF7gvcF7gvcF7gvgydNWF7gvcF7gvcF7gvcF7gvcGDaQpqwvcF7gvcF7gvcF7gvcF7g8vUFNWF7gvcF7gvcF7gvcF7gvccFjvz7gvcF7gvcF7gvcF7gvcF8GTpqwvcF7gvcF7gvcF7gvcF7gwbSFNWF7gvcF7gvcF7gvcF7gvcHl6gpqwvcF7gvcF7gvcF7gvcF7jgsd+fcF7gvcF7gvcF7gvcF7gvgydNWF7gvcF7gvcF7gvcF7gvcGDaQpqwvcF7gvcF7gvcF7gvcF7g8vUFNWF7gvcF7gvcF7gvcF7gvccFjvz7gvcF7gvcF7gvcF7gvcF8GTpqwvcF7gvcF7gvcF7gvcF7gwbSFNWF7gvcF7gvcF7gvcF7gvcHJOnR50qh2+ws6yiVUO32FnWUSqh2+ws6yiVUO32FnWUSqh2+ws6nDxGfyRFT6kyF+t5rEyAdGljMuQqtTHXnQYxkVUF7gvcF7gvcF7fgYGB+OCUwne50RSCVEWIimzAvNAOCQTkFTwWbvH1+7uq1K7/qCujQIrJAMiOuvTF4TOAqunuC9wXuC9wXuC8DjnGOIYAMIOcg/gCmIE+ExBTmiE3Ck6I0tMAuTpVQ7fYWdYdKqHb7CzrKJVQ7fYWdZRKqHb7Czc6JVQSs31WoeqESaQgAA/vjxdPwNFhz7UHURDuIzPoZ5aVc/PGKf+VlXIPzSL3V5VMC/P/PDuAU1ovMeZ4ajzlnmVgtkQmDX1wXR9QsKPRxLmIYpFftgezVV8a4L7WoVsevEiMeY1uRThktijakQZh/U18HZ9XUiqE4A7C8nnumBh+lqgQCPblmIVuABhtIXtoO472tmXsHq8pRFar85EzsFuj4pP11ZKxRrA55bliwzrJmIV46e86XJDN3EZ8JR34gmuvkPBBaOTp1+XS0N00fVURo0iV8zndAAvu5YHf9k6lyBYBvQmXaXFvJrIrv39kvjtpz2ANKwqnpW6eeXtr01UaHfBmDPM/7SvmZZk49qDHZGpwrE/DsgxNunQpct/X03jTrjFU5SwuAcOj2ef5PYf3c+aJ+ATrWFnPg4nuYcySQRwrjIxc1/Oyc29jrMdiRoWBDtlREtYGbHT1n6pNvuZZKXLaSOlKcFLIM2D1/KXQnkjq6h82g1cO6EwAzxOEEPS02l631KGHDC+b0hxDFnvNX09EAZxo7JLYVacDqpcQfnOdHlLGz2MsVDvO32Hu6QOwVBzeEyRbrBDqRTEu3/oXc0vU0M3XJWQp0qHOmfiVZI/svW5O2Cny4t3f4gAQ9W+LMSZVJNvNXOKPEx1+RqPge/UbIqmoA1SEzOfsEVdnfXK2RkzQNFpJ0b+SovwdVhWh3Jp51WmgbrrDpVdkXn/OXj1cJnmaa0Tg60h3RT0HxL5h+TIaZh4aL2Xwi8zr8eA8dV2KwnuewouOtIxWEd7WxT3h+Eq5iCTDP3lByUF/trYGjkfp34CZx+Thlkp+Q4eGlksDPva4AT1NnzjY4wCAStWtk+GuWNUGYlwJ9y5NthKNKBmZNreIm8ORfMkzWYy+dhZfbW/N5GQbxtu23SiYYgamVQHYUiI/4l2UY/dU5Kt4trOTlSY+Zk3uck4bv49td3hMUvn+UOYc1K4rPDUBcGTyQ6iT5zX3RRl8kN80ETsLol7oyFq3RnlDVJ27OuwRhtv5Jwuw6uz/Ryg693fwcZgdklEOONsiYaCGxRc4O2GTExrKfXyoajcPAL///yGhgcfHmT3QKqWw8dWcVX3oMle39ddB8qkJHo3efRjNsJ93YikqPfv24GAmYuUCKETVLf0p14oHf+LJr5P0Cmo3pJaORUA7t5QubB+3MczXp0M/KrtTw/e209rqq+j9SRzMqmrbYT0MO0keS4EpYuEPApYb0Ztls/kmoPhIVJ0LGnn+NEtw1xVioFv+OgHHs8lNy4koFNt52ozqh6CNMHdwk6JGZnobr/qQlUACH/XFMCUrAwrBUjxIuALZi7EaQ9QKcZo8KgOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcEBC93uQHSq9JAEmG2WLGDW5SkH8MF0qDpJSwTEu3PKEyT+JKEILBtUKyTr8PMzQUExeOhp2+B9YjLJuVGJ2lwbcUJrvyeZg1Xf2XWbXrr09Bu+TnV6CYols/jwpc7nnKEcnmiVzEJ2OMqnvMDvBO0ABu/rhoBOIrdw9mW0VjlsmVycN55RVqnFd/f+8PEeZfWNqKuCAY5oaxfH/HwGezq5otTsKvpV0pX9oAMMs5VugFtRQb8YqrcvH2PfQABqmasYUNi4h/76sKn6ggeix2sKB/NcDVjz1d5/nMtNsw2jSHEEdDEVzUe0nWKeqsbjIhBgMog7SQ+ZFLsW8P844tvlEmra9opy2hqHrxnvn0hJBISK9loJ5L58jiNWFPRbof/D0lN4cEth/oi+f4VE2LpDwYFgU/X9CT16Hryx+z+0dWq2uyimSMSVd0BuaNl1W/S0I1RQsmPXOrLYDWEMUx40TxcpweyNWrPKyeMGb0im4rSXOatod/11B3WqfJmK9e3AIWq5yCsYtg1pYYAU5D9EvZlxHglBCT4DfvkJHMTK85g7Z3vv7enT7LzbIikzccL4isy0/Vie039AKmcj0+41bZPAAI3FuumP3M7/IH0yzD7ArLG2WtlpTFmKGy9dK2AuIAxXVYB/yZb/jfNHwNYRtsTt85Qk7Z0qPMKr9NtMq8KRWMm/7AHFkTqyZK3mOdYI62rRDqtlGhwHq+eIlFLVJJAQ5SgY8SyA36Xf01l7vX+Zr6O2i5wGIL2fnaCA140clcgWo36zYw8JZJNiOwiHxGuCZ+b3y9bLjXZ4CvZjgR0ZMmI8qh3ExDRaVglJh+q0tJ1m7iLpSnIT1n3JHvhht7y6wdfeoWQfHYGwr2v5NPrZLWTFWq5wr0LnhFFfrtDNZ04ToZauMLEN0Rn5cgen3biUZ7D4fqXcXEKOub5T+xBxxWUDvncTHEC7cAUfOHOW8NR0eR/O2PvjqYDjewLWgfssGdVoJ2xeefcPf05Z9H7f7mA9PG+pQ+6TbgNvvKVf2n3BCF+/hSyKGlbIsfxAf/2mjOlADCBLbHad/AG3l4/9CqwZtGwW98iRx4lSKVi2xJQuwNi9NkWEu9RYxEcnJUcC9QjaRj0aS7GqN9jhCWYf33rf6dFu9gCtlVQob8V4MxPASGLkMBSsTM54AAAA=="},3638:(e,i,s)=>{s.d(i,{Z:()=>t});const t=s.p+"assets/images/dolphin-06132e0261dad073f7f27bbee6bcbfba.jpg"},92304:(e,i,s)=>{s.d(i,{Z:()=>t});const t=s.p+"assets/images/elisa-63e84725c74e3606d527b80a49234bdf.jpg"},34133:(e,i,s)=>{s.d(i,{Z:()=>t});const t=s.p+"assets/images/firefox-0510dce504768afbd216c0fd00abe580.jpg"},13289:(e,i,s)=>{s.d(i,{Z:()=>t});const t=s.p+"assets/images/haruna-aee9cd480cd936456de187af2cb0ecfb.jpg"},85353:(e,i,s)=>{s.d(i,{Z:()=>t});const t=s.p+"assets/images/libreoffice-calc-d000f05dad58cf8e0877111b52108ecb.jpg"},91955:(e,i,s)=>{s.d(i,{Z:()=>t});const t=s.p+"assets/images/libreoffice-draw-46b341512a31da6fdf6505368197b96e.jpg"},8017:(e,i,s)=>{s.d(i,{Z:()=>t});const t=s.p+"assets/images/libreoffice-impress-8851e5e8a47c676d011846d7a919f95d.jpg"},56243:(e,i,s)=>{s.d(i,{Z:()=>t});const t=s.p+"assets/images/libreoffice-math-0fb2b8bfd4c3f8736d107cb81b546a13.jpg"},51304:(e,i,s)=>{s.d(i,{Z:()=>t});const t=s.p+"assets/images/libreoffice-writer-aeca166c3f0379a027c3d34f7d2c5d2c.jpg"},51055:(e,i,s)=>{s.d(i,{Z:()=>t});const t=s.p+"assets/images/nautilus-33ea265420bee017f2cdad24b84e912d.jpg"},80274:(e,i,s)=>{s.d(i,{Z:()=>t});const t=s.p+"assets/images/nemo-b369a1bfe8c00fd1e524e56bd0369e0c.jpg"},22407:(e,i,s)=>{s.d(i,{Z:()=>t});const t=s.p+"assets/images/parole-06df9f8c261a82dbfa968ee1482b4ec0.png"},48392:(e,i,s)=>{s.d(i,{Z:()=>t});const t=s.p+"assets/images/rhythmbox-eb6d0894497e065d9512c2c8454f25e6.jpg"},80649:(e,i,s)=>{s.d(i,{Z:()=>t});const t=s.p+"assets/images/thunderbird-95db449fb1a8d3241f691334bf0b2eb3.jpg"},11151:(e,i,s)=>{s.d(i,{Z:()=>r,a:()=>A});var t=s(67294);const c={},n=t.createContext(c);function A(e){const i=t.useContext(n);return t.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function r(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(c):e.components||c:A(e.components),t.createElement(n.Provider,{value:i},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/1a698c37.4c88934c.js b/assets/js/1a698c37.1a7a29a6.js
similarity index 86%
rename from assets/js/1a698c37.4c88934c.js
rename to assets/js/1a698c37.1a7a29a6.js
index 9891a03be..5b80343b1 100644
--- a/assets/js/1a698c37.4c88934c.js
+++ b/assets/js/1a698c37.1a7a29a6.js
@@ -1 +1 @@
-"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[6126],{40619:(e,i,s)=>{s.r(i),s.d(i,{assets:()=>y,contentTitle:()=>I,default:()=>R,frontMatter:()=>E,metadata:()=>N,toc:()=>M});var n=s(85893),r=s(11151),t=s(22430),d=(s(67294),s(86010)),o=s(55361),a=s(38208),c=s(63186),l=s(1787),u=s(2734),p=s(98396),m=s(51233),h=s(56863),x=s(78146),g=s(27400),f=s(94229),Z=s(39217),j=s(23466);const k=[{name:"Budgie",url:"budgie",urlConfig:"budgie/configuration",urlTips:"budgie/tips-and-tricks",description:(0,n.jsx)(o.Z,{id:"edition.budgie.description",children:"A feature-rich, luxurious desktop using the most modern technologies."})},{name:"Plasma",url:"plasma",urlConfig:"plasma/configuration",urlTips:"plasma/tips-and-tricks",description:(0,n.jsx)(o.Z,{id:"edition.plasma.description",children:"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:(0,n.jsx)(o.Z,{id:"edition.gnome.description",children:"A simple, streamlined desktop for more modern hardware."})},{name:"MATE",url:"mate",urlConfig:"mate/configuration",urlTips:"mate/tips-and-tricks",description:(0,n.jsx)(o.Z,{id:"edition.mate.description",children:"A traditional desktop for advanced users and older hardware."})},{name:"XFCE",url:"xfce",urlConfig:"xfce/configuration",urlTips:"xfce/tips-and-tricks",description:(0,n.jsx)(o.Z,{id:"edition.xfce.description",children:"A lightweight desktop that aims to be fast while still being friendly."})}],b=e=>{let{name:i,url:s,urlConfig:r,urlTips:t,description:k}=e;const b=(0,u.Z)(),A=(0,p.Z)(b.breakpoints.down("xl")),T=(0,j.Z)(`/img/${i}.jpg`);return(0,n.jsx)(g.Z,{xs:6,children:(0,n.jsxs)(m.Z,{className:(0,d.Z)("card"),height:1,children:[(0,n.jsx)(m.Z,{className:(0,d.Z)("card__image"),children:(0,n.jsx)(a.Z,{to:s,children:(0,n.jsx)(c.Z,{img:T,alt:(0,o.I)({message:"Screenshot of {name} edition",id:"edition.card.image",description:"Alt text for images of editions"})})})}),(0,n.jsxs)(m.Z,{className:"card__body",children:[(0,n.jsx)(l.Z,{as:"h3",children:(0,n.jsx)("a",{href:i,children:i})}),(0,n.jsx)("p",{children:k})]}),(0,n.jsx)(m.Z,{className:"card__footer",children:(0,n.jsxs)(h.Z,{"aria-label":"contained card button group",fullWidth:!0,sx:{borderRadius:"10px"},variant:"contained",children:[(0,n.jsx)(x.Z,{href:r,startIcon:A?void 0:(0,n.jsx)(f.Z,{}),sx:{borderRadius:"10px",paddingInline:2},children:(0,n.jsx)(o.Z,{id:"edition.card.configuration",children:"Configuration"})}),(0,n.jsx)(x.Z,{href:t,startIcon:A?void 0:(0,n.jsx)(Z.Z,{}),sx:{borderRadius:"10px",paddingInline:2},children:(0,n.jsx)(o.Z,{id:"edition.card.tipsntricks",children:"Tips & Tricks"})})]})})]})})},A=()=>(0,n.jsx)(g.Z,{container:!0,columns:{xs:6,sm:6,md:6,lg:12},spacing:2,children:k.map((e=>(0,n.jsx)(b,{...e},e.name)))});var T=s(96189),w=s(21265),C=s(98391);const _=(0,w.Z)({breakpoints:{values:{xs:0,sm:600,md:900,lg:1200,xl:1536,subfullhd:1800,fullhd:1920}},palette:{primary:{light:T.Z.A700,main:T.Z.A700,dark:T.Z.A100}}}),v=(0,C.Z)(_,{breakpoints:_.breakpoints.keys,factor:2}),E={},I="Editions",N={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,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/editions/index.mdx",tags:[],version:"current",lastUpdatedAt:171439918e4,frontMatter:{},sidebar:"userSidebar",previous:{title:"Testing an ISO",permalink:"/docs/user/contributing/testing-an-iso"},next:{title:"Budgie",permalink:"/docs/user/editions/budgie/"}},y={},M=[];function S(e){const i={h1:"h1",...(0,r.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(i.h1,{id:"editions",children:"Editions"}),"\n","\n",(0,n.jsx)(t.Z,{theme:v,children:(0,n.jsx)(A,{})})]})}function R(e={}){const{wrapper:i}={...(0,r.a)(),...e.components};return i?(0,n.jsx)(i,{...e,children:(0,n.jsx)(S,{...e})}):S(e)}}}]);
\ No newline at end of file
+"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[6126],{40619:(e,i,s)=>{s.r(i),s.d(i,{assets:()=>y,contentTitle:()=>I,default:()=>R,frontMatter:()=>E,metadata:()=>N,toc:()=>M});var n=s(85893),r=s(11151),t=s(22430),d=(s(67294),s(86010)),o=s(55361),a=s(38208),c=s(63186),l=s(1787),u=s(2734),p=s(98396),m=s(51233),h=s(56863),x=s(78146),g=s(27400),f=s(94229),Z=s(39217),j=s(23466);const k=[{name:"Budgie",url:"budgie",urlConfig:"budgie/configuration",urlTips:"budgie/tips-and-tricks",description:(0,n.jsx)(o.Z,{id:"edition.budgie.description",children:"A feature-rich, luxurious desktop using the most modern technologies."})},{name:"Plasma",url:"plasma",urlConfig:"plasma/configuration",urlTips:"plasma/tips-and-tricks",description:(0,n.jsx)(o.Z,{id:"edition.plasma.description",children:"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:(0,n.jsx)(o.Z,{id:"edition.gnome.description",children:"A simple, streamlined desktop for more modern hardware."})},{name:"MATE",url:"mate",urlConfig:"mate/configuration",urlTips:"mate/tips-and-tricks",description:(0,n.jsx)(o.Z,{id:"edition.mate.description",children:"A traditional desktop for advanced users and older hardware."})},{name:"XFCE",url:"xfce",urlConfig:"xfce/configuration",urlTips:"xfce/tips-and-tricks",description:(0,n.jsx)(o.Z,{id:"edition.xfce.description",children:"A lightweight desktop that aims to be fast while still being friendly."})}],b=e=>{let{name:i,url:s,urlConfig:r,urlTips:t,description:k}=e;const b=(0,u.Z)(),A=(0,p.Z)(b.breakpoints.down("xl")),T=(0,j.Z)(`/img/${i}.jpg`);return(0,n.jsx)(g.Z,{xs:6,children:(0,n.jsxs)(m.Z,{className:(0,d.Z)("card"),height:1,children:[(0,n.jsx)(m.Z,{className:(0,d.Z)("card__image"),children:(0,n.jsx)(a.Z,{to:s,children:(0,n.jsx)(c.Z,{img:T,alt:(0,o.I)({message:"Screenshot of {name} edition",id:"edition.card.image",description:"Alt text for images of editions"})})})}),(0,n.jsxs)(m.Z,{className:"card__body",children:[(0,n.jsx)(l.Z,{as:"h3",children:(0,n.jsx)("a",{href:i,children:i})}),(0,n.jsx)("p",{children:k})]}),(0,n.jsx)(m.Z,{className:"card__footer",children:(0,n.jsxs)(h.Z,{"aria-label":"contained card button group",fullWidth:!0,sx:{borderRadius:"10px"},variant:"contained",children:[(0,n.jsx)(x.Z,{href:r,startIcon:A?void 0:(0,n.jsx)(f.Z,{}),sx:{borderRadius:"10px",paddingInline:2},children:(0,n.jsx)(o.Z,{id:"edition.card.configuration",children:"Configuration"})}),(0,n.jsx)(x.Z,{href:t,startIcon:A?void 0:(0,n.jsx)(Z.Z,{}),sx:{borderRadius:"10px",paddingInline:2},children:(0,n.jsx)(o.Z,{id:"edition.card.tipsntricks",children:"Tips & Tricks"})})]})})]})})},A=()=>(0,n.jsx)(g.Z,{container:!0,columns:{xs:6,sm:6,md:6,lg:12},spacing:2,children:k.map((e=>(0,n.jsx)(b,{...e},e.name)))});var T=s(96189),w=s(21265),C=s(98391);const _=(0,w.Z)({breakpoints:{values:{xs:0,sm:600,md:900,lg:1200,xl:1536,subfullhd:1800,fullhd:1920}},palette:{primary:{light:T.Z.A700,main:T.Z.A700,dark:T.Z.A100}}}),v=(0,C.Z)(_,{breakpoints:_.breakpoints.keys,factor:2}),E={},I="Editions",N={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,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/editions/index.mdx",tags:[],version:"current",lastUpdatedAt:1714518504e3,frontMatter:{},sidebar:"userSidebar",previous:{title:"Testing an ISO",permalink:"/docs/user/contributing/testing-an-iso"},next:{title:"Budgie",permalink:"/docs/user/editions/budgie/"}},y={},M=[];function S(e){const i={h1:"h1",...(0,r.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(i.h1,{id:"editions",children:"Editions"}),"\n","\n",(0,n.jsx)(t.Z,{theme:v,children:(0,n.jsx)(A,{})})]})}function R(e={}){const{wrapper:i}={...(0,r.a)(),...e.components};return i?(0,n.jsx)(i,{...e,children:(0,n.jsx)(S,{...e})}):S(e)}}}]);
\ No newline at end of file
diff --git a/assets/js/1ae709a2.3d38d881.js b/assets/js/1ae709a2.3d38d881.js
new file mode 100644
index 000000000..71711813c
--- /dev/null
+++ b/assets/js/1ae709a2.3d38d881.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[355],{37718:(e,o,a)=>{a.r(o),a.d(o,{assets:()=>l,contentTitle:()=>r,default:()=>u,frontMatter:()=>n,metadata:()=>i,toc:()=>c});var t=a(85893),s=a(11151);const n={title:"History and Software Rollback",summary:"History and Software Rollback"},r="History and Software Rollback",i={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,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/package-management/history-and-rollback.md",tags:[],version:"current",lastUpdatedAt:1714518504e3,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"}},l={},c=[{value:"History",id:"history",level:2},{value:"Rollback",id:"rollback",level:2}];function d(e){const o={a:"a",admonition:"admonition",blockquote:"blockquote",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,s.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(o.h1,{id:"history-and-software-rollback",children:"History and Software Rollback"}),"\n",(0,t.jsxs)(o.p,{children:["Solus provides a history and rollback feature via its package manager, ",(0,t.jsx)(o.code,{children:"eopkg"}),". This feature allows you to see when your repository was last updated, actions such as installation, removal, and upgrading of software."]}),"\n",(0,t.jsx)(o.p,{children:"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."}),"\n",(0,t.jsx)(o.h2,{id:"history",children:"History"}),"\n",(0,t.jsxs)(o.p,{children:["You can see the history from ",(0,t.jsx)(o.code,{children:"eopkg"})," by using:"]}),"\n",(0,t.jsx)(o.pre,{children:(0,t.jsx)(o.code,{className:"language-bash",children:"eopkg history\n"})}),"\n",(0,t.jsx)(o.h2,{id:"rollback",children:"Rollback"}),"\n",(0,t.jsxs)(o.admonition,{type:"info",children:[(0,t.jsxs)(o.p,{children:["If you have a local repository set up, ",(0,t.jsx)(o.a,{href:"https://help.getsol.us/docs/packaging/advanced-config/local-repository#disabling-the-local-solbuild-repository-in-eopkg",children:"disable it"})," before doing rollbacks or you may get an error."]}),(0,t.jsxs)(o.blockquote,{children:["\n",(0,t.jsx)(o.p,{children:"Error parsing repository index information. Index file does not exist or is malformed."}),"\n"]})]}),"\n",(0,t.jsx)(o.p,{children:"To rollback your system, first use the above history command to check what the transaction / operation number was. Then, we use the following command:"}),"\n",(0,t.jsx)(o.pre,{children:(0,t.jsx)(o.code,{className:"language-bash",children:"sudo eopkg history -t number\n"})}),"\n",(0,t.jsxs)(o.p,{children:["The number, in this case, is the operation before the one you want to change. So if the number was ",(0,t.jsx)(o.code,{children:"100"}),", then you would use ",(0,t.jsx)(o.code,{children:"99"}),"."]})]})}function u(e={}){const{wrapper:o}={...(0,s.a)(),...e.components};return o?(0,t.jsx)(o,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},11151:(e,o,a)=>{a.d(o,{Z:()=>i,a:()=>r});var t=a(67294);const s={},n=t.createContext(s);function r(e){const o=t.useContext(n);return t.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function i(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),t.createElement(n.Provider,{value:o},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/1ae709a2.cb5c0542.js b/assets/js/1ae709a2.cb5c0542.js
deleted file mode 100644
index 53e4eba37..000000000
--- a/assets/js/1ae709a2.cb5c0542.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[355],{37718:(e,o,a)=>{a.r(o),a.d(o,{assets:()=>l,contentTitle:()=>r,default:()=>u,frontMatter:()=>n,metadata:()=>i,toc:()=>c});var t=a(85893),s=a(11151);const n={title:"History and Software Rollback",summary:"History and Software Rollback"},r="History and Software Rollback",i={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,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/package-management/history-and-rollback.md",tags:[],version:"current",lastUpdatedAt:171439918e4,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"}},l={},c=[{value:"History",id:"history",level:2},{value:"Rollback",id:"rollback",level:2}];function d(e){const o={a:"a",admonition:"admonition",blockquote:"blockquote",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,s.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(o.h1,{id:"history-and-software-rollback",children:"History and Software Rollback"}),"\n",(0,t.jsxs)(o.p,{children:["Solus provides a history and rollback feature via its package manager, ",(0,t.jsx)(o.code,{children:"eopkg"}),". This feature allows you to see when your repository was last updated, actions such as installation, removal, and upgrading of software."]}),"\n",(0,t.jsx)(o.p,{children:"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."}),"\n",(0,t.jsx)(o.h2,{id:"history",children:"History"}),"\n",(0,t.jsxs)(o.p,{children:["You can see the history from ",(0,t.jsx)(o.code,{children:"eopkg"})," by using:"]}),"\n",(0,t.jsx)(o.pre,{children:(0,t.jsx)(o.code,{className:"language-bash",children:"eopkg history\n"})}),"\n",(0,t.jsx)(o.h2,{id:"rollback",children:"Rollback"}),"\n",(0,t.jsxs)(o.admonition,{type:"info",children:[(0,t.jsxs)(o.p,{children:["If you have a local repository set up, ",(0,t.jsx)(o.a,{href:"https://help.getsol.us/docs/packaging/advanced-config/local-repository#disabling-the-local-solbuild-repository-in-eopkg",children:"disable it"})," before doing rollbacks or you may get an error."]}),(0,t.jsxs)(o.blockquote,{children:["\n",(0,t.jsx)(o.p,{children:"Error parsing repository index information. Index file does not exist or is malformed."}),"\n"]})]}),"\n",(0,t.jsx)(o.p,{children:"To rollback your system, first use the above history command to check what the transaction / operation number was. Then, we use the following command:"}),"\n",(0,t.jsx)(o.pre,{children:(0,t.jsx)(o.code,{className:"language-bash",children:"sudo eopkg history -t number\n"})}),"\n",(0,t.jsxs)(o.p,{children:["The number, in this case, is the operation before the one you want to change. So if the number was ",(0,t.jsx)(o.code,{children:"100"}),", then you would use ",(0,t.jsx)(o.code,{children:"99"}),"."]})]})}function u(e={}){const{wrapper:o}={...(0,s.a)(),...e.components};return o?(0,t.jsx)(o,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},11151:(e,o,a)=>{a.d(o,{Z:()=>i,a:()=>r});var t=a(67294);const s={},n=t.createContext(s);function r(e){const o=t.useContext(n);return t.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function i(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),t.createElement(n.Provider,{value:o},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/21944812.11fb63a3.js b/assets/js/21944812.11fb63a3.js
new file mode 100644
index 000000000..551b5442e
--- /dev/null
+++ b/assets/js/21944812.11fb63a3.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[9873],{30836:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>l,contentTitle:()=>a,default:()=>u,frontMatter:()=>t,metadata:()=>r,toc:()=>d});var i=o(85893),s=o(11151);const t={title:"Desktops",summary:"Quick guides on switching between or installing additional Desktop Environments on Solus"},a="Desktop Environments",r={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 XFCE 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,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/desktops/index.md",tags:[],version:"current",lastUpdatedAt:1714518504e3,frontMatter:{title:"Desktops",summary:"Quick guides on switching between or installing additional Desktop Environments on Solus"},sidebar:"userSidebar",previous:{title:"Configuration File Locations",permalink:"/docs/user/software/configuration_files"},next:{title:"Development",permalink:"/docs/user/software/development/"}},l={},d=[{value:"Budgie",id:"budgie",level:2},{value:"GNOME Shell",id:"gnome-shell",level:2},{value:"MATE",id:"mate",level:2},{value:"XFCE",id:"xfce",level:2},{value:"Tiling window managers",id:"tiling-window-managers",level:2},{value:"i3",id:"i3",level:3},{value:"Sway",id:"sway",level:3},{value:"Stacking window manager",id:"stacking-window-manager",level:2},{value:"Labwc",id:"labwc",level:3}];function c(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",p:"p",pre:"pre",...(0,s.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"desktop-environments",children:"Desktop Environments"}),"\n",(0,i.jsxs)(n.p,{children:["Solus offers a ",(0,i.jsx)(n.a,{href:"https://getsol.us/solus/experiences/",children:"multitude of desktop environments"}),", ranging from the feature-rich and modern Budgie to the traditional XFCE 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."]}),"\n",(0,i.jsx)(n.p,{children:"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."}),"\n",(0,i.jsx)(n.h2,{id:"budgie",children:"Budgie"}),"\n",(0,i.jsx)(n.p,{children:"The flagship desktop environment / experience of Solus is Budgie. If you have installed either our GNOME or XFCE editions, you can try out and install Budgie by running the following command:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"# Do NOT attempt to do this if you are running the KDE Plasma Desktop version of Solus!\nsudo eopkg install -c desktop.budgie\n"})}),"\n",(0,i.jsx)(n.h2,{id:"gnome-shell",children:"GNOME Shell"}),"\n",(0,i.jsx)(n.p,{children:"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 XFCE editions, you can try out and install GNOME Shell by running the following commands:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"# Do NOT attempt to do this if you are running the KDE Plasma Desktop version of Solus!\nsudo eopkg install gdm gnome-shell gnome-desktop-branding\n"})}),"\n",(0,i.jsx)(n.h2,{id:"mate",children:"MATE"}),"\n",(0,i.jsx)(n.admonition,{type:"caution",children:(0,i.jsx)(n.p,{children:"We plan to deprecate the MATE Desktop, for a similar experience, consider XFCE."})}),"\n",(0,i.jsxs)(n.p,{children:["Solus offers the MATE desktop environment / experience, tailored to advanced users and older hardware, as well as shipping with our modern menu called ",(0,i.jsx)(n.a,{href:"https://github.com/getsolus/brisk-menu",children:"Brisk Menu"}),". If you have installed either our Budgie or GNOME editions, you can try out and install MATE by running the following command:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"# Do NOT attempt to do this if you are running the KDE Plasma Desktop version of Solus!\nsudo eopkg install -c desktop.mate\n"})}),"\n",(0,i.jsx)(n.h2,{id:"xfce",children:"XFCE"}),"\n",(0,i.jsx)(n.p,{children:"Solus offers the XFCE desktop environment for users preferring a more lightweight experience. It is recommended for existing MATE users. You can install XFCE with the following command:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"# Do NOT attempt to do this if you are running the KDE Plasma Desktop version of Solus!\nsudo eopkg install -c desktop.xfce\n"})}),"\n",(0,i.jsx)(n.h2,{id:"tiling-window-managers",children:"Tiling window managers"}),"\n",(0,i.jsx)(n.h3,{id:"i3",children:"i3"}),"\n",(0,i.jsx)(n.p,{children:"Solus offers i3 as a tiling window manager. Users wanting to try i3 can install it by running the following command:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"# Do NOT attempt to do this if you are running the KDE Plasma Desktop version of Solus!\nsudo eopkg install i3\n"})}),"\n",(0,i.jsx)(n.p,{children:"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."}),"\n",(0,i.jsx)(n.h3,{id:"sway",children:"Sway"}),"\n",(0,i.jsx)(n.p,{children:"Solus offers Sway as a Wayland-only tiling window manager. You can install it with the following command:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"sudo eopkg install sway\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Sway expects users to do some configuration, refer to the ",(0,i.jsx)(n.a,{href:"https://github.com/swaywm/sway/wiki",children:"Sway Wiki"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["For more information about tiling window managers, click ",(0,i.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Tiling_window_manager",children:"here"}),"."]}),"\n",(0,i.jsx)(n.h2,{id:"stacking-window-manager",children:"Stacking window manager"}),"\n",(0,i.jsx)(n.h3,{id:"labwc",children:"Labwc"}),"\n",(0,i.jsx)(n.p,{children:"Solus offers Labwc as a Wayland-only stacking window manager. You can install it with the following command:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"sudo eopkg install labwc\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Labwc expects users to do some configuration, refer to the ",(0,i.jsx)(n.a,{href:"https://labwc.github.io/",children:"Labwc wiki"})]}),"\n",(0,i.jsxs)(n.p,{children:["For more information about stacking window managers, click ",(0,i.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Stacking_window_manager",children:"here"})]})]})}function u(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},11151:(e,n,o)=>{o.d(n,{Z:()=>r,a:()=>a});var i=o(67294);const s={},t=i.createContext(s);function a(e){const n=i.useContext(t);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),i.createElement(t.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/21944812.f4d0cdf2.js b/assets/js/21944812.f4d0cdf2.js
deleted file mode 100644
index 0c39a0524..000000000
--- a/assets/js/21944812.f4d0cdf2.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[9873],{30836:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>l,contentTitle:()=>a,default:()=>u,frontMatter:()=>t,metadata:()=>r,toc:()=>d});var i=o(85893),s=o(11151);const t={title:"Desktops",summary:"Quick guides on switching between or installing additional Desktop Environments on Solus"},a="Desktop Environments",r={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 XFCE 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,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/desktops/index.md",tags:[],version:"current",lastUpdatedAt:171439918e4,frontMatter:{title:"Desktops",summary:"Quick guides on switching between or installing additional Desktop Environments on Solus"},sidebar:"userSidebar",previous:{title:"Configuration File Locations",permalink:"/docs/user/software/configuration_files"},next:{title:"Development",permalink:"/docs/user/software/development/"}},l={},d=[{value:"Budgie",id:"budgie",level:2},{value:"GNOME Shell",id:"gnome-shell",level:2},{value:"MATE",id:"mate",level:2},{value:"XFCE",id:"xfce",level:2},{value:"Tiling window managers",id:"tiling-window-managers",level:2},{value:"i3",id:"i3",level:3},{value:"Sway",id:"sway",level:3},{value:"Stacking window manager",id:"stacking-window-manager",level:2},{value:"Labwc",id:"labwc",level:3}];function c(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",p:"p",pre:"pre",...(0,s.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"desktop-environments",children:"Desktop Environments"}),"\n",(0,i.jsxs)(n.p,{children:["Solus offers a ",(0,i.jsx)(n.a,{href:"https://getsol.us/solus/experiences/",children:"multitude of desktop environments"}),", ranging from the feature-rich and modern Budgie to the traditional XFCE 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."]}),"\n",(0,i.jsx)(n.p,{children:"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."}),"\n",(0,i.jsx)(n.h2,{id:"budgie",children:"Budgie"}),"\n",(0,i.jsx)(n.p,{children:"The flagship desktop environment / experience of Solus is Budgie. If you have installed either our GNOME or XFCE editions, you can try out and install Budgie by running the following command:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"# Do NOT attempt to do this if you are running the KDE Plasma Desktop version of Solus!\nsudo eopkg install -c desktop.budgie\n"})}),"\n",(0,i.jsx)(n.h2,{id:"gnome-shell",children:"GNOME Shell"}),"\n",(0,i.jsx)(n.p,{children:"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 XFCE editions, you can try out and install GNOME Shell by running the following commands:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"# Do NOT attempt to do this if you are running the KDE Plasma Desktop version of Solus!\nsudo eopkg install gdm gnome-shell gnome-desktop-branding\n"})}),"\n",(0,i.jsx)(n.h2,{id:"mate",children:"MATE"}),"\n",(0,i.jsx)(n.admonition,{type:"caution",children:(0,i.jsx)(n.p,{children:"We plan to deprecate the MATE Desktop, for a similar experience, consider XFCE."})}),"\n",(0,i.jsxs)(n.p,{children:["Solus offers the MATE desktop environment / experience, tailored to advanced users and older hardware, as well as shipping with our modern menu called ",(0,i.jsx)(n.a,{href:"https://github.com/getsolus/brisk-menu",children:"Brisk Menu"}),". If you have installed either our Budgie or GNOME editions, you can try out and install MATE by running the following command:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"# Do NOT attempt to do this if you are running the KDE Plasma Desktop version of Solus!\nsudo eopkg install -c desktop.mate\n"})}),"\n",(0,i.jsx)(n.h2,{id:"xfce",children:"XFCE"}),"\n",(0,i.jsx)(n.p,{children:"Solus offers the XFCE desktop environment for users preferring a more lightweight experience. It is recommended for existing MATE users. You can install XFCE with the following command:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"# Do NOT attempt to do this if you are running the KDE Plasma Desktop version of Solus!\nsudo eopkg install -c desktop.xfce\n"})}),"\n",(0,i.jsx)(n.h2,{id:"tiling-window-managers",children:"Tiling window managers"}),"\n",(0,i.jsx)(n.h3,{id:"i3",children:"i3"}),"\n",(0,i.jsx)(n.p,{children:"Solus offers i3 as a tiling window manager. Users wanting to try i3 can install it by running the following command:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"# Do NOT attempt to do this if you are running the KDE Plasma Desktop version of Solus!\nsudo eopkg install i3\n"})}),"\n",(0,i.jsx)(n.p,{children:"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."}),"\n",(0,i.jsx)(n.h3,{id:"sway",children:"Sway"}),"\n",(0,i.jsx)(n.p,{children:"Solus offers Sway as a Wayland-only tiling window manager. You can install it with the following command:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"sudo eopkg install sway\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Sway expects users to do some configuration, refer to the ",(0,i.jsx)(n.a,{href:"https://github.com/swaywm/sway/wiki",children:"Sway Wiki"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["For more information about tiling window managers, click ",(0,i.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Tiling_window_manager",children:"here"}),"."]}),"\n",(0,i.jsx)(n.h2,{id:"stacking-window-manager",children:"Stacking window manager"}),"\n",(0,i.jsx)(n.h3,{id:"labwc",children:"Labwc"}),"\n",(0,i.jsx)(n.p,{children:"Solus offers Labwc as a Wayland-only stacking window manager. You can install it with the following command:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"sudo eopkg install labwc\n"})}),"\n",(0,i.jsxs)(n.p,{children:["Labwc expects users to do some configuration, refer to the ",(0,i.jsx)(n.a,{href:"https://labwc.github.io/",children:"Labwc wiki"})]}),"\n",(0,i.jsxs)(n.p,{children:["For more information about stacking window managers, click ",(0,i.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/Stacking_window_manager",children:"here"})]})]})}function u(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},11151:(e,n,o)=>{o.d(n,{Z:()=>r,a:()=>a});var i=o(67294);const s={},t=i.createContext(s);function a(e){const n=i.useContext(t);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),i.createElement(t.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/257b9082.0625ab94.js b/assets/js/257b9082.0625ab94.js
new file mode 100644
index 000000000..b0eefd993
--- /dev/null
+++ b/assets/js/257b9082.0625ab94.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[3192],{74382:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>c,contentTitle:()=>r,default:()=>h,frontMatter:()=>i,metadata:()=>a,toc:()=>l});var t=o(85893),s=o(11151);const i={},r="Containers",a={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 its 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,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/development/containers.md",tags:[],version:"current",lastUpdatedAt:1714518504e3,frontMatter:{},sidebar:"userSidebar",previous:{title:"Development",permalink:"/docs/user/software/development/"},next:{title:"Java",permalink:"/docs/user/software/development/java"}},c={},l=[{value:"Docker",id:"docker",level:2},{value:"Podman",id:"podman",level:2}];function d(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",li:"li",p:"p",ul:"ul",...(0,s.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"containers",children:"Containers"}),"\n",(0,t.jsx)(n.p,{children:"Containers are a popular method to run and configure applications in a confined environment without directly installing the application and all its dependencies. Solus provides the following container technologies:"}),"\n",(0,t.jsx)(n.h2,{id:"docker",children:"Docker"}),"\n",(0,t.jsxs)(n.p,{children:["Docker is a container engine developed by Docker Inc. Solus provides the command line utility ",(0,t.jsx)(n.code,{children:"docker"})," to run and manage docker containers."]}),"\n",(0,t.jsxs)(n.p,{children:["A wide variety of applications are available through the official container registry ",(0,t.jsx)(n.a,{href:"https://hub.docker.com/search?q=",children:"Docker Hub"})]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Install the docker engine by running ",(0,t.jsx)(n.code,{children:"sudo eopkg it docker"})," (you may also want to install ",(0,t.jsx)(n.code,{children:"docker-compose"}),")"]}),"\n",(0,t.jsxs)(n.li,{children:["Test your installation with ",(0,t.jsx)(n.code,{children:"sudo docker run hello-world"})]}),"\n",(0,t.jsxs)(n.li,{children:["Optional: For sudo-less docker, run ",(0,t.jsx)(n.code,{children:"sudo usermod -aG docker $USER"}),". You must restart for this change to take effect"]}),"\n",(0,t.jsxs)(n.li,{children:["Optional: Allow the docker daemon to start automatically at system startup ",(0,t.jsx)(n.code,{children:"sudo systemctl enable docker"})]}),"\n",(0,t.jsxs)(n.li,{children:["Refer to the official ",(0,t.jsx)(n.a,{href:"https://docs.docker.com/",children:"Docker Docs"})," for further topics"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"podman",children:"Podman"}),"\n",(0,t.jsx)(n.p,{children:"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."}),"\n",(0,t.jsxs)(n.p,{children:["Podman's command line interface is 100% compatible with Docker, to the point it's possible to replace the ",(0,t.jsx)(n.code,{children:"docker"})," command with ",(0,t.jsx)(n.code,{children:"podman"})," without any subsequent errors."]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Install Podman by running ",(0,t.jsx)(n.code,{children:"sudo eopkg it podman"})]}),"\n",(0,t.jsxs)(n.li,{children:["Optionally, add ",(0,t.jsx)(n.code,{children:"alias docker=podman"})," to your initial shell script, should you want to replace Docker with Podman while retaining your typing habits"]}),"\n",(0,t.jsxs)(n.li,{children:["Refer to the official ",(0,t.jsx)(n.a,{href:"https://podman.io/",children:"Podman website"})," for more documentation"]}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},11151:(e,n,o)=>{o.d(n,{Z:()=>a,a:()=>r});var t=o(67294);const s={},i=t.createContext(s);function r(e){const n=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),t.createElement(i.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/257b9082.532bc2c1.js b/assets/js/257b9082.532bc2c1.js
deleted file mode 100644
index 7451ef8b9..000000000
--- a/assets/js/257b9082.532bc2c1.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[3192],{74382:(e,n,o)=>{o.r(n),o.d(n,{assets:()=>c,contentTitle:()=>r,default:()=>h,frontMatter:()=>i,metadata:()=>a,toc:()=>l});var t=o(85893),s=o(11151);const i={},r="Containers",a={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 its 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,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/development/containers.md",tags:[],version:"current",lastUpdatedAt:171439918e4,frontMatter:{},sidebar:"userSidebar",previous:{title:"Development",permalink:"/docs/user/software/development/"},next:{title:"Java",permalink:"/docs/user/software/development/java"}},c={},l=[{value:"Docker",id:"docker",level:2},{value:"Podman",id:"podman",level:2}];function d(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",li:"li",p:"p",ul:"ul",...(0,s.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"containers",children:"Containers"}),"\n",(0,t.jsx)(n.p,{children:"Containers are a popular method to run and configure applications in a confined environment without directly installing the application and all its dependencies. Solus provides the following container technologies:"}),"\n",(0,t.jsx)(n.h2,{id:"docker",children:"Docker"}),"\n",(0,t.jsxs)(n.p,{children:["Docker is a container engine developed by Docker Inc. Solus provides the command line utility ",(0,t.jsx)(n.code,{children:"docker"})," to run and manage docker containers."]}),"\n",(0,t.jsxs)(n.p,{children:["A wide variety of applications are available through the official container registry ",(0,t.jsx)(n.a,{href:"https://hub.docker.com/search?q=",children:"Docker Hub"})]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Install the docker engine by running ",(0,t.jsx)(n.code,{children:"sudo eopkg it docker"})," (you may also want to install ",(0,t.jsx)(n.code,{children:"docker-compose"}),")"]}),"\n",(0,t.jsxs)(n.li,{children:["Test your installation with ",(0,t.jsx)(n.code,{children:"sudo docker run hello-world"})]}),"\n",(0,t.jsxs)(n.li,{children:["Optional: For sudo-less docker, run ",(0,t.jsx)(n.code,{children:"sudo usermod -aG docker $USER"}),". You must restart for this change to take effect"]}),"\n",(0,t.jsxs)(n.li,{children:["Optional: Allow the docker daemon to start automatically at system startup ",(0,t.jsx)(n.code,{children:"sudo systemctl enable docker"})]}),"\n",(0,t.jsxs)(n.li,{children:["Refer to the official ",(0,t.jsx)(n.a,{href:"https://docs.docker.com/",children:"Docker Docs"})," for further topics"]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"podman",children:"Podman"}),"\n",(0,t.jsx)(n.p,{children:"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."}),"\n",(0,t.jsxs)(n.p,{children:["Podman's command line interface is 100% compatible with Docker, to the point it's possible to replace the ",(0,t.jsx)(n.code,{children:"docker"})," command with ",(0,t.jsx)(n.code,{children:"podman"})," without any subsequent errors."]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["Install Podman by running ",(0,t.jsx)(n.code,{children:"sudo eopkg it podman"})]}),"\n",(0,t.jsxs)(n.li,{children:["Optionally, add ",(0,t.jsx)(n.code,{children:"alias docker=podman"})," to your initial shell script, should you want to replace Docker with Podman while retaining your typing habits"]}),"\n",(0,t.jsxs)(n.li,{children:["Refer to the official ",(0,t.jsx)(n.a,{href:"https://podman.io/",children:"Podman website"})," for more documentation"]}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},11151:(e,n,o)=>{o.d(n,{Z:()=>a,a:()=>r});var t=o(67294);const s={},i=t.createContext(s);function r(e){const n=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),t.createElement(i.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/2598a3a5.57c443d7.js b/assets/js/2598a3a5.57c443d7.js
new file mode 100644
index 000000000..1c53e1a81
--- /dev/null
+++ b/assets/js/2598a3a5.57c443d7.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[5951],{81529:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>a,default:()=>h,frontMatter:()=>o,metadata:()=>r,toc:()=>d});var i=n(85893),s=n(11151);const o={title:"Configuration",summary:"Help for configuring MATE Desktop on Solus"},a="Configuration",r={id:"user/editions/mate/configuration",title:"Configuration",description:"System",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,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/editions/mate/configuration.md",tags:[],version:"current",lastUpdatedAt:1714518504e3,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"}},c={},d=[{value:"System",id:"system",level:2},{value:"Date and time",id:"date-and-time",level:3},{value:"Default applications",id:"default-applications",level:3},{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:"User interface",id:"user-interface",level:2},{value:"Desktop background",id:"desktop-background",level:3},{value:"Desktop icons",id:"desktop-icons",level:3},{value:"Workspaces",id:"workspaces",level:2},{value:"Keyboard shortcuts",id:"keyboard-shortcuts",level:3},{value:"Workspaces configuration",id:"workspaces-configuration",level:3}];function l(e){const t={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",ul:"ul",...(0,s.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.h1,{id:"configuration",children:"Configuration"}),"\n",(0,i.jsx)(t.h2,{id:"system",children:"System"}),"\n",(0,i.jsx)(t.h3,{id:"date-and-time",children:"Date and time"}),"\n",(0,i.jsx)(t.p,{children:'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".'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Date and Time Right-Click Menu",src:n(14205).Z+"",width:"195",height:"298"})}),"\n",(0,i.jsx)(t.p,{children:"This opens the Clock Preferences window and allows you to show the date, seconds or use 24 hour time."}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Clock Preferences",src:n(87653).Z+"",width:"375",height:"367"})}),"\n",(0,i.jsx)(t.p,{children:'To change the time, click on "Time Settings" at the bottom of this window.'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Time Settings",src:n(11410).Z+"",width:"459",height:"355"})}),"\n",(0,i.jsx)(t.p,{children:'Once you have the correct time, you can click on "Set System Time".'}),"\n",(0,i.jsx)(t.p,{children:'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.'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Timezone Settings",src:n(89206).Z+"",width:"496",height:"380"})}),"\n",(0,i.jsx)(t.h3,{id:"default-applications",children:"Default applications"}),"\n",(0,i.jsx)(t.p,{children:'Using MATE, open the Brisk Menu and click on "Preferences" and then on "Preferred Applications".'}),"\n",(0,i.jsx)(t.p,{children:"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)."}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Preferred Applications",src:n(33340).Z+"",width:"399",height:"355"})}),"\n",(0,i.jsx)(t.p,{children:'You can specify default applications for individual file types by right clicking on a file and then clicking on "Open with other Application...".'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE File Context Menu",src:n(32077).Z+"",width:"302",height:"384"})}),"\n",(0,i.jsx)(t.p,{children:'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.'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Application Selection",src:n(48197).Z+"",width:"426",height:"501"})}),"\n",(0,i.jsx)(t.h2,{id:"displays",children:"Displays"}),"\n",(0,i.jsx)(t.p,{children:'With MATE, open the Brisk Menu and click on "Preferences" and then on "Displays".'}),"\n",(0,i.jsx)(t.p,{children:'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.'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Monitor Preferences",src:n(95067).Z+"",width:"556",height:"363"})}),"\n",(0,i.jsx)(t.p,{children:"You can arrange your displays by dragging the colored boxes to your preferred positions, as shown below."}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Monitor Arrangement",src:n(5229).Z+"",width:"556",height:"363"})}),"\n",(0,i.jsx)(t.p,{children:'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.'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Confirm Monitor Preferences",src:n(572).Z+"",width:"483",height:"146"})}),"\n",(0,i.jsx)(t.h2,{id:"keyboard-layout",children:"Keyboard layout"}),"\n",(0,i.jsx)(t.p,{children:'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.'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Keyboard Preferences",src:n(91066).Z+"",width:"452",height:"527"})}),"\n",(0,i.jsx)(t.p,{children:'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".'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Choose Keyboard Layout",src:n(46721).Z+"",width:"800",height:"509"})}),"\n",(0,i.jsx)(t.p,{children:'You can remove a keyboard layout by selecting one of the items in your layouts list and then clicking the "- Remove" button.'}),"\n",(0,i.jsx)(t.p,{children:"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."}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Keyboard Indicator",src:n(89990).Z+"",width:"370",height:"141"})}),"\n",(0,i.jsx)(t.p,{children:'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".'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Keyboard Layout Shortcuts",src:n(19720).Z+"",width:"552",height:"425"})}),"\n",(0,i.jsx)(t.h3,{id:"ibus",children:"IBus"}),"\n",(0,i.jsx)(t.p,{children:'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".'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE IBus Starting Daemon",src:n(29608).Z+"",width:"419",height:"111"})}),"\n",(0,i.jsx)(t.p,{children:'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".'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Startup Applications",src:n(61690).Z+"",width:"468",height:"379"})}),"\n",(0,i.jsxs)(t.p,{children:["In the Command box, you will need to write ",(0,i.jsx)(t.code,{children:"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.']}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Add IBus Startup Entry",src:n(88955).Z+"",width:"372",height:"177"})}),"\n",(0,i.jsxs)(t.p,{children:["If you need an additional IBus IME for your language see: ",(0,i.jsx)(t.a,{href:"/docs/user/software/localization/ibus/",children:"IBus"})]}),"\n",(0,i.jsxs)(t.p,{children:["Finish by closing the IBus Preferences window. You can now switch between your layouts by using the keyboard shortcut ",(0,i.jsx)(t.code,{children:"Super + Space"}),"."]}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE IBus Keyboard Shortcut",src:n(57540).Z+"",width:"142",height:"101"})}),"\n",(0,i.jsx)(t.p,{children:"Or by left clicking on the keyboard layout icon shown in the system tray and selecting the layout you wish to use."}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Bottom Panel IBus",src:n(31132).Z+"",width:"239",height:"207"})}),"\n",(0,i.jsx)(t.h2,{id:"mouse-and-touchpad",children:"Mouse and touchpad"}),"\n",(0,i.jsx)(t.p,{children:'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.'}),"\n",(0,i.jsx)(t.h3,{id:"mouse",children:"Mouse"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Mouse Settings",src:n(39667).Z+"",width:"502",height:"611"})}),"\n",(0,i.jsx)(t.p,{children:"For mice, you can set:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Left-handed or right-handed. This will change your primary button."}),"\n",(0,i.jsx)(t.li,{children:"Locate the pointer when the Control key is pressed."}),"\n",(0,i.jsx)(t.li,{children:"Mouse speed and sensitivity."}),"\n",(0,i.jsx)(t.li,{children:"Drag and Drop threshold. This is designed to prevent accidental dragging and dropping by setting the distance required to initiate a drag."}),"\n",(0,i.jsx)(t.li,{children:"Double click timeout. The length of time between 2 mouse clicks for it to register as a double click."}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"touchpad",children:"Touchpad"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Touchpad Settings",src:n(92324).Z+"",width:"502",height:"605"})}),"\n",(0,i.jsx)(t.p,{children:"For touchpads, you can set:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Enabling / disabling of the touchpad."}),"\n",(0,i.jsx)(t.li,{children:"Enabling / disabling of the touchpad whilst typing."}),"\n",(0,i.jsx)(t.li,{children:"Enabling / disabling of mouse clicks with the touchpad."}),"\n",(0,i.jsx)(t.li,{children:"Two and three finger click emulation."}),"\n",(0,i.jsx)(t.li,{children:"Various edge and two finger scrolling options."}),"\n",(0,i.jsx)(t.li,{children:'Enabling / disabling "natural scrolling" (reversed scrolling direction).'}),"\n",(0,i.jsx)(t.li,{children:"Touchpad speed and sensitivity."}),"\n"]}),"\n",(0,i.jsx)(t.h2,{id:"networking",children:"Networking"}),"\n",(0,i.jsx)(t.p,{children:'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...".'}),"\n",(0,i.jsx)(t.h3,{id:"non-hidden-network",children:"Non-hidden network"}),"\n",(0,i.jsx)(t.p,{children:'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.'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Networking Applet",src:n(35811).Z+"",width:"520",height:"475"})}),"\n",(0,i.jsx)(t.p,{children:'You may now be prompted to authenticate with the network. Type in your password and then click "Connect".'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Network Authentication",src:n(21908).Z+"",width:"490",height:"254"})}),"\n",(0,i.jsx)(t.p,{children:"If your password is correct, you will now be authenticated with the network."}),"\n",(0,i.jsx)(t.p,{children:'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.'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Disconnect from Network",src:n(56120).Z+"",width:"283",height:"169"})}),"\n",(0,i.jsx)(t.h3,{id:"hidden-network",children:"Hidden network"}),"\n",(0,i.jsx)(t.p,{children:'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).'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Hidden Network",src:n(225).Z+"",width:"490",height:"247"})}),"\n",(0,i.jsx)(t.p,{children:"If the network is found and has a password, you will be prompted to authenticate with the network."}),"\n",(0,i.jsx)(t.h2,{id:"sound-and-sound-devices",children:"Sound and sound devices"}),"\n",(0,i.jsx)(t.p,{children:"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."}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Volume Control",src:n(68146).Z+"",width:"71",height:"193"})}),"\n",(0,i.jsx)(t.h3,{id:"settings",children:"Settings"}),"\n",(0,i.jsx)(t.p,{children:'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".'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Sound Applet",src:n(13815).Z+"",width:"219",height:"113"})}),"\n",(0,i.jsx)(t.p,{children:"This will open the Sound Preferences window as shown below."}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Sound Preferences",src:n(90751).Z+"",width:"550",height:"423"})}),"\n",(0,i.jsx)(t.h2,{id:"users",children:"Users"}),"\n",(0,i.jsx)(t.p,{children:'To add and remove users with MATE, open the Brisk Menu and click on "Administration" and then on "Users and Groups".'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Users and Groups",src:n(92617).Z+"",width:"652",height:"431"})}),"\n",(0,i.jsx)(t.h3,{id:"adding-a-user",children:"Adding a user"}),"\n",(0,i.jsx)(t.p,{children:'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.'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE New User",src:n(65545).Z+"",width:"307",height:"540"})}),"\n",(0,i.jsx)(t.p,{children:'Fill in the required items and then finish adding the new user by clicking "OK" in the bottom right corner.'}),"\n",(0,i.jsx)(t.h3,{id:"removing-a-user",children:"Removing a user"}),"\n",(0,i.jsx)(t.p,{children:'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.'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE User List",src:n(43845).Z+"",width:"652",height:"431"})}),"\n",(0,i.jsx)(t.p,{children:"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."}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Keep Files Prompt",src:n(2390).Z+"",width:"540",height:"203"})}),"\n",(0,i.jsx)(t.h2,{id:"user-interface",children:"User interface"}),"\n",(0,i.jsx)(t.h3,{id:"desktop-background",children:"Desktop background"}),"\n",(0,i.jsx)(t.p,{children:'If you wish to change the MATE desktop background, simply right click anywhere on the desktop and select "Change Desktop Background".'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Background Right Click Menu",src:n(25408).Z+"",width:"261",height:"254"})}),"\n",(0,i.jsx)(t.p,{children:'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.'}),"\n",(0,i.jsx)(t.p,{children:'In this section, you can choose between Solus wallpapers, solid colors, gradients or using your own pictures by clicking "Add". After choosing, click "Close".'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Desktop Background Selection",src:n(46964).Z+"",width:"785",height:"536"})}),"\n",(0,i.jsx)(t.h3,{id:"desktop-icons",children:"Desktop icons"}),"\n",(0,i.jsx)(t.p,{children:'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.'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Tweak Tool",src:n(88409).Z+"",width:"626",height:"599"})}),"\n",(0,i.jsx)(t.p,{children:"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)."}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Desktop Folder",src:n(67887).Z+"",width:"803",height:"581"})}),"\n",(0,i.jsx)(t.h2,{id:"workspaces",children:"Workspaces"}),"\n",(0,i.jsxs)(t.p,{children:["In MATE, workspaces are enabled by default. You can move between workspaces by using the keyboard shortcuts ",(0,i.jsx)(t.code,{children:"Ctrl + Alt + Left"})," and ",(0,i.jsx)(t.code,{children:"Ctrl + Alt + Right"}),"."]}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Workspace Switching",src:n(43433).Z+"",width:"242",height:"93"})}),"\n",(0,i.jsx)(t.p,{children:'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".'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Workspace Menu",src:n(86624).Z+"",width:"411",height:"385"})}),"\n",(0,i.jsx)(t.p,{children:'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...".'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Open Panel Configuration",src:n(23084).Z+"",width:"177",height:"228"})}),"\n",(0,i.jsx)(t.p,{children:'Towards the bottom of the list you will find the Workspace Switcher. Click on it and then finish by clicking "+ Add".'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Add Applet to Panel",src:n(87666).Z+"",width:"512",height:"351"})}),"\n",(0,i.jsx)(t.p,{children:"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."}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Workspace Switcher",src:n(77967).Z+"",width:"265",height:"48"})}),"\n",(0,i.jsx)(t.p,{children:"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."}),"\n",(0,i.jsx)(t.h3,{id:"keyboard-shortcuts",children:"Keyboard shortcuts"}),"\n",(0,i.jsx)(t.p,{children:"MATE provides a variety of keyboard shortcuts for workspaces. By default, the keyboard shortcuts for switching directly to a certain workspace are disabled."}),"\n",(0,i.jsx)(t.p,{children:'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.'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Workspace Keyboard Shortcuts",src:n(63008).Z+"",width:"626",height:"408"})}),"\n",(0,i.jsx)(t.h3,{id:"workspaces-configuration",children:"Workspaces configuration"}),"\n",(0,i.jsx)(t.p,{children:'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".'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Open Switcher Preferences",src:n(5070).Z+"",width:"203",height:"228"})}),"\n",(0,i.jsx)(t.p,{children:'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.'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Workspace Switcher Preferences",src:n(3466).Z+"",width:"367",height:"409"})})]})}function h(e={}){const{wrapper:t}={...(0,s.a)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(l,{...e})}):l(e)}},67887:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/caja-desktop-folder-4165fea2b0afc876931a10dbeb707384.jpg"},25408:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-background-right-click-0edaca8eb885eb54466e0a358d0f06ea.jpg"},46964:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-background-selection-fefc0656871c76fa23c620d99521a0ef.jpg"},31132:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-bottom-panel-ibus-left-click-016e725ce808036efb8bc77bd7fb47d8.jpg"},89990:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-bottom-panel-keyboard-22cf218bfdf946e6c10250af144d2166.jpg"},35811:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-bottom-panel-network-left-click-d3520a23fb573b5b52700f97306190a9.jpg"},23084:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-bottom-panel-right-click-83df358e1390b363d6ae99f7465d006f.jpg"},13815:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-bottom-panel-sound-right-click-696d602e3df72f0463e5984e82964a20.jpg"},87653:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-clock-preferences-29e68150fa5526f0fbaab28c6f0ad6c2.jpg"},65545:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-create-new-user-00e085b06fb8c6899a23f90d14b50a29.jpg"},88955:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-ibus-add-startup-4f4ef3cf4e94656d727ff93c4e299432.jpg"},57540:(e,t,n)=>{n.d(t,{Z:()=>i});const i="data:image/jpeg;base64,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"},29608:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-ibus-starting-daemon-84bcee7978b1d8eb7163cb0d9b964ec3.jpg"},2390:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-keep-files-prompt-2aa2cbdb6a94db223d708562c884d71a.jpg"},46721:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-keyboard-choose-layout-e0ca24f2aa125275817acb229a194923.jpg"},19720:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-keyboard-layout-shortcuts-62aefb0c48a9d92a34c277497866e85e.jpg"},91066:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-keyboard-preferences-f13098df57c42dc0259006b9ac386dde.jpg"},572:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-monitor-preferences-confirm-c9ddeb8ecc32eb0a88fc49b247bd2535.jpg"},5229:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-monitor-preferences-dragging-0fb78bb10ab52ce991b90df95a517622.jpg"},95067:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-monitor-preferences-db6d4f848b460b4278da5c95e62d4d9d.jpg"},39667:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-mouse-settings-d43911b0e7fdc6f3a196808da1e353a8.jpg"},43845:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-multiple-user-settings-112efa554f35300d772bb5ede0cc603c.jpg"},21908:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-network-authentication-13f522132661aa358181f94e002fcc9f.jpg"},56120:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-network-disconnect-eff4984eda8c49d3e42259381f0490b0.jpg"},225:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-network-hidden-38a73abbffc438c4c8dc66f70d38fe33.jpg"},32077:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-open-with-right-click-096ce2548d773af1ee45fceb5f2153e4.jpg"},48197:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-open-with-setting-86e0958d69c60f7b4253ac2989931023.jpg"},33340:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-preferred-applications-dcd4e02b67ec579d69171c22c1eb38d3.jpg"},92617:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-single-user-settings-a1253a12d1a7214129fe3ac5dd897e32.jpg"},90751:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-sound-preferences-e6f0a451c79339dfbc290113f63e2894.jpg"},61690:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-startup-applications-e0d8dbd51c24a2987e3b83bc758d35fc.jpg"},14205:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-time-and-date-right-click-792aa50841ec26d8fcd4803ebb171839.jpg"},89206:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-time-and-date-settings-5fd258bf8a3cd09c075789ecb72370b4.jpg"},11410:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-time-and-date-c6cabc4c6ccfb4d51983c582ac985445.jpg"},92324:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-touchpad-settings-d9b3577e085d2ec9f5e357263f35ef90.jpg"},88409:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-tweak-desktop-30894d02f2a10654d0b8219947f974e6.jpg"},68146:(e,t,n)=>{n.d(t,{Z:()=>i});const i="data:image/jpeg;base64,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"},63008:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-workspace-keyboard-shortcuts-24395c1aa3f623b6b89284cffe6bd2e1.jpg"},87666:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-workspace-switch-add-to-panel-e57ec1f9a49d5dcf52f3126805d1d110.jpg"},3466:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-workspace-switcher-preferences-55630462d2aecfc0bd0f511b4ca5cd7c.jpg"},5070:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-workspace-switcher-right-click-0660da43481f40fe6fec7d39e0ec6f06.jpg"},77967:(e,t,n)=>{n.d(t,{Z:()=>i});const i="data:image/jpeg;base64,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"},43433:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-workspace-switching-a0f8cff6b00100314fd9f77994b5dcc9.jpg"},86624:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-workspace-titlebar-right-click-6dfec2d387d17d6ca06de2ed728ff521.jpg"},11151:(e,t,n)=>{n.d(t,{Z:()=>r,a:()=>a});var i=n(67294);const s={},o=i.createContext(s);function a(e){const t=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),i.createElement(o.Provider,{value:t},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/2598a3a5.8724b913.js b/assets/js/2598a3a5.8724b913.js
deleted file mode 100644
index c96ea5976..000000000
--- a/assets/js/2598a3a5.8724b913.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[5951],{81529:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>c,contentTitle:()=>a,default:()=>h,frontMatter:()=>o,metadata:()=>r,toc:()=>d});var i=n(85893),s=n(11151);const o={title:"Configuration",summary:"Help for configuring MATE Desktop on Solus"},a="Configuration",r={id:"user/editions/mate/configuration",title:"Configuration",description:"System",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,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/editions/mate/configuration.md",tags:[],version:"current",lastUpdatedAt:171439918e4,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"}},c={},d=[{value:"System",id:"system",level:2},{value:"Date and time",id:"date-and-time",level:3},{value:"Default applications",id:"default-applications",level:3},{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:"User interface",id:"user-interface",level:2},{value:"Desktop background",id:"desktop-background",level:3},{value:"Desktop icons",id:"desktop-icons",level:3},{value:"Workspaces",id:"workspaces",level:2},{value:"Keyboard shortcuts",id:"keyboard-shortcuts",level:3},{value:"Workspaces configuration",id:"workspaces-configuration",level:3}];function l(e){const t={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",ul:"ul",...(0,s.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(t.h1,{id:"configuration",children:"Configuration"}),"\n",(0,i.jsx)(t.h2,{id:"system",children:"System"}),"\n",(0,i.jsx)(t.h3,{id:"date-and-time",children:"Date and time"}),"\n",(0,i.jsx)(t.p,{children:'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".'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Date and Time Right-Click Menu",src:n(14205).Z+"",width:"195",height:"298"})}),"\n",(0,i.jsx)(t.p,{children:"This opens the Clock Preferences window and allows you to show the date, seconds or use 24 hour time."}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Clock Preferences",src:n(87653).Z+"",width:"375",height:"367"})}),"\n",(0,i.jsx)(t.p,{children:'To change the time, click on "Time Settings" at the bottom of this window.'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Time Settings",src:n(11410).Z+"",width:"459",height:"355"})}),"\n",(0,i.jsx)(t.p,{children:'Once you have the correct time, you can click on "Set System Time".'}),"\n",(0,i.jsx)(t.p,{children:'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.'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Timezone Settings",src:n(89206).Z+"",width:"496",height:"380"})}),"\n",(0,i.jsx)(t.h3,{id:"default-applications",children:"Default applications"}),"\n",(0,i.jsx)(t.p,{children:'Using MATE, open the Brisk Menu and click on "Preferences" and then on "Preferred Applications".'}),"\n",(0,i.jsx)(t.p,{children:"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)."}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Preferred Applications",src:n(33340).Z+"",width:"399",height:"355"})}),"\n",(0,i.jsx)(t.p,{children:'You can specify default applications for individual file types by right clicking on a file and then clicking on "Open with other Application...".'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE File Context Menu",src:n(32077).Z+"",width:"302",height:"384"})}),"\n",(0,i.jsx)(t.p,{children:'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.'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Application Selection",src:n(48197).Z+"",width:"426",height:"501"})}),"\n",(0,i.jsx)(t.h2,{id:"displays",children:"Displays"}),"\n",(0,i.jsx)(t.p,{children:'With MATE, open the Brisk Menu and click on "Preferences" and then on "Displays".'}),"\n",(0,i.jsx)(t.p,{children:'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.'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Monitor Preferences",src:n(95067).Z+"",width:"556",height:"363"})}),"\n",(0,i.jsx)(t.p,{children:"You can arrange your displays by dragging the colored boxes to your preferred positions, as shown below."}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Monitor Arrangement",src:n(5229).Z+"",width:"556",height:"363"})}),"\n",(0,i.jsx)(t.p,{children:'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.'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Confirm Monitor Preferences",src:n(572).Z+"",width:"483",height:"146"})}),"\n",(0,i.jsx)(t.h2,{id:"keyboard-layout",children:"Keyboard layout"}),"\n",(0,i.jsx)(t.p,{children:'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.'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Keyboard Preferences",src:n(91066).Z+"",width:"452",height:"527"})}),"\n",(0,i.jsx)(t.p,{children:'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".'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Choose Keyboard Layout",src:n(46721).Z+"",width:"800",height:"509"})}),"\n",(0,i.jsx)(t.p,{children:'You can remove a keyboard layout by selecting one of the items in your layouts list and then clicking the "- Remove" button.'}),"\n",(0,i.jsx)(t.p,{children:"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."}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Keyboard Indicator",src:n(89990).Z+"",width:"370",height:"141"})}),"\n",(0,i.jsx)(t.p,{children:'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".'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Keyboard Layout Shortcuts",src:n(19720).Z+"",width:"552",height:"425"})}),"\n",(0,i.jsx)(t.h3,{id:"ibus",children:"IBus"}),"\n",(0,i.jsx)(t.p,{children:'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".'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE IBus Starting Daemon",src:n(29608).Z+"",width:"419",height:"111"})}),"\n",(0,i.jsx)(t.p,{children:'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".'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Startup Applications",src:n(61690).Z+"",width:"468",height:"379"})}),"\n",(0,i.jsxs)(t.p,{children:["In the Command box, you will need to write ",(0,i.jsx)(t.code,{children:"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.']}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Add IBus Startup Entry",src:n(88955).Z+"",width:"372",height:"177"})}),"\n",(0,i.jsxs)(t.p,{children:["If you need an additional IBus IME for your language see: ",(0,i.jsx)(t.a,{href:"/docs/user/software/localization/ibus/",children:"IBus"})]}),"\n",(0,i.jsxs)(t.p,{children:["Finish by closing the IBus Preferences window. You can now switch between your layouts by using the keyboard shortcut ",(0,i.jsx)(t.code,{children:"Super + Space"}),"."]}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE IBus Keyboard Shortcut",src:n(57540).Z+"",width:"142",height:"101"})}),"\n",(0,i.jsx)(t.p,{children:"Or by left clicking on the keyboard layout icon shown in the system tray and selecting the layout you wish to use."}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Bottom Panel IBus",src:n(31132).Z+"",width:"239",height:"207"})}),"\n",(0,i.jsx)(t.h2,{id:"mouse-and-touchpad",children:"Mouse and touchpad"}),"\n",(0,i.jsx)(t.p,{children:'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.'}),"\n",(0,i.jsx)(t.h3,{id:"mouse",children:"Mouse"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Mouse Settings",src:n(39667).Z+"",width:"502",height:"611"})}),"\n",(0,i.jsx)(t.p,{children:"For mice, you can set:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Left-handed or right-handed. This will change your primary button."}),"\n",(0,i.jsx)(t.li,{children:"Locate the pointer when the Control key is pressed."}),"\n",(0,i.jsx)(t.li,{children:"Mouse speed and sensitivity."}),"\n",(0,i.jsx)(t.li,{children:"Drag and Drop threshold. This is designed to prevent accidental dragging and dropping by setting the distance required to initiate a drag."}),"\n",(0,i.jsx)(t.li,{children:"Double click timeout. The length of time between 2 mouse clicks for it to register as a double click."}),"\n"]}),"\n",(0,i.jsx)(t.h3,{id:"touchpad",children:"Touchpad"}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Touchpad Settings",src:n(92324).Z+"",width:"502",height:"605"})}),"\n",(0,i.jsx)(t.p,{children:"For touchpads, you can set:"}),"\n",(0,i.jsxs)(t.ul,{children:["\n",(0,i.jsx)(t.li,{children:"Enabling / disabling of the touchpad."}),"\n",(0,i.jsx)(t.li,{children:"Enabling / disabling of the touchpad whilst typing."}),"\n",(0,i.jsx)(t.li,{children:"Enabling / disabling of mouse clicks with the touchpad."}),"\n",(0,i.jsx)(t.li,{children:"Two and three finger click emulation."}),"\n",(0,i.jsx)(t.li,{children:"Various edge and two finger scrolling options."}),"\n",(0,i.jsx)(t.li,{children:'Enabling / disabling "natural scrolling" (reversed scrolling direction).'}),"\n",(0,i.jsx)(t.li,{children:"Touchpad speed and sensitivity."}),"\n"]}),"\n",(0,i.jsx)(t.h2,{id:"networking",children:"Networking"}),"\n",(0,i.jsx)(t.p,{children:'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...".'}),"\n",(0,i.jsx)(t.h3,{id:"non-hidden-network",children:"Non-hidden network"}),"\n",(0,i.jsx)(t.p,{children:'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.'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Networking Applet",src:n(35811).Z+"",width:"520",height:"475"})}),"\n",(0,i.jsx)(t.p,{children:'You may now be prompted to authenticate with the network. Type in your password and then click "Connect".'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Network Authentication",src:n(21908).Z+"",width:"490",height:"254"})}),"\n",(0,i.jsx)(t.p,{children:"If your password is correct, you will now be authenticated with the network."}),"\n",(0,i.jsx)(t.p,{children:'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.'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Disconnect from Network",src:n(56120).Z+"",width:"283",height:"169"})}),"\n",(0,i.jsx)(t.h3,{id:"hidden-network",children:"Hidden network"}),"\n",(0,i.jsx)(t.p,{children:'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).'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Hidden Network",src:n(225).Z+"",width:"490",height:"247"})}),"\n",(0,i.jsx)(t.p,{children:"If the network is found and has a password, you will be prompted to authenticate with the network."}),"\n",(0,i.jsx)(t.h2,{id:"sound-and-sound-devices",children:"Sound and sound devices"}),"\n",(0,i.jsx)(t.p,{children:"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."}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Volume Control",src:n(68146).Z+"",width:"71",height:"193"})}),"\n",(0,i.jsx)(t.h3,{id:"settings",children:"Settings"}),"\n",(0,i.jsx)(t.p,{children:'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".'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Sound Applet",src:n(13815).Z+"",width:"219",height:"113"})}),"\n",(0,i.jsx)(t.p,{children:"This will open the Sound Preferences window as shown below."}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Sound Preferences",src:n(90751).Z+"",width:"550",height:"423"})}),"\n",(0,i.jsx)(t.h2,{id:"users",children:"Users"}),"\n",(0,i.jsx)(t.p,{children:'To add and remove users with MATE, open the Brisk Menu and click on "Administration" and then on "Users and Groups".'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Users and Groups",src:n(92617).Z+"",width:"652",height:"431"})}),"\n",(0,i.jsx)(t.h3,{id:"adding-a-user",children:"Adding a user"}),"\n",(0,i.jsx)(t.p,{children:'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.'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE New User",src:n(65545).Z+"",width:"307",height:"540"})}),"\n",(0,i.jsx)(t.p,{children:'Fill in the required items and then finish adding the new user by clicking "OK" in the bottom right corner.'}),"\n",(0,i.jsx)(t.h3,{id:"removing-a-user",children:"Removing a user"}),"\n",(0,i.jsx)(t.p,{children:'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.'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE User List",src:n(43845).Z+"",width:"652",height:"431"})}),"\n",(0,i.jsx)(t.p,{children:"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."}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Keep Files Prompt",src:n(2390).Z+"",width:"540",height:"203"})}),"\n",(0,i.jsx)(t.h2,{id:"user-interface",children:"User interface"}),"\n",(0,i.jsx)(t.h3,{id:"desktop-background",children:"Desktop background"}),"\n",(0,i.jsx)(t.p,{children:'If you wish to change the MATE desktop background, simply right click anywhere on the desktop and select "Change Desktop Background".'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Background Right Click Menu",src:n(25408).Z+"",width:"261",height:"254"})}),"\n",(0,i.jsx)(t.p,{children:'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.'}),"\n",(0,i.jsx)(t.p,{children:'In this section, you can choose between Solus wallpapers, solid colors, gradients or using your own pictures by clicking "Add". After choosing, click "Close".'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Desktop Background Selection",src:n(46964).Z+"",width:"785",height:"536"})}),"\n",(0,i.jsx)(t.h3,{id:"desktop-icons",children:"Desktop icons"}),"\n",(0,i.jsx)(t.p,{children:'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.'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Tweak Tool",src:n(88409).Z+"",width:"626",height:"599"})}),"\n",(0,i.jsx)(t.p,{children:"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)."}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Desktop Folder",src:n(67887).Z+"",width:"803",height:"581"})}),"\n",(0,i.jsx)(t.h2,{id:"workspaces",children:"Workspaces"}),"\n",(0,i.jsxs)(t.p,{children:["In MATE, workspaces are enabled by default. You can move between workspaces by using the keyboard shortcuts ",(0,i.jsx)(t.code,{children:"Ctrl + Alt + Left"})," and ",(0,i.jsx)(t.code,{children:"Ctrl + Alt + Right"}),"."]}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Workspace Switching",src:n(43433).Z+"",width:"242",height:"93"})}),"\n",(0,i.jsx)(t.p,{children:'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".'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Workspace Menu",src:n(86624).Z+"",width:"411",height:"385"})}),"\n",(0,i.jsx)(t.p,{children:'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...".'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Open Panel Configuration",src:n(23084).Z+"",width:"177",height:"228"})}),"\n",(0,i.jsx)(t.p,{children:'Towards the bottom of the list you will find the Workspace Switcher. Click on it and then finish by clicking "+ Add".'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Add Applet to Panel",src:n(87666).Z+"",width:"512",height:"351"})}),"\n",(0,i.jsx)(t.p,{children:"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."}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Workspace Switcher",src:n(77967).Z+"",width:"265",height:"48"})}),"\n",(0,i.jsx)(t.p,{children:"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."}),"\n",(0,i.jsx)(t.h3,{id:"keyboard-shortcuts",children:"Keyboard shortcuts"}),"\n",(0,i.jsx)(t.p,{children:"MATE provides a variety of keyboard shortcuts for workspaces. By default, the keyboard shortcuts for switching directly to a certain workspace are disabled."}),"\n",(0,i.jsx)(t.p,{children:'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.'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Workspace Keyboard Shortcuts",src:n(63008).Z+"",width:"626",height:"408"})}),"\n",(0,i.jsx)(t.h3,{id:"workspaces-configuration",children:"Workspaces configuration"}),"\n",(0,i.jsx)(t.p,{children:'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".'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Open Switcher Preferences",src:n(5070).Z+"",width:"203",height:"228"})}),"\n",(0,i.jsx)(t.p,{children:'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.'}),"\n",(0,i.jsx)(t.p,{children:(0,i.jsx)(t.img,{alt:"MATE Workspace Switcher Preferences",src:n(3466).Z+"",width:"367",height:"409"})})]})}function h(e={}){const{wrapper:t}={...(0,s.a)(),...e.components};return t?(0,i.jsx)(t,{...e,children:(0,i.jsx)(l,{...e})}):l(e)}},67887:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/caja-desktop-folder-4165fea2b0afc876931a10dbeb707384.jpg"},25408:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-background-right-click-0edaca8eb885eb54466e0a358d0f06ea.jpg"},46964:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-background-selection-fefc0656871c76fa23c620d99521a0ef.jpg"},31132:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-bottom-panel-ibus-left-click-016e725ce808036efb8bc77bd7fb47d8.jpg"},89990:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-bottom-panel-keyboard-22cf218bfdf946e6c10250af144d2166.jpg"},35811:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-bottom-panel-network-left-click-d3520a23fb573b5b52700f97306190a9.jpg"},23084:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-bottom-panel-right-click-83df358e1390b363d6ae99f7465d006f.jpg"},13815:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-bottom-panel-sound-right-click-696d602e3df72f0463e5984e82964a20.jpg"},87653:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-clock-preferences-29e68150fa5526f0fbaab28c6f0ad6c2.jpg"},65545:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-create-new-user-00e085b06fb8c6899a23f90d14b50a29.jpg"},88955:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-ibus-add-startup-4f4ef3cf4e94656d727ff93c4e299432.jpg"},57540:(e,t,n)=>{n.d(t,{Z:()=>i});const i="data:image/jpeg;base64,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"},29608:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-ibus-starting-daemon-84bcee7978b1d8eb7163cb0d9b964ec3.jpg"},2390:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-keep-files-prompt-2aa2cbdb6a94db223d708562c884d71a.jpg"},46721:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-keyboard-choose-layout-e0ca24f2aa125275817acb229a194923.jpg"},19720:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-keyboard-layout-shortcuts-62aefb0c48a9d92a34c277497866e85e.jpg"},91066:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-keyboard-preferences-f13098df57c42dc0259006b9ac386dde.jpg"},572:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-monitor-preferences-confirm-c9ddeb8ecc32eb0a88fc49b247bd2535.jpg"},5229:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-monitor-preferences-dragging-0fb78bb10ab52ce991b90df95a517622.jpg"},95067:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-monitor-preferences-db6d4f848b460b4278da5c95e62d4d9d.jpg"},39667:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-mouse-settings-d43911b0e7fdc6f3a196808da1e353a8.jpg"},43845:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-multiple-user-settings-112efa554f35300d772bb5ede0cc603c.jpg"},21908:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-network-authentication-13f522132661aa358181f94e002fcc9f.jpg"},56120:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-network-disconnect-eff4984eda8c49d3e42259381f0490b0.jpg"},225:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-network-hidden-38a73abbffc438c4c8dc66f70d38fe33.jpg"},32077:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-open-with-right-click-096ce2548d773af1ee45fceb5f2153e4.jpg"},48197:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-open-with-setting-86e0958d69c60f7b4253ac2989931023.jpg"},33340:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-preferred-applications-dcd4e02b67ec579d69171c22c1eb38d3.jpg"},92617:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-single-user-settings-a1253a12d1a7214129fe3ac5dd897e32.jpg"},90751:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-sound-preferences-e6f0a451c79339dfbc290113f63e2894.jpg"},61690:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-startup-applications-e0d8dbd51c24a2987e3b83bc758d35fc.jpg"},14205:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-time-and-date-right-click-792aa50841ec26d8fcd4803ebb171839.jpg"},89206:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-time-and-date-settings-5fd258bf8a3cd09c075789ecb72370b4.jpg"},11410:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-time-and-date-c6cabc4c6ccfb4d51983c582ac985445.jpg"},92324:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-touchpad-settings-d9b3577e085d2ec9f5e357263f35ef90.jpg"},88409:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-tweak-desktop-30894d02f2a10654d0b8219947f974e6.jpg"},68146:(e,t,n)=>{n.d(t,{Z:()=>i});const i="data:image/jpeg;base64,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"},63008:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-workspace-keyboard-shortcuts-24395c1aa3f623b6b89284cffe6bd2e1.jpg"},87666:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-workspace-switch-add-to-panel-e57ec1f9a49d5dcf52f3126805d1d110.jpg"},3466:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-workspace-switcher-preferences-55630462d2aecfc0bd0f511b4ca5cd7c.jpg"},5070:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-workspace-switcher-right-click-0660da43481f40fe6fec7d39e0ec6f06.jpg"},77967:(e,t,n)=>{n.d(t,{Z:()=>i});const i="data:image/jpeg;base64,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"},43433:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-workspace-switching-a0f8cff6b00100314fd9f77994b5dcc9.jpg"},86624:(e,t,n)=>{n.d(t,{Z:()=>i});const i=n.p+"assets/images/mate-workspace-titlebar-right-click-6dfec2d387d17d6ca06de2ed728ff521.jpg"},11151:(e,t,n)=>{n.d(t,{Z:()=>r,a:()=>a});var i=n(67294);const s={},o=i.createContext(s);function a(e){const t=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:a(e.components),i.createElement(o.Provider,{value:t},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/2609550e.28490a36.js b/assets/js/2609550e.28490a36.js
new file mode 100644
index 000000000..ed3427dcf
--- /dev/null
+++ b/assets/js/2609550e.28490a36.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[3206],{65565:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>t,metadata:()=>r,toc:()=>d});var a=s(85893),i=s(11151);const t={title:"Samba File Sharing",summary:"A quick start guide to Samba on Solus"},o="Samba file sharing",r={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,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/networking/samba.md",tags:[],version:"current",lastUpdatedAt:1714518504e3,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={},d=[{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}];function c(e){const n={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,i.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.h1,{id:"samba-file-sharing",children:"Samba file sharing"}),"\n",(0,a.jsx)(n.p,{children:"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."}),"\n",(0,a.jsx)(n.h2,{id:"samba-on-solus",children:"Samba on Solus"}),"\n",(0,a.jsx)(n.p,{children:"To enable convenient file-sharing on Solus, we maintain a Solus-specific Samba configuration that out-of-the-box:"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:"Supports Samba usershare functionality"}),"\n",(0,a.jsxs)(n.li,{children:["Enables sharing of ",(0,a.jsx)(n.em,{children:"$HOME"})," folders (manual user account activation needed)"]}),"\n",(0,a.jsx)(n.li,{children:"Is set up as a standalone server using the SMB2.0.2 protocol and up (>= Windows Vista/Server 2008)"}),"\n",(0,a.jsxs)(n.li,{children:["Advertises itself via ",(0,a.jsx)(n.em,{children:"Avahi"})," aka ",(0,a.jsx)(n.em,{children:"Apple Bonjour"})," / ",(0,a.jsx)(n.em,{children:"mDNS"})," / ",(0,a.jsx)(n.em,{children:"zeroconf"})," for macOS compatibility"]}),"\n",(0,a.jsxs)(n.li,{children:["Advertises itself via ",(0,a.jsx)(n.em,{children:"wsdd"})," aka ",(0,a.jsx)(n.em,{children:"Web Services Discovery Daemon"})," for Windows 7+ compatibility"]}),"\n",(0,a.jsx)(n.li,{children:"Disables sharing of printers via Samba (use IPP via CUPS instead)"}),"\n",(0,a.jsx)(n.li,{children:"Allows access only from IPv4 and IPv6 private and link-local (non-internet-routable) addresses"}),"\n"]}),"\n",(0,a.jsx)(n.p,{children:"As of Samba 4.7.x, Solus disables the old, deprecated and insecure original SMB1/CIFS protocol by default."}),"\n",(0,a.jsxs)(n.p,{children:["For more information on this choice, please read ",(0,a.jsx)(n.a,{href:"https://techcommunity.microsoft.com/t5/storage-at-microsoft/stop-using-smb1/ba-p/425858",children:"this post regarding SMB1"}),"."]}),"\n",(0,a.jsx)(n.p,{children:"As of Samba 4.11.x, the SMB1/CIFS protocol is officially deprecated upstream."}),"\n",(0,a.jsx)(n.h3,{id:"how-to-startstop-samba",children:"How to start/stop Samba"}),"\n",(0,a.jsx)(n.p,{children:"Please note that Samba does NOT run on system boot by default. It needs to be manually started/configured to start automatically:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"# 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"})}),"\n",(0,a.jsx)(n.h3,{id:"enabling-windows-7-network-discovery-support",children:"Enabling Windows 7+ network discovery support"}),"\n",(0,a.jsxs)(n.p,{children:["The Web Services Discovery protocol is used by Windows 7+ clients to discover shares on other computers. Solus now includes the ",(0,a.jsx)(n.em,{children:"wsdd"})," service which provides support for the Web Services Discovery protocol."]}),"\n",(0,a.jsx)(n.p,{children:"When restarting wsdd, it may be necessary to also restart Samba."}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"# 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"})}),"\n",(0,a.jsxs)(n.p,{children:["For more details on managing services on Solus with ",(0,a.jsx)(n.em,{children:"systemctl"}),", see ",(0,a.jsx)(n.code,{children:"man systemctl"})," which is part of the systemd system and service manager."]}),"\n",(0,a.jsx)(n.h3,{id:"accessing-samba-via-ipv6",children:"Accessing Samba via IPv6"}),"\n",(0,a.jsx)(n.p,{children:"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."}),"\n",(0,a.jsx)(n.p,{children:"This can be verified in a terminal:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{children:"$ ip addr\n\n2: enp2s0: /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}];function c(e){const n={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,i.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.h1,{id:"samba-file-sharing",children:"Samba file sharing"}),"\n",(0,a.jsx)(n.p,{children:"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."}),"\n",(0,a.jsx)(n.h2,{id:"samba-on-solus",children:"Samba on Solus"}),"\n",(0,a.jsx)(n.p,{children:"To enable convenient file-sharing on Solus, we maintain a Solus-specific Samba configuration that out-of-the-box:"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:"Supports Samba usershare functionality"}),"\n",(0,a.jsxs)(n.li,{children:["Enables sharing of ",(0,a.jsx)(n.em,{children:"$HOME"})," folders (manual user account activation needed)"]}),"\n",(0,a.jsx)(n.li,{children:"Is set up as a standalone server using the SMB2.0.2 protocol and up (>= Windows Vista/Server 2008)"}),"\n",(0,a.jsxs)(n.li,{children:["Advertises itself via ",(0,a.jsx)(n.em,{children:"Avahi"})," aka ",(0,a.jsx)(n.em,{children:"Apple Bonjour"})," / ",(0,a.jsx)(n.em,{children:"mDNS"})," / ",(0,a.jsx)(n.em,{children:"zeroconf"})," for macOS compatibility"]}),"\n",(0,a.jsxs)(n.li,{children:["Advertises itself via ",(0,a.jsx)(n.em,{children:"wsdd"})," aka ",(0,a.jsx)(n.em,{children:"Web Services Discovery Daemon"})," for Windows 7+ compatibility"]}),"\n",(0,a.jsx)(n.li,{children:"Disables sharing of printers via Samba (use IPP via CUPS instead)"}),"\n",(0,a.jsx)(n.li,{children:"Allows access only from IPv4 and IPv6 private and link-local (non-internet-routable) addresses"}),"\n"]}),"\n",(0,a.jsx)(n.p,{children:"As of Samba 4.7.x, Solus disables the old, deprecated and insecure original SMB1/CIFS protocol by default."}),"\n",(0,a.jsxs)(n.p,{children:["For more information on this choice, please read ",(0,a.jsx)(n.a,{href:"https://techcommunity.microsoft.com/t5/storage-at-microsoft/stop-using-smb1/ba-p/425858",children:"this post regarding SMB1"}),"."]}),"\n",(0,a.jsx)(n.p,{children:"As of Samba 4.11.x, the SMB1/CIFS protocol is officially deprecated upstream."}),"\n",(0,a.jsx)(n.h3,{id:"how-to-startstop-samba",children:"How to start/stop Samba"}),"\n",(0,a.jsx)(n.p,{children:"Please note that Samba does NOT run on system boot by default. It needs to be manually started/configured to start automatically:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"# 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"})}),"\n",(0,a.jsx)(n.h3,{id:"enabling-windows-7-network-discovery-support",children:"Enabling Windows 7+ network discovery support"}),"\n",(0,a.jsxs)(n.p,{children:["The Web Services Discovery protocol is used by Windows 7+ clients to discover shares on other computers. Solus now includes the ",(0,a.jsx)(n.em,{children:"wsdd"})," service which provides support for the Web Services Discovery protocol."]}),"\n",(0,a.jsx)(n.p,{children:"When restarting wsdd, it may be necessary to also restart Samba."}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-bash",children:"# 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"})}),"\n",(0,a.jsxs)(n.p,{children:["For more details on managing services on Solus with ",(0,a.jsx)(n.em,{children:"systemctl"}),", see ",(0,a.jsx)(n.code,{children:"man systemctl"})," which is part of the systemd system and service manager."]}),"\n",(0,a.jsx)(n.h3,{id:"accessing-samba-via-ipv6",children:"Accessing Samba via IPv6"}),"\n",(0,a.jsx)(n.p,{children:"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."}),"\n",(0,a.jsx)(n.p,{children:"This can be verified in a terminal:"}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{children:"$ ip addr\n\n2: enp2s0: .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}];function d(e){const t={code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",strong:"strong",...(0,n.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h1,{id:"testing-a-package",children:"Testing a Package"}),"\n",(0,s.jsx)(t.p,{children:"After building a package, it must be tested against the unstable repository 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."}),"\n",(0,s.jsxs)(t.p,{children:["You will use the ",(0,s.jsx)(t.code,{children:".eopkg"})," file(s) created by the build process for testing."]}),"\n",(0,s.jsxs)(t.h2,{id:"install-the-eopkg-files",children:["Install the ",(0,s.jsx)(t.code,{children:".eopkg"})," files"]}),"\n",(0,s.jsxs)(t.p,{children:["To install your new package, run the following command in the directory where you built the package. Include ",(0,s.jsx)(t.strong,{children:"all"})," ",(0,s.jsx)(t.code,{children:".eopkg"})," files that were built."]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"sudo eopkg it *.eopkg\n"})}),"\n",(0,s.jsx)(t.p,{children:"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."}),"\n",(0,s.jsx)(t.p,{children:"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."}),"\n",(0,s.jsx)(t.h2,{id:"for-updated-packages-return-to-the-repository-version",children:"For updated packages: Return to the repository version"}),"\n",(0,s.jsxs)(t.p,{children:["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 and tested ",(0,s.jsx)(t.code,{children:"tree"}),":"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"sudo eopkg it --reinstall tree\n"})}),"\n",(0,s.jsxs)(t.h2,{id:"remove-the-eopkg-files",children:["Remove the ",(0,s.jsx)(t.code,{children:".eopkg"})," files"]}),"\n",(0,s.jsxs)(t.p,{children:["Before you can submit your pull request, you need to remove the ",(0,s.jsx)(t.code,{children:".eopkg"})," files. All repository packages are built by a dedicated build server from the source files provided in your pull request."]}),"\n",(0,s.jsx)(t.p,{children:"To remove these files, run:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"go-task clean\n"})})]})}function u(e={}){const{wrapper:t}={...(0,n.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},11151:(e,t,a)=>{a.d(t,{Z:()=>r,a:()=>i});var s=a(67294);const n={},o=s.createContext(n);function i(e){const t=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:i(e.components),s.createElement(o.Provider,{value:t},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/45e9d313.5805ffd1.js b/assets/js/45e9d313.5805ffd1.js
new file mode 100644
index 000000000..85b673b4d
--- /dev/null
+++ b/assets/js/45e9d313.5805ffd1.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[6114],{7415:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>u,frontMatter:()=>o,metadata:()=>r,toc:()=>c});var s=a(85893),n=a(11151);const o={title:"Testing a Package",summary:"Testing a Package",sidebar_position:5},i="Testing a Package",r={id:"packaging/testing-a-package",title:"Testing a Package",description:"After building a package, it must be tested against the unstable repository 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,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/testing-a-package.md",tags:[],version:"current",lastUpdatedAt:1714518504e3,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={},c=[{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}];function d(e){const t={code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",strong:"strong",...(0,n.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h1,{id:"testing-a-package",children:"Testing a Package"}),"\n",(0,s.jsx)(t.p,{children:"After building a package, it must be tested against the unstable repository 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."}),"\n",(0,s.jsxs)(t.p,{children:["You will use the ",(0,s.jsx)(t.code,{children:".eopkg"})," file(s) created by the build process for testing."]}),"\n",(0,s.jsxs)(t.h2,{id:"install-the-eopkg-files",children:["Install the ",(0,s.jsx)(t.code,{children:".eopkg"})," files"]}),"\n",(0,s.jsxs)(t.p,{children:["To install your new package, run the following command in the directory where you built the package. Include ",(0,s.jsx)(t.strong,{children:"all"})," ",(0,s.jsx)(t.code,{children:".eopkg"})," files that were built."]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"sudo eopkg it *.eopkg\n"})}),"\n",(0,s.jsx)(t.p,{children:"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."}),"\n",(0,s.jsx)(t.p,{children:"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."}),"\n",(0,s.jsx)(t.h2,{id:"for-updated-packages-return-to-the-repository-version",children:"For updated packages: Return to the repository version"}),"\n",(0,s.jsxs)(t.p,{children:["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 and tested ",(0,s.jsx)(t.code,{children:"tree"}),":"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"sudo eopkg it --reinstall tree\n"})}),"\n",(0,s.jsxs)(t.h2,{id:"remove-the-eopkg-files",children:["Remove the ",(0,s.jsx)(t.code,{children:".eopkg"})," files"]}),"\n",(0,s.jsxs)(t.p,{children:["Before you can submit your pull request, you need to remove the ",(0,s.jsx)(t.code,{children:".eopkg"})," files. All repository packages are built by a dedicated build server from the source files provided in your pull request."]}),"\n",(0,s.jsx)(t.p,{children:"To remove these files, run:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"go-task clean\n"})})]})}function u(e={}){const{wrapper:t}={...(0,n.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},11151:(e,t,a)=>{a.d(t,{Z:()=>r,a:()=>i});var s=a(67294);const n={},o=s.createContext(n);function i(e){const t=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:i(e.components),s.createElement(o.Provider,{value:t},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/46a65d96.3fc01409.js b/assets/js/46a65d96.3fc01409.js
new file mode 100644
index 000000000..ff51f697d
--- /dev/null
+++ b/assets/js/46a65d96.3fc01409.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[8092],{1907:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>l,contentTitle:()=>i,default:()=>c,frontMatter:()=>a,metadata:()=>t,toc:()=>d});var r=n(85893),o=n(11151);const a={title:"Repository Management",summary:"Repository Management"},i="Repository Management",t={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,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/package-management/repo-management.md",tags:[],version:"current",lastUpdatedAt:1714518504e3,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:"Privacy Policy",permalink:"/docs/user/privacy"}},l={},d=[{value:"Official Solus repositories",id:"official-solus-repositories",level:2},{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}];function p(e){const s={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,o.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.h1,{id:"repository-management",children:"Repository Management"}),"\n",(0,r.jsx)(s.p,{children:"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."}),"\n",(0,r.jsx)(s.h2,{id:"official-solus-repositories",children:"Official Solus repositories"}),"\n",(0,r.jsx)(s.p,{children:"The official Solus repositories are:"}),"\n",(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Repository"}),(0,r.jsx)(s.th,{children:"URL"}),(0,r.jsx)(s.th,{children:"Notes"})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"Stable (shannon)"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"https://cdn.getsol.us/repo/shannon/eopkg-index.xml.xz"})}),(0,r.jsx)(s.td,{children:"This is the default repository."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"Unstable"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"https://cdn.getsol.us/repo/unstable/eopkg-index.xml.xz"})}),(0,r.jsxs)(s.td,{children:["This repository should only be used if you intend to build Solus packages or to test new packages before they are synced to the ",(0,r.jsx)(s.em,{children:"stable"})," repository."]})]})]})]}),"\n",(0,r.jsx)(s.admonition,{type:"danger",children:(0,r.jsxs)(s.p,{children:["It is not always safe to perform a system update when using the ",(0,r.jsx)(s.strong,{children:"unstable"})," repository. Always check the topic of the ",(0,r.jsx)(s.a,{href:"https://matrix.to/#/#solus-packaging:matrix.org",children:"#solus-packaging"})," Matrix room before updating."]})}),"\n",(0,r.jsx)(s.h2,{id:"adding-a-repository",children:"Adding a repository"}),"\n",(0,r.jsx)(s.p,{children:"You can add a repository by using:"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sudo eopkg add-repo Name URL\n"})}),"\n",(0,r.jsx)(s.p,{children:"For example:"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sudo eopkg add-repo Example https://example.com/repo/eopkg-index.xml.xz\n"})}),"\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.strong,{children:"Note:"})," This does not enable the repository."]}),"\n",(0,r.jsx)(s.h2,{id:"removing-a-repository",children:"Removing a repository"}),"\n",(0,r.jsx)(s.p,{children:"You can remove a repository by using:"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sudo eopkg remove-repo Name\n"})}),"\n",(0,r.jsx)(s.p,{children:"For example:"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sudo eopkg remove-repo Example\n"})}),"\n",(0,r.jsx)(s.h2,{id:"enabling-a-repository",children:"Enabling a repository"}),"\n",(0,r.jsx)(s.p,{children:"You can enable a repository for usage, by using:"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sudo eopkg enable-repo Name\n"})}),"\n",(0,r.jsx)(s.p,{children:"For example:"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sudo eopkg enable-repo Example\n"})}),"\n",(0,r.jsx)(s.h2,{id:"disabling-a-repository",children:"Disabling a repository"}),"\n",(0,r.jsx)(s.p,{children:"You can disable a repository by using:"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sudo eopkg disable-repo Name\n"})}),"\n",(0,r.jsx)(s.p,{children:"For example:"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sudo eopkg disable-repo Example\n"})}),"\n",(0,r.jsx)(s.h2,{id:"updating-a-repository",children:"Updating a repository"}),"\n",(0,r.jsx)(s.p,{children:"You can update the index of a repository by using:"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sudo eopkg update-repo Name\n"})}),"\n",(0,r.jsx)(s.p,{children:"For example:"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sudo eopkg update-repo Example\n"})}),"\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.strong,{children:"Note:"})," You can update all repositories by ",(0,r.jsx)(s.strong,{children:"not"})," providing a name."]}),"\n",(0,r.jsx)(s.h2,{id:"list-repositories",children:"List repositories"}),"\n",(0,r.jsx)(s.p,{children:"You can list all the repositories added on your system by using:"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"eopkg list-repo\n"})})]})}function c(e={}){const{wrapper:s}={...(0,o.a)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(p,{...e})}):p(e)}},11151:(e,s,n)=>{n.d(s,{Z:()=>t,a:()=>i});var r=n(67294);const o={},a=r.createContext(o);function i(e){const s=r.useContext(a);return r.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function t(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),r.createElement(a.Provider,{value:s},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/46a65d96.4b44f532.js b/assets/js/46a65d96.4b44f532.js
deleted file mode 100644
index 28f650a84..000000000
--- a/assets/js/46a65d96.4b44f532.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[8092],{1907:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>l,contentTitle:()=>i,default:()=>c,frontMatter:()=>a,metadata:()=>t,toc:()=>d});var r=n(85893),o=n(11151);const a={title:"Repository Management",summary:"Repository Management"},i="Repository Management",t={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,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/package-management/repo-management.md",tags:[],version:"current",lastUpdatedAt:171439918e4,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:"Privacy Policy",permalink:"/docs/user/privacy"}},l={},d=[{value:"Official Solus repositories",id:"official-solus-repositories",level:2},{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}];function p(e){const s={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,o.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.h1,{id:"repository-management",children:"Repository Management"}),"\n",(0,r.jsx)(s.p,{children:"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."}),"\n",(0,r.jsx)(s.h2,{id:"official-solus-repositories",children:"Official Solus repositories"}),"\n",(0,r.jsx)(s.p,{children:"The official Solus repositories are:"}),"\n",(0,r.jsxs)(s.table,{children:[(0,r.jsx)(s.thead,{children:(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.th,{children:"Repository"}),(0,r.jsx)(s.th,{children:"URL"}),(0,r.jsx)(s.th,{children:"Notes"})]})}),(0,r.jsxs)(s.tbody,{children:[(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"Stable (shannon)"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"https://cdn.getsol.us/repo/shannon/eopkg-index.xml.xz"})}),(0,r.jsx)(s.td,{children:"This is the default repository."})]}),(0,r.jsxs)(s.tr,{children:[(0,r.jsx)(s.td,{children:(0,r.jsx)(s.strong,{children:"Unstable"})}),(0,r.jsx)(s.td,{children:(0,r.jsx)(s.code,{children:"https://cdn.getsol.us/repo/unstable/eopkg-index.xml.xz"})}),(0,r.jsxs)(s.td,{children:["This repository should only be used if you intend to build Solus packages or to test new packages before they are synced to the ",(0,r.jsx)(s.em,{children:"stable"})," repository."]})]})]})]}),"\n",(0,r.jsx)(s.admonition,{type:"danger",children:(0,r.jsxs)(s.p,{children:["It is not always safe to perform a system update when using the ",(0,r.jsx)(s.strong,{children:"unstable"})," repository. Always check the topic of the ",(0,r.jsx)(s.a,{href:"https://matrix.to/#/#solus-packaging:matrix.org",children:"#solus-packaging"})," Matrix room before updating."]})}),"\n",(0,r.jsx)(s.h2,{id:"adding-a-repository",children:"Adding a repository"}),"\n",(0,r.jsx)(s.p,{children:"You can add a repository by using:"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sudo eopkg add-repo Name URL\n"})}),"\n",(0,r.jsx)(s.p,{children:"For example:"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sudo eopkg add-repo Example https://example.com/repo/eopkg-index.xml.xz\n"})}),"\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.strong,{children:"Note:"})," This does not enable the repository."]}),"\n",(0,r.jsx)(s.h2,{id:"removing-a-repository",children:"Removing a repository"}),"\n",(0,r.jsx)(s.p,{children:"You can remove a repository by using:"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sudo eopkg remove-repo Name\n"})}),"\n",(0,r.jsx)(s.p,{children:"For example:"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sudo eopkg remove-repo Example\n"})}),"\n",(0,r.jsx)(s.h2,{id:"enabling-a-repository",children:"Enabling a repository"}),"\n",(0,r.jsx)(s.p,{children:"You can enable a repository for usage, by using:"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sudo eopkg enable-repo Name\n"})}),"\n",(0,r.jsx)(s.p,{children:"For example:"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sudo eopkg enable-repo Example\n"})}),"\n",(0,r.jsx)(s.h2,{id:"disabling-a-repository",children:"Disabling a repository"}),"\n",(0,r.jsx)(s.p,{children:"You can disable a repository by using:"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sudo eopkg disable-repo Name\n"})}),"\n",(0,r.jsx)(s.p,{children:"For example:"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sudo eopkg disable-repo Example\n"})}),"\n",(0,r.jsx)(s.h2,{id:"updating-a-repository",children:"Updating a repository"}),"\n",(0,r.jsx)(s.p,{children:"You can update the index of a repository by using:"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sudo eopkg update-repo Name\n"})}),"\n",(0,r.jsx)(s.p,{children:"For example:"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sudo eopkg update-repo Example\n"})}),"\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.strong,{children:"Note:"})," You can update all repositories by ",(0,r.jsx)(s.strong,{children:"not"})," providing a name."]}),"\n",(0,r.jsx)(s.h2,{id:"list-repositories",children:"List repositories"}),"\n",(0,r.jsx)(s.p,{children:"You can list all the repositories added on your system by using:"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"eopkg list-repo\n"})})]})}function c(e={}){const{wrapper:s}={...(0,o.a)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(p,{...e})}):p(e)}},11151:(e,s,n)=>{n.d(s,{Z:()=>t,a:()=>i});var r=n(67294);const o={},a=r.createContext(o);function i(e){const s=r.useContext(a);return r.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function t(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),r.createElement(a.Provider,{value:s},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/49b71c16.0031c800.js b/assets/js/49b71c16.0031c800.js
deleted file mode 100644
index 929166d00..000000000
--- a/assets/js/49b71c16.0031c800.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[3783],{73384:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>l,contentTitle:()=>t,default:()=>h,frontMatter:()=>c,metadata:()=>d,toc:()=>r});var s=i(85893),a=i(11151);const c={title:"Packaging Practices",summary:"Learning the best packaging practices"},t="Packaging Practices",d={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,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/packaging-practices.md",tags:[],version:"current",lastUpdatedAt:171439918e4,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"}},l={},r=[{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 pkgconfig dependency (if any)",id:"finding-what-package-provides-a-pkgconfig-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:"Check dependencies",id:"check-dependencies",level:2},{value:"Example",id:"example",level:3},{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}];function o(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,a.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"packaging-practices",children:"Packaging Practices"}),"\n",(0,s.jsxs)(n.p,{children:["The primary goal of ",(0,s.jsx)(n.code,{children:"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."]}),"\n",(0,s.jsx)(n.p,{children:"The next few sections will detail these."}),"\n",(0,s.jsx)(n.h2,{id:"package-naming",children:"Package naming"}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"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,s.jsx)(n.code,{children:"patterns"}),", however the available subpackage names are limited."]}),"\n",(0,s.jsxs)(n.p,{children:["We request you use (where possible) the upstream source name for your package. Subpackage names (when generated) are constructed by using the ",(0,s.jsx)(n.code,{children:"name"})," value first, then applying the subpackage name as such:"]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.code,{children:"pkgname-$subpackage"})}),"\n",(0,s.jsxs)(n.p,{children:["Subpackages are fully automatic with ",(0,s.jsx)(n.code,{children:"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,s.jsx)(n.code,{children:"$lib"})," is used to refer to the host library directory, i.e. ",(0,s.jsx)(n.code,{children:"lib"})," or ",(0,s.jsx)(n.code,{children:"lib64"})," (or ",(0,s.jsx)(n.code,{children:"lib32"})," on ",(0,s.jsx)(n.code,{children:"emul32"})," builds)."]}),"\n",(0,s.jsx)(n.p,{children:"For the libraries / packages of the following programming languages, you should typically use the following template for it."}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Language"}),(0,s.jsx)(n.th,{children:"Prefix"}),(0,s.jsx)(n.th,{children:"Example"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Haskell"}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"haskell-"})}),(0,s.jsxs)(n.td,{children:[(0,s.jsx)(n.code,{children:"text-binary"})," would be ",(0,s.jsx)(n.code,{children:"haskell-text-binary"})]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Perl"}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"perl-"})}),(0,s.jsxs)(n.td,{children:[(0,s.jsx)(n.code,{children:"algorithm-diff"})," would be ",(0,s.jsx)(n.code,{children:"perl-algorithm-diff"})]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Python"}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"python-"})}),(0,s.jsxs)(n.td,{children:[(0,s.jsx)(n.code,{children:"wikipedia"})," would be ",(0,s.jsx)(n.code,{children:"python-wikipedia"})," ",(0,s.jsx)(n.strong,{children:"even if only Python3 is enabled"})]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Ruby"}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"ruby-"})}),(0,s.jsxs)(n.td,{children:[(0,s.jsx)(n.code,{children:"gssapi"})," would be ",(0,s.jsx)(n.code,{children:"ruby-gssapi"})]})]})]})]}),"\n",(0,s.jsx)(n.h3,{id:"the-devel-subpackage",children:"The devel subpackage"}),"\n",(0,s.jsxs)(n.p,{children:["This is invariably created for packages that provide libraries and development headers. The following rules will result in files being placed in a ",(0,s.jsx)(n.code,{children:"devel"})," subpackage:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{children:"/usr/include\n/usr/$lib/lib*.so\n/usr/$lib/lib*.a\n/usr/share/man/man3\n/usr/share/pkgconfig\n/usr/$lib/pkgconfig\n/usr/share/cmake\n/usr/share/vala\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Note that for some packages, ",(0,s.jsx)(n.code,{children:"/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 ",(0,s.jsx)(n.code,{children:"pspec_*.xml"})," file generated after running the build.\nIf this happens, simply override with ",(0,s.jsx)(n.code,{children:"patterns"})," or set ",(0,s.jsx)(n.code,{children:"libsplit"})," to \u201cno\u201d."]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"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,s.jsx)(n.code,{children:"--disable-static"})," to your configure routine. If ",(0,s.jsx)(n.code,{children:"*.a"})," files are shown in your packaging request, it will be questioned, as they can pose a greater security risk if packages link against these static archives."]}),"\n",(0,s.jsx)(n.h3,{id:"the-docs-subpackage",children:"The docs subpackage"}),"\n",(0,s.jsxs)(n.p,{children:["Currently there is only one pattern which is forced into a ",(0,s.jsx)(n.code,{children:"docs"})," subpackage:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{children:"/usr/share/gtk-doc/html\n"})}),"\n",(0,s.jsxs)(n.p,{children:["If required, you can use ",(0,s.jsx)(n.code,{children:"patterns"})," to move other files into the ",(0,s.jsx)(n.code,{children:"docs"})," subpackage, reducing the size of the main package."]}),"\n",(0,s.jsx)(n.h3,{id:"the-32bit-subpackage",children:"The 32bit subpackage"}),"\n",(0,s.jsxs)(n.p,{children:["This subpackage is only generated during an ",(0,s.jsx)(n.code,{children:"emul32"})," build. The following paths will automatically be placed into a ",(0,s.jsx)(n.code,{children:"32bit"})," subpackage"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{children:"/usr/lib32/lib*.so\n/usr/lib32/lib*.so.*\n/usr/lib32/lib*.a\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Note the same static archive rules apply to ",(0,s.jsx)(n.code,{children:"32bit"})," packages. These packages aren\u2019t as heavily split as we try to discourage their use, though they must be provided in some instances."]}),"\n",(0,s.jsx)(n.h3,{id:"the-utils-subpackage",children:"The utils subpackage"}),"\n",(0,s.jsxs)(n.p,{children:["This is not an automatic subpackage, you must use ",(0,s.jsx)(n.code,{children:"patterns"})," to utilize it. It is provided for instances that it may not be suitable to have binaries present, i.e. for a library package."]}),"\n",(0,s.jsx)(n.h2,{id:"maintenance",children:"Maintenance"}),"\n",(0,s.jsxs)(n.p,{children:["When submitting a changed ",(0,s.jsx)(n.code,{children:"package.yml"}),", it must be accompanied by its corresponding ",(0,s.jsx)(n.code,{children:"pspec_*.xml"})," file, which was generated at build time. This machine file allows the repository maintainers to evaluate the package condition."]}),"\n",(0,s.jsxs)(n.p,{children:["When providing a new version of a package, or a fix, always ensure you increment the ",(0,s.jsx)(n.code,{children:"release"})," number by 1. This ensures that users of your package are correctly updated to the latest version."]}),"\n",(0,s.jsxs)(n.p,{children:["Never submit a package without having first tested it, and ensuring it builds within ",(0,s.jsx)(n.code,{children:"solbuild"}),", a clean chroot environment."]}),"\n",(0,s.jsx)(n.h2,{id:"licenses",children:"Licenses"}),"\n",(0,s.jsxs)(n.p,{children:["All new packages or updates to packages should abide by the ",(0,s.jsx)(n.a,{href:"https://spdx.org/licenses/",children:"SPDX 3.x"})," definitions, with the following policy:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"-only"})," licenses, such as ",(0,s.jsx)(n.code,{children:"GPL-2.0-only"}),", should ",(0,s.jsx)(n.strong,{children:"only be declared"}),' as such when the upstream explicitly states "only", otherwise it should always be ',(0,s.jsx)(n.code,{children:"-or-later"}),"."]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"build-dependencies",children:"Build dependencies"}),"\n",(0,s.jsxs)(n.admonition,{type:"note",children:[(0,s.jsxs)(n.p,{children:["Build dependencies should be ordered according to the following rules in ",(0,s.jsx)(n.code,{children:"package.yml"}),":"]}),(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"pkgconfig"})," dependencies before explicitly named dependencies"]}),"\n",(0,s.jsxs)(n.li,{children:["Each of these two groups in so-called ASCIIbetical order (that is, alphabetical order with all uppercase letters before lowercase letters, and digits/punctuation before letters, ",(0,s.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/ASCII#Character_order",children:"see here"}),")"]}),"\n"]}),(0,s.jsx)(n.p,{children:"Example:"}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"builddeps :\n - pkgconfig(MYGUI)\n - pkgconfig(Qt5Core)\n - pkgconfig(ayatana-appindicator-0.1)\n - pkgconfig(dri)\n - pkgconfig(gtk+-3.0)\n - The-Powder-Toy\n - abcMIDI\n - abcm2ps\n - git\n - python-poetry\n - swig\n"})})]}),"\n",(0,s.jsx)(n.h3,{id:"background",children:"Background"}),"\n",(0,s.jsx)(n.p,{children:"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."}),"\n",(0,s.jsx)(n.p,{children:"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."}),"\n",(0,s.jsxs)(n.p,{children:["This is achieved by populating the ",(0,s.jsx)(n.code,{children:"builddeps"})," key with a list of build dependencies. We support two kinds of build dependencies: explicitly named, or ",(0,s.jsx)(n.code,{children:"pkgconfig"})," dependencies."]}),"\n",(0,s.jsxs)(n.p,{children:["We prefer the use of ",(0,s.jsx)(n.code,{children:"pkgconfig"})," dependencies. Most modern software will use the ",(0,s.jsx)(n.code,{children:"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."]}),"\n",(0,s.jsxs)(n.p,{children:["An obvious advantage to supporting ",(0,s.jsx)(n.code,{children:"pkgconfig"})," dependencies is that there is a 1:1 mapping between the name requested by the build and the name used within the ",(0,s.jsx)(n.code,{children:"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,s.jsx)(n.code,{children:".pc"})," files (for ",(0,s.jsx)(n.code,{children:"pkg-config"}),") it contains, enabling you to use those as a build dependency."]}),"\n",(0,s.jsxs)(n.p,{children:["A secondary advantage is that this allows for easily switching or replacing a providing package. When no ",(0,s.jsx)(n.code,{children:"pkgconfig"})," name is available (some packages do not provide these, or it doesn\u2019t make sense for them to), you may use the explicit package name. Always ensure you select the correct package, i.e. the ",(0,s.jsx)(n.code,{children:"-devel"})," subpackage. This provides the necessary symlinks and headers to build packages."]}),"\n",(0,s.jsx)(n.h3,{id:"finding-what-package-provides-a-pkgconfig-dependency-if-any",children:"Finding what package provides a pkgconfig dependency (if any)"}),"\n",(0,s.jsxs)(n.p,{children:["You can use ",(0,s.jsx)(n.code,{children:"go-task"})," to find packages that satisfy ",(0,s.jsx)(n.code,{children:"pkgconfig"})," dependencies. It can search for multiple dependencies at once."]}),"\n",(0,s.jsxs)(n.p,{children:["As an example, if you know a package has the build dependencies ",(0,s.jsx)(n.code,{children:"Qt5Core"})," and ",(0,s.jsx)(n.code,{children:"Qt6Core"}),", you would run:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"go-task pkgconfig -- Qt5Core Qt6Core\n"})}),"\n",(0,s.jsx)(n.p,{children:"This will output:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"pkgconfig(Qt5Core) found in: qt5-base-devel\npkgconfig(Qt6Core) found in: qt6-base-devel\n"})}),"\n",(0,s.jsxs)(n.p,{children:["You can also determine if there are ",(0,s.jsx)(n.code,{children:"pkgconfigs"})," available from a ",(0,s.jsx)(n.code,{children:"-devel"})," package by doing ",(0,s.jsx)(n.code,{children:"eopkg info (name)"})," and looking for the ",(0,s.jsx)(n.code,{children:"Provides"})," key."]}),"\n",(0,s.jsx)(n.p,{children:"Example:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"eopkg info libgtk-3-devel\n"})}),"\n",(0,s.jsx)(n.p,{children:"In output:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"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"})}),"\n",(0,s.jsx)(n.h3,{id:"using-pkgconfig-dependencies",children:"Using pkgconfig dependencies"}),"\n",(0,s.jsxs)(n.p,{children:["In the ",(0,s.jsx)(n.code,{children:"builddeps"})," list, use the ",(0,s.jsx)(n.code,{children:"pkgconfig(name)"})," syntax. For example, to add ",(0,s.jsx)(n.code,{children:"gtk+-3.0"})," to the build dependencies, you would do the following:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"builddeps:\n - pkgconfig(gtk+-3.0)\n"})}),"\n",(0,s.jsxs)(n.p,{children:["At build time the appropriate provider package is selected, in this instance ",(0,s.jsx)(n.code,{children:"libgtk-3-devel"})]}),"\n",(0,s.jsx)(n.h3,{id:"using-explicitly-named-dependencies",children:"Using explicitly named dependencies"}),"\n",(0,s.jsxs)(n.p,{children:["When there is not a ",(0,s.jsx)(n.code,{children:"pkgconfig"})," dependency available, use an explicitly named dependency.\nSimply list the package name."]}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:["When a ",(0,s.jsx)(n.code,{children:"pkgconfig"})," dependency is available you will be asked to use that instead."]})}),"\n",(0,s.jsx)(n.p,{children:"Example:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"builddeps:\n - stk-devel\n"})}),"\n",(0,s.jsx)(n.h2,{id:"runtime-dependencies",children:"Runtime dependencies"}),"\n",(0,s.jsxs)(n.p,{children:["Runtime dependencies are extra packages that a package needs in order to function correctly. A common example of this is other libraries. Solus ",(0,s.jsx)(n.code,{children:"eopkg"})," packages will automatically add any binary dependencies at runtime, so that you do not have to."]}),"\n",(0,s.jsxs)(n.p,{children:["All ",(0,s.jsx)(n.code,{children:"devel"})," subpackages automatically depend on their parent package. On top of this, if they provide a ",(0,s.jsx)(n.code,{children:".pc"})," pkg-config file, we export this information, and automatically determine the packages this particular package would need to be able to build against correctly. As such, the majority of dependencies for builds are automatically resolved."]}),"\n",(0,s.jsx)(n.p,{children:"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."}),"\n",(0,s.jsxs)(n.p,{children:["To account for this, you may add extra explicit runtime dependencies to your package. These are taken from the optional ",(0,s.jsx)(n.code,{children:"rundeps"})," ypkg key."]}),"\n",(0,s.jsxs)(n.p,{children:["This key uses the ",(0,s.jsx)(n.code,{children:"dict(s)"})," type, and the default key is the current package ",(0,s.jsx)(n.code,{children:"name"}),". You may express a different subpackage to apply dependencies to by using that name as a key, i.e. ",(0,s.jsx)(n.code,{children:"devel"}),", or ",(0,s.jsx)(n.code,{children:"docs"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"This would add the \u201cpython-gobject\u201d runtime dependency to the main package:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"rundeps:\n - python-gobject\n"})}),"\n",(0,s.jsxs)(n.p,{children:["This would add the same dependency, as well as adding it to the ",(0,s.jsx)(n.code,{children:"devel"})," subpackage:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"rundeps:\n - python-gobject\n - devel: python-gobject\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Remember this uses the ",(0,s.jsx)(n.code,{children:"dict(s)"})," type, which is very flexible. You can equally express this as follows (adding more deps as an example):"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"rundeps:\n - python-gobject\n - devel:\n - somepackage\n - someotherpackage\n"})}),"\n",(0,s.jsx)(n.h2,{id:"check-dependencies",children:"Check dependencies"}),"\n",(0,s.jsxs)(n.p,{children:["Check dependencies are a special kind of build dependency reserved for automatic package testing by ",(0,s.jsx)(n.code,{children:"solbuild"}),". Check dependencies should only be used during the ",(0,s.jsx)(n.code,{children:"check"})," build phase.\nWhen a package is part of an automatic build sequence, these dependencies will ",(0,s.jsx)(n.strong,{children:"not"})," be considered when determining build order."]}),"\n",(0,s.jsx)(n.h3,{id:"example",children:"Example"}),"\n",(0,s.jsxs)(n.p,{children:["The package ",(0,s.jsx)(n.code,{children:"cbindgen"})," includes ",(0,s.jsx)(n.code,{children:"cython"})," in ",(0,s.jsx)(n.code,{children:"checkdeps"})," to run tests in the ",(0,s.jsx)(n.code,{children:"check"})," phase."]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"https://github.com/getsolus/packages/blob/main/packages/c/cbindgen/package.yml",children:"cbindgen package.yml file"})}),"\n",(0,s.jsx)(n.h2,{id:"patching--extra-files",children:"Patching / extra files"}),"\n",(0,s.jsxs)(n.p,{children:["Files that may be required during the build can be accessed via the ",(0,s.jsx)(n.code,{children:"$pkgfiles"})," variable. Note that you must store your files in the ",(0,s.jsx)(n.code,{children:"./files"})," directory relative to your ",(0,s.jsx)(n.code,{children:"package.yml"})]}),"\n",(0,s.jsxs)(n.p,{children:["Both patches and extra files (such as systemd units) are stored in this directory. Note that if your patch is to address a ",(0,s.jsx)(n.strong,{children:"CVE"}),", you must use the following naming scheme: ",(0,s.jsx)(n.code,{children:"./files/security/cve-xxxx-xxxx.patch"})]}),"\n",(0,s.jsxs)(n.p,{children:["Where ",(0,s.jsx)(n.code,{children:"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,s.jsx)(n.code,{children:"cve-check-tool"}),"\nkept\nSolus tooling allows the use of ",(0,s.jsx)(n.code,{children:"./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,s.jsx)(n.code,{children:"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)."]}),"\n",(0,s.jsx)(n.h3,{id:"applying-a-patch",children:"Applying a patch"}),"\n",(0,s.jsxs)(n.p,{children:["It is common practice to apply the patch file(s) within the ",(0,s.jsx)(n.code,{children:"setup"})," section of your build staging. We can achieve this using the ",(0,s.jsx)(n.code,{children:"%patch"})," macro, and the ",(0,s.jsx)(n.code,{children:"$pkgfiles"})," variable. In this example, the required file is located at ",(0,s.jsx)(n.code,{children:"./files/0002-Sample-commit-2.patch"})]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"%patch -p1 -i $pkgfiles/0002-Sample-commit-2.patch\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Note you use the macro as you would normally use the ",(0,s.jsx)(n.code,{children:"patch"})," command, however use of the macro ensures it performs a clean batch-mode patch."]}),"\n",(0,s.jsxs)(n.p,{children:["If you are using compressed patches, i.e. for the ",(0,s.jsx)(n.code,{children:"bash"})," or ",(0,s.jsx)(n.code,{children:"readline"})," packages, you can pipe the call through ",(0,s.jsx)(n.code,{children:"zcat"})," or similar:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"zcat $pkgfiles/bash43-032.gz | %patch -p0\n"})}),"\n",(0,s.jsx)(n.h4,{id:"handling-multiple-patches",children:"Handling multiple patches"}),"\n",(0,s.jsxs)(n.p,{children:["In the event you need to apply multiple patches, such as a multitude of CVE patches, it may be sensible to use our ",(0,s.jsx)(n.code,{children:"%apply_patches"})," macro, which will apply all the patches listed in a ",(0,s.jsx)(n.code,{children:"series"})," file in your package's ",(0,s.jsx)(n.code,{children:"./files"})," folder. Example below:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"security/cve-xxxx-xxxx.patch\nfix-silliness.patch\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Both of the files above will be applied using stripping number ",(0,s.jsx)(n.code,{children:"-p1"}),". If you need to use a different stripping number, like ",(0,s.jsx)(n.code,{children:"-p4"}),", you can write:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"security/cve-xxxx-xxxx.patch -p4\nfix-silliness.patch\n"})}),"\n",(0,s.jsx)(n.h2,{id:"installing-extra-files",children:"Installing extra files"}),"\n",(0,s.jsxs)(n.p,{children:["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,s.jsx)(n.code,{children:"install"})," command, ensuring you set the correct permissions. Again, files are accessible from the ",(0,s.jsx)(n.code,{children:"./files"})," directory, relative to ",(0,s.jsx)(n.code,{children:"package.yml"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["This is an example of installing a custom profile file, seen in the ",(0,s.jsx)(n.code,{children:"bash"})," package:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"install -m 0644 $pkgfiles/profile $installdir/etc/profile\n"})}),"\n",(0,s.jsx)(n.h2,{id:"patterns",children:"Patterns"}),"\n",(0,s.jsxs)(n.p,{children:["In most instances, ",(0,s.jsx)(n.code,{children:"ypkg"})," will assign the correct location for files, whether it be in the main ",(0,s.jsx)(n.code,{children:"name"})," package, or a subpackage. However there may be instances where the default does not match the intended behaviour."]}),"\n",(0,s.jsx)(n.p,{children:"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."}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"patterns"})," key expects a ",(0,s.jsx)(n.code,{children:"dict(s)"})," argument. The default key for each pattern is assumed to be the ",(0,s.jsx)(n.code,{children:"name"})," of the package, so omitting the name would place files into the main package. The value should be a path or pattern you wish to match, ensuring files go to a specific location."]}),"\n",(0,s.jsxs)(n.p,{children:["In this example from ",(0,s.jsx)(n.code,{children:"libjpeg-turbo"}),", we move all documentation into the ",(0,s.jsx)(n.code,{children:"docs"})," subpackage:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{children:"patterns:\n - docs: [/usr/share/man]\n"})}),"\n",(0,s.jsxs)(n.p,{children:["This example, taken from the ",(0,s.jsx)(n.code,{children:"wayland"})," package, ensures the binaries from ",(0,s.jsx)(n.code,{children:"/usr/bin"})," and the directory ",(0,s.jsx)(n.code,{children:"/usr/share/wayland"})," are located in the ",(0,s.jsx)(n.code,{children:"devel"})," subpackage:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{children:"patterns:\n - devel:\n - /usr/bin\n - /usr/share/wayland\n"})}),"\n",(0,s.jsx)(n.h2,{id:"replace--rename",children:"Replace / rename"}),"\n",(0,s.jsxs)(n.p,{children:["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 marked ",(0,s.jsx)(n.strong,{children:"Obsolete"})," within the index. This will ensure correct upgrade paths for users."]}),"\n",(0,s.jsxs)(n.p,{children:["Note that to retire a package, you must also coordinate with a repository maintainer. An ",(0,s.jsx)(n.strong,{children:"Obsolete"})," package is removed by the package manager when the user upgrades. As such, correct upgrade paths need to be established."]}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"replaces"})," ypkg key uses the ",(0,s.jsx)(n.code,{children:"dict(s)"})," type, and the default key is assumed to be the current package ",(0,s.jsx)(n.code,{children:"name"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["In this example, we rename the ",(0,s.jsx)(n.code,{children:"libgeoclue*"})," packages to use the correct names, and ensure a working upgrade path."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{children:"replaces:\n - devel: libgeoclue-devel\n - libgeoclue\n"})}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"name"})," of this package is ",(0,s.jsx)(n.code,{children:"geoclue"}),", and the new package names are now:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.code,{children:"geoclue"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.code,{children:"geoclue-devel"})}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["Given the ",(0,s.jsx)(n.code,{children:"replaces"})," values above, ",(0,s.jsx)(n.code,{children:"geoclue"})," now replaces ",(0,s.jsx)(n.code,{children:"libgeoclue"}),", and ",(0,s.jsx)(n.code,{children:"geoclue-devel"})," replaces ",(0,s.jsx)(n.code,{children:"libgeoclue-devel"}),". This is entirely transparent to the user, with a seamless update replacing the old packages with the new renamed packages."]}),"\n",(0,s.jsxs)(n.p,{children:["The repository maintainer marked the old names as ",(0,s.jsx)(n.strong,{children:"Obsolete"})," in the index."]})]})}function h(e={}){const{wrapper:n}={...(0,a.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(o,{...e})}):o(e)}},11151:(e,n,i)=>{i.d(n,{Z:()=>d,a:()=>t});var s=i(67294);const a={},c=s.createContext(a);function t(e){const n=s.useContext(c);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:t(e.components),s.createElement(c.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/49b71c16.0fe3c2e1.js b/assets/js/49b71c16.0fe3c2e1.js
new file mode 100644
index 000000000..ab057ca32
--- /dev/null
+++ b/assets/js/49b71c16.0fe3c2e1.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[3783],{73384:(e,n,i)=>{i.r(n),i.d(n,{assets:()=>l,contentTitle:()=>t,default:()=>h,frontMatter:()=>c,metadata:()=>d,toc:()=>r});var s=i(85893),a=i(11151);const c={title:"Packaging Practices",summary:"Learning the best packaging practices"},t="Packaging Practices",d={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,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/packaging-practices.md",tags:[],version:"current",lastUpdatedAt:1714518504e3,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"}},l={},r=[{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 pkgconfig dependency (if any)",id:"finding-what-package-provides-a-pkgconfig-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:"Check dependencies",id:"check-dependencies",level:2},{value:"Example",id:"example",level:3},{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}];function o(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,a.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"packaging-practices",children:"Packaging Practices"}),"\n",(0,s.jsxs)(n.p,{children:["The primary goal of ",(0,s.jsx)(n.code,{children:"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."]}),"\n",(0,s.jsx)(n.p,{children:"The next few sections will detail these."}),"\n",(0,s.jsx)(n.h2,{id:"package-naming",children:"Package naming"}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"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,s.jsx)(n.code,{children:"patterns"}),", however the available subpackage names are limited."]}),"\n",(0,s.jsxs)(n.p,{children:["We request you use (where possible) the upstream source name for your package. Subpackage names (when generated) are constructed by using the ",(0,s.jsx)(n.code,{children:"name"})," value first, then applying the subpackage name as such:"]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.code,{children:"pkgname-$subpackage"})}),"\n",(0,s.jsxs)(n.p,{children:["Subpackages are fully automatic with ",(0,s.jsx)(n.code,{children:"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,s.jsx)(n.code,{children:"$lib"})," is used to refer to the host library directory, i.e. ",(0,s.jsx)(n.code,{children:"lib"})," or ",(0,s.jsx)(n.code,{children:"lib64"})," (or ",(0,s.jsx)(n.code,{children:"lib32"})," on ",(0,s.jsx)(n.code,{children:"emul32"})," builds)."]}),"\n",(0,s.jsx)(n.p,{children:"For the libraries / packages of the following programming languages, you should typically use the following template for it."}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Language"}),(0,s.jsx)(n.th,{children:"Prefix"}),(0,s.jsx)(n.th,{children:"Example"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Haskell"}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"haskell-"})}),(0,s.jsxs)(n.td,{children:[(0,s.jsx)(n.code,{children:"text-binary"})," would be ",(0,s.jsx)(n.code,{children:"haskell-text-binary"})]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Perl"}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"perl-"})}),(0,s.jsxs)(n.td,{children:[(0,s.jsx)(n.code,{children:"algorithm-diff"})," would be ",(0,s.jsx)(n.code,{children:"perl-algorithm-diff"})]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Python"}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"python-"})}),(0,s.jsxs)(n.td,{children:[(0,s.jsx)(n.code,{children:"wikipedia"})," would be ",(0,s.jsx)(n.code,{children:"python-wikipedia"})," ",(0,s.jsx)(n.strong,{children:"even if only Python3 is enabled"})]})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Ruby"}),(0,s.jsx)(n.td,{children:(0,s.jsx)(n.code,{children:"ruby-"})}),(0,s.jsxs)(n.td,{children:[(0,s.jsx)(n.code,{children:"gssapi"})," would be ",(0,s.jsx)(n.code,{children:"ruby-gssapi"})]})]})]})]}),"\n",(0,s.jsx)(n.h3,{id:"the-devel-subpackage",children:"The devel subpackage"}),"\n",(0,s.jsxs)(n.p,{children:["This is invariably created for packages that provide libraries and development headers. The following rules will result in files being placed in a ",(0,s.jsx)(n.code,{children:"devel"})," subpackage:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{children:"/usr/include\n/usr/$lib/lib*.so\n/usr/$lib/lib*.a\n/usr/share/man/man3\n/usr/share/pkgconfig\n/usr/$lib/pkgconfig\n/usr/share/cmake\n/usr/share/vala\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Note that for some packages, ",(0,s.jsx)(n.code,{children:"/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 ",(0,s.jsx)(n.code,{children:"pspec_*.xml"})," file generated after running the build.\nIf this happens, simply override with ",(0,s.jsx)(n.code,{children:"patterns"})," or set ",(0,s.jsx)(n.code,{children:"libsplit"})," to \u201cno\u201d."]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.strong,{children:"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,s.jsx)(n.code,{children:"--disable-static"})," to your configure routine. If ",(0,s.jsx)(n.code,{children:"*.a"})," files are shown in your packaging request, it will be questioned, as they can pose a greater security risk if packages link against these static archives."]}),"\n",(0,s.jsx)(n.h3,{id:"the-docs-subpackage",children:"The docs subpackage"}),"\n",(0,s.jsxs)(n.p,{children:["Currently there is only one pattern which is forced into a ",(0,s.jsx)(n.code,{children:"docs"})," subpackage:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{children:"/usr/share/gtk-doc/html\n"})}),"\n",(0,s.jsxs)(n.p,{children:["If required, you can use ",(0,s.jsx)(n.code,{children:"patterns"})," to move other files into the ",(0,s.jsx)(n.code,{children:"docs"})," subpackage, reducing the size of the main package."]}),"\n",(0,s.jsx)(n.h3,{id:"the-32bit-subpackage",children:"The 32bit subpackage"}),"\n",(0,s.jsxs)(n.p,{children:["This subpackage is only generated during an ",(0,s.jsx)(n.code,{children:"emul32"})," build. The following paths will automatically be placed into a ",(0,s.jsx)(n.code,{children:"32bit"})," subpackage"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{children:"/usr/lib32/lib*.so\n/usr/lib32/lib*.so.*\n/usr/lib32/lib*.a\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Note the same static archive rules apply to ",(0,s.jsx)(n.code,{children:"32bit"})," packages. These packages aren\u2019t as heavily split as we try to discourage their use, though they must be provided in some instances."]}),"\n",(0,s.jsx)(n.h3,{id:"the-utils-subpackage",children:"The utils subpackage"}),"\n",(0,s.jsxs)(n.p,{children:["This is not an automatic subpackage, you must use ",(0,s.jsx)(n.code,{children:"patterns"})," to utilize it. It is provided for instances that it may not be suitable to have binaries present, i.e. for a library package."]}),"\n",(0,s.jsx)(n.h2,{id:"maintenance",children:"Maintenance"}),"\n",(0,s.jsxs)(n.p,{children:["When submitting a changed ",(0,s.jsx)(n.code,{children:"package.yml"}),", it must be accompanied by its corresponding ",(0,s.jsx)(n.code,{children:"pspec_*.xml"})," file, which was generated at build time. This machine file allows the repository maintainers to evaluate the package condition."]}),"\n",(0,s.jsxs)(n.p,{children:["When providing a new version of a package, or a fix, always ensure you increment the ",(0,s.jsx)(n.code,{children:"release"})," number by 1. This ensures that users of your package are correctly updated to the latest version."]}),"\n",(0,s.jsxs)(n.p,{children:["Never submit a package without having first tested it, and ensuring it builds within ",(0,s.jsx)(n.code,{children:"solbuild"}),", a clean chroot environment."]}),"\n",(0,s.jsx)(n.h2,{id:"licenses",children:"Licenses"}),"\n",(0,s.jsxs)(n.p,{children:["All new packages or updates to packages should abide by the ",(0,s.jsx)(n.a,{href:"https://spdx.org/licenses/",children:"SPDX 3.x"})," definitions, with the following policy:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"-only"})," licenses, such as ",(0,s.jsx)(n.code,{children:"GPL-2.0-only"}),", should ",(0,s.jsx)(n.strong,{children:"only be declared"}),' as such when the upstream explicitly states "only", otherwise it should always be ',(0,s.jsx)(n.code,{children:"-or-later"}),"."]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"build-dependencies",children:"Build dependencies"}),"\n",(0,s.jsxs)(n.admonition,{type:"note",children:[(0,s.jsxs)(n.p,{children:["Build dependencies should be ordered according to the following rules in ",(0,s.jsx)(n.code,{children:"package.yml"}),":"]}),(0,s.jsxs)(n.ol,{children:["\n",(0,s.jsxs)(n.li,{children:[(0,s.jsx)(n.code,{children:"pkgconfig"})," dependencies before explicitly named dependencies"]}),"\n",(0,s.jsxs)(n.li,{children:["Each of these two groups in so-called ASCIIbetical order (that is, alphabetical order with all uppercase letters before lowercase letters, and digits/punctuation before letters, ",(0,s.jsx)(n.a,{href:"https://en.wikipedia.org/wiki/ASCII#Character_order",children:"see here"}),")"]}),"\n"]}),(0,s.jsx)(n.p,{children:"Example:"}),(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"builddeps :\n - pkgconfig(MYGUI)\n - pkgconfig(Qt5Core)\n - pkgconfig(ayatana-appindicator-0.1)\n - pkgconfig(dri)\n - pkgconfig(gtk+-3.0)\n - The-Powder-Toy\n - abcMIDI\n - abcm2ps\n - git\n - python-poetry\n - swig\n"})})]}),"\n",(0,s.jsx)(n.h3,{id:"background",children:"Background"}),"\n",(0,s.jsx)(n.p,{children:"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."}),"\n",(0,s.jsx)(n.p,{children:"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."}),"\n",(0,s.jsxs)(n.p,{children:["This is achieved by populating the ",(0,s.jsx)(n.code,{children:"builddeps"})," key with a list of build dependencies. We support two kinds of build dependencies: explicitly named, or ",(0,s.jsx)(n.code,{children:"pkgconfig"})," dependencies."]}),"\n",(0,s.jsxs)(n.p,{children:["We prefer the use of ",(0,s.jsx)(n.code,{children:"pkgconfig"})," dependencies. Most modern software will use the ",(0,s.jsx)(n.code,{children:"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."]}),"\n",(0,s.jsxs)(n.p,{children:["An obvious advantage to supporting ",(0,s.jsx)(n.code,{children:"pkgconfig"})," dependencies is that there is a 1:1 mapping between the name requested by the build and the name used within the ",(0,s.jsx)(n.code,{children:"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,s.jsx)(n.code,{children:".pc"})," files (for ",(0,s.jsx)(n.code,{children:"pkg-config"}),") it contains, enabling you to use those as a build dependency."]}),"\n",(0,s.jsxs)(n.p,{children:["A secondary advantage is that this allows for easily switching or replacing a providing package. When no ",(0,s.jsx)(n.code,{children:"pkgconfig"})," name is available (some packages do not provide these, or it doesn\u2019t make sense for them to), you may use the explicit package name. Always ensure you select the correct package, i.e. the ",(0,s.jsx)(n.code,{children:"-devel"})," subpackage. This provides the necessary symlinks and headers to build packages."]}),"\n",(0,s.jsx)(n.h3,{id:"finding-what-package-provides-a-pkgconfig-dependency-if-any",children:"Finding what package provides a pkgconfig dependency (if any)"}),"\n",(0,s.jsxs)(n.p,{children:["You can use ",(0,s.jsx)(n.code,{children:"go-task"})," to find packages that satisfy ",(0,s.jsx)(n.code,{children:"pkgconfig"})," dependencies. It can search for multiple dependencies at once."]}),"\n",(0,s.jsxs)(n.p,{children:["As an example, if you know a package has the build dependencies ",(0,s.jsx)(n.code,{children:"Qt5Core"})," and ",(0,s.jsx)(n.code,{children:"Qt6Core"}),", you would run:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"go-task pkgconfig -- Qt5Core Qt6Core\n"})}),"\n",(0,s.jsx)(n.p,{children:"This will output:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"pkgconfig(Qt5Core) found in: qt5-base-devel\npkgconfig(Qt6Core) found in: qt6-base-devel\n"})}),"\n",(0,s.jsxs)(n.p,{children:["You can also determine if there are ",(0,s.jsx)(n.code,{children:"pkgconfigs"})," available from a ",(0,s.jsx)(n.code,{children:"-devel"})," package by doing ",(0,s.jsx)(n.code,{children:"eopkg info (name)"})," and looking for the ",(0,s.jsx)(n.code,{children:"Provides"})," key."]}),"\n",(0,s.jsx)(n.p,{children:"Example:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"eopkg info libgtk-3-devel\n"})}),"\n",(0,s.jsx)(n.p,{children:"In output:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"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"})}),"\n",(0,s.jsx)(n.h3,{id:"using-pkgconfig-dependencies",children:"Using pkgconfig dependencies"}),"\n",(0,s.jsxs)(n.p,{children:["In the ",(0,s.jsx)(n.code,{children:"builddeps"})," list, use the ",(0,s.jsx)(n.code,{children:"pkgconfig(name)"})," syntax. For example, to add ",(0,s.jsx)(n.code,{children:"gtk+-3.0"})," to the build dependencies, you would do the following:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"builddeps:\n - pkgconfig(gtk+-3.0)\n"})}),"\n",(0,s.jsxs)(n.p,{children:["At build time the appropriate provider package is selected, in this instance ",(0,s.jsx)(n.code,{children:"libgtk-3-devel"})]}),"\n",(0,s.jsx)(n.h3,{id:"using-explicitly-named-dependencies",children:"Using explicitly named dependencies"}),"\n",(0,s.jsxs)(n.p,{children:["When there is not a ",(0,s.jsx)(n.code,{children:"pkgconfig"})," dependency available, use an explicitly named dependency.\nSimply list the package name."]}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsxs)(n.p,{children:["When a ",(0,s.jsx)(n.code,{children:"pkgconfig"})," dependency is available you will be asked to use that instead."]})}),"\n",(0,s.jsx)(n.p,{children:"Example:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"builddeps:\n - stk-devel\n"})}),"\n",(0,s.jsx)(n.h2,{id:"runtime-dependencies",children:"Runtime dependencies"}),"\n",(0,s.jsxs)(n.p,{children:["Runtime dependencies are extra packages that a package needs in order to function correctly. A common example of this is other libraries. Solus ",(0,s.jsx)(n.code,{children:"eopkg"})," packages will automatically add any binary dependencies at runtime, so that you do not have to."]}),"\n",(0,s.jsxs)(n.p,{children:["All ",(0,s.jsx)(n.code,{children:"devel"})," subpackages automatically depend on their parent package. On top of this, if they provide a ",(0,s.jsx)(n.code,{children:".pc"})," pkg-config file, we export this information, and automatically determine the packages this particular package would need to be able to build against correctly. As such, the majority of dependencies for builds are automatically resolved."]}),"\n",(0,s.jsx)(n.p,{children:"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."}),"\n",(0,s.jsxs)(n.p,{children:["To account for this, you may add extra explicit runtime dependencies to your package. These are taken from the optional ",(0,s.jsx)(n.code,{children:"rundeps"})," ypkg key."]}),"\n",(0,s.jsxs)(n.p,{children:["This key uses the ",(0,s.jsx)(n.code,{children:"dict(s)"})," type, and the default key is the current package ",(0,s.jsx)(n.code,{children:"name"}),". You may express a different subpackage to apply dependencies to by using that name as a key, i.e. ",(0,s.jsx)(n.code,{children:"devel"}),", or ",(0,s.jsx)(n.code,{children:"docs"}),"."]}),"\n",(0,s.jsx)(n.p,{children:"This would add the \u201cpython-gobject\u201d runtime dependency to the main package:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"rundeps:\n - python-gobject\n"})}),"\n",(0,s.jsxs)(n.p,{children:["This would add the same dependency, as well as adding it to the ",(0,s.jsx)(n.code,{children:"devel"})," subpackage:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"rundeps:\n - python-gobject\n - devel: python-gobject\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Remember this uses the ",(0,s.jsx)(n.code,{children:"dict(s)"})," type, which is very flexible. You can equally express this as follows (adding more deps as an example):"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-yaml",children:"rundeps:\n - python-gobject\n - devel:\n - somepackage\n - someotherpackage\n"})}),"\n",(0,s.jsx)(n.h2,{id:"check-dependencies",children:"Check dependencies"}),"\n",(0,s.jsxs)(n.p,{children:["Check dependencies are a special kind of build dependency reserved for automatic package testing by ",(0,s.jsx)(n.code,{children:"solbuild"}),". Check dependencies should only be used during the ",(0,s.jsx)(n.code,{children:"check"})," build phase.\nWhen a package is part of an automatic build sequence, these dependencies will ",(0,s.jsx)(n.strong,{children:"not"})," be considered when determining build order."]}),"\n",(0,s.jsx)(n.h3,{id:"example",children:"Example"}),"\n",(0,s.jsxs)(n.p,{children:["The package ",(0,s.jsx)(n.code,{children:"cbindgen"})," includes ",(0,s.jsx)(n.code,{children:"cython"})," in ",(0,s.jsx)(n.code,{children:"checkdeps"})," to run tests in the ",(0,s.jsx)(n.code,{children:"check"})," phase."]}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"https://github.com/getsolus/packages/blob/main/packages/c/cbindgen/package.yml",children:"cbindgen package.yml file"})}),"\n",(0,s.jsx)(n.h2,{id:"patching--extra-files",children:"Patching / extra files"}),"\n",(0,s.jsxs)(n.p,{children:["Files that may be required during the build can be accessed via the ",(0,s.jsx)(n.code,{children:"$pkgfiles"})," variable. Note that you must store your files in the ",(0,s.jsx)(n.code,{children:"./files"})," directory relative to your ",(0,s.jsx)(n.code,{children:"package.yml"})]}),"\n",(0,s.jsxs)(n.p,{children:["Both patches and extra files (such as systemd units) are stored in this directory. Note that if your patch is to address a ",(0,s.jsx)(n.strong,{children:"CVE"}),", you must use the following naming scheme: ",(0,s.jsx)(n.code,{children:"./files/security/cve-xxxx-xxxx.patch"})]}),"\n",(0,s.jsxs)(n.p,{children:["Where ",(0,s.jsx)(n.code,{children:"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,s.jsx)(n.code,{children:"cve-check-tool"}),"\nkept\nSolus tooling allows the use of ",(0,s.jsx)(n.code,{children:"./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,s.jsx)(n.code,{children:"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)."]}),"\n",(0,s.jsx)(n.h3,{id:"applying-a-patch",children:"Applying a patch"}),"\n",(0,s.jsxs)(n.p,{children:["It is common practice to apply the patch file(s) within the ",(0,s.jsx)(n.code,{children:"setup"})," section of your build staging. We can achieve this using the ",(0,s.jsx)(n.code,{children:"%patch"})," macro, and the ",(0,s.jsx)(n.code,{children:"$pkgfiles"})," variable. In this example, the required file is located at ",(0,s.jsx)(n.code,{children:"./files/0002-Sample-commit-2.patch"})]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"%patch -p1 -i $pkgfiles/0002-Sample-commit-2.patch\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Note you use the macro as you would normally use the ",(0,s.jsx)(n.code,{children:"patch"})," command, however use of the macro ensures it performs a clean batch-mode patch."]}),"\n",(0,s.jsxs)(n.p,{children:["If you are using compressed patches, i.e. for the ",(0,s.jsx)(n.code,{children:"bash"})," or ",(0,s.jsx)(n.code,{children:"readline"})," packages, you can pipe the call through ",(0,s.jsx)(n.code,{children:"zcat"})," or similar:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"zcat $pkgfiles/bash43-032.gz | %patch -p0\n"})}),"\n",(0,s.jsx)(n.h4,{id:"handling-multiple-patches",children:"Handling multiple patches"}),"\n",(0,s.jsxs)(n.p,{children:["In the event you need to apply multiple patches, such as a multitude of CVE patches, it may be sensible to use our ",(0,s.jsx)(n.code,{children:"%apply_patches"})," macro, which will apply all the patches listed in a ",(0,s.jsx)(n.code,{children:"series"})," file in your package's ",(0,s.jsx)(n.code,{children:"./files"})," folder. Example below:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"security/cve-xxxx-xxxx.patch\nfix-silliness.patch\n"})}),"\n",(0,s.jsxs)(n.p,{children:["Both of the files above will be applied using stripping number ",(0,s.jsx)(n.code,{children:"-p1"}),". If you need to use a different stripping number, like ",(0,s.jsx)(n.code,{children:"-p4"}),", you can write:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"security/cve-xxxx-xxxx.patch -p4\nfix-silliness.patch\n"})}),"\n",(0,s.jsx)(n.h2,{id:"installing-extra-files",children:"Installing extra files"}),"\n",(0,s.jsxs)(n.p,{children:["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,s.jsx)(n.code,{children:"install"})," command, ensuring you set the correct permissions. Again, files are accessible from the ",(0,s.jsx)(n.code,{children:"./files"})," directory, relative to ",(0,s.jsx)(n.code,{children:"package.yml"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["This is an example of installing a custom profile file, seen in the ",(0,s.jsx)(n.code,{children:"bash"})," package:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"install -m 0644 $pkgfiles/profile $installdir/etc/profile\n"})}),"\n",(0,s.jsx)(n.h2,{id:"patterns",children:"Patterns"}),"\n",(0,s.jsxs)(n.p,{children:["In most instances, ",(0,s.jsx)(n.code,{children:"ypkg"})," will assign the correct location for files, whether it be in the main ",(0,s.jsx)(n.code,{children:"name"})," package, or a subpackage. However there may be instances where the default does not match the intended behaviour."]}),"\n",(0,s.jsx)(n.p,{children:"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."}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"patterns"})," key expects a ",(0,s.jsx)(n.code,{children:"dict(s)"})," argument. The default key for each pattern is assumed to be the ",(0,s.jsx)(n.code,{children:"name"})," of the package, so omitting the name would place files into the main package. The value should be a path or pattern you wish to match, ensuring files go to a specific location."]}),"\n",(0,s.jsxs)(n.p,{children:["In this example from ",(0,s.jsx)(n.code,{children:"libjpeg-turbo"}),", we move all documentation into the ",(0,s.jsx)(n.code,{children:"docs"})," subpackage:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{children:"patterns:\n - docs: [/usr/share/man]\n"})}),"\n",(0,s.jsxs)(n.p,{children:["This example, taken from the ",(0,s.jsx)(n.code,{children:"wayland"})," package, ensures the binaries from ",(0,s.jsx)(n.code,{children:"/usr/bin"})," and the directory ",(0,s.jsx)(n.code,{children:"/usr/share/wayland"})," are located in the ",(0,s.jsx)(n.code,{children:"devel"})," subpackage:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{children:"patterns:\n - devel:\n - /usr/bin\n - /usr/share/wayland\n"})}),"\n",(0,s.jsx)(n.h2,{id:"replace--rename",children:"Replace / rename"}),"\n",(0,s.jsxs)(n.p,{children:["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 marked ",(0,s.jsx)(n.strong,{children:"Obsolete"})," within the index. This will ensure correct upgrade paths for users."]}),"\n",(0,s.jsxs)(n.p,{children:["Note that to retire a package, you must also coordinate with a repository maintainer. An ",(0,s.jsx)(n.strong,{children:"Obsolete"})," package is removed by the package manager when the user upgrades. As such, correct upgrade paths need to be established."]}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"replaces"})," ypkg key uses the ",(0,s.jsx)(n.code,{children:"dict(s)"})," type, and the default key is assumed to be the current package ",(0,s.jsx)(n.code,{children:"name"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["In this example, we rename the ",(0,s.jsx)(n.code,{children:"libgeoclue*"})," packages to use the correct names, and ensure a working upgrade path."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{children:"replaces:\n - devel: libgeoclue-devel\n - libgeoclue\n"})}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"name"})," of this package is ",(0,s.jsx)(n.code,{children:"geoclue"}),", and the new package names are now:"]}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.code,{children:"geoclue"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.code,{children:"geoclue-devel"})}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["Given the ",(0,s.jsx)(n.code,{children:"replaces"})," values above, ",(0,s.jsx)(n.code,{children:"geoclue"})," now replaces ",(0,s.jsx)(n.code,{children:"libgeoclue"}),", and ",(0,s.jsx)(n.code,{children:"geoclue-devel"})," replaces ",(0,s.jsx)(n.code,{children:"libgeoclue-devel"}),". This is entirely transparent to the user, with a seamless update replacing the old packages with the new renamed packages."]}),"\n",(0,s.jsxs)(n.p,{children:["The repository maintainer marked the old names as ",(0,s.jsx)(n.strong,{children:"Obsolete"})," in the index."]})]})}function h(e={}){const{wrapper:n}={...(0,a.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(o,{...e})}):o(e)}},11151:(e,n,i)=>{i.d(n,{Z:()=>d,a:()=>t});var s=i(67294);const a={},c=s.createContext(a);function t(e){const n=s.useContext(c);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:t(e.components),s.createElement(c.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/513b6405.6f9a393b.js b/assets/js/513b6405.6f9a393b.js
deleted file mode 100644
index 9fb1e3268..000000000
--- a/assets/js/513b6405.6f9a393b.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[4278],{75081:(e,i,s)=>{s.r(i),s.d(i,{assets:()=>l,contentTitle:()=>r,default:()=>h,frontMatter:()=>o,metadata:()=>a,toc:()=>c});var t=s(85893),n=s(11151);const o={title:"Prepare for Packaging",summary:"Quick guide on getting your system set up for packaging on Solus",sidebar_position:1},r="Prepare for packaging",a={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,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/prepare-for-packaging.md",tags:[],version:"current",lastUpdatedAt:171439918e4,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"}},l={},c=[{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 and Git",id:"setting-up-a-github-account-and-git",level:2},{value:"Configure github-cli
.",id:"configure-github-cli",level:3},{value:"Git identity setup",id:"git-identity-setup",level:3},{value:"Setting up solbuild",id:"setting-up-solbuild",level:2},{value:"Updating solbuild",id:"updating-solbuild",level:3},{value:"Fork the getsolus/packages repository",id:"fork-the-getsoluspackages-repository",level:2},{value:"Clone your forked package repository",id:"clone-your-forked-package-repository",level:2},{value:"Initialize git hooks",id:"initialize-git-hooks",level:2},{value:"Set up repository helper functions (optional)",id:"set-up-repository-helper-functions-optional",level:2},{value:"bash",id:"bash",level:3},{value:"fish",id:"fish",level:3},{value:"zsh",id:"zsh",level:3},{value:"Building packages",id:"building-packages",level:2}];function d(e){const i={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",hr:"hr",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,n.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(i.h1,{id:"prepare-for-packaging",children:"Prepare for packaging"}),"\n",(0,t.jsx)(i.h2,{id:"switch-to-the-unstable-repository",children:"Switch to the Unstable repository"}),"\n",(0,t.jsx)(i.p,{children:'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 and other similar tools in the Solus repository.'}),"\n",(0,t.jsxs)(i.p,{children:["Refer to ",(0,t.jsx)(i.a,{href:"/docs/user/package-management/repo-management",children:"Repository Management"})," to see how to add and switch to unstable."]}),"\n",(0,t.jsx)(i.h2,{id:"setting-up-the-packager-file",children:"Setting up the packager file"}),"\n",(0,t.jsx)(i.p,{children:"In order to utilize the build system, you must first set up a configuration file that has your packager details."}),"\n",(0,t.jsxs)(i.p,{children:["This file lives in the ",(0,t.jsx)(i.code,{children:".config/solus"})," folder of your home directory. You will need to create the ",(0,t.jsx)(i.code,{children:".config/solus"})," folder as well as the inner ",(0,t.jsx)(i.code,{children:"packager"})," file. Inside the packager file, you need two keys, ",(0,t.jsx)(i.code,{children:"Name"})," and ",(0,t.jsx)(i.code,{children:"Email"}),". This is used when generating the machine file so that the packager details are stored within the resulting binary package."]}),"\n",(0,t.jsxs)(i.p,{children:["Name and email address are mandatory. You must use your real first and last name(s) for accountability purposes.\nA ",(0,t.jsx)(i.a,{href:"/docs/user/contributing/getting-involved#matrix-chat",children:"Matrix"})," contact is optional but recommended."]}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-ini",children:"[Packager]\nName=Your Name Here\nEmail=your.email@address\nMatrix=@username:matrix.org\n"})}),"\n",(0,t.jsx)(i.h2,{id:"installing-development-tools",children:"Installing development tools"}),"\n",(0,t.jsx)(i.p,{children:"We need to install a few things in order to get started with packaging:"}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.code,{children:"git"})," is used for version control of the Solus sources"]}),"\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.code,{children:"github-cli"})," is used to make working with GitHub easier"]}),"\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.code,{children:"go-task"})," is used by our build tools for scripting"]}),"\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.code,{children:"jq"})," is used by our optional ",(0,t.jsx)(i.a,{href:"#set-up-repository-helper-functions-optional",children:"Helper Functions"})]}),"\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.code,{children:"solbuild"})," is a lightweight container environment for building packages repeatably"]}),"\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.code,{children:"solbuild-config-unstable"})," sets up solbuild for working with the ",(0,t.jsx)(i.code,{children:"unstable"})," repository"]}),"\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.code,{children:"ypkg"})," is the program that actually builds packages"]}),"\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.code,{children:"yq"})," is used by the ",(0,t.jsx)(i.code,{children:"go-task add-monitoring"})," command to create new ",(0,t.jsx)(i.a,{href:"/docs/packaging/monitoring.yml",children:(0,t.jsx)(i.code,{children:"monitoring.yml"})})," files"]}),"\n"]}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-bash",children:"sudo eopkg it git github-cli go-task jq solbuild solbuild-config-unstable ypkg yq\n"})}),"\n",(0,t.jsx)(i.h2,{id:"setting-up-a-github-account-and-git",children:"Setting up a GitHub account and Git"}),"\n",(0,t.jsxs)(i.p,{children:["The Solus source repositories for the package repository currently reside on ",(0,t.jsx)(i.a,{href:"https://github.com/getsolus/packages",children:"github.com/getsolus/packages"}),". You will need a GitHub account to submit patches and file issues. You can create a GitHub account ",(0,t.jsx)(i.a,{href:"https://github.com/signup",children:"here"}),". Note that you will also need to set up ",(0,t.jsx)(i.a,{href:"https://docs.github.com/en/authentication/securing-your-account-with-two-factor-authentication-2fa",children:"2FA"})," (two-factor authentication) for your account."]}),"\n",(0,t.jsxs)(i.h3,{id:"configure-github-cli",children:["Configure ",(0,t.jsx)(i.code,{children:"github-cli"}),"."]}),"\n",(0,t.jsxs)(i.p,{children:["Once you have a GitHub account, you need to configure ",(0,t.jsx)(i.code,{children:"github-cli"})," to work with it. At minimum, you need to run ",(0,t.jsx)(i.code,{children:"gh auth login"}),". Have your GitHub credentials and 2FA (two-factor authentication) mechanism at hand."]}),"\n",(0,t.jsxs)(i.p,{children:["See the ",(0,t.jsx)(i.a,{href:"https://docs.github.com/en/github-cli/github-cli/quickstart",children:"GitHub CLI quickstart"})," for some common uses of the tool."]}),"\n",(0,t.jsx)(i.h3,{id:"git-identity-setup",children:"Git identity setup"}),"\n",(0,t.jsxs)(i.p,{children:["If you have not used git before, you should set your git identity in your global git config file (",(0,t.jsx)(i.code,{children:"~/.gitconfig"}),"). Use the following commands:"]}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-bash",children:'git config --global user.name "John Doe"\ngit config --global user.email johndoe@example.com\n'})}),"\n",(0,t.jsxs)(i.p,{children:["See the ",(0,t.jsx)(i.a,{href:"https://git-scm.com/book/en/v2/Getting-Started-First-Time-Git-Setup",children:"Git Book"})," for more first-time setup options."]}),"\n",(0,t.jsx)(i.h2,{id:"setting-up-solbuild",children:"Setting up solbuild"}),"\n",(0,t.jsxs)(i.p,{children:["The ",(0,t.jsx)(i.code,{children:"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."]}),"\n",(0,t.jsx)(i.p,{children:"Initialize solbuild via:"}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-bash",children:"sudo solbuild init\n"})}),"\n",(0,t.jsx)(i.p,{children:"This will take some time as it downloads and prepares the image."}),"\n",(0,t.jsx)(i.h3,{id:"updating-solbuild",children:"Updating solbuild"}),"\n",(0,t.jsx)(i.p,{children:"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."}),"\n",(0,t.jsx)(i.p,{children:"To update solbuild, run:"}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-bash",children:"sudo solbuild update\n"})}),"\n",(0,t.jsx)(i.h2,{id:"fork-the-getsoluspackages-repository",children:"Fork the getsolus/packages repository"}),"\n",(0,t.jsxs)(i.p,{children:["Create your own fork of ",(0,t.jsx)(i.a,{href:"https://github.com/getsolus/packages",children:"getsolus/packages"})," using the GitHub web UI or ",(0,t.jsxs)(i.a,{href:"https://cli.github.com/manual/gh_repo_fork",children:[(0,t.jsx)(i.code,{children:"gh"})," cli tool"]})," from the ",(0,t.jsx)(i.code,{children:"github-cli"})," package. It will be forked to ",(0,t.jsx)(i.code,{children:"github.com/yourgithubaccount/packages"}),"."]}),"\n",(0,t.jsx)(i.h2,{id:"clone-your-forked-package-repository",children:"Clone your forked package repository"}),"\n",(0,t.jsxs)(i.p,{children:["Create a local clone of the package repository you just forked. Here we are using the name ",(0,t.jsx)(i.code,{children:"solus-packages"})," and cloning it into our home directoy. The rest of the documentation will presume this structure. You can choose a different name and path but will have to make sure to replace it in every command that refers to the ",(0,t.jsx)(i.code,{children:"solus-packages"})," directory."]}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-bash",children:"gh repo clone packages ~/solus-packages\n"})}),"\n",(0,t.jsx)(i.h2,{id:"initialize-git-hooks",children:"Initialize git hooks"}),"\n",(0,t.jsx)(i.p,{children:"Initialize Git hooks for working with the repository by running:"}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{children:"go-task -d ~/solus-packages init\n"})}),"\n",(0,t.jsx)(i.p,{children:"This makes it easy to create commits in the correct format, and will warn you about issues with changes you commit."}),"\n",(0,t.jsx)(i.h2,{id:"set-up-repository-helper-functions-optional",children:"Set up repository helper functions (optional)"}),"\n",(0,t.jsx)(i.p,{children:"The helper functions are a collection of shell scripts that help you navigate the packages repository more quickly, and perform some specialized searches."}),"\n",(0,t.jsx)(i.p,{children:"After cloning your repository, create a symlink to source the helper functions for your shell. Then, start a new instance of the shell."}),"\n",(0,t.jsx)(i.h3,{id:"bash",children:"bash"}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-bash",children:"mkdir -p ~/.bashrc.d\nln -s ~/solus-packages/common/Scripts/helpers.sh ~/.bashrc.d/solus-monorepo-helpers.sh\n"})}),"\n",(0,t.jsx)(i.h3,{id:"fish",children:"fish"}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-bash",children:"mkdir -p ~/.config/fish/conf.d\nln -s ~/solus-packages/common/Scripts/helpers.fish ~/.config/fish/conf.d/solus.fish\n"})}),"\n",(0,t.jsx)(i.h3,{id:"zsh",children:"zsh"}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-bash",children:'mkdir -p ~/.zshrc.d\nprintf "\\nfpath=(~/.zshrc.d \\$fpath)" >> ~/.zshrc\nsource ~/.zshrc\nln -s ~/solus-packages/common/Scripts/helpers.zsh ~/.zshrc.d/solus-monorepo-helpers.zsh\n'})}),"\n",(0,t.jsx)(i.hr,{}),"\n",(0,t.jsx)(i.p,{children:"You should now have the following available from your shell:"}),"\n",(0,t.jsxs)(i.table,{children:[(0,t.jsx)(i.thead,{children:(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.th,{children:"Function"}),(0,t.jsx)(i.th,{children:"Description"}),(0,t.jsx)(i.th,{children:"Usage"})]})}),(0,t.jsxs)(i.tbody,{children:[(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:(0,t.jsx)(i.strong,{children:"cpesearch"})}),(0,t.jsxs)(i.td,{children:["Search for CPE Names for packages. For use when writing the ",(0,t.jsx)(i.a,{href:"/docs/packaging/monitoring.yml",children:(0,t.jsx)(i.code,{children:"monitoring.yml"})})," file for a package"]}),(0,t.jsx)(i.td,{children:(0,t.jsx)(i.code,{children:"cpesearch search-term"})})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:(0,t.jsx)(i.strong,{children:"goroot"})}),(0,t.jsx)(i.td,{children:"When in the Solus packages repository, change directory to the root directory."}),(0,t.jsx)(i.td,{children:(0,t.jsx)(i.code,{children:"goroot"})})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:(0,t.jsx)(i.strong,{children:"gotopkg"})}),(0,t.jsxs)(i.td,{children:["Change directory to any Solus package. You can type part of the package name then double press ",(0,t.jsx)(i.code,{children:"Tab"})," to get autocompletion for this function."]}),(0,t.jsx)(i.td,{children:(0,t.jsx)(i.code,{children:"gotopkg firefox"})})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:(0,t.jsx)(i.strong,{children:"gotosoluspkgs"})}),(0,t.jsx)(i.td,{children:"Change directory to the Solus packages repository from anywhere on the filesystem."}),(0,t.jsx)(i.td,{children:(0,t.jsx)(i.code,{children:"gotosoluspkgs"})})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:(0,t.jsx)(i.strong,{children:"whatprovides"})}),(0,t.jsxs)(i.td,{children:["Find out what package provides a library by reading the ",(0,t.jsx)(i.code,{children:"abi_libs"})," files."]}),(0,t.jsx)(i.td,{children:(0,t.jsx)(i.code,{children:"whatprovides libfoobar.so.1"})})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:(0,t.jsx)(i.strong,{children:"whatuses"})}),(0,t.jsxs)(i.td,{children:["Find out what packages use a library by reading the ",(0,t.jsx)(i.code,{children:"abi_used_libs"})," files."]}),(0,t.jsx)(i.td,{children:(0,t.jsx)(i.code,{children:"whatuses libfoobar.so.1"})})]})]})]}),"\n",(0,t.jsx)(i.h2,{id:"building-packages",children:"Building packages"}),"\n",(0,t.jsxs)(i.p,{children:["Your system is now set up for package work.\nIf you are new to packaging, see ",(0,t.jsx)(i.a,{href:"/docs/packaging/your-first-package-update",children:"Your First Package Update"}),"."]})]})}function h(e={}){const{wrapper:i}={...(0,n.a)(),...e.components};return i?(0,t.jsx)(i,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},11151:(e,i,s)=>{s.d(i,{Z:()=>a,a:()=>r});var t=s(67294);const n={},o=t.createContext(n);function r(e){const i=t.useContext(o);return t.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function a(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:r(e.components),t.createElement(o.Provider,{value:i},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/513b6405.d6af7134.js b/assets/js/513b6405.d6af7134.js
new file mode 100644
index 000000000..8fd85217b
--- /dev/null
+++ b/assets/js/513b6405.d6af7134.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[4278],{75081:(e,i,s)=>{s.r(i),s.d(i,{assets:()=>l,contentTitle:()=>r,default:()=>h,frontMatter:()=>o,metadata:()=>a,toc:()=>c});var t=s(85893),n=s(11151);const o={title:"Prepare for Packaging",summary:"Quick guide on getting your system set up for packaging on Solus",sidebar_position:1},r="Prepare for packaging",a={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,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/prepare-for-packaging.md",tags:[],version:"current",lastUpdatedAt:1714518504e3,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"}},l={},c=[{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 and Git",id:"setting-up-a-github-account-and-git",level:2},{value:"Configure github-cli
.",id:"configure-github-cli",level:3},{value:"Git identity setup",id:"git-identity-setup",level:3},{value:"Setting up solbuild",id:"setting-up-solbuild",level:2},{value:"Updating solbuild",id:"updating-solbuild",level:3},{value:"Fork the getsolus/packages repository",id:"fork-the-getsoluspackages-repository",level:2},{value:"Clone your forked package repository",id:"clone-your-forked-package-repository",level:2},{value:"Initialize git hooks",id:"initialize-git-hooks",level:2},{value:"Set up repository helper functions (optional)",id:"set-up-repository-helper-functions-optional",level:2},{value:"bash",id:"bash",level:3},{value:"fish",id:"fish",level:3},{value:"zsh",id:"zsh",level:3},{value:"Building packages",id:"building-packages",level:2}];function d(e){const i={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",hr:"hr",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,n.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(i.h1,{id:"prepare-for-packaging",children:"Prepare for packaging"}),"\n",(0,t.jsx)(i.h2,{id:"switch-to-the-unstable-repository",children:"Switch to the Unstable repository"}),"\n",(0,t.jsx)(i.p,{children:'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 and other similar tools in the Solus repository.'}),"\n",(0,t.jsxs)(i.p,{children:["Refer to ",(0,t.jsx)(i.a,{href:"/docs/user/package-management/repo-management",children:"Repository Management"})," to see how to add and switch to unstable."]}),"\n",(0,t.jsx)(i.h2,{id:"setting-up-the-packager-file",children:"Setting up the packager file"}),"\n",(0,t.jsx)(i.p,{children:"In order to utilize the build system, you must first set up a configuration file that has your packager details."}),"\n",(0,t.jsxs)(i.p,{children:["This file lives in the ",(0,t.jsx)(i.code,{children:".config/solus"})," folder of your home directory. You will need to create the ",(0,t.jsx)(i.code,{children:".config/solus"})," folder as well as the inner ",(0,t.jsx)(i.code,{children:"packager"})," file. Inside the packager file, you need two keys, ",(0,t.jsx)(i.code,{children:"Name"})," and ",(0,t.jsx)(i.code,{children:"Email"}),". This is used when generating the machine file so that the packager details are stored within the resulting binary package."]}),"\n",(0,t.jsxs)(i.p,{children:["Name and email address are mandatory. You must use your real first and last name(s) for accountability purposes.\nA ",(0,t.jsx)(i.a,{href:"/docs/user/contributing/getting-involved#matrix-chat",children:"Matrix"})," contact is optional but recommended."]}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-ini",children:"[Packager]\nName=Your Name Here\nEmail=your.email@address\nMatrix=@username:matrix.org\n"})}),"\n",(0,t.jsx)(i.h2,{id:"installing-development-tools",children:"Installing development tools"}),"\n",(0,t.jsx)(i.p,{children:"We need to install a few things in order to get started with packaging:"}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.code,{children:"git"})," is used for version control of the Solus sources"]}),"\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.code,{children:"github-cli"})," is used to make working with GitHub easier"]}),"\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.code,{children:"go-task"})," is used by our build tools for scripting"]}),"\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.code,{children:"jq"})," is used by our optional ",(0,t.jsx)(i.a,{href:"#set-up-repository-helper-functions-optional",children:"Helper Functions"})]}),"\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.code,{children:"solbuild"})," is a lightweight container environment for building packages repeatably"]}),"\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.code,{children:"solbuild-config-unstable"})," sets up solbuild for working with the ",(0,t.jsx)(i.code,{children:"unstable"})," repository"]}),"\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.code,{children:"ypkg"})," is the program that actually builds packages"]}),"\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.code,{children:"yq"})," is used by the ",(0,t.jsx)(i.code,{children:"go-task add-monitoring"})," command to create new ",(0,t.jsx)(i.a,{href:"/docs/packaging/monitoring.yml",children:(0,t.jsx)(i.code,{children:"monitoring.yml"})})," files"]}),"\n"]}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-bash",children:"sudo eopkg it git github-cli go-task jq solbuild solbuild-config-unstable ypkg yq\n"})}),"\n",(0,t.jsx)(i.h2,{id:"setting-up-a-github-account-and-git",children:"Setting up a GitHub account and Git"}),"\n",(0,t.jsxs)(i.p,{children:["The Solus source repositories for the package repository currently reside on ",(0,t.jsx)(i.a,{href:"https://github.com/getsolus/packages",children:"github.com/getsolus/packages"}),". You will need a GitHub account to submit patches and file issues. You can create a GitHub account ",(0,t.jsx)(i.a,{href:"https://github.com/signup",children:"here"}),". Note that you will also need to set up ",(0,t.jsx)(i.a,{href:"https://docs.github.com/en/authentication/securing-your-account-with-two-factor-authentication-2fa",children:"2FA"})," (two-factor authentication) for your account."]}),"\n",(0,t.jsxs)(i.h3,{id:"configure-github-cli",children:["Configure ",(0,t.jsx)(i.code,{children:"github-cli"}),"."]}),"\n",(0,t.jsxs)(i.p,{children:["Once you have a GitHub account, you need to configure ",(0,t.jsx)(i.code,{children:"github-cli"})," to work with it. At minimum, you need to run ",(0,t.jsx)(i.code,{children:"gh auth login"}),". Have your GitHub credentials and 2FA (two-factor authentication) mechanism at hand."]}),"\n",(0,t.jsxs)(i.p,{children:["See the ",(0,t.jsx)(i.a,{href:"https://docs.github.com/en/github-cli/github-cli/quickstart",children:"GitHub CLI quickstart"})," for some common uses of the tool."]}),"\n",(0,t.jsx)(i.h3,{id:"git-identity-setup",children:"Git identity setup"}),"\n",(0,t.jsxs)(i.p,{children:["If you have not used git before, you should set your git identity in your global git config file (",(0,t.jsx)(i.code,{children:"~/.gitconfig"}),"). Use the following commands:"]}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-bash",children:'git config --global user.name "John Doe"\ngit config --global user.email johndoe@example.com\n'})}),"\n",(0,t.jsxs)(i.p,{children:["See the ",(0,t.jsx)(i.a,{href:"https://git-scm.com/book/en/v2/Getting-Started-First-Time-Git-Setup",children:"Git Book"})," for more first-time setup options."]}),"\n",(0,t.jsx)(i.h2,{id:"setting-up-solbuild",children:"Setting up solbuild"}),"\n",(0,t.jsxs)(i.p,{children:["The ",(0,t.jsx)(i.code,{children:"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."]}),"\n",(0,t.jsx)(i.p,{children:"Initialize solbuild via:"}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-bash",children:"sudo solbuild init\n"})}),"\n",(0,t.jsx)(i.p,{children:"This will take some time as it downloads and prepares the image."}),"\n",(0,t.jsx)(i.h3,{id:"updating-solbuild",children:"Updating solbuild"}),"\n",(0,t.jsx)(i.p,{children:"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."}),"\n",(0,t.jsx)(i.p,{children:"To update solbuild, run:"}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-bash",children:"sudo solbuild update\n"})}),"\n",(0,t.jsx)(i.h2,{id:"fork-the-getsoluspackages-repository",children:"Fork the getsolus/packages repository"}),"\n",(0,t.jsxs)(i.p,{children:["Create your own fork of ",(0,t.jsx)(i.a,{href:"https://github.com/getsolus/packages",children:"getsolus/packages"})," using the GitHub web UI or ",(0,t.jsxs)(i.a,{href:"https://cli.github.com/manual/gh_repo_fork",children:[(0,t.jsx)(i.code,{children:"gh"})," cli tool"]})," from the ",(0,t.jsx)(i.code,{children:"github-cli"})," package. It will be forked to ",(0,t.jsx)(i.code,{children:"github.com/yourgithubaccount/packages"}),"."]}),"\n",(0,t.jsx)(i.h2,{id:"clone-your-forked-package-repository",children:"Clone your forked package repository"}),"\n",(0,t.jsxs)(i.p,{children:["Create a local clone of the package repository you just forked. Here we are using the name ",(0,t.jsx)(i.code,{children:"solus-packages"})," and cloning it into our home directoy. The rest of the documentation will presume this structure. You can choose a different name and path but will have to make sure to replace it in every command that refers to the ",(0,t.jsx)(i.code,{children:"solus-packages"})," directory."]}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-bash",children:"gh repo clone packages ~/solus-packages\n"})}),"\n",(0,t.jsx)(i.h2,{id:"initialize-git-hooks",children:"Initialize git hooks"}),"\n",(0,t.jsx)(i.p,{children:"Initialize Git hooks for working with the repository by running:"}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{children:"go-task -d ~/solus-packages init\n"})}),"\n",(0,t.jsx)(i.p,{children:"This makes it easy to create commits in the correct format, and will warn you about issues with changes you commit."}),"\n",(0,t.jsx)(i.h2,{id:"set-up-repository-helper-functions-optional",children:"Set up repository helper functions (optional)"}),"\n",(0,t.jsx)(i.p,{children:"The helper functions are a collection of shell scripts that help you navigate the packages repository more quickly, and perform some specialized searches."}),"\n",(0,t.jsx)(i.p,{children:"After cloning your repository, create a symlink to source the helper functions for your shell. Then, start a new instance of the shell."}),"\n",(0,t.jsx)(i.h3,{id:"bash",children:"bash"}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-bash",children:"mkdir -p ~/.bashrc.d\nln -s ~/solus-packages/common/Scripts/helpers.sh ~/.bashrc.d/solus-monorepo-helpers.sh\n"})}),"\n",(0,t.jsx)(i.h3,{id:"fish",children:"fish"}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-bash",children:"mkdir -p ~/.config/fish/conf.d\nln -s ~/solus-packages/common/Scripts/helpers.fish ~/.config/fish/conf.d/solus.fish\n"})}),"\n",(0,t.jsx)(i.h3,{id:"zsh",children:"zsh"}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-bash",children:'mkdir -p ~/.zshrc.d\nprintf "\\nfpath=(~/.zshrc.d \\$fpath)" >> ~/.zshrc\nsource ~/.zshrc\nln -s ~/solus-packages/common/Scripts/helpers.zsh ~/.zshrc.d/solus-monorepo-helpers.zsh\n'})}),"\n",(0,t.jsx)(i.hr,{}),"\n",(0,t.jsx)(i.p,{children:"You should now have the following available from your shell:"}),"\n",(0,t.jsxs)(i.table,{children:[(0,t.jsx)(i.thead,{children:(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.th,{children:"Function"}),(0,t.jsx)(i.th,{children:"Description"}),(0,t.jsx)(i.th,{children:"Usage"})]})}),(0,t.jsxs)(i.tbody,{children:[(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:(0,t.jsx)(i.strong,{children:"cpesearch"})}),(0,t.jsxs)(i.td,{children:["Search for CPE Names for packages. For use when writing the ",(0,t.jsx)(i.a,{href:"/docs/packaging/monitoring.yml",children:(0,t.jsx)(i.code,{children:"monitoring.yml"})})," file for a package"]}),(0,t.jsx)(i.td,{children:(0,t.jsx)(i.code,{children:"cpesearch search-term"})})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:(0,t.jsx)(i.strong,{children:"goroot"})}),(0,t.jsx)(i.td,{children:"When in the Solus packages repository, change directory to the root directory."}),(0,t.jsx)(i.td,{children:(0,t.jsx)(i.code,{children:"goroot"})})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:(0,t.jsx)(i.strong,{children:"gotopkg"})}),(0,t.jsxs)(i.td,{children:["Change directory to any Solus package. You can type part of the package name then double press ",(0,t.jsx)(i.code,{children:"Tab"})," to get autocompletion for this function."]}),(0,t.jsx)(i.td,{children:(0,t.jsx)(i.code,{children:"gotopkg firefox"})})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:(0,t.jsx)(i.strong,{children:"gotosoluspkgs"})}),(0,t.jsx)(i.td,{children:"Change directory to the Solus packages repository from anywhere on the filesystem."}),(0,t.jsx)(i.td,{children:(0,t.jsx)(i.code,{children:"gotosoluspkgs"})})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:(0,t.jsx)(i.strong,{children:"whatprovides"})}),(0,t.jsxs)(i.td,{children:["Find out what package provides a library by reading the ",(0,t.jsx)(i.code,{children:"abi_libs"})," files."]}),(0,t.jsx)(i.td,{children:(0,t.jsx)(i.code,{children:"whatprovides libfoobar.so.1"})})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:(0,t.jsx)(i.strong,{children:"whatuses"})}),(0,t.jsxs)(i.td,{children:["Find out what packages use a library by reading the ",(0,t.jsx)(i.code,{children:"abi_used_libs"})," files."]}),(0,t.jsx)(i.td,{children:(0,t.jsx)(i.code,{children:"whatuses libfoobar.so.1"})})]})]})]}),"\n",(0,t.jsx)(i.h2,{id:"building-packages",children:"Building packages"}),"\n",(0,t.jsxs)(i.p,{children:["Your system is now set up for package work.\nIf you are new to packaging, see ",(0,t.jsx)(i.a,{href:"/docs/packaging/your-first-package-update",children:"Your First Package Update"}),"."]})]})}function h(e={}){const{wrapper:i}={...(0,n.a)(),...e.components};return i?(0,t.jsx)(i,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},11151:(e,i,s)=>{s.d(i,{Z:()=>a,a:()=>r});var t=s(67294);const n={},o=t.createContext(n);function r(e){const i=t.useContext(o);return t.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function a(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:r(e.components),t.createElement(o.Provider,{value:i},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/528b6a6b.451d8816.js b/assets/js/528b6a6b.451d8816.js
new file mode 100644
index 000000000..b563e78a9
--- /dev/null
+++ b/assets/js/528b6a6b.451d8816.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[7822],{48222:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>u,contentTitle:()=>o,default:()=>c,frontMatter:()=>n,metadata:()=>i,toc:()=>l});var r=t(85893),a=t(11151);const n={title:"KSysGuard",summary:"Quick Start guide to KSysGuard on Solus"},o="KSysGuard",i={id:"user/software/utilities/ksysguard",title:"KSysGuard",description:"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,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/utilities/ksysguard.md",tags:[],version:"current",lastUpdatedAt:1714518504e3,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"}},u={},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}];function d(e){const s={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,a.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.h1,{id:"ksysguard",children:"KSysGuard"}),"\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.a,{href:"https://userbase.kde.org/KSysGuard",children:"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."]}),"\n",(0,r.jsx)(s.h2,{id:"installation",children:"Installation"}),"\n",(0,r.jsx)(s.p,{children:"KSysGuard is usually installed as part of the KDE Plasma Desktop environment, but can be installed from the Software Center or via terminal:"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sudo eopkg it ksysguard\n"})}),"\n",(0,r.jsx)(s.h2,{id:"use-ksysguard-as-a-non-root-user",children:"Use KSysGuard as a non-root user"}),"\n",(0,r.jsx)(s.p,{children:"The per process networking plugin requires elevated access to your system. To enable the plugin as non-root user, execute these commands:"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:'sudo setcap "CAP_NET_RAW=+ep" "/usr/lib64/kf5/ksysguard/ksgrd_network_helper"\n'})}),"\n",(0,r.jsx)(s.h2,{id:"usage",children:"Usage"}),"\n",(0,r.jsxs)(s.p,{children:["KSysGuard ",(0,r.jsx)(s.a,{href:"https://userbase.kde.org/KSysGuard",children:"User\u2019s Guide"})," or the KDE Help Centre (open khelp on your Plasma Desktop)."]})]})}function c(e={}){const{wrapper:s}={...(0,a.a)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},11151:(e,s,t)=>{t.d(s,{Z:()=>i,a:()=>o});var r=t(67294);const a={},n=r.createContext(a);function o(e){const s=r.useContext(n);return r.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:o(e.components),r.createElement(n.Provider,{value:s},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/528b6a6b.d867d9c4.js b/assets/js/528b6a6b.d867d9c4.js
deleted file mode 100644
index 94684251d..000000000
--- a/assets/js/528b6a6b.d867d9c4.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[7822],{48222:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>u,contentTitle:()=>o,default:()=>c,frontMatter:()=>n,metadata:()=>i,toc:()=>l});var r=t(85893),a=t(11151);const n={title:"KSysGuard",summary:"Quick Start guide to KSysGuard on Solus"},o="KSysGuard",i={id:"user/software/utilities/ksysguard",title:"KSysGuard",description:"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,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/utilities/ksysguard.md",tags:[],version:"current",lastUpdatedAt:171439918e4,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"}},u={},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}];function d(e){const s={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,a.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.h1,{id:"ksysguard",children:"KSysGuard"}),"\n",(0,r.jsxs)(s.p,{children:[(0,r.jsx)(s.a,{href:"https://userbase.kde.org/KSysGuard",children:"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."]}),"\n",(0,r.jsx)(s.h2,{id:"installation",children:"Installation"}),"\n",(0,r.jsx)(s.p,{children:"KSysGuard is usually installed as part of the KDE Plasma Desktop environment, but can be installed from the Software Center or via terminal:"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:"sudo eopkg it ksysguard\n"})}),"\n",(0,r.jsx)(s.h2,{id:"use-ksysguard-as-a-non-root-user",children:"Use KSysGuard as a non-root user"}),"\n",(0,r.jsx)(s.p,{children:"The per process networking plugin requires elevated access to your system. To enable the plugin as non-root user, execute these commands:"}),"\n",(0,r.jsx)(s.pre,{children:(0,r.jsx)(s.code,{className:"language-bash",children:'sudo setcap "CAP_NET_RAW=+ep" "/usr/lib64/kf5/ksysguard/ksgrd_network_helper"\n'})}),"\n",(0,r.jsx)(s.h2,{id:"usage",children:"Usage"}),"\n",(0,r.jsxs)(s.p,{children:["KSysGuard ",(0,r.jsx)(s.a,{href:"https://userbase.kde.org/KSysGuard",children:"User\u2019s Guide"})," or the KDE Help Centre (open khelp on your Plasma Desktop)."]})]})}function c(e={}){const{wrapper:s}={...(0,a.a)(),...e.components};return s?(0,r.jsx)(s,{...e,children:(0,r.jsx)(d,{...e})}):d(e)}},11151:(e,s,t)=>{t.d(s,{Z:()=>i,a:()=>o});var r=t(67294);const a={},n=r.createContext(a);function o(e){const s=r.useContext(n);return r.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function i(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:o(e.components),r.createElement(n.Provider,{value:s},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/533eefa9.c29b939b.js b/assets/js/533eefa9.c29b939b.js
new file mode 100644
index 000000000..ba80243a5
--- /dev/null
+++ b/assets/js/533eefa9.c29b939b.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[4002],{73112:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>d,contentTitle:()=>r,default:()=>c,frontMatter:()=>l,metadata:()=>o,toc:()=>a});var s=n(85893),t=n(11151);const l={title:"Preparing to Install",summary:"Installation Guide for multiple operating systems"},r="Preparing to install",o={id:"user/quick-start/installation/index",title:"Preparing to Install",description:"Before you start, make sure your system meets the minimum requirements.",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,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/quick-start/installation/index.md",tags:[],version:"current",lastUpdatedAt:1714518504e3,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"}},d={},a=[{value:"Getting the ISO",id:"getting-the-iso",level:2},{value:"Verifying the ISO",id:"verifying-the-iso",level:2},{value:"Linux and macOS",id:"linux-and-macos",level:3},{value:"Verifying the SHA256SUMS file signature",id:"verifying-the-sha256sums-file-signature",level:4},{value:"Verifying the ISO checksum",id:"verifying-the-iso-checksum",level:4},{value:"Windows",id:"windows",level:3},{value:"Verifying signed SHA256SUM file",id:"verifying-signed-sha256sum-file",level:4},{value:"Verifying the ISO checksum",id:"verifying-the-iso-checksum-1",level:4},{value:"Creating bootable media",id:"creating-bootable-media",level:2},{value:"Linux",id:"linux",level:3},{value:"DVD",id:"dvd",level:4},{value:"USB",id:"usb",level:4},{value:"GNOME MultiWriter",id:"gnome-multiwriter",level:5},{value:"KDE ISO Image Writer",id:"kde-iso-image-writer",level:4},{value:"Command-line",id:"command-line",level:5},{value:"Windows",id:"windows-1",level:3},{value:"DVD",id:"dvd-1",level:4},{value:"USB",id:"usb-1",level:4},{value:"macOS",id:"macos",level:3},{value:"DVD",id:"dvd-2",level:4},{value:"USB",id:"usb-2",level:4},{value:"Graphical tool",id:"graphical-tool",level:5},{value:"Command-line",id:"command-line-1",level:5},{value:"Boot the media",id:"boot-the-media",level:2}];function h(e){const i={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",...(0,t.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(i.h1,{id:"preparing-to-install",children:"Preparing to install"}),"\n",(0,s.jsxs)(i.p,{children:["Before you start, make sure your system meets the ",(0,s.jsx)(i.a,{href:"/docs/user/quick-start/installation/system-requirements",children:"minimum requirements"}),"."]}),"\n",(0,s.jsx)(i.p,{children:"The first step to installing Solus is getting the correct media. The Solus Project provides ISO images, which contain the contents of Solus for installing."}),"\n",(0,s.jsx)(i.h2,{id:"getting-the-iso",children:"Getting the ISO"}),"\n",(0,s.jsxs)(i.p,{children:["Download a Solus ISO by going to our ",(0,s.jsx)(i.a,{href:"https://getsol.us/download",children:"Download page"})," and picking an edition."]}),"\n",(0,s.jsx)(i.h2,{id:"verifying-the-iso",children:"Verifying the ISO"}),"\n",(0,s.jsx)(i.h3,{id:"linux-and-macos",children:"Linux and macOS"}),"\n",(0,s.jsxs)(i.p,{children:["Download the SHA256SUMS files for your chosen ISO edition: ",(0,s.jsx)(i.em,{children:"File"}),", ",(0,s.jsx)(i.em,{children:"Signed File"})," and ",(0,s.jsx)(i.em,{children:"Public Key"})," from the links next to the ",(0,s.jsx)(i.em,{children:"Download"})," buttons on our ",(0,s.jsx)(i.a,{href:"https://getsol.us/download",children:"Download page"}),"."]}),"\n",(0,s.jsxs)(i.p,{children:[(0,s.jsx)(i.strong,{children:"Note:"})," You should download all these files to the same directory."]}),"\n",(0,s.jsx)(i.h4,{id:"verifying-the-sha256sums-file-signature",children:"Verifying the SHA256SUMS file signature"}),"\n",(0,s.jsx)(i.p,{children:"Import the Solus public key:"}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-bash",children:"cd ~/path/to/download/directory\ngpg --import solus-releng-pub.gpg\n"})}),"\n",(0,s.jsx)(i.p,{children:"Verify the signed checksum file:"}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-bash",children:"gpg --verify Solus-4.5-Budgie.iso.sha256sum.sign Solus-4.5-Budgie.iso.sha256sum\n"})}),"\n",(0,s.jsx)(i.h4,{id:"verifying-the-iso-checksum",children:"Verifying the ISO checksum"}),"\n",(0,s.jsx)(i.p,{children:"Check that the computed hash of the downloaded ISO file matches the hash supplied by Solus:"}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-bash",children:"sha256sum -c Solus-4.5-Budgie.iso.sha256sum | grep OK\n"})}),"\n",(0,s.jsx)(i.h3,{id:"windows",children:"Windows"}),"\n",(0,s.jsx)(i.h4,{id:"verifying-signed-sha256sum-file",children:"Verifying signed SHA256SUM file"}),"\n",(0,s.jsxs)(i.p,{children:["On Windows, first install ",(0,s.jsx)(i.a,{href:"https://www.gpg4win.org/",children:"Gpg4win"}),"."]}),"\n",(0,s.jsxs)(i.p,{children:["Now you can run the same ",(0,s.jsx)(i.code,{children:"gpg"})," commands from the the ",(0,s.jsx)(i.a,{href:"/docs/user/quick-start/installation/#verifying-the-sha256sums-file-signature",children:(0,s.jsx)(i.em,{children:"Verifyng the SHA256SUMS file signature"})})," section above."]}),"\n",(0,s.jsx)(i.h4,{id:"verifying-the-iso-checksum-1",children:"Verifying the ISO checksum"}),"\n",(0,s.jsx)(i.p,{children:"Launch powershell and compute the hash of the ISO file you just downloaded. You will have to manually compare the result to the hash in the SHA256SUMS file."}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-powershell",children:"Get-FileHash C:\\path\\to\\Solus-4.5-Budgie.iso\ncat C:\\path\\to\\Solus-4.5-Budgie.iso.sha256sum\n"})}),"\n",(0,s.jsxs)(i.p,{children:["Alternatively, you can use a graphical program that can calculate SHA256 hashes like ",(0,s.jsx)(i.em,{children:"Rufus"})," or ",(0,s.jsx)(i.em,{children:"7-Zip"}),"."]}),"\n",(0,s.jsx)(i.h2,{id:"creating-bootable-media",children:"Creating bootable media"}),"\n",(0,s.jsx)(i.p,{children:"To make boot media, you will need:"}),"\n",(0,s.jsxs)(i.ol,{children:["\n",(0,s.jsx)(i.li,{children:"Either a blank DVD or a USB drive larger than 2 GB."}),"\n",(0,s.jsx)(i.li,{children:"If using a USB, the ability to boot from the USB."}),"\n",(0,s.jsxs)(i.li,{children:["ISO file from the ",(0,s.jsx)(i.a,{href:"#getting-the-iso",children:"Getting the ISO"})," section."]}),"\n"]}),"\n",(0,s.jsx)(i.p,{children:"There are many tools which can write our ISO image to DVDs or USB thumb drives. Chose from an option below."}),"\n",(0,s.jsx)(i.h3,{id:"linux",children:"Linux"}),"\n",(0,s.jsx)(i.h4,{id:"dvd",children:"DVD"}),"\n",(0,s.jsxs)(i.p,{children:["We recommend using ",(0,s.jsx)(i.a,{href:"https://wiki.gnome.org/Apps/Brasero",children:"Brasero"})," for writing the ISO to a DVD."]}),"\n",(0,s.jsxs)(i.ol,{children:["\n",(0,s.jsx)(i.li,{children:"Insert blank DVD (DVD-R or DVD+RW is suitable) into your DVD writer."}),"\n",(0,s.jsx)(i.li,{children:"Open Brasero."}),"\n",(0,s.jsx)(i.li,{children:"Select the option \u201cBurn image\u201d."}),"\n",(0,s.jsx)(i.li,{children:"Click the \u201cClick here to select a disc image\u201d button and using the file dialog, choose the ISO."}),"\n",(0,s.jsx)(i.li,{children:"Ensure the correct DVD is selected in the \u201cSelect a disc to write to\u201d."}),"\n",(0,s.jsx)(i.li,{children:'Click "Burn" and wait.'}),"\n",(0,s.jsx)(i.li,{children:'Upon seeing \u201cImage successfully burned to DVD\u201d, click "Close".'}),"\n"]}),"\n",(0,s.jsx)(i.h4,{id:"usb",children:"USB"}),"\n",(0,s.jsxs)(i.p,{children:["We recommend using ",(0,s.jsx)(i.a,{href:"https://wiki.gnome.org/Apps/MultiWriter",children:"GNOME MultiWriter"})," or ",(0,s.jsx)(i.a,{href:"https://apps.kde.org/isoimagewriter/",children:"ISO Image Writer"})," for KDE. Please note that UNetbootin will ",(0,s.jsx)(i.strong,{children:"not"})," work."]}),"\n",(0,s.jsx)(i.h5,{id:"gnome-multiwriter",children:"GNOME MultiWriter"}),"\n",(0,s.jsx)(i.p,{children:"Upon opening GNOME MultiWriter, you will likely be shown a window similar to the one below, if your USB drive is already plugged in and mounted."}),"\n",(0,s.jsx)(i.admonition,{type:"warning",children:(0,s.jsxs)(i.p,{children:["The ISO image will be written to ",(0,s.jsx)(i.em,{children:"all mounted USB drives"}),". Ensure that the only USB drive that is connected is the one you wish to write the ISO to."]})}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.img,{alt:"MultiWriter Start",src:n(7173).Z+"",width:"706",height:"156"})}),"\n",(0,s.jsx)(i.p,{children:"If your USB drive is not mounted, you will be prompted with an image indicating to plug it in."}),"\n",(0,s.jsx)(i.p,{children:'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.'}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.img,{alt:"MultiWriter Writing",src:n(39115).Z+"",width:"706",height:"156"})}),"\n",(0,s.jsx)(i.p,{children:"Upon completion, you will be prompted with the following dialog and your USB is now ready for use."}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.img,{alt:"MultiWriter Done",src:n(69064).Z+"",width:"706",height:"156"})}),"\n",(0,s.jsx)(i.h4,{id:"kde-iso-image-writer",children:"KDE ISO Image Writer"}),"\n",(0,s.jsx)(i.admonition,{type:"info",children:(0,s.jsx)(i.p,{children:"You will need both the ISO and sha256sums file for it saved in the same directory."})}),"\n",(0,s.jsx)(i.p,{children:"When you open ISO Image Writer, you will see a window similar to the one below, if your USB drive is already plugged in and mounted."}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.img,{alt:"ImageWriter Start",src:n(8234).Z+"",width:"585",height:"446"})}),"\n",(0,s.jsx)(i.p,{children:"If there is no USB drive mounted, the USB drive field will be greyed out. Simply plug in the USB drive you want to use for the ISO, it will be auto-detected."}),"\n",(0,s.jsx)(i.p,{children:'Click on the top field "Write this ISO image:". Select the ISO image you downloaded in the "Getting the ISO" section.'}),"\n",(0,s.jsx)(i.p,{children:'You may see "Downloading ISO image". When this is done, click the Create button.'}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.img,{alt:"ImageWriter Writing",src:n(51213).Z+"",width:"551",height:"430"})}),"\n",(0,s.jsx)(i.p,{children:"When the operation is finished, you will see the confirmation dialog. Your USB is now ready for use."}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.img,{alt:"ImageWriter Done",src:n(46368).Z+"",width:"585",height:"446"})}),"\n",(0,s.jsx)(i.h5,{id:"command-line",children:"Command-line"}),"\n",(0,s.jsxs)(i.p,{children:["For those comfortable with the command-line / terminal, we will walk you through using ",(0,s.jsx)(i.code,{children:"dd"}),"."]}),"\n",(0,s.jsxs)(i.p,{children:["First, insert the USB drive into your computer and open your Terminal. Proceed to type ",(0,s.jsx)(i.code,{children:"lsblk"})," into your Terminal. It should output something along the lines of:"]}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-bash",children:"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"})}),"\n",(0,s.jsxs)(i.p,{children:["You will see one disk, in this case ",(0,s.jsx)(i.code,{children:"/dev/sdb"}),", that is roughly the size of the USB drive. Yours should be similar (difference being in size). Write this device down somewhere."]}),"\n",(0,s.jsxs)(i.p,{children:["Next, locate the downloaded ISO. It will most likely be in your Downloads folder. In the event that it is, type: ",(0,s.jsx)(i.code,{children:"cd ~/Downloads"})]}),"\n",(0,s.jsxs)(i.p,{children:["If it is ",(0,s.jsx)(i.strong,{children:"not"})," in your Downloads folder, use ",(0,s.jsx)(i.code,{children:"cd"})," to navigate to the correct directory."]}),"\n",(0,s.jsx)(i.admonition,{type:"danger",children:(0,s.jsxs)(i.p,{children:["This is where we overwrite the contents of your USB drive so please ensure you identified the correct drive in the ",(0,s.jsx)(i.code,{children:"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,s.jsx)(i.code,{children:"sdb"})," with the drive we located above:"]})}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-bash",children:"sudo dd if=Solus-4.5-Budgie.iso of=/dev/sdb bs=4M status=progress oflag=sync && sudo eject /dev/sdb\n"})}),"\n",(0,s.jsx)(i.p,{children:"This will write the contents of the ISO to the thumb drive so you can boot it and also make sure the data is synchronized so you can eject the USB safely."}),"\n",(0,s.jsx)(i.h3,{id:"windows-1",children:"Windows"}),"\n",(0,s.jsx)(i.h4,{id:"dvd-1",children:"DVD"}),"\n",(0,s.jsx)(i.p,{children:"You can easily burn an ISO image to a DVD, on Windows 7 and newer, by using Window's built-in file manager (Explorer)."}),"\n",(0,s.jsxs)(i.ol,{children:["\n",(0,s.jsx)(i.li,{children:"Open Windows' built-in file manager (Explorer)."}),"\n",(0,s.jsx)(i.li,{children:'Right click on the ISO image file and click "Burn disk image".'}),"\n",(0,s.jsx)(i.li,{children:"Select the correct disc burner."}),"\n",(0,s.jsx)(i.li,{children:'Click "Burn".'}),"\n"]}),"\n",(0,s.jsx)(i.h4,{id:"usb-1",children:"USB"}),"\n",(0,s.jsxs)(i.p,{children:["You can easily burn an ISO image to a USB by using graphical tool ",(0,s.jsx)(i.a,{href:"https://rufus.ie/",children:"Rufus"}),"."]}),"\n",(0,s.jsxs)(i.ol,{children:["\n",(0,s.jsx)(i.li,{children:"Open Rufus."}),"\n",(0,s.jsx)(i.li,{children:"Ensure your device is correct by checking the contents of the Device dropdown."}),"\n",(0,s.jsx)(i.li,{children:"Click the CD icon found in the image below, and select the ISO."}),"\n",(0,s.jsx)(i.li,{children:'Untick all options except "Create a bootable disk using" and use the dropdown to select "DD Image".'}),"\n",(0,s.jsx)(i.li,{children:'Click "Start".'}),"\n"]}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.img,{alt:"Rufus",src:n(93093).Z+"",width:"365",height:"518"})}),"\n",(0,s.jsx)(i.h3,{id:"macos",children:"macOS"}),"\n",(0,s.jsx)(i.h4,{id:"dvd-2",children:"DVD"}),"\n",(0,s.jsx)(i.p,{children:"Since OS X El Capitan (10.11), the easiest way to burn a DVD is:"}),"\n",(0,s.jsxs)(i.ol,{children:["\n",(0,s.jsx)(i.li,{children:"Insert your DVD and open Finder."}),"\n",(0,s.jsx)(i.li,{children:"Right click on the ISO image."}),"\n",(0,s.jsx)(i.li,{children:"Click on \u201cBurn Disk Image \u2018Solus-4.5-Budgie.iso\u2019 to Disc\u2026\u201d"}),"\n",(0,s.jsx)(i.li,{children:"Then click \u201cBurn\u201d."}),"\n"]}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.img,{alt:"macOS Burn DVD",src:n(54725).Z+"",width:"638",height:"343"})}),"\n",(0,s.jsx)(i.h4,{id:"usb-2",children:"USB"}),"\n",(0,s.jsx)(i.h5,{id:"graphical-tool",children:"Graphical tool"}),"\n",(0,s.jsxs)(i.p,{children:["One of the easiest ways to burn an ISO image to a USB thumb drive is by using a graphical tool called ",(0,s.jsx)(i.a,{href:"https://etcher.balena.io/",children:"Etcher"}),"."]}),"\n",(0,s.jsxs)(i.ol,{children:["\n",(0,s.jsx)(i.li,{children:"Open Etcher."}),"\n",(0,s.jsx)(i.li,{children:"Click on \u201cSelect image\u201d and then select the ISO and click \u201cOpen\u201d."}),"\n",(0,s.jsx)(i.li,{children:"Etcher will automatically select your USB drive. If it has selected the wrong one, click \u201cChange\u201d and select the correct one."}),"\n",(0,s.jsx)(i.li,{children:"Click \u201cFlash!\u201d."}),"\n",(0,s.jsx)(i.li,{children:"You may be prompted for your macOS user password."}),"\n",(0,s.jsx)(i.li,{children:"Once Etcher has finished it is safe to remove the USB drive."}),"\n"]}),"\n",(0,s.jsx)(i.p,{children:"You may see a message stating \u201cThe disk you inserted was not readable by this computer.\u201d once Etcher finishes. This can be ignored."}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.img,{alt:"macOS Etcher",src:n(74020).Z+"",width:"800",height:"380"})}),"\n",(0,s.jsx)(i.h5,{id:"command-line-1",children:"Command-line"}),"\n",(0,s.jsxs)(i.p,{children:["For those comfortable with the macOS Terminal app, we will walk you through using ",(0,s.jsx)(i.code,{children:"dd"}),"."]}),"\n",(0,s.jsx)(i.p,{children:"First, insert the USB drive into your computer and open Terminal (found in Applications/Utilities)."}),"\n",(0,s.jsx)(i.p,{children:"Now you'll need to identify your USB drive by listing your storage devices with the following command:"}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-bash",children:"diskutil list\n"})}),"\n",(0,s.jsx)(i.p,{children:"You should see output similar to this:"}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-bash",children:"/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"})}),"\n",(0,s.jsxs)(i.p,{children:["From this output, we can see the USB drive is listed as ",(0,s.jsx)(i.code,{children:"/dev/disk1 (external, physical)"}),". In this example, the IDENTIFIER is ",(0,s.jsx)(i.code,{children:"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."]}),"\n",(0,s.jsxs)(i.p,{children:["macOS usually auto-mounts USB drives so you\u2019ll need to unmount it first before proceeding. Use the following command and replace ",(0,s.jsx)(i.code,{children:"IDENTIFIER"})," with the correct identifier we found in the ",(0,s.jsx)(i.code,{children:"diskutil list"})," step."]}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-bash",children:"diskutil unmountDisk /dev/IDENTIFIER\n"})}),"\n",(0,s.jsx)(i.p,{children:"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:"}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-bash",children:"cd ~/Downloads\n"})}),"\n",(0,s.jsx)(i.admonition,{type:"danger",children:(0,s.jsx)(i.p,{children:(0,s.jsx)(i.strong,{children:"This next step is dangerous. Using the wrong drive identifier could result in data loss."})})}),"\n",(0,s.jsxs)(i.p,{children:["We will use the ",(0,s.jsx)(i.code,{children:"dd"})," command to write the contents of the ISO to the thumb drive. Replace ",(0,s.jsx)(i.code,{children:"IDENTIFIER"})," in the command below with your drive identifier. Note the extra ",(0,s.jsx)(i.code,{children:"r"})," before the identifier (i.e ",(0,s.jsx)(i.code,{children:"rdisk1"}),"). This is for raw mode, which along with bs=1m, makes the transfer faster."]}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-bash",children:"sudo dd if=Solus-4.5-Budgie.iso of=/dev/rIDENTIFIER bs=1m\n"})}),"\n",(0,s.jsx)(i.p,{children:"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."}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-bash",children:"diskutil eject /dev/IDENTIFIER\n"})}),"\n",(0,s.jsx)(i.h2,{id:"boot-the-media",children:"Boot the media"}),"\n",(0,s.jsx)(i.p,{children:"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."}),"\n",(0,s.jsxs)(i.p,{children:["This is usually accessible by pressing ",(0,s.jsx)(i.code,{children:"F9"})," or ",(0,s.jsx)(i.code,{children:"F12"})," while your computer is booting. On some devices it may also be ",(0,s.jsx)(i.code,{children:"ESC"}),"."]}),"\n",(0,s.jsx)(i.p,{children:'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".'})]})}function c(e={}){const{wrapper:i}={...(0,t.a)(),...e.components};return i?(0,s.jsx)(i,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},69064:(e,i,n)=>{n.d(i,{Z:()=>s});const s=n.p+"assets/images/gmw_done-fdbb3bda7061afd0ca7f97b85c1cef18.jpg"},7173:(e,i,n)=>{n.d(i,{Z:()=>s});const s=n.p+"assets/images/gmw_start-c8e10b8e6f627b862f8f6344260db698.jpg"},39115:(e,i,n)=>{n.d(i,{Z:()=>s});const s=n.p+"assets/images/gmw_writing-1a2eb065ba3c61dd1371f89b2ab9f7c1.jpg"},8234:(e,i,n)=>{n.d(i,{Z:()=>s});const s=n.p+"assets/images/iiw_1_start-0457fdcee59f063744233653c88022f7.png"},51213:(e,i,n)=>{n.d(i,{Z:()=>s});const s=n.p+"assets/images/iiw_2_writing-61d90705ea2038df803e806657f7e20f.png"},46368:(e,i,n)=>{n.d(i,{Z:()=>s});const s=n.p+"assets/images/iiw_3_done-de4e8501e47d1073f945ae1aceb13995.png"},54725:(e,i,n)=>{n.d(i,{Z:()=>s});const s=n.p+"assets/images/mac-burn-dvd-0bef9578a58d61610854fc7c25e3496f.jpg"},74020:(e,i,n)=>{n.d(i,{Z:()=>s});const s=n.p+"assets/images/mac-etcher-2d28aaeb19eda12c960c6b09e81eceb2.jpg"},93093:(e,i,n)=>{n.d(i,{Z:()=>s});const s=n.p+"assets/images/rufus-6f16a561298400882bff901d61064e58.jpg"},11151:(e,i,n)=>{n.d(i,{Z:()=>o,a:()=>r});var s=n(67294);const t={},l=s.createContext(t);function r(e){const i=s.useContext(l);return s.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function o(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:r(e.components),s.createElement(l.Provider,{value:i},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/533eefa9.fafdf118.js b/assets/js/533eefa9.fafdf118.js
deleted file mode 100644
index c27d184a5..000000000
--- a/assets/js/533eefa9.fafdf118.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[4002],{73112:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>d,contentTitle:()=>r,default:()=>c,frontMatter:()=>l,metadata:()=>o,toc:()=>a});var s=n(85893),t=n(11151);const l={title:"Preparing to Install",summary:"Installation Guide for multiple operating systems"},r="Preparing to install",o={id:"user/quick-start/installation/index",title:"Preparing to Install",description:"Before you start, make sure your system meets the minimum requirements.",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,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/quick-start/installation/index.md",tags:[],version:"current",lastUpdatedAt:171439918e4,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"}},d={},a=[{value:"Getting the ISO",id:"getting-the-iso",level:2},{value:"Verifying the ISO",id:"verifying-the-iso",level:2},{value:"Linux and macOS",id:"linux-and-macos",level:3},{value:"Verifying the SHA256SUMS file signature",id:"verifying-the-sha256sums-file-signature",level:4},{value:"Verifying the ISO checksum",id:"verifying-the-iso-checksum",level:4},{value:"Windows",id:"windows",level:3},{value:"Verifying signed SHA256SUM file",id:"verifying-signed-sha256sum-file",level:4},{value:"Verifying the ISO checksum",id:"verifying-the-iso-checksum-1",level:4},{value:"Creating bootable media",id:"creating-bootable-media",level:2},{value:"Linux",id:"linux",level:3},{value:"DVD",id:"dvd",level:4},{value:"USB",id:"usb",level:4},{value:"GNOME MultiWriter",id:"gnome-multiwriter",level:5},{value:"KDE ISO Image Writer",id:"kde-iso-image-writer",level:4},{value:"Command-line",id:"command-line",level:5},{value:"Windows",id:"windows-1",level:3},{value:"DVD",id:"dvd-1",level:4},{value:"USB",id:"usb-1",level:4},{value:"macOS",id:"macos",level:3},{value:"DVD",id:"dvd-2",level:4},{value:"USB",id:"usb-2",level:4},{value:"Graphical tool",id:"graphical-tool",level:5},{value:"Command-line",id:"command-line-1",level:5},{value:"Boot the media",id:"boot-the-media",level:2}];function h(e){const i={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",img:"img",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",...(0,t.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(i.h1,{id:"preparing-to-install",children:"Preparing to install"}),"\n",(0,s.jsxs)(i.p,{children:["Before you start, make sure your system meets the ",(0,s.jsx)(i.a,{href:"/docs/user/quick-start/installation/system-requirements",children:"minimum requirements"}),"."]}),"\n",(0,s.jsx)(i.p,{children:"The first step to installing Solus is getting the correct media. The Solus Project provides ISO images, which contain the contents of Solus for installing."}),"\n",(0,s.jsx)(i.h2,{id:"getting-the-iso",children:"Getting the ISO"}),"\n",(0,s.jsxs)(i.p,{children:["Download a Solus ISO by going to our ",(0,s.jsx)(i.a,{href:"https://getsol.us/download",children:"Download page"})," and picking an edition."]}),"\n",(0,s.jsx)(i.h2,{id:"verifying-the-iso",children:"Verifying the ISO"}),"\n",(0,s.jsx)(i.h3,{id:"linux-and-macos",children:"Linux and macOS"}),"\n",(0,s.jsxs)(i.p,{children:["Download the SHA256SUMS files for your chosen ISO edition: ",(0,s.jsx)(i.em,{children:"File"}),", ",(0,s.jsx)(i.em,{children:"Signed File"})," and ",(0,s.jsx)(i.em,{children:"Public Key"})," from the links next to the ",(0,s.jsx)(i.em,{children:"Download"})," buttons on our ",(0,s.jsx)(i.a,{href:"https://getsol.us/download",children:"Download page"}),"."]}),"\n",(0,s.jsxs)(i.p,{children:[(0,s.jsx)(i.strong,{children:"Note:"})," You should download all these files to the same directory."]}),"\n",(0,s.jsx)(i.h4,{id:"verifying-the-sha256sums-file-signature",children:"Verifying the SHA256SUMS file signature"}),"\n",(0,s.jsx)(i.p,{children:"Import the Solus public key:"}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-bash",children:"cd ~/path/to/download/directory\ngpg --import solus-releng-pub.gpg\n"})}),"\n",(0,s.jsx)(i.p,{children:"Verify the signed checksum file:"}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-bash",children:"gpg --verify Solus-4.5-Budgie.iso.sha256sum.sign Solus-4.5-Budgie.iso.sha256sum\n"})}),"\n",(0,s.jsx)(i.h4,{id:"verifying-the-iso-checksum",children:"Verifying the ISO checksum"}),"\n",(0,s.jsx)(i.p,{children:"Check that the computed hash of the downloaded ISO file matches the hash supplied by Solus:"}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-bash",children:"sha256sum -c Solus-4.5-Budgie.iso.sha256sum | grep OK\n"})}),"\n",(0,s.jsx)(i.h3,{id:"windows",children:"Windows"}),"\n",(0,s.jsx)(i.h4,{id:"verifying-signed-sha256sum-file",children:"Verifying signed SHA256SUM file"}),"\n",(0,s.jsxs)(i.p,{children:["On Windows, first install ",(0,s.jsx)(i.a,{href:"https://www.gpg4win.org/",children:"Gpg4win"}),"."]}),"\n",(0,s.jsxs)(i.p,{children:["Now you can run the same ",(0,s.jsx)(i.code,{children:"gpg"})," commands from the the ",(0,s.jsx)(i.a,{href:"/docs/user/quick-start/installation/#verifying-the-sha256sums-file-signature",children:(0,s.jsx)(i.em,{children:"Verifyng the SHA256SUMS file signature"})})," section above."]}),"\n",(0,s.jsx)(i.h4,{id:"verifying-the-iso-checksum-1",children:"Verifying the ISO checksum"}),"\n",(0,s.jsx)(i.p,{children:"Launch powershell and compute the hash of the ISO file you just downloaded. You will have to manually compare the result to the hash in the SHA256SUMS file."}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-powershell",children:"Get-FileHash C:\\path\\to\\Solus-4.5-Budgie.iso\ncat C:\\path\\to\\Solus-4.5-Budgie.iso.sha256sum\n"})}),"\n",(0,s.jsxs)(i.p,{children:["Alternatively, you can use a graphical program that can calculate SHA256 hashes like ",(0,s.jsx)(i.em,{children:"Rufus"})," or ",(0,s.jsx)(i.em,{children:"7-Zip"}),"."]}),"\n",(0,s.jsx)(i.h2,{id:"creating-bootable-media",children:"Creating bootable media"}),"\n",(0,s.jsx)(i.p,{children:"To make boot media, you will need:"}),"\n",(0,s.jsxs)(i.ol,{children:["\n",(0,s.jsx)(i.li,{children:"Either a blank DVD or a USB drive larger than 2 GB."}),"\n",(0,s.jsx)(i.li,{children:"If using a USB, the ability to boot from the USB."}),"\n",(0,s.jsxs)(i.li,{children:["ISO file from the ",(0,s.jsx)(i.a,{href:"#getting-the-iso",children:"Getting the ISO"})," section."]}),"\n"]}),"\n",(0,s.jsx)(i.p,{children:"There are many tools which can write our ISO image to DVDs or USB thumb drives. Chose from an option below."}),"\n",(0,s.jsx)(i.h3,{id:"linux",children:"Linux"}),"\n",(0,s.jsx)(i.h4,{id:"dvd",children:"DVD"}),"\n",(0,s.jsxs)(i.p,{children:["We recommend using ",(0,s.jsx)(i.a,{href:"https://wiki.gnome.org/Apps/Brasero",children:"Brasero"})," for writing the ISO to a DVD."]}),"\n",(0,s.jsxs)(i.ol,{children:["\n",(0,s.jsx)(i.li,{children:"Insert blank DVD (DVD-R or DVD+RW is suitable) into your DVD writer."}),"\n",(0,s.jsx)(i.li,{children:"Open Brasero."}),"\n",(0,s.jsx)(i.li,{children:"Select the option \u201cBurn image\u201d."}),"\n",(0,s.jsx)(i.li,{children:"Click the \u201cClick here to select a disc image\u201d button and using the file dialog, choose the ISO."}),"\n",(0,s.jsx)(i.li,{children:"Ensure the correct DVD is selected in the \u201cSelect a disc to write to\u201d."}),"\n",(0,s.jsx)(i.li,{children:'Click "Burn" and wait.'}),"\n",(0,s.jsx)(i.li,{children:'Upon seeing \u201cImage successfully burned to DVD\u201d, click "Close".'}),"\n"]}),"\n",(0,s.jsx)(i.h4,{id:"usb",children:"USB"}),"\n",(0,s.jsxs)(i.p,{children:["We recommend using ",(0,s.jsx)(i.a,{href:"https://wiki.gnome.org/Apps/MultiWriter",children:"GNOME MultiWriter"})," or ",(0,s.jsx)(i.a,{href:"https://apps.kde.org/isoimagewriter/",children:"ISO Image Writer"})," for KDE. Please note that UNetbootin will ",(0,s.jsx)(i.strong,{children:"not"})," work."]}),"\n",(0,s.jsx)(i.h5,{id:"gnome-multiwriter",children:"GNOME MultiWriter"}),"\n",(0,s.jsx)(i.p,{children:"Upon opening GNOME MultiWriter, you will likely be shown a window similar to the one below, if your USB drive is already plugged in and mounted."}),"\n",(0,s.jsx)(i.admonition,{type:"warning",children:(0,s.jsxs)(i.p,{children:["The ISO image will be written to ",(0,s.jsx)(i.em,{children:"all mounted USB drives"}),". Ensure that the only USB drive that is connected is the one you wish to write the ISO to."]})}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.img,{alt:"MultiWriter Start",src:n(7173).Z+"",width:"706",height:"156"})}),"\n",(0,s.jsx)(i.p,{children:"If your USB drive is not mounted, you will be prompted with an image indicating to plug it in."}),"\n",(0,s.jsx)(i.p,{children:'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.'}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.img,{alt:"MultiWriter Writing",src:n(39115).Z+"",width:"706",height:"156"})}),"\n",(0,s.jsx)(i.p,{children:"Upon completion, you will be prompted with the following dialog and your USB is now ready for use."}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.img,{alt:"MultiWriter Done",src:n(69064).Z+"",width:"706",height:"156"})}),"\n",(0,s.jsx)(i.h4,{id:"kde-iso-image-writer",children:"KDE ISO Image Writer"}),"\n",(0,s.jsx)(i.admonition,{type:"info",children:(0,s.jsx)(i.p,{children:"You will need both the ISO and sha256sums file for it saved in the same directory."})}),"\n",(0,s.jsx)(i.p,{children:"When you open ISO Image Writer, you will see a window similar to the one below, if your USB drive is already plugged in and mounted."}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.img,{alt:"ImageWriter Start",src:n(8234).Z+"",width:"585",height:"446"})}),"\n",(0,s.jsx)(i.p,{children:"If there is no USB drive mounted, the USB drive field will be greyed out. Simply plug in the USB drive you want to use for the ISO, it will be auto-detected."}),"\n",(0,s.jsx)(i.p,{children:'Click on the top field "Write this ISO image:". Select the ISO image you downloaded in the "Getting the ISO" section.'}),"\n",(0,s.jsx)(i.p,{children:'You may see "Downloading ISO image". When this is done, click the Create button.'}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.img,{alt:"ImageWriter Writing",src:n(51213).Z+"",width:"551",height:"430"})}),"\n",(0,s.jsx)(i.p,{children:"When the operation is finished, you will see the confirmation dialog. Your USB is now ready for use."}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.img,{alt:"ImageWriter Done",src:n(46368).Z+"",width:"585",height:"446"})}),"\n",(0,s.jsx)(i.h5,{id:"command-line",children:"Command-line"}),"\n",(0,s.jsxs)(i.p,{children:["For those comfortable with the command-line / terminal, we will walk you through using ",(0,s.jsx)(i.code,{children:"dd"}),"."]}),"\n",(0,s.jsxs)(i.p,{children:["First, insert the USB drive into your computer and open your Terminal. Proceed to type ",(0,s.jsx)(i.code,{children:"lsblk"})," into your Terminal. It should output something along the lines of:"]}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-bash",children:"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"})}),"\n",(0,s.jsxs)(i.p,{children:["You will see one disk, in this case ",(0,s.jsx)(i.code,{children:"/dev/sdb"}),", that is roughly the size of the USB drive. Yours should be similar (difference being in size). Write this device down somewhere."]}),"\n",(0,s.jsxs)(i.p,{children:["Next, locate the downloaded ISO. It will most likely be in your Downloads folder. In the event that it is, type: ",(0,s.jsx)(i.code,{children:"cd ~/Downloads"})]}),"\n",(0,s.jsxs)(i.p,{children:["If it is ",(0,s.jsx)(i.strong,{children:"not"})," in your Downloads folder, use ",(0,s.jsx)(i.code,{children:"cd"})," to navigate to the correct directory."]}),"\n",(0,s.jsx)(i.admonition,{type:"danger",children:(0,s.jsxs)(i.p,{children:["This is where we overwrite the contents of your USB drive so please ensure you identified the correct drive in the ",(0,s.jsx)(i.code,{children:"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,s.jsx)(i.code,{children:"sdb"})," with the drive we located above:"]})}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-bash",children:"sudo dd if=Solus-4.5-Budgie.iso of=/dev/sdb bs=4M status=progress oflag=sync && sudo eject /dev/sdb\n"})}),"\n",(0,s.jsx)(i.p,{children:"This will write the contents of the ISO to the thumb drive so you can boot it and also make sure the data is synchronized so you can eject the USB safely."}),"\n",(0,s.jsx)(i.h3,{id:"windows-1",children:"Windows"}),"\n",(0,s.jsx)(i.h4,{id:"dvd-1",children:"DVD"}),"\n",(0,s.jsx)(i.p,{children:"You can easily burn an ISO image to a DVD, on Windows 7 and newer, by using Window's built-in file manager (Explorer)."}),"\n",(0,s.jsxs)(i.ol,{children:["\n",(0,s.jsx)(i.li,{children:"Open Windows' built-in file manager (Explorer)."}),"\n",(0,s.jsx)(i.li,{children:'Right click on the ISO image file and click "Burn disk image".'}),"\n",(0,s.jsx)(i.li,{children:"Select the correct disc burner."}),"\n",(0,s.jsx)(i.li,{children:'Click "Burn".'}),"\n"]}),"\n",(0,s.jsx)(i.h4,{id:"usb-1",children:"USB"}),"\n",(0,s.jsxs)(i.p,{children:["You can easily burn an ISO image to a USB by using graphical tool ",(0,s.jsx)(i.a,{href:"https://rufus.ie/",children:"Rufus"}),"."]}),"\n",(0,s.jsxs)(i.ol,{children:["\n",(0,s.jsx)(i.li,{children:"Open Rufus."}),"\n",(0,s.jsx)(i.li,{children:"Ensure your device is correct by checking the contents of the Device dropdown."}),"\n",(0,s.jsx)(i.li,{children:"Click the CD icon found in the image below, and select the ISO."}),"\n",(0,s.jsx)(i.li,{children:'Untick all options except "Create a bootable disk using" and use the dropdown to select "DD Image".'}),"\n",(0,s.jsx)(i.li,{children:'Click "Start".'}),"\n"]}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.img,{alt:"Rufus",src:n(93093).Z+"",width:"365",height:"518"})}),"\n",(0,s.jsx)(i.h3,{id:"macos",children:"macOS"}),"\n",(0,s.jsx)(i.h4,{id:"dvd-2",children:"DVD"}),"\n",(0,s.jsx)(i.p,{children:"Since OS X El Capitan (10.11), the easiest way to burn a DVD is:"}),"\n",(0,s.jsxs)(i.ol,{children:["\n",(0,s.jsx)(i.li,{children:"Insert your DVD and open Finder."}),"\n",(0,s.jsx)(i.li,{children:"Right click on the ISO image."}),"\n",(0,s.jsx)(i.li,{children:"Click on \u201cBurn Disk Image \u2018Solus-4.5-Budgie.iso\u2019 to Disc\u2026\u201d"}),"\n",(0,s.jsx)(i.li,{children:"Then click \u201cBurn\u201d."}),"\n"]}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.img,{alt:"macOS Burn DVD",src:n(54725).Z+"",width:"638",height:"343"})}),"\n",(0,s.jsx)(i.h4,{id:"usb-2",children:"USB"}),"\n",(0,s.jsx)(i.h5,{id:"graphical-tool",children:"Graphical tool"}),"\n",(0,s.jsxs)(i.p,{children:["One of the easiest ways to burn an ISO image to a USB thumb drive is by using a graphical tool called ",(0,s.jsx)(i.a,{href:"https://etcher.balena.io/",children:"Etcher"}),"."]}),"\n",(0,s.jsxs)(i.ol,{children:["\n",(0,s.jsx)(i.li,{children:"Open Etcher."}),"\n",(0,s.jsx)(i.li,{children:"Click on \u201cSelect image\u201d and then select the ISO and click \u201cOpen\u201d."}),"\n",(0,s.jsx)(i.li,{children:"Etcher will automatically select your USB drive. If it has selected the wrong one, click \u201cChange\u201d and select the correct one."}),"\n",(0,s.jsx)(i.li,{children:"Click \u201cFlash!\u201d."}),"\n",(0,s.jsx)(i.li,{children:"You may be prompted for your macOS user password."}),"\n",(0,s.jsx)(i.li,{children:"Once Etcher has finished it is safe to remove the USB drive."}),"\n"]}),"\n",(0,s.jsx)(i.p,{children:"You may see a message stating \u201cThe disk you inserted was not readable by this computer.\u201d once Etcher finishes. This can be ignored."}),"\n",(0,s.jsx)(i.p,{children:(0,s.jsx)(i.img,{alt:"macOS Etcher",src:n(74020).Z+"",width:"800",height:"380"})}),"\n",(0,s.jsx)(i.h5,{id:"command-line-1",children:"Command-line"}),"\n",(0,s.jsxs)(i.p,{children:["For those comfortable with the macOS Terminal app, we will walk you through using ",(0,s.jsx)(i.code,{children:"dd"}),"."]}),"\n",(0,s.jsx)(i.p,{children:"First, insert the USB drive into your computer and open Terminal (found in Applications/Utilities)."}),"\n",(0,s.jsx)(i.p,{children:"Now you'll need to identify your USB drive by listing your storage devices with the following command:"}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-bash",children:"diskutil list\n"})}),"\n",(0,s.jsx)(i.p,{children:"You should see output similar to this:"}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-bash",children:"/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"})}),"\n",(0,s.jsxs)(i.p,{children:["From this output, we can see the USB drive is listed as ",(0,s.jsx)(i.code,{children:"/dev/disk1 (external, physical)"}),". In this example, the IDENTIFIER is ",(0,s.jsx)(i.code,{children:"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."]}),"\n",(0,s.jsxs)(i.p,{children:["macOS usually auto-mounts USB drives so you\u2019ll need to unmount it first before proceeding. Use the following command and replace ",(0,s.jsx)(i.code,{children:"IDENTIFIER"})," with the correct identifier we found in the ",(0,s.jsx)(i.code,{children:"diskutil list"})," step."]}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-bash",children:"diskutil unmountDisk /dev/IDENTIFIER\n"})}),"\n",(0,s.jsx)(i.p,{children:"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:"}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-bash",children:"cd ~/Downloads\n"})}),"\n",(0,s.jsx)(i.admonition,{type:"danger",children:(0,s.jsx)(i.p,{children:(0,s.jsx)(i.strong,{children:"This next step is dangerous. Using the wrong drive identifier could result in data loss."})})}),"\n",(0,s.jsxs)(i.p,{children:["We will use the ",(0,s.jsx)(i.code,{children:"dd"})," command to write the contents of the ISO to the thumb drive. Replace ",(0,s.jsx)(i.code,{children:"IDENTIFIER"})," in the command below with your drive identifier. Note the extra ",(0,s.jsx)(i.code,{children:"r"})," before the identifier (i.e ",(0,s.jsx)(i.code,{children:"rdisk1"}),"). This is for raw mode, which along with bs=1m, makes the transfer faster."]}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-bash",children:"sudo dd if=Solus-4.5-Budgie.iso of=/dev/rIDENTIFIER bs=1m\n"})}),"\n",(0,s.jsx)(i.p,{children:"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."}),"\n",(0,s.jsx)(i.pre,{children:(0,s.jsx)(i.code,{className:"language-bash",children:"diskutil eject /dev/IDENTIFIER\n"})}),"\n",(0,s.jsx)(i.h2,{id:"boot-the-media",children:"Boot the media"}),"\n",(0,s.jsx)(i.p,{children:"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."}),"\n",(0,s.jsxs)(i.p,{children:["This is usually accessible by pressing ",(0,s.jsx)(i.code,{children:"F9"})," or ",(0,s.jsx)(i.code,{children:"F12"})," while your computer is booting. On some devices it may also be ",(0,s.jsx)(i.code,{children:"ESC"}),"."]}),"\n",(0,s.jsx)(i.p,{children:'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".'})]})}function c(e={}){const{wrapper:i}={...(0,t.a)(),...e.components};return i?(0,s.jsx)(i,{...e,children:(0,s.jsx)(h,{...e})}):h(e)}},69064:(e,i,n)=>{n.d(i,{Z:()=>s});const s=n.p+"assets/images/gmw_done-fdbb3bda7061afd0ca7f97b85c1cef18.jpg"},7173:(e,i,n)=>{n.d(i,{Z:()=>s});const s=n.p+"assets/images/gmw_start-c8e10b8e6f627b862f8f6344260db698.jpg"},39115:(e,i,n)=>{n.d(i,{Z:()=>s});const s=n.p+"assets/images/gmw_writing-1a2eb065ba3c61dd1371f89b2ab9f7c1.jpg"},8234:(e,i,n)=>{n.d(i,{Z:()=>s});const s=n.p+"assets/images/iiw_1_start-0457fdcee59f063744233653c88022f7.png"},51213:(e,i,n)=>{n.d(i,{Z:()=>s});const s=n.p+"assets/images/iiw_2_writing-61d90705ea2038df803e806657f7e20f.png"},46368:(e,i,n)=>{n.d(i,{Z:()=>s});const s=n.p+"assets/images/iiw_3_done-de4e8501e47d1073f945ae1aceb13995.png"},54725:(e,i,n)=>{n.d(i,{Z:()=>s});const s=n.p+"assets/images/mac-burn-dvd-0bef9578a58d61610854fc7c25e3496f.jpg"},74020:(e,i,n)=>{n.d(i,{Z:()=>s});const s=n.p+"assets/images/mac-etcher-2d28aaeb19eda12c960c6b09e81eceb2.jpg"},93093:(e,i,n)=>{n.d(i,{Z:()=>s});const s=n.p+"assets/images/rufus-6f16a561298400882bff901d61064e58.jpg"},11151:(e,i,n)=>{n.d(i,{Z:()=>o,a:()=>r});var s=n(67294);const t={},l=s.createContext(t);function r(e){const i=s.useContext(l);return s.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function o(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:r(e.components),s.createElement(l.Provider,{value:i},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/5685b4d8.05953b4b.js b/assets/js/5685b4d8.05953b4b.js
new file mode 100644
index 000000000..162ae8690
--- /dev/null
+++ b/assets/js/5685b4d8.05953b4b.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[1540],{28594:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>u,contentTitle:()=>s,default:()=>f,frontMatter:()=>r,metadata:()=>c,toc:()=>a});var o=t(85893),i=t(11151);const r={title:"Configuration",summary:"Help for configuring XFCE on Solus"},s="Configuration",c={id:"user/editions/xfce/configuration",title:"Configuration",description:"TODO: Add configuration snippets for XFCE",source:"@site/docs/user/editions/xfce/configuration.md",sourceDirName:"user/editions/xfce",slug:"/user/editions/xfce/configuration",permalink:"/docs/user/editions/xfce/configuration",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/editions/xfce/configuration.md",tags:[],version:"current",lastUpdatedAt:1714518504e3,frontMatter:{title:"Configuration",summary:"Help for configuring XFCE on Solus"},sidebar:"userSidebar",previous:{title:"XFCE",permalink:"/docs/user/editions/xfce/"},next:{title:"Tips and Tricks",permalink:"/docs/user/editions/xfce/tips-and-tricks"}},u={},a=[];function d(e){const n={h1:"h1",p:"p",...(0,i.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h1,{id:"configuration",children:"Configuration"}),"\n",(0,o.jsx)(n.p,{children:"TODO: Add configuration snippets for XFCE"})]})}function f(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},11151:(e,n,t)=>{t.d(n,{Z:()=>c,a:()=>s});var o=t(67294);const i={},r=o.createContext(i);function s(e){const n=o.useContext(r);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:s(e.components),o.createElement(r.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/5685b4d8.8c1be13a.js b/assets/js/5685b4d8.8c1be13a.js
deleted file mode 100644
index d2960a25a..000000000
--- a/assets/js/5685b4d8.8c1be13a.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[1540],{28594:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>u,contentTitle:()=>s,default:()=>f,frontMatter:()=>r,metadata:()=>c,toc:()=>a});var o=t(85893),i=t(11151);const r={title:"Configuration",summary:"Help for configuring XFCE on Solus"},s="Configuration",c={id:"user/editions/xfce/configuration",title:"Configuration",description:"TODO: Add configuration snippets for XFCE",source:"@site/docs/user/editions/xfce/configuration.md",sourceDirName:"user/editions/xfce",slug:"/user/editions/xfce/configuration",permalink:"/docs/user/editions/xfce/configuration",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/editions/xfce/configuration.md",tags:[],version:"current",lastUpdatedAt:171439918e4,frontMatter:{title:"Configuration",summary:"Help for configuring XFCE on Solus"},sidebar:"userSidebar",previous:{title:"XFCE",permalink:"/docs/user/editions/xfce/"},next:{title:"Tips and Tricks",permalink:"/docs/user/editions/xfce/tips-and-tricks"}},u={},a=[];function d(e){const n={h1:"h1",p:"p",...(0,i.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h1,{id:"configuration",children:"Configuration"}),"\n",(0,o.jsx)(n.p,{children:"TODO: Add configuration snippets for XFCE"})]})}function f(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},11151:(e,n,t)=>{t.d(n,{Z:()=>c,a:()=>s});var o=t(67294);const i={},r=o.createContext(i);function s(e){const n=o.useContext(r);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function c(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:s(e.components),o.createElement(r.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/5b7f3753.8f751b64.js b/assets/js/5b7f3753.8f751b64.js
deleted file mode 100644
index 6647c7fba..000000000
--- a/assets/js/5b7f3753.8f751b64.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[6413],{17754:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>o,contentTitle:()=>r,default:()=>d,frontMatter:()=>a,metadata:()=>c,toc:()=>h});var t=n(85893),s=n(11151);const a={title:"Git Basics",summary:"Basic git commands for packaging"},r="Git Basics",c={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,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/git-basics.md",tags:[],version:"current",lastUpdatedAt:171439918e4,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:"Monitoring YAML",permalink:"/docs/packaging/monitoring.yml"}},o={},h=[{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}];function l(e){const i={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",strong:"strong",...(0,s.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(i.h1,{id:"git-basics",children:"Git Basics"}),"\n",(0,t.jsx)(i.h2,{id:"working-with-branches",children:"Working with branches"}),"\n",(0,t.jsxs)(i.p,{children:["The recommended way to switch branches is ",(0,t.jsx)(i.code,{children:"git switch"}),".\nTo create a new branch use ",(0,t.jsx)(i.code,{children:"git switch -c"}),"."]}),"\n",(0,t.jsx)(i.h2,{id:"keeping-your-branch-up-to-date-with-the-main-branch",children:"Keeping your branch up to date with the main branch"}),"\n",(0,t.jsxs)(i.p,{children:["If there any new changes to the repository whilst you are still working on your branch you need to ",(0,t.jsx)(i.a,{href:"https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/syncing-a-fork",children:"sync your fork"}),".\nRun ",(0,t.jsx)(i.code,{children:"git fetch"}),", and ",(0,t.jsx)(i.code,{children:"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,t.jsx)(i.code,{children:"git diff origin/main..my-branch"}),"."]}),"\n",(0,t.jsx)(i.h2,{id:"adding-files",children:"Adding files"}),"\n",(0,t.jsxs)(i.p,{children:["For every file you change or add, you must let git know about it: ",(0,t.jsx)(i.code,{children:"git add someFile"})]}),"\n",(0,t.jsx)(i.h2,{id:"removing-files",children:"Removing files"}),"\n",(0,t.jsxs)(i.p,{children:["For files that need to be removed, you must do so using git: ",(0,t.jsx)(i.code,{children:"git rm someFile"})]}),"\n",(0,t.jsx)(i.h2,{id:"renaming-files",children:"Renaming files"}),"\n",(0,t.jsxs)(i.p,{children:["Likewise, for renaming a file, you must do so via git: ",(0,t.jsx)(i.code,{children:"git mv someFile someFileName2"})]}),"\n",(0,t.jsx)(i.h2,{id:"check-the-changes-in-your-files",children:"Check the changes in your files"}),"\n",(0,t.jsx)(i.p,{children:"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."}),"\n",(0,t.jsxs)(i.p,{children:["To diff them all at once, useful for small changes, use ",(0,t.jsx)(i.code,{children:"git diff"}),".\nTo diff each file one at a time run ",(0,t.jsx)(i.code,{children:"git diff filename"})," on each one."]}),"\n",(0,t.jsx)(i.h2,{id:"commit-your-changes",children:"Commit your changes"}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.strong,{children:"Check your branch"})}),"\n",(0,t.jsxs)(i.p,{children:["Get the status of the branch with ",(0,t.jsx)(i.code,{children:"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."]}),"\n",(0,t.jsxs)(i.p,{children:["Now that you've tested and reviewed your change, when you're happy with it, it's time to commit your changes with ",(0,t.jsx)(i.code,{children:"git commit"}),"."]}),"\n",(0,t.jsx)(i.h2,{id:"deleting-your-branch-after-a-pull-request-is-merged",children:"Deleting your branch after a pull request is merged"}),"\n",(0,t.jsx)(i.p,{children:"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."}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-bash",children:"cd ~/solus-packages\ngit switch main\ngit branch -D my-branch\ngit push -d origin my-branch\n"})})]})}function d(e={}){const{wrapper:i}={...(0,s.a)(),...e.components};return i?(0,t.jsx)(i,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},11151:(e,i,n)=>{n.d(i,{Z:()=>c,a:()=>r});var t=n(67294);const s={},a=t.createContext(s);function r(e){const i=t.useContext(a);return t.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function c(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),t.createElement(a.Provider,{value:i},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/5b7f3753.a3cb8892.js b/assets/js/5b7f3753.a3cb8892.js
new file mode 100644
index 000000000..961b54980
--- /dev/null
+++ b/assets/js/5b7f3753.a3cb8892.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[6413],{17754:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>o,contentTitle:()=>r,default:()=>d,frontMatter:()=>a,metadata:()=>c,toc:()=>h});var t=n(85893),s=n(11151);const a={title:"Git Basics",summary:"Basic git commands for packaging"},r="Git Basics",c={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,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/git-basics.md",tags:[],version:"current",lastUpdatedAt:1714518504e3,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:"Monitoring YAML",permalink:"/docs/packaging/monitoring.yml"}},o={},h=[{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}];function l(e){const i={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",strong:"strong",...(0,s.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(i.h1,{id:"git-basics",children:"Git Basics"}),"\n",(0,t.jsx)(i.h2,{id:"working-with-branches",children:"Working with branches"}),"\n",(0,t.jsxs)(i.p,{children:["The recommended way to switch branches is ",(0,t.jsx)(i.code,{children:"git switch"}),".\nTo create a new branch use ",(0,t.jsx)(i.code,{children:"git switch -c"}),"."]}),"\n",(0,t.jsx)(i.h2,{id:"keeping-your-branch-up-to-date-with-the-main-branch",children:"Keeping your branch up to date with the main branch"}),"\n",(0,t.jsxs)(i.p,{children:["If there any new changes to the repository whilst you are still working on your branch you need to ",(0,t.jsx)(i.a,{href:"https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/syncing-a-fork",children:"sync your fork"}),".\nRun ",(0,t.jsx)(i.code,{children:"git fetch"}),", and ",(0,t.jsx)(i.code,{children:"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,t.jsx)(i.code,{children:"git diff origin/main..my-branch"}),"."]}),"\n",(0,t.jsx)(i.h2,{id:"adding-files",children:"Adding files"}),"\n",(0,t.jsxs)(i.p,{children:["For every file you change or add, you must let git know about it: ",(0,t.jsx)(i.code,{children:"git add someFile"})]}),"\n",(0,t.jsx)(i.h2,{id:"removing-files",children:"Removing files"}),"\n",(0,t.jsxs)(i.p,{children:["For files that need to be removed, you must do so using git: ",(0,t.jsx)(i.code,{children:"git rm someFile"})]}),"\n",(0,t.jsx)(i.h2,{id:"renaming-files",children:"Renaming files"}),"\n",(0,t.jsxs)(i.p,{children:["Likewise, for renaming a file, you must do so via git: ",(0,t.jsx)(i.code,{children:"git mv someFile someFileName2"})]}),"\n",(0,t.jsx)(i.h2,{id:"check-the-changes-in-your-files",children:"Check the changes in your files"}),"\n",(0,t.jsx)(i.p,{children:"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."}),"\n",(0,t.jsxs)(i.p,{children:["To diff them all at once, useful for small changes, use ",(0,t.jsx)(i.code,{children:"git diff"}),".\nTo diff each file one at a time run ",(0,t.jsx)(i.code,{children:"git diff filename"})," on each one."]}),"\n",(0,t.jsx)(i.h2,{id:"commit-your-changes",children:"Commit your changes"}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.strong,{children:"Check your branch"})}),"\n",(0,t.jsxs)(i.p,{children:["Get the status of the branch with ",(0,t.jsx)(i.code,{children:"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."]}),"\n",(0,t.jsxs)(i.p,{children:["Now that you've tested and reviewed your change, when you're happy with it, it's time to commit your changes with ",(0,t.jsx)(i.code,{children:"git commit"}),"."]}),"\n",(0,t.jsx)(i.h2,{id:"deleting-your-branch-after-a-pull-request-is-merged",children:"Deleting your branch after a pull request is merged"}),"\n",(0,t.jsx)(i.p,{children:"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."}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-bash",children:"cd ~/solus-packages\ngit switch main\ngit branch -D my-branch\ngit push -d origin my-branch\n"})})]})}function d(e={}){const{wrapper:i}={...(0,s.a)(),...e.components};return i?(0,t.jsx)(i,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},11151:(e,i,n)=>{n.d(i,{Z:()=>c,a:()=>r});var t=n(67294);const s={},a=t.createContext(s);function r(e){const i=t.useContext(a);return t.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function c(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:r(e.components),t.createElement(a.Provider,{value:i},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/5f194406.8d4d7c80.js b/assets/js/5f194406.8d4d7c80.js
new file mode 100644
index 000000000..3d42c46d5
--- /dev/null
+++ b/assets/js/5f194406.8d4d7c80.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[7607],{48230:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>l,contentTitle:()=>r,default:()=>c,frontMatter:()=>o,metadata:()=>a,toc:()=>d});var s=n(85893),t=n(11151);const o={title:"Community Guidelines",summary:"Community Guidelines"},r="Community guidelines",a={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,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/contributing/community-guidelines.md",tags:[],version:"current",lastUpdatedAt:1714518504e3,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={},d=[{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:"Repositories and issue trackers",id:"repositories-and-issue-trackers",level:3}];function u(e){const i={a:"a",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",ul:"ul",...(0,t.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(i.h1,{id:"community-guidelines",children:"Community guidelines"}),"\n",(0,s.jsx)(i.p,{children:"The Solus Project enforces a set of community guidelines to maintain a family-friendly, respectful, and professional environment."}),"\n",(0,s.jsx)(i.p,{children:"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."}),"\n",(0,s.jsx)(i.h2,{id:"general-guidelines",children:"General guidelines"}),"\n",(0,s.jsx)(i.p,{children:"The guidelines laid out in this section apply to all services offered or used by the project, such as (but not limited to):"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"Our package issue tracker"}),"\n",(0,s.jsx)(i.li,{children:"Any and all forums or organized communities, e.g. our Flarum forums or subreddit"}),"\n",(0,s.jsx)(i.li,{children:"Matrix, IRC, or any other officially supported means of communicating with the project and community members in real-time"}),"\n",(0,s.jsx)(i.li,{children:"Postings to social media pages / properties owned or used by the project."}),"\n"]}),"\n",(0,s.jsx)(i.h3,{id:"harassment",children:"Harassment"}),"\n",(0,s.jsx)(i.p,{children:"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."}),"\n",(0,s.jsx)(i.p,{children:"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."}),"\n",(0,s.jsx)(i.p,{children:"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."}),"\n",(0,s.jsx)(i.h3,{id:"language",children:"Language"}),"\n",(0,s.jsx)(i.p,{children:"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:"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["Hateful towards individuals or groups based on:","\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"Disabilities"}),"\n",(0,s.jsx)(i.li,{children:"Gender or gender identity"}),"\n",(0,s.jsx)(i.li,{children:"Religious beliefs"}),"\n",(0,s.jsx)(i.li,{children:"Sexual orientation"}),"\n",(0,s.jsx)(i.li,{children:"Race or nationality"}),"\n",(0,s.jsx)(i.li,{children:"Political affiliation"}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(i.li,{children:"Sexual or otherwise lewd in nature"}),"\n"]}),"\n",(0,s.jsx)(i.p,{children:"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."}),"\n",(0,s.jsx)(i.h3,{id:"media-sharing",children:"Media sharing"}),"\n",(0,s.jsx)(i.p,{children:"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."}),"\n",(0,s.jsx)(i.h3,{id:"observe-topic-guidance",children:"Observe topic guidance"}),"\n",(0,s.jsx)(i.p,{children:"Members of the community should attempt to observe topic guidance when participating in various services offered or used by the project, such as:"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"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."}),"\n",(0,s.jsx)(i.li,{children:"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."}),"\n",(0,s.jsx)(i.li,{children:"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."}),"\n"]}),"\n",(0,s.jsx)(i.h3,{id:"other",children:"Other"}),"\n",(0,s.jsx)(i.p,{children:"The below guidelines do not fall into any specific category but should be observed by members of the community:"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"Continual repetition and/or advertisement of any products, services, or projects is not allowed."}),"\n",(0,s.jsx)(i.li,{children:"Using bots or other automated ways of interaction, unless explicitly permitted by the project, is not allowed."}),"\n",(0,s.jsx)(i.li,{children:"No spamming or flooding. This may result in temporary removals (for example: kicks in Matrix) or warnings, to prevent the continued spamming or flooding."}),"\n",(0,s.jsx)(i.li,{children:"Promotion of unofficial Solus communities or communication channels without prior permission is not allowed."}),"\n"]}),"\n",(0,s.jsx)(i.h2,{id:"service-specific-guidelines",children:"Service-specific guidelines"}),"\n",(0,s.jsx)(i.p,{children:"The below mentioned guidelines apply to individual services provided or used by the project."}),"\n",(0,s.jsx)(i.h3,{id:"repositories-and-issue-trackers",children:"Repositories and issue trackers"}),"\n",(0,s.jsx)(i.p,{children:"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:"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["Our ",(0,s.jsx)(i.a,{href:"https://github.com/getsolus/",children:"Documentation, Package, Software Center, and various tooling repositories"})]}),"\n",(0,s.jsxs)(i.li,{children:["Our package ",(0,s.jsx)(i.a,{href:"https://github.com/getsolus/packages/issues",children:"issue tracker"})]}),"\n",(0,s.jsx)(i.li,{children:"All other issue trackers utilized by the project across repositories hosted in our GitHub organizations"}),"\n"]}),"\n",(0,s.jsx)(i.p,{children:"Members of the community are expected to:"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"Maintain on-topic discussions as relevant to each individual task"}),"\n",(0,s.jsx)(i.li,{children:"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"}),"\n",(0,s.jsx)(i.li,{children:"Refrain from using the Development Tracker for general support queries, such as (but not limited to): installation assistance, package installation assistance, etc."}),"\n"]}),"\n",(0,s.jsx)(i.p,{children:"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."}),"\n",(0,s.jsx)(i.p,{children:"Solus Staff reserves the rights to:"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"Close or lock tasks on a temporary or permanent basis"}),"\n",(0,s.jsx)(i.li,{children:"Disable the account of individuals which violate either general guidelines or \u201cDevelopment / Issue Trackers\u201d-specific guidelines."}),"\n",(0,s.jsx)(i.li,{children:"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."}),"\n"]})]})}function c(e={}){const{wrapper:i}={...(0,t.a)(),...e.components};return i?(0,s.jsx)(i,{...e,children:(0,s.jsx)(u,{...e})}):u(e)}},11151:(e,i,n)=>{n.d(i,{Z:()=>a,a:()=>r});var s=n(67294);const t={},o=s.createContext(t);function r(e){const i=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function a(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:r(e.components),s.createElement(o.Provider,{value:i},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/5f194406.dcb57f1a.js b/assets/js/5f194406.dcb57f1a.js
deleted file mode 100644
index fedb838c7..000000000
--- a/assets/js/5f194406.dcb57f1a.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[7607],{48230:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>l,contentTitle:()=>r,default:()=>c,frontMatter:()=>o,metadata:()=>a,toc:()=>d});var s=n(85893),t=n(11151);const o={title:"Community Guidelines",summary:"Community Guidelines"},r="Community guidelines",a={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,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/contributing/community-guidelines.md",tags:[],version:"current",lastUpdatedAt:171439918e4,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={},d=[{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:"Repositories and issue trackers",id:"repositories-and-issue-trackers",level:3}];function u(e){const i={a:"a",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",ul:"ul",...(0,t.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(i.h1,{id:"community-guidelines",children:"Community guidelines"}),"\n",(0,s.jsx)(i.p,{children:"The Solus Project enforces a set of community guidelines to maintain a family-friendly, respectful, and professional environment."}),"\n",(0,s.jsx)(i.p,{children:"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."}),"\n",(0,s.jsx)(i.h2,{id:"general-guidelines",children:"General guidelines"}),"\n",(0,s.jsx)(i.p,{children:"The guidelines laid out in this section apply to all services offered or used by the project, such as (but not limited to):"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"Our package issue tracker"}),"\n",(0,s.jsx)(i.li,{children:"Any and all forums or organized communities, e.g. our Flarum forums or subreddit"}),"\n",(0,s.jsx)(i.li,{children:"Matrix, IRC, or any other officially supported means of communicating with the project and community members in real-time"}),"\n",(0,s.jsx)(i.li,{children:"Postings to social media pages / properties owned or used by the project."}),"\n"]}),"\n",(0,s.jsx)(i.h3,{id:"harassment",children:"Harassment"}),"\n",(0,s.jsx)(i.p,{children:"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."}),"\n",(0,s.jsx)(i.p,{children:"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."}),"\n",(0,s.jsx)(i.p,{children:"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."}),"\n",(0,s.jsx)(i.h3,{id:"language",children:"Language"}),"\n",(0,s.jsx)(i.p,{children:"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:"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["Hateful towards individuals or groups based on:","\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"Disabilities"}),"\n",(0,s.jsx)(i.li,{children:"Gender or gender identity"}),"\n",(0,s.jsx)(i.li,{children:"Religious beliefs"}),"\n",(0,s.jsx)(i.li,{children:"Sexual orientation"}),"\n",(0,s.jsx)(i.li,{children:"Race or nationality"}),"\n",(0,s.jsx)(i.li,{children:"Political affiliation"}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(i.li,{children:"Sexual or otherwise lewd in nature"}),"\n"]}),"\n",(0,s.jsx)(i.p,{children:"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."}),"\n",(0,s.jsx)(i.h3,{id:"media-sharing",children:"Media sharing"}),"\n",(0,s.jsx)(i.p,{children:"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."}),"\n",(0,s.jsx)(i.h3,{id:"observe-topic-guidance",children:"Observe topic guidance"}),"\n",(0,s.jsx)(i.p,{children:"Members of the community should attempt to observe topic guidance when participating in various services offered or used by the project, such as:"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"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."}),"\n",(0,s.jsx)(i.li,{children:"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."}),"\n",(0,s.jsx)(i.li,{children:"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."}),"\n"]}),"\n",(0,s.jsx)(i.h3,{id:"other",children:"Other"}),"\n",(0,s.jsx)(i.p,{children:"The below guidelines do not fall into any specific category but should be observed by members of the community:"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"Continual repetition and/or advertisement of any products, services, or projects is not allowed."}),"\n",(0,s.jsx)(i.li,{children:"Using bots or other automated ways of interaction, unless explicitly permitted by the project, is not allowed."}),"\n",(0,s.jsx)(i.li,{children:"No spamming or flooding. This may result in temporary removals (for example: kicks in Matrix) or warnings, to prevent the continued spamming or flooding."}),"\n",(0,s.jsx)(i.li,{children:"Promotion of unofficial Solus communities or communication channels without prior permission is not allowed."}),"\n"]}),"\n",(0,s.jsx)(i.h2,{id:"service-specific-guidelines",children:"Service-specific guidelines"}),"\n",(0,s.jsx)(i.p,{children:"The below mentioned guidelines apply to individual services provided or used by the project."}),"\n",(0,s.jsx)(i.h3,{id:"repositories-and-issue-trackers",children:"Repositories and issue trackers"}),"\n",(0,s.jsx)(i.p,{children:"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:"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["Our ",(0,s.jsx)(i.a,{href:"https://github.com/getsolus/",children:"Documentation, Package, Software Center, and various tooling repositories"})]}),"\n",(0,s.jsxs)(i.li,{children:["Our package ",(0,s.jsx)(i.a,{href:"https://github.com/getsolus/packages/issues",children:"issue tracker"})]}),"\n",(0,s.jsx)(i.li,{children:"All other issue trackers utilized by the project across repositories hosted in our GitHub organizations"}),"\n"]}),"\n",(0,s.jsx)(i.p,{children:"Members of the community are expected to:"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"Maintain on-topic discussions as relevant to each individual task"}),"\n",(0,s.jsx)(i.li,{children:"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"}),"\n",(0,s.jsx)(i.li,{children:"Refrain from using the Development Tracker for general support queries, such as (but not limited to): installation assistance, package installation assistance, etc."}),"\n"]}),"\n",(0,s.jsx)(i.p,{children:"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."}),"\n",(0,s.jsx)(i.p,{children:"Solus Staff reserves the rights to:"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"Close or lock tasks on a temporary or permanent basis"}),"\n",(0,s.jsx)(i.li,{children:"Disable the account of individuals which violate either general guidelines or \u201cDevelopment / Issue Trackers\u201d-specific guidelines."}),"\n",(0,s.jsx)(i.li,{children:"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."}),"\n"]})]})}function c(e={}){const{wrapper:i}={...(0,t.a)(),...e.components};return i?(0,s.jsx)(i,{...e,children:(0,s.jsx)(u,{...e})}):u(e)}},11151:(e,i,n)=>{n.d(i,{Z:()=>a,a:()=>r});var s=n(67294);const t={},o=s.createContext(t);function r(e){const i=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function a(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:r(e.components),s.createElement(o.Provider,{value:i},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/61c953b4.2f14455a.js b/assets/js/61c953b4.2f14455a.js
deleted file mode 100644
index 2b7dab2b6..000000000
--- a/assets/js/61c953b4.2f14455a.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[8032],{49578:(e,a,i)=>{i.r(a),i.d(a,{assets:()=>c,contentTitle:()=>r,default:()=>h,frontMatter:()=>s,metadata:()=>o,toc:()=>d});var n=i(85893),t=i(11151);const s={title:"Maintainership",summary:"Package maintainership"},r="Maintainership",o={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,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/procedures/maintainership.md",tags:[],version:"current",lastUpdatedAt:171439918e4,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"}},c={},d=[{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}];function l(e){const a={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",ul:"ul",...(0,t.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(a.h1,{id:"maintainership",children:"Maintainership"}),"\n",(0,n.jsx)(a.p,{children:"The role of a maintainer is to update package(s) on a regular basis, while following Solus packaging and consistency standards."}),"\n",(0,n.jsx)(a.h2,{id:"commitment",children:"Commitment"}),"\n",(0,n.jsx)(a.p,{children:"Each new package which is going to land in the Solus repository must have one or more maintainers. These individuals commit to:"}),"\n",(0,n.jsxs)(a.ul,{children:["\n",(0,n.jsx)(a.li,{children:"Update the package reasonably regularly, unless there are valid reasons to hold it back"}),"\n",(0,n.jsxs)(a.li,{children:["Ensure the ",(0,n.jsx)(a.a,{href:"/docs/packaging/package.yml",children:"packaging file"})," adheres to the Solus ",(0,n.jsx)(a.a,{href:"/docs/packaging/packaging-practices",children:"standards"})]}),"\n",(0,n.jsx)(a.li,{children:"Ensure the application or library is consistent with the Operating System aesthetics, file system conventions and the Solus philosophy in general"}),"\n"]}),"\n",(0,n.jsxs)(a.p,{children:["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,n.jsx)(a.a,{href:"/docs/user/contributing/community-guidelines#repositories-and-issue-trackers",children:"community guidelines"}),")"]}),"\n",(0,n.jsx)(a.p,{children:"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."}),"\n",(0,n.jsx)(a.h2,{id:"stepping-in",children:"Stepping in"}),"\n",(0,n.jsxs)(a.p,{children:["To officially step in as the maintainer of a package, a ",(0,n.jsx)(a.code,{children:"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,n.jsx)(a.code,{children:"MAINTAINERS.md"})," file must be updated."]}),"\n",(0,n.jsx)(a.h2,{id:"updating-a-maintained-package",children:"Updating a maintained package"}),"\n",(0,n.jsx)(a.p,{children:"The procedure varies depending on whether or not the individual is the maintainer."}),"\n",(0,n.jsx)(a.h3,{id:"maintainers",children:"Maintainers"}),"\n",(0,n.jsxs)(a.p,{children:["Maintainers are free to ",(0,n.jsx)(a.a,{href:"/docs/packaging/updating-an-existing-package",children:"update a package"})," at their will, unless otherwise indicated by Solus Staff."]}),"\n",(0,n.jsx)(a.h3,{id:"non-maintainers",children:"Non-maintainers"}),"\n",(0,n.jsxs)(a.p,{children:["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,n.jsx)(a.a,{href:"/docs/packaging/procedures/request-a-package-update",children:"package update request"}),". Alternatively, the individual can reach the maintainers or Solus Staff via the Solus Packaging room on ",(0,n.jsx)(a.a,{href:"/docs/user/contributing/getting-involved#matrix-chat",children:"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."]}),"\n",(0,n.jsxs)(a.h2,{id:"template-for-the-maintainersmd-file",children:["Template for the ",(0,n.jsx)(a.code,{children:"MAINTAINERS.md"})," file"]}),"\n",(0,n.jsxs)(a.p,{children:["Presented here is the ",(0,n.jsx)(a.code,{children:"MAINTAINERS.md"})," file. This file must be provided verbatim alongside the other patch contents, and filled in with the maintainers' personal information. A ",(0,n.jsx)(a.a,{href:"/docs/user/contributing/getting-involved#matrix-chat",children:"Matrix"})," contact is optional but recommended, while an email address is mandatory. Similar to the ",(0,n.jsx)(a.code,{children:".solus/packager"})," file used for packaging, the maintainers listed in ",(0,n.jsx)(a.code,{children:"MAINTAINERS.md"})," must use their real first and last name(s) for accountability purposes."]}),"\n",(0,n.jsxs)(a.p,{children:["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,n.jsx)(a.em,{children:"Name"}),", ",(0,n.jsx)(a.em,{children:"Surname"})," and ",(0,n.jsx)(a.em,{children:"REPLACEME"})," placeholders."]}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{children:"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"})})]})}function h(e={}){const{wrapper:a}={...(0,t.a)(),...e.components};return a?(0,n.jsx)(a,{...e,children:(0,n.jsx)(l,{...e})}):l(e)}},11151:(e,a,i)=>{i.d(a,{Z:()=>o,a:()=>r});var n=i(67294);const t={},s=n.createContext(t);function r(e){const a=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(a):{...a,...e}}),[a,e])}function o(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:r(e.components),n.createElement(s.Provider,{value:a},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/61c953b4.c482ccdc.js b/assets/js/61c953b4.c482ccdc.js
new file mode 100644
index 000000000..3f7033a23
--- /dev/null
+++ b/assets/js/61c953b4.c482ccdc.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[8032],{49578:(e,a,i)=>{i.r(a),i.d(a,{assets:()=>c,contentTitle:()=>r,default:()=>h,frontMatter:()=>s,metadata:()=>o,toc:()=>d});var n=i(85893),t=i(11151);const s={title:"Maintainership",summary:"Package maintainership"},r="Maintainership",o={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,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/procedures/maintainership.md",tags:[],version:"current",lastUpdatedAt:1714518504e3,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"}},c={},d=[{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}];function l(e){const a={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",ul:"ul",...(0,t.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(a.h1,{id:"maintainership",children:"Maintainership"}),"\n",(0,n.jsx)(a.p,{children:"The role of a maintainer is to update package(s) on a regular basis, while following Solus packaging and consistency standards."}),"\n",(0,n.jsx)(a.h2,{id:"commitment",children:"Commitment"}),"\n",(0,n.jsx)(a.p,{children:"Each new package which is going to land in the Solus repository must have one or more maintainers. These individuals commit to:"}),"\n",(0,n.jsxs)(a.ul,{children:["\n",(0,n.jsx)(a.li,{children:"Update the package reasonably regularly, unless there are valid reasons to hold it back"}),"\n",(0,n.jsxs)(a.li,{children:["Ensure the ",(0,n.jsx)(a.a,{href:"/docs/packaging/package.yml",children:"packaging file"})," adheres to the Solus ",(0,n.jsx)(a.a,{href:"/docs/packaging/packaging-practices",children:"standards"})]}),"\n",(0,n.jsx)(a.li,{children:"Ensure the application or library is consistent with the Operating System aesthetics, file system conventions and the Solus philosophy in general"}),"\n"]}),"\n",(0,n.jsxs)(a.p,{children:["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,n.jsx)(a.a,{href:"/docs/user/contributing/community-guidelines#repositories-and-issue-trackers",children:"community guidelines"}),")"]}),"\n",(0,n.jsx)(a.p,{children:"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."}),"\n",(0,n.jsx)(a.h2,{id:"stepping-in",children:"Stepping in"}),"\n",(0,n.jsxs)(a.p,{children:["To officially step in as the maintainer of a package, a ",(0,n.jsx)(a.code,{children:"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,n.jsx)(a.code,{children:"MAINTAINERS.md"})," file must be updated."]}),"\n",(0,n.jsx)(a.h2,{id:"updating-a-maintained-package",children:"Updating a maintained package"}),"\n",(0,n.jsx)(a.p,{children:"The procedure varies depending on whether or not the individual is the maintainer."}),"\n",(0,n.jsx)(a.h3,{id:"maintainers",children:"Maintainers"}),"\n",(0,n.jsxs)(a.p,{children:["Maintainers are free to ",(0,n.jsx)(a.a,{href:"/docs/packaging/updating-an-existing-package",children:"update a package"})," at their will, unless otherwise indicated by Solus Staff."]}),"\n",(0,n.jsx)(a.h3,{id:"non-maintainers",children:"Non-maintainers"}),"\n",(0,n.jsxs)(a.p,{children:["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,n.jsx)(a.a,{href:"/docs/packaging/procedures/request-a-package-update",children:"package update request"}),". Alternatively, the individual can reach the maintainers or Solus Staff via the Solus Packaging room on ",(0,n.jsx)(a.a,{href:"/docs/user/contributing/getting-involved#matrix-chat",children:"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."]}),"\n",(0,n.jsxs)(a.h2,{id:"template-for-the-maintainersmd-file",children:["Template for the ",(0,n.jsx)(a.code,{children:"MAINTAINERS.md"})," file"]}),"\n",(0,n.jsxs)(a.p,{children:["Presented here is the ",(0,n.jsx)(a.code,{children:"MAINTAINERS.md"})," file. This file must be provided verbatim alongside the other patch contents, and filled in with the maintainers' personal information. A ",(0,n.jsx)(a.a,{href:"/docs/user/contributing/getting-involved#matrix-chat",children:"Matrix"})," contact is optional but recommended, while an email address is mandatory. Similar to the ",(0,n.jsx)(a.code,{children:".solus/packager"})," file used for packaging, the maintainers listed in ",(0,n.jsx)(a.code,{children:"MAINTAINERS.md"})," must use their real first and last name(s) for accountability purposes."]}),"\n",(0,n.jsxs)(a.p,{children:["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,n.jsx)(a.em,{children:"Name"}),", ",(0,n.jsx)(a.em,{children:"Surname"})," and ",(0,n.jsx)(a.em,{children:"REPLACEME"})," placeholders."]}),"\n",(0,n.jsx)(a.pre,{children:(0,n.jsx)(a.code,{children:"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"})})]})}function h(e={}){const{wrapper:a}={...(0,t.a)(),...e.components};return a?(0,n.jsx)(a,{...e,children:(0,n.jsx)(l,{...e})}):l(e)}},11151:(e,a,i)=>{i.d(a,{Z:()=>o,a:()=>r});var n=i(67294);const t={},s=n.createContext(t);function r(e){const a=n.useContext(s);return n.useMemo((function(){return"function"==typeof e?e(a):{...a,...e}}),[a,e])}function o(e){let a;return a=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:r(e.components),n.createElement(s.Provider,{value:a},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/64699048.2923c3fe.js b/assets/js/64699048.2923c3fe.js
deleted file mode 100644
index aaae75165..000000000
--- a/assets/js/64699048.2923c3fe.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[2151],{56259:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>l,default:()=>p,frontMatter:()=>r,metadata:()=>i,toc:()=>d});var s=t(85893),o=t(11151);const r={title:"Development",summary:"Installation of development software on Solus"},l="Development",i={id:"user/software/development/index",title:"Development",description:"Solus provides a stable foundation for creating, testing, and deploying applications.",source:"@site/docs/user/software/development/index.md",sourceDirName:"user/software/development",slug:"/user/software/development/",permalink:"/docs/user/software/development/",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/development/index.md",tags:[],version:"current",lastUpdatedAt:171439918e4,frontMatter:{title:"Development",summary:"Installation of development software on Solus"},sidebar:"userSidebar",previous:{title:"Desktops",permalink:"/docs/user/software/desktops/"},next:{title:"Containers",permalink:"/docs/user/software/development/containers"}},a={},d=[{value:"Getting started",id:"getting-started",level:2}];function c(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",hr:"hr",p:"p",pre:"pre",strong:"strong",...(0,o.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"development",children:"Development"}),"\n",(0,s.jsx)(n.p,{children:"Solus provides a stable foundation for creating, testing, and deploying applications."}),"\n",(0,s.jsx)(n.p,{children:"You can install tools such as text editors, programming languages, compilers, and version control systems. Solus also supports containerization and virtualization technologies."}),"\n",(0,s.jsx)(n.h2,{id:"getting-started",children:"Getting started"}),"\n",(0,s.jsxs)(n.p,{children:["If you want to compile and develop software using Solus, we recommend installing the ",(0,s.jsx)(n.code,{children:"system.devel"})," component."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sudo eopkg install -c system.devel\n"})}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"system.devel"})," component installs libraries and packages for software development, such as ",(0,s.jsx)(n.code,{children:"clang"}),", ",(0,s.jsx)(n.code,{children:"gcc"}),", and ",(0,s.jsx)(n.code,{children:"make"}),"."]}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"containers",children:(0,s.jsx)(n.strong,{children:"Containers"})})}),"\n",(0,s.jsx)(n.p,{children:"Install and configure containerization software on Solus."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"java",children:(0,s.jsx)(n.strong,{children:"Java"})})}),"\n",(0,s.jsx)(n.p,{children:"Learn how to install, run, and manage Java on Solus."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"postgresql",children:(0,s.jsx)(n.strong,{children:"PostgreSQL"})})}),"\n",(0,s.jsx)(n.p,{children:"A quick guide to using PostgreSQL on Solus."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"r-and-rstudio",children:(0,s.jsx)(n.strong,{children:"R and RStudio"})})}),"\n",(0,s.jsx)(n.p,{children:"Quick start guide for R and RStudio on Solus."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"rust",children:(0,s.jsx)(n.strong,{children:"Rust"})})}),"\n",(0,s.jsx)(n.p,{children:"A quick guide to getting set up for Rust development on Solus."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"web",children:(0,s.jsx)(n.strong,{children:"Web Development"})})}),"\n",(0,s.jsx)(n.p,{children:"Install and configure different web development tools on Solus."})]})}function p(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},11151:(e,n,t)=>{t.d(n,{Z:()=>i,a:()=>l});var s=t(67294);const o={},r=s.createContext(o);function l(e){const n=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:l(e.components),s.createElement(r.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/64699048.9457323c.js b/assets/js/64699048.9457323c.js
new file mode 100644
index 000000000..26c5d0dff
--- /dev/null
+++ b/assets/js/64699048.9457323c.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[2151],{56259:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>l,default:()=>p,frontMatter:()=>r,metadata:()=>i,toc:()=>d});var s=t(85893),o=t(11151);const r={title:"Development",summary:"Installation of development software on Solus"},l="Development",i={id:"user/software/development/index",title:"Development",description:"Solus provides a stable foundation for creating, testing, and deploying applications.",source:"@site/docs/user/software/development/index.md",sourceDirName:"user/software/development",slug:"/user/software/development/",permalink:"/docs/user/software/development/",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/development/index.md",tags:[],version:"current",lastUpdatedAt:1714518504e3,frontMatter:{title:"Development",summary:"Installation of development software on Solus"},sidebar:"userSidebar",previous:{title:"Desktops",permalink:"/docs/user/software/desktops/"},next:{title:"Containers",permalink:"/docs/user/software/development/containers"}},a={},d=[{value:"Getting started",id:"getting-started",level:2}];function c(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",hr:"hr",p:"p",pre:"pre",strong:"strong",...(0,o.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"development",children:"Development"}),"\n",(0,s.jsx)(n.p,{children:"Solus provides a stable foundation for creating, testing, and deploying applications."}),"\n",(0,s.jsx)(n.p,{children:"You can install tools such as text editors, programming languages, compilers, and version control systems. Solus also supports containerization and virtualization technologies."}),"\n",(0,s.jsx)(n.h2,{id:"getting-started",children:"Getting started"}),"\n",(0,s.jsxs)(n.p,{children:["If you want to compile and develop software using Solus, we recommend installing the ",(0,s.jsx)(n.code,{children:"system.devel"})," component."]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-bash",children:"sudo eopkg install -c system.devel\n"})}),"\n",(0,s.jsxs)(n.p,{children:["The ",(0,s.jsx)(n.code,{children:"system.devel"})," component installs libraries and packages for software development, such as ",(0,s.jsx)(n.code,{children:"clang"}),", ",(0,s.jsx)(n.code,{children:"gcc"}),", and ",(0,s.jsx)(n.code,{children:"make"}),"."]}),"\n",(0,s.jsx)(n.hr,{}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"containers",children:(0,s.jsx)(n.strong,{children:"Containers"})})}),"\n",(0,s.jsx)(n.p,{children:"Install and configure containerization software on Solus."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"java",children:(0,s.jsx)(n.strong,{children:"Java"})})}),"\n",(0,s.jsx)(n.p,{children:"Learn how to install, run, and manage Java on Solus."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"postgresql",children:(0,s.jsx)(n.strong,{children:"PostgreSQL"})})}),"\n",(0,s.jsx)(n.p,{children:"A quick guide to using PostgreSQL on Solus."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"r-and-rstudio",children:(0,s.jsx)(n.strong,{children:"R and RStudio"})})}),"\n",(0,s.jsx)(n.p,{children:"Quick start guide for R and RStudio on Solus."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"rust",children:(0,s.jsx)(n.strong,{children:"Rust"})})}),"\n",(0,s.jsx)(n.p,{children:"A quick guide to getting set up for Rust development on Solus."}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.a,{href:"web",children:(0,s.jsx)(n.strong,{children:"Web Development"})})}),"\n",(0,s.jsx)(n.p,{children:"Install and configure different web development tools on Solus."})]})}function p(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},11151:(e,n,t)=>{t.d(n,{Z:()=>i,a:()=>l});var s=t(67294);const o={},r=s.createContext(o);function l(e){const n=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function i(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:l(e.components),s.createElement(r.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/6787574e.634e6824.js b/assets/js/6787574e.634e6824.js
new file mode 100644
index 000000000..aa015eac8
--- /dev/null
+++ b/assets/js/6787574e.634e6824.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[4500],{29852:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>l,frontMatter:()=>o,metadata:()=>d,toc:()=>a});var r=s(85893),n=s(11151);const o={title:"Welcome",summary:"Front page of the Help Center",sidebar_position:0},i="Welcome",d={id:"user/intro",title:"Welcome",description:"Solus is committed to helping users get the most out of their systems. We designed the help center to introduce our ecosystem and guide you through typical tasks you might need help with.",source:"@site/docs/user/intro.md",sourceDirName:"user",slug:"/user/intro",permalink:"/docs/user/intro",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/intro.md",tags:[],version:"current",lastUpdatedAt:1714518504e3,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"}},c={},a=[{value:"Table of contents",id:"table-of-contents",level:2},{value:"Support channels",id:"support-channels",level:2}];function h(e){const t={a:"a",admonition:"admonition",h1:"h1",h2:"h2",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,n.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.h1,{id:"welcome",children:"Welcome"}),"\n",(0,r.jsx)(t.p,{children:"Solus is committed to helping users get the most out of their systems. We designed the help center to introduce our ecosystem and guide you through typical tasks you might need help with."}),"\n",(0,r.jsx)(t.h2,{id:"table-of-contents",children:"Table of contents"}),"\n",(0,r.jsx)(t.p,{children:"We organized the help center into sections to help you navigate the contents easily:"}),"\n",(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Section"}),(0,r.jsx)(t.th,{children:"Description"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.a,{href:"/docs/category/quick-start",children:"Quick Start"})}),(0,r.jsx)(t.td,{children:"If you're new to Solus, this section will set you on the right track. Find documentation on system requirements, installing Solus, software management, the boot process, and troubleshooting."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.a,{href:"/docs/category/contributing",children:"Contributing"})}),(0,r.jsx)(t.td,{children:"Find how you can contribute to Solus, whether you're a beginner or an experienced Linux and Solus user."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.a,{href:"/docs/user/editions/",children:"Editions"})}),(0,r.jsx)(t.td,{children:"Understand the different editions of Solus: differences between editions, configuration tasks, and helpful tips and tricks."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.a,{href:"/docs/user/hardware/",children:"Hardware"})}),(0,r.jsx)(t.td,{children:"Solus supports most hardware out-of-the-box, but there are exceptions. This section focuses on those exceptions and how to get the most out of your hardware."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.a,{href:"/docs/category/package-management/",children:"Package management"})}),(0,r.jsx)(t.td,{children:"Learn how to install software and manage the repositories of your Solus system."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.a,{href:"/docs/user/privacy",children:"Privacy policy"})}),(0,r.jsx)(t.td,{children:"Understand our privacy policy: Learn how we handle your data, and how to contact us for privacy concerns."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.a,{href:"/docs/category/software/",children:"Software"})}),(0,r.jsx)(t.td,{children:"Getting started and configuration guides for the software packages included in Solus."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.a,{href:"/docs/user/troubleshooting/",children:"Troubleshooting"})}),(0,r.jsx)(t.td,{children:"Learn how to diagnose and fix problems you might have with Solus."})]})]})]}),"\n",(0,r.jsx)(t.h2,{id:"support-channels",children:"Support channels"}),"\n",(0,r.jsx)(t.p,{children:"If you need help with something not covered in the help center, there are various channels where you can seek support from the Solus team or other Solus users."}),"\n",(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Channel"}),(0,r.jsx)(t.th,{children:"Description"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.a,{href:"https://discuss.getsol.us",children:"Forums"})}),(0,r.jsx)(t.td,{children:"Our Flarum-powered forums are easy to use from any device and are a great resource for getting support."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.a,{href:"https://matrix.to/#/#solus:matrix.org",children:"Matrix"})}),(0,r.jsxs)(t.td,{children:["Matrix is a great way to discuss issues and development in real-time. Learn how to access Solus' Matrix space ",(0,r.jsx)(t.a,{href:"/docs/user/contributing/getting-involved#matrix-chat",children:"here"}),"."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.a,{href:"https://www.reddit.com/r/SolusProject",children:"Reddit"})}),(0,r.jsx)(t.td,{children:"If you are a Redditor, our subreddit has a similar purpose to the forums."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.a,{href:"https://issues.getsol.us",children:"Issue tracker"})}),(0,r.jsx)(t.td,{children:"If you have issues with your Solus system, or any of our software packages doesn't work as expected, consider filing a bug report on our issue tracker."})]})]})]}),"\n",(0,r.jsx)(t.admonition,{title:"Important",type:"caution",children:(0,r.jsx)(t.p,{children:"Volunteers around the world build and maintain Solus. Due to time zone differences there might not always be people to answer your questions immediately."})})]})}function l(e={}){const{wrapper:t}={...(0,n.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(h,{...e})}):h(e)}},11151:(e,t,s)=>{s.d(t,{Z:()=>d,a:()=>i});var r=s(67294);const n={},o=r.createContext(n);function i(e){const t=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function d(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:i(e.components),r.createElement(o.Provider,{value:t},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/6787574e.7ac95583.js b/assets/js/6787574e.7ac95583.js
deleted file mode 100644
index 1ea7bd2f9..000000000
--- a/assets/js/6787574e.7ac95583.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[4500],{29852:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>c,contentTitle:()=>i,default:()=>l,frontMatter:()=>o,metadata:()=>d,toc:()=>a});var r=s(85893),n=s(11151);const o={title:"Welcome",summary:"Front page of the Help Center",sidebar_position:0},i="Welcome",d={id:"user/intro",title:"Welcome",description:"Solus is committed to helping users get the most out of their systems. We designed the help center to introduce our ecosystem and guide you through typical tasks you might need help with.",source:"@site/docs/user/intro.md",sourceDirName:"user",slug:"/user/intro",permalink:"/docs/user/intro",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/intro.md",tags:[],version:"current",lastUpdatedAt:171439918e4,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"}},c={},a=[{value:"Table of contents",id:"table-of-contents",level:2},{value:"Support channels",id:"support-channels",level:2}];function h(e){const t={a:"a",admonition:"admonition",h1:"h1",h2:"h2",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,n.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.h1,{id:"welcome",children:"Welcome"}),"\n",(0,r.jsx)(t.p,{children:"Solus is committed to helping users get the most out of their systems. We designed the help center to introduce our ecosystem and guide you through typical tasks you might need help with."}),"\n",(0,r.jsx)(t.h2,{id:"table-of-contents",children:"Table of contents"}),"\n",(0,r.jsx)(t.p,{children:"We organized the help center into sections to help you navigate the contents easily:"}),"\n",(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Section"}),(0,r.jsx)(t.th,{children:"Description"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.a,{href:"/docs/category/quick-start",children:"Quick Start"})}),(0,r.jsx)(t.td,{children:"If you're new to Solus, this section will set you on the right track. Find documentation on system requirements, installing Solus, software management, the boot process, and troubleshooting."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.a,{href:"/docs/category/contributing",children:"Contributing"})}),(0,r.jsx)(t.td,{children:"Find how you can contribute to Solus, whether you're a beginner or an experienced Linux and Solus user."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.a,{href:"/docs/user/editions/",children:"Editions"})}),(0,r.jsx)(t.td,{children:"Understand the different editions of Solus: differences between editions, configuration tasks, and helpful tips and tricks."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.a,{href:"/docs/user/hardware/",children:"Hardware"})}),(0,r.jsx)(t.td,{children:"Solus supports most hardware out-of-the-box, but there are exceptions. This section focuses on those exceptions and how to get the most out of your hardware."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.a,{href:"/docs/category/package-management/",children:"Package management"})}),(0,r.jsx)(t.td,{children:"Learn how to install software and manage the repositories of your Solus system."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.a,{href:"/docs/user/privacy",children:"Privacy policy"})}),(0,r.jsx)(t.td,{children:"Understand our privacy policy: Learn how we handle your data, and how to contact us for privacy concerns."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.a,{href:"/docs/category/software/",children:"Software"})}),(0,r.jsx)(t.td,{children:"Getting started and configuration guides for the software packages included in Solus."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.a,{href:"/docs/user/troubleshooting/",children:"Troubleshooting"})}),(0,r.jsx)(t.td,{children:"Learn how to diagnose and fix problems you might have with Solus."})]})]})]}),"\n",(0,r.jsx)(t.h2,{id:"support-channels",children:"Support channels"}),"\n",(0,r.jsx)(t.p,{children:"If you need help with something not covered in the help center, there are various channels where you can seek support from the Solus team or other Solus users."}),"\n",(0,r.jsxs)(t.table,{children:[(0,r.jsx)(t.thead,{children:(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.th,{children:"Channel"}),(0,r.jsx)(t.th,{children:"Description"})]})}),(0,r.jsxs)(t.tbody,{children:[(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.a,{href:"https://discuss.getsol.us",children:"Forums"})}),(0,r.jsx)(t.td,{children:"Our Flarum-powered forums are easy to use from any device and are a great resource for getting support."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.a,{href:"https://matrix.to/#/#solus:matrix.org",children:"Matrix"})}),(0,r.jsxs)(t.td,{children:["Matrix is a great way to discuss issues and development in real-time. Learn how to access Solus' Matrix space ",(0,r.jsx)(t.a,{href:"/docs/user/contributing/getting-involved#matrix-chat",children:"here"}),"."]})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.a,{href:"https://www.reddit.com/r/SolusProject",children:"Reddit"})}),(0,r.jsx)(t.td,{children:"If you are a Redditor, our subreddit has a similar purpose to the forums."})]}),(0,r.jsxs)(t.tr,{children:[(0,r.jsx)(t.td,{children:(0,r.jsx)(t.a,{href:"https://issues.getsol.us",children:"Issue tracker"})}),(0,r.jsx)(t.td,{children:"If you have issues with your Solus system, or any of our software packages doesn't work as expected, consider filing a bug report on our issue tracker."})]})]})]}),"\n",(0,r.jsx)(t.admonition,{title:"Important",type:"caution",children:(0,r.jsx)(t.p,{children:"Volunteers around the world build and maintain Solus. Due to time zone differences there might not always be people to answer your questions immediately."})})]})}function l(e={}){const{wrapper:t}={...(0,n.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(h,{...e})}):h(e)}},11151:(e,t,s)=>{s.d(t,{Z:()=>d,a:()=>i});var r=s(67294);const n={},o=r.createContext(n);function i(e){const t=r.useContext(o);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function d(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:i(e.components),r.createElement(o.Provider,{value:t},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/6873f895.06c91d74.js b/assets/js/6873f895.06c91d74.js
deleted file mode 100644
index d78562b0f..000000000
--- a/assets/js/6873f895.06c91d74.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[8849],{18733:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>o,default:()=>h,frontMatter:()=>r,metadata:()=>l,toc:()=>a});var s=t(85893),i=t(11151);const r={title:"Solus Style Guide",summary:"Guidance for writing Solus content"},o="Solus style guide",l={id:"user/contributing/style",title:"Solus Style Guide",description:"Solus needs a style guide to give clarity to our contributors and a consistent experience for readers. But we don't want to write our own! We surveyed existing style guides, and we picked parts that were more suitable for our content.",source:"@site/docs/user/contributing/style.md",sourceDirName:"user/contributing",slug:"/user/contributing/style",permalink:"/docs/user/contributing/style",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/contributing/style.md",tags:[],version:"current",lastUpdatedAt:171439918e4,frontMatter:{title:"Solus Style Guide",summary:"Guidance for writing Solus content"},sidebar:"userSidebar",previous:{title:"Getting Involved",permalink:"/docs/user/contributing/getting-involved"},next:{title:"Testing an ISO",permalink:"/docs/user/contributing/testing-an-iso"}},d={},a=[{value:"General writing style",id:"general-writing-style",level:2},{value:"Linux-specific terms",id:"linux-specific-terms",level:2},{value:"Specific guidance",id:"specific-guidance",level:2},{value:"Admonitions",id:"admonitions",level:3},{value:"Code blocks",id:"code-blocks",level:2},{value:"Commands",id:"commands",level:3},{value:"Common Solus terms",id:"common-solus-terms",level:3},{value:"Markdown formatting",id:"markdown-formatting",level:3},{value:"Package names",id:"package-names",level:2},{value:"Spelling",id:"spelling",level:3}];function c(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"solus-style-guide",children:"Solus style guide"}),"\n",(0,s.jsx)(n.p,{children:"Solus needs a style guide to give clarity to our contributors and a consistent experience for readers. But we don't want to write our own! We surveyed existing style guides, and we picked parts that were more suitable for our content."}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsx)(n.p,{children:"Existing help center topics might not follow our style guide yet."})}),"\n",(0,s.jsx)(n.h2,{id:"general-writing-style",children:"General writing style"}),"\n",(0,s.jsxs)(n.p,{children:["Use the ",(0,s.jsx)(n.a,{href:"https://developers.google.com/style",children:"Google developer documentation style guide"})," for general writing style, grammar, and formatting."]}),"\n",(0,s.jsx)(n.p,{children:"Some useful pages:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://developers.google.com/style/text-formatting",children:"Text formatting summary"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://developers.google.com/style/procedures",children:"Procedures"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://developers.google.com/style/timeless-documentation",children:"Timeless documentation"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://developers.google.com/style/word-list",children:"Word list"})}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"linux-specific-terms",children:"Linux-specific terms"}),"\n",(0,s.jsxs)(n.p,{children:["If you are unsure of how to use a common Linux term, refer to the ",(0,s.jsx)(n.a,{href:"https://redhat-documentation.github.io/supplementary-style-guide/#glossary-terms-conventions",children:"Glossary of terms and conventions"})," from the ",(0,s.jsx)(n.em,{children:"Red Hat supplementary style guide for documentation"})]}),"\n",(0,s.jsx)(n.h2,{id:"specific-guidance",children:"Specific guidance"}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.em,{children:"In alphabetical order, not order of importance."})}),"\n",(0,s.jsx)(n.h3,{id:"admonitions",children:"Admonitions"}),"\n",(0,s.jsxs)(n.p,{children:["This section is based on the ",(0,s.jsx)(n.a,{href:"https://redhat-documentation.github.io/supplementary-style-guide/#admonitions",children:"Red Hat supplementary style guide"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["Admonitions should draw the reader\u2019s attention to certain information. Keep admonitions to a minimum, and avoid placing multiple admonitions close to one another. If multiple admonitions are necessary, restructure the information by moving the less-important statements into the flow of the main content. See the ",(0,s.jsx)(n.a,{href:"https://docusaurus.io/docs/markdown-features/admonitions",children:"Docusaurus documentation"})," to learn the correct syntax."]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Type"}),(0,s.jsx)(n.th,{children:"Description"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Note"}),(0,s.jsx)(n.td,{children:"Additional guidance or advice that improves product configuration, performance, or supportability"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Tip"}),(0,s.jsx)(n.td,{children:"Recommendations, suggestions, and alternative methods that might not be obvious. Tips are not essential to using the product."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Info"}),(0,s.jsx)(n.td,{children:"General information about the topic at hand that may be useful or relevant to user."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Important"}),(0,s.jsx)(n.td,{children:"Advisory information essential to the completion of a task or default configuration settings. Users must not disregard this information."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Warning"}),(0,s.jsx)(n.td,{children:"Information that warns the user to proceed with caution. Warning emphasizes a course of action\u2019s potential downsides."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Danger"}),(0,s.jsx)(n.td,{children:"Information about imminent system damage, data loss, or a support-related issue if the user disregards this admonition. If available, offer information to avoid the problem in the future or state where to find more information."})]})]})]}),"\n",(0,s.jsx)(n.h2,{id:"code-blocks",children:"Code blocks"}),"\n",(0,s.jsx)(n.p,{children:"Code blocks must indicate the programming language of the code snippet."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-md",children:'```js\nconsole.log("Hello, world!");\n```\n'})}),"\n",(0,s.jsx)(n.h3,{id:"commands",children:"Commands"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Commands as part of procedures must be inside code blocks with ",(0,s.jsx)(n.code,{children:"bash"}),' as the language type. This ensures users get a "copy to clipboard" button.']}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"When needed, indicate the directory where users need to move before executing the command."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-md",children:"```bash\ncd ~/path/to/directory\nsudo somecommand\n```\n"})}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"common-solus-terms",children:"Common Solus terms"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Solus","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Prefer ",(0,s.jsx)(n.em,{children:"Solus"})," rather than ",(0,s.jsx)(n.em,{children:"Solus Project"}),". Don't use ",(0,s.jsx)(n.em,{children:"Solus OS"})," or ",(0,s.jsx)(n.em,{children:"Solus Linux"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:["The names of the different editions of Solus are:","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Solus Budgie"}),"\n",(0,s.jsx)(n.li,{children:"Solus GNOME"}),"\n",(0,s.jsx)(n.li,{children:"Solus Plasma"}),"\n",(0,s.jsx)(n.li,{children:"Solus XFCE"}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Repositories","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Avoid using terms such as ",(0,s.jsx)(n.em,{children:"repo"}),", or ",(0,s.jsx)(n.em,{children:"monorepo"}),", use the specific repository name instead."]}),"\n",(0,s.jsx)(n.li,{children:'Example: "The packages repository", instead of "The monorepo".'}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Dev Tracker","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Avoid using the term ",(0,s.jsx)(n.em,{children:"Dev Tracker"}),"."]}),"\n",(0,s.jsx)(n.li,{children:'Example: "The packages issue tracker", instead of "The dev tracker"'}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"markdown-formatting",children:"Markdown formatting"}),"\n",(0,s.jsxs)(n.p,{children:["Write content using ",(0,s.jsx)(n.a,{href:"https://www.markdownguide.org/cheat-sheet/",children:"Markdown formatting"}),", use ",(0,s.jsx)(n.a,{href:"https://prettier.io/",children:"Prettier"})," to enforce consistent formatting."]}),"\n",(0,s.jsx)(n.h2,{id:"package-names",children:"Package names"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"The name of packages in the Solus repository must use inline code formatting."}),"\n"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-md",children:"To install `caddy`, use the Software Center or execute the following command:\n"})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"When referring to the name of a product or project, use the name the authors use."}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["Examples: ",(0,s.jsx)(n.em,{children:"RetroArch"}),", and ",(0,s.jsx)(n.em,{children:"Code::Blocks"})]}),"\n",(0,s.jsx)(n.h3,{id:"spelling",children:"Spelling"}),"\n",(0,s.jsxs)(n.p,{children:["We prefer American spelling over British spelling. When in doubt about the spelling of a word, see the ",(0,s.jsx)(n.a,{href:"https://www.merriam-webster.com/",children:"Merriam-Webster dictionary"}),"."]})]})}function h(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},11151:(e,n,t)=>{t.d(n,{Z:()=>l,a:()=>o});var s=t(67294);const i={},r=s.createContext(i);function o(e){const n=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),s.createElement(r.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/6873f895.2aab75e6.js b/assets/js/6873f895.2aab75e6.js
new file mode 100644
index 000000000..05746cbec
--- /dev/null
+++ b/assets/js/6873f895.2aab75e6.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[8849],{18733:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>d,contentTitle:()=>o,default:()=>h,frontMatter:()=>r,metadata:()=>l,toc:()=>a});var s=t(85893),i=t(11151);const r={title:"Solus Style Guide",summary:"Guidance for writing Solus content"},o="Solus style guide",l={id:"user/contributing/style",title:"Solus Style Guide",description:"Solus needs a style guide to give clarity to our contributors and a consistent experience for readers. But we don't want to write our own! We surveyed existing style guides, and we picked parts that were more suitable for our content.",source:"@site/docs/user/contributing/style.md",sourceDirName:"user/contributing",slug:"/user/contributing/style",permalink:"/docs/user/contributing/style",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/contributing/style.md",tags:[],version:"current",lastUpdatedAt:1714518504e3,frontMatter:{title:"Solus Style Guide",summary:"Guidance for writing Solus content"},sidebar:"userSidebar",previous:{title:"Getting Involved",permalink:"/docs/user/contributing/getting-involved"},next:{title:"Testing an ISO",permalink:"/docs/user/contributing/testing-an-iso"}},d={},a=[{value:"General writing style",id:"general-writing-style",level:2},{value:"Linux-specific terms",id:"linux-specific-terms",level:2},{value:"Specific guidance",id:"specific-guidance",level:2},{value:"Admonitions",id:"admonitions",level:3},{value:"Code blocks",id:"code-blocks",level:2},{value:"Commands",id:"commands",level:3},{value:"Common Solus terms",id:"common-solus-terms",level:3},{value:"Markdown formatting",id:"markdown-formatting",level:3},{value:"Package names",id:"package-names",level:2},{value:"Spelling",id:"spelling",level:3}];function c(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",li:"li",p:"p",pre:"pre",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,i.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.h1,{id:"solus-style-guide",children:"Solus style guide"}),"\n",(0,s.jsx)(n.p,{children:"Solus needs a style guide to give clarity to our contributors and a consistent experience for readers. But we don't want to write our own! We surveyed existing style guides, and we picked parts that were more suitable for our content."}),"\n",(0,s.jsx)(n.admonition,{type:"note",children:(0,s.jsx)(n.p,{children:"Existing help center topics might not follow our style guide yet."})}),"\n",(0,s.jsx)(n.h2,{id:"general-writing-style",children:"General writing style"}),"\n",(0,s.jsxs)(n.p,{children:["Use the ",(0,s.jsx)(n.a,{href:"https://developers.google.com/style",children:"Google developer documentation style guide"})," for general writing style, grammar, and formatting."]}),"\n",(0,s.jsx)(n.p,{children:"Some useful pages:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://developers.google.com/style/text-formatting",children:"Text formatting summary"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://developers.google.com/style/procedures",children:"Procedures"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://developers.google.com/style/timeless-documentation",children:"Timeless documentation"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"https://developers.google.com/style/word-list",children:"Word list"})}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"linux-specific-terms",children:"Linux-specific terms"}),"\n",(0,s.jsxs)(n.p,{children:["If you are unsure of how to use a common Linux term, refer to the ",(0,s.jsx)(n.a,{href:"https://redhat-documentation.github.io/supplementary-style-guide/#glossary-terms-conventions",children:"Glossary of terms and conventions"})," from the ",(0,s.jsx)(n.em,{children:"Red Hat supplementary style guide for documentation"})]}),"\n",(0,s.jsx)(n.h2,{id:"specific-guidance",children:"Specific guidance"}),"\n",(0,s.jsx)(n.p,{children:(0,s.jsx)(n.em,{children:"In alphabetical order, not order of importance."})}),"\n",(0,s.jsx)(n.h3,{id:"admonitions",children:"Admonitions"}),"\n",(0,s.jsxs)(n.p,{children:["This section is based on the ",(0,s.jsx)(n.a,{href:"https://redhat-documentation.github.io/supplementary-style-guide/#admonitions",children:"Red Hat supplementary style guide"}),"."]}),"\n",(0,s.jsxs)(n.p,{children:["Admonitions should draw the reader\u2019s attention to certain information. Keep admonitions to a minimum, and avoid placing multiple admonitions close to one another. If multiple admonitions are necessary, restructure the information by moving the less-important statements into the flow of the main content. See the ",(0,s.jsx)(n.a,{href:"https://docusaurus.io/docs/markdown-features/admonitions",children:"Docusaurus documentation"})," to learn the correct syntax."]}),"\n",(0,s.jsxs)(n.table,{children:[(0,s.jsx)(n.thead,{children:(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.th,{children:"Type"}),(0,s.jsx)(n.th,{children:"Description"})]})}),(0,s.jsxs)(n.tbody,{children:[(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Note"}),(0,s.jsx)(n.td,{children:"Additional guidance or advice that improves product configuration, performance, or supportability"})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Tip"}),(0,s.jsx)(n.td,{children:"Recommendations, suggestions, and alternative methods that might not be obvious. Tips are not essential to using the product."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Info"}),(0,s.jsx)(n.td,{children:"General information about the topic at hand that may be useful or relevant to user."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Important"}),(0,s.jsx)(n.td,{children:"Advisory information essential to the completion of a task or default configuration settings. Users must not disregard this information."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Warning"}),(0,s.jsx)(n.td,{children:"Information that warns the user to proceed with caution. Warning emphasizes a course of action\u2019s potential downsides."})]}),(0,s.jsxs)(n.tr,{children:[(0,s.jsx)(n.td,{children:"Danger"}),(0,s.jsx)(n.td,{children:"Information about imminent system damage, data loss, or a support-related issue if the user disregards this admonition. If available, offer information to avoid the problem in the future or state where to find more information."})]})]})]}),"\n",(0,s.jsx)(n.h2,{id:"code-blocks",children:"Code blocks"}),"\n",(0,s.jsx)(n.p,{children:"Code blocks must indicate the programming language of the code snippet."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-md",children:'```js\nconsole.log("Hello, world!");\n```\n'})}),"\n",(0,s.jsx)(n.h3,{id:"commands",children:"Commands"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsxs)(n.p,{children:["Commands as part of procedures must be inside code blocks with ",(0,s.jsx)(n.code,{children:"bash"}),' as the language type. This ensures users get a "copy to clipboard" button.']}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["\n",(0,s.jsx)(n.p,{children:"When needed, indicate the directory where users need to move before executing the command."}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-md",children:"```bash\ncd ~/path/to/directory\nsudo somecommand\n```\n"})}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"common-solus-terms",children:"Common Solus terms"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Solus","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Prefer ",(0,s.jsx)(n.em,{children:"Solus"})," rather than ",(0,s.jsx)(n.em,{children:"Solus Project"}),". Don't use ",(0,s.jsx)(n.em,{children:"Solus OS"})," or ",(0,s.jsx)(n.em,{children:"Solus Linux"}),"."]}),"\n",(0,s.jsxs)(n.li,{children:["The names of the different editions of Solus are:","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"Solus Budgie"}),"\n",(0,s.jsx)(n.li,{children:"Solus GNOME"}),"\n",(0,s.jsx)(n.li,{children:"Solus Plasma"}),"\n",(0,s.jsx)(n.li,{children:"Solus XFCE"}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Repositories","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Avoid using terms such as ",(0,s.jsx)(n.em,{children:"repo"}),", or ",(0,s.jsx)(n.em,{children:"monorepo"}),", use the specific repository name instead."]}),"\n",(0,s.jsx)(n.li,{children:'Example: "The packages repository", instead of "The monorepo".'}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(n.li,{children:["Dev Tracker","\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Avoid using the term ",(0,s.jsx)(n.em,{children:"Dev Tracker"}),"."]}),"\n",(0,s.jsx)(n.li,{children:'Example: "The packages issue tracker", instead of "The dev tracker"'}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(n.h3,{id:"markdown-formatting",children:"Markdown formatting"}),"\n",(0,s.jsxs)(n.p,{children:["Write content using ",(0,s.jsx)(n.a,{href:"https://www.markdownguide.org/cheat-sheet/",children:"Markdown formatting"}),", use ",(0,s.jsx)(n.a,{href:"https://prettier.io/",children:"Prettier"})," to enforce consistent formatting."]}),"\n",(0,s.jsx)(n.h2,{id:"package-names",children:"Package names"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"The name of packages in the Solus repository must use inline code formatting."}),"\n"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-md",children:"To install `caddy`, use the Software Center or execute the following command:\n"})}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:"When referring to the name of a product or project, use the name the authors use."}),"\n"]}),"\n",(0,s.jsxs)(n.p,{children:["Examples: ",(0,s.jsx)(n.em,{children:"RetroArch"}),", and ",(0,s.jsx)(n.em,{children:"Code::Blocks"})]}),"\n",(0,s.jsx)(n.h3,{id:"spelling",children:"Spelling"}),"\n",(0,s.jsxs)(n.p,{children:["We prefer American spelling over British spelling. When in doubt about the spelling of a word, see the ",(0,s.jsx)(n.a,{href:"https://www.merriam-webster.com/",children:"Merriam-Webster dictionary"}),"."]})]})}function h(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(c,{...e})}):c(e)}},11151:(e,n,t)=>{t.d(n,{Z:()=>l,a:()=>o});var s=t(67294);const i={},r=s.createContext(i);function o(e){const n=s.useContext(r);return s.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:o(e.components),s.createElement(r.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/6cfe09a0.47f1f2eb.js b/assets/js/6cfe09a0.47f1f2eb.js
new file mode 100644
index 000000000..2f8c521eb
--- /dev/null
+++ b/assets/js/6cfe09a0.47f1f2eb.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[1174],{49134:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>o,default:()=>u,frontMatter:()=>i,metadata:()=>a,toc:()=>c});var t=s(85893),r=s(11151);const i={title:"TigerVNC",summary:"A quick start guide to using TigerVNC on Solus"},o="TigerVNC",a={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,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/networking/tigervnc.md",tags:[],version:"current",lastUpdatedAt:1714518504e3,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={},c=[{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}];function d(e){const n={code:"code",h1:"h1",h2:"h2",h3:"h3",p:"p",pre:"pre",strong:"strong",...(0,r.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"tigervnc",children:"TigerVNC"}),"\n",(0,t.jsx)(n.p,{children:"TigerVNC is a high-performance implementation of the VNC protocol, which allows you to control/view desktops remotely over the internet."}),"\n",(0,t.jsx)(n.h2,{id:"installation",children:"Installation"}),"\n",(0,t.jsx)(n.p,{children:"TigerVNC can be installed either from the Software Center or via terminal. The terminal command to run it is:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"sudo eopkg install tigervnc\n"})}),"\n",(0,t.jsx)(n.h2,{id:"usage",children:"Usage"}),"\n",(0,t.jsx)(n.h3,{id:"initial-setup-of-vncserver",children:"Initial setup of vncserver"}),"\n",(0,t.jsx)(n.p,{children:"For the initial setup of vncserver for TigerVNC you have to open a terminal and run:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"vncserver\n"})}),"\n",(0,t.jsxs)(n.p,{children:["While this setup you will be asked for setting up a ",(0,t.jsx)(n.strong,{children:"password"})," and if you'd like to setup a ",(0,t.jsx)(n.strong,{children:"view-only mode"}),", please do it accordingly your desire."]}),"\n",(0,t.jsx)(n.p,{children:"After the initial setup you have to stop the vncserver process, for this please type inside the terminal"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"vncserver -kill :1\n"})}),"\n",(0,t.jsx)(n.h3,{id:"configuration-for-your-desktops",children:"Configuration for your desktops"}),"\n",(0,t.jsxs)(n.p,{children:["Every Desktop needs a different Setup, you find the vncserver config under",(0,t.jsx)(n.code,{children:"$HOME/.vnc/xstartup"})," open the file with your desired editor and change bash script inside the file with the following information for your Desktop."]}),"\n",(0,t.jsx)(n.h3,{id:"budgie",children:"Budgie"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"#!/bin/bash\n\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\n\ngnome-session --session=budgie-desktop &\nbudgie-wm &\nbudgie-panel &\n"})}),"\n",(0,t.jsx)(n.h3,{id:"gnome",children:"GNOME"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"#!/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"})}),"\n",(0,t.jsx)(n.h3,{id:"mate",children:"MATE"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"#!/bin/bash\n\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\n\nmate-session &\nmate-panel &\n"})}),"\n",(0,t.jsx)(n.h3,{id:"plasma",children:"Plasma"}),"\n",(0,t.jsxs)(n.p,{children:["Plasma desktop is not supported at the moment. Please use the software ",(0,t.jsx)(n.code,{children:"x11vnc"})," for vncserver support on Plasma."]})]})}function u(e={}){const{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},11151:(e,n,s)=>{s.d(n,{Z:()=>a,a:()=>o});var t=s(67294);const r={},i=t.createContext(r);function o(e){const n=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),t.createElement(i.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/6cfe09a0.a760c2d7.js b/assets/js/6cfe09a0.a760c2d7.js
deleted file mode 100644
index 78c4c5eb2..000000000
--- a/assets/js/6cfe09a0.a760c2d7.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[1174],{49134:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>o,default:()=>u,frontMatter:()=>i,metadata:()=>a,toc:()=>c});var t=s(85893),r=s(11151);const i={title:"TigerVNC",summary:"A quick start guide to using TigerVNC on Solus"},o="TigerVNC",a={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,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/networking/tigervnc.md",tags:[],version:"current",lastUpdatedAt:171439918e4,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={},c=[{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}];function d(e){const n={code:"code",h1:"h1",h2:"h2",h3:"h3",p:"p",pre:"pre",strong:"strong",...(0,r.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"tigervnc",children:"TigerVNC"}),"\n",(0,t.jsx)(n.p,{children:"TigerVNC is a high-performance implementation of the VNC protocol, which allows you to control/view desktops remotely over the internet."}),"\n",(0,t.jsx)(n.h2,{id:"installation",children:"Installation"}),"\n",(0,t.jsx)(n.p,{children:"TigerVNC can be installed either from the Software Center or via terminal. The terminal command to run it is:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"sudo eopkg install tigervnc\n"})}),"\n",(0,t.jsx)(n.h2,{id:"usage",children:"Usage"}),"\n",(0,t.jsx)(n.h3,{id:"initial-setup-of-vncserver",children:"Initial setup of vncserver"}),"\n",(0,t.jsx)(n.p,{children:"For the initial setup of vncserver for TigerVNC you have to open a terminal and run:"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"vncserver\n"})}),"\n",(0,t.jsxs)(n.p,{children:["While this setup you will be asked for setting up a ",(0,t.jsx)(n.strong,{children:"password"})," and if you'd like to setup a ",(0,t.jsx)(n.strong,{children:"view-only mode"}),", please do it accordingly your desire."]}),"\n",(0,t.jsx)(n.p,{children:"After the initial setup you have to stop the vncserver process, for this please type inside the terminal"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"vncserver -kill :1\n"})}),"\n",(0,t.jsx)(n.h3,{id:"configuration-for-your-desktops",children:"Configuration for your desktops"}),"\n",(0,t.jsxs)(n.p,{children:["Every Desktop needs a different Setup, you find the vncserver config under",(0,t.jsx)(n.code,{children:"$HOME/.vnc/xstartup"})," open the file with your desired editor and change bash script inside the file with the following information for your Desktop."]}),"\n",(0,t.jsx)(n.h3,{id:"budgie",children:"Budgie"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"#!/bin/bash\n\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\n\ngnome-session --session=budgie-desktop &\nbudgie-wm &\nbudgie-panel &\n"})}),"\n",(0,t.jsx)(n.h3,{id:"gnome",children:"GNOME"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"#!/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"})}),"\n",(0,t.jsx)(n.h3,{id:"mate",children:"MATE"}),"\n",(0,t.jsx)(n.pre,{children:(0,t.jsx)(n.code,{className:"language-bash",children:"#!/bin/bash\n\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\n\nmate-session &\nmate-panel &\n"})}),"\n",(0,t.jsx)(n.h3,{id:"plasma",children:"Plasma"}),"\n",(0,t.jsxs)(n.p,{children:["Plasma desktop is not supported at the moment. Please use the software ",(0,t.jsx)(n.code,{children:"x11vnc"})," for vncserver support on Plasma."]})]})}function u(e={}){const{wrapper:n}={...(0,r.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},11151:(e,n,s)=>{s.d(n,{Z:()=>a,a:()=>o});var t=s(67294);const r={},i=t.createContext(r);function o(e){const n=t.useContext(i);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),t.createElement(i.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/74470af4.6287a01d.js b/assets/js/74470af4.6287a01d.js
new file mode 100644
index 000000000..59519c258
--- /dev/null
+++ b/assets/js/74470af4.6287a01d.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[1896],{97588:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>a,contentTitle:()=>i,default:()=>h,frontMatter:()=>o,metadata:()=>l,toc:()=>d});var s=r(85893),n=r(11151);const o={title:"VirtualBox",summary:"Quick start guide for VirtualBox on Solus"},i="VirtualBox",l={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,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/virtualization/virtualbox.md",tags:[],version:"current",lastUpdatedAt:1714518504e3,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"}},a={},d=[{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}];function u(e){const t={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,n.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h1,{id:"virtualbox",children:"VirtualBox"}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.a,{href:"https://www.virtualbox.org/",children:"VirtualBox"})," is an x86 and x86_64 virtualization software package developed by Oracle."]}),"\n",(0,s.jsx)(t.h2,{id:"before-you-start",children:"Before you start"}),"\n",(0,s.jsxs)(t.p,{children:["This section applies to new installations for both ",(0,s.jsx)(t.strong,{children:"Host"})," and ",(0,s.jsx)(t.strong,{children:"Guest"}),"."]}),"\n",(0,s.jsx)(t.h3,{id:"remove-prior-installation",children:"Remove prior installation"}),"\n",(0,s.jsxs)(t.p,{children:["It is important to uninstall any version of VirtualBox (or VirtualBox Guest Additions) that ",(0,s.jsx)(t.strong,{children:"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:"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"sudo /opt/VirtualBox/uninstall.sh\n"})}),"\n",(0,s.jsx)(t.h3,{id:"update-your-system",children:"Update your system"}),"\n",(0,s.jsx)(t.p,{children:"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."}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"sudo eopkg upgrade\n"})}),"\n",(0,s.jsx)(t.h3,{id:"determine-which-kernel-you-are-using",children:"Determine which kernel you are using"}),"\n",(0,s.jsxs)(t.p,{children:["Solus support both a ",(0,s.jsx)(t.code,{children:"current"})," and ",(0,s.jsx)(t.code,{children:"lts"})," kernel. It is important to install the version that corresponds to your kernel."]}),"\n",(0,s.jsx)(t.p,{children:"If you aren't sure which kernel you are running, run the following in terminal:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"uname -r\n"})}),"\n",(0,s.jsxs)(t.p,{children:["You will either have a ",(0,s.jsx)(t.code,{children:".current"})," or ",(0,s.jsx)(t.code,{children:".lts"})," suffix. Examples: ",(0,s.jsx)(t.code,{children:"5.13.1-187.current"})," or ",(0,s.jsx)(t.code,{children:"4.14.237-175.lts"})]}),"\n",(0,s.jsx)(t.h2,{id:"solus-as-host",children:"Solus as host"}),"\n",(0,s.jsx)(t.p,{children:"VirtualBox is available in the Software Center, select the package that matches your kernel."}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:"virtualbox"}),(0,s.jsx)(t.th,{children:"virtualbox-current"})]})}),(0,s.jsx)(t.tbody,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsxs)(t.td,{children:["VirtualBox host modules for the ",(0,s.jsx)(t.strong,{children:"linux-lts"})," kernel"]}),(0,s.jsxs)(t.td,{children:["VirtualBox host modules for the ",(0,s.jsx)(t.strong,{children:"linux-current"})," kernel"]})]})})]}),"\n",(0,s.jsxs)(t.p,{children:["You ",(0,s.jsx)(t.strong,{children:"must"})," reboot your computer before running VirtualBox for the first time."]}),"\n",(0,s.jsx)(t.h2,{id:"solus-as-guest",children:"Solus as guest"}),"\n",(0,s.jsx)(t.p,{children:"VirtualBox Guest Additions are available in the Software Center, select the package that matches kernel version on the Solus virtual machine."}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:"virtualbox-guest"}),(0,s.jsx)(t.th,{children:"virtualbox-guest-common"})]})}),(0,s.jsx)(t.tbody,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsxs)(t.td,{children:["VirtualBox guest modules for the ",(0,s.jsx)(t.strong,{children:"linux-lts"})," kernel"]}),(0,s.jsxs)(t.td,{children:["Install this package if the ",(0,s.jsx)(t.strong,{children:"linux-current"})," kernel is used"]})]})})]}),"\n",(0,s.jsxs)(t.p,{children:["You ",(0,s.jsx)(t.strong,{children:"must"})," reboot your virtual machine to load the newly installed modules"]}),"\n",(0,s.jsx)(t.h2,{id:"extra-configuration",children:"Extra configuration"}),"\n",(0,s.jsx)(t.h4,{id:"usb-controller",children:"USB controller"}),"\n",(0,s.jsxs)(t.p,{children:["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,s.jsx)(t.a,{href:"https://www.virtualbox.org/manual/ch01.html#intro-installing",children:"extension pack"}),"."]}),"\n",(0,s.jsxs)(t.p,{children:["Note: Access to USB is granted by the user group ",(0,s.jsx)(t.code,{children:"vboxusers"})," on the ",(0,s.jsx)(t.strong,{children:"Host"})," operating system. You can add yourself to this group with the following command"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"sudo gpasswd -a $USER vboxusers\n"})}),"\n",(0,s.jsx)(t.h4,{id:"shared-folders",children:"Shared folders"}),"\n",(0,s.jsx)(t.p,{children:"Share folders let you access files from the host system from within a guest machine."}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.strong,{children:"Note:"})," auto-mounted shared folders are mounted into the ",(0,s.jsx)(t.code,{children:"/media"})," directory, along with the prefix ",(0,s.jsx)(t.code,{children:"sf_"}),". For example, the shared folder ",(0,s.jsx)(t.code,{children:"myfiles"})," would be mounted to ",(0,s.jsx)(t.code,{children:"/media/sf_myfiles"}),"."]}),"\n",(0,s.jsxs)(t.p,{children:["Access to the shared folders is only granted to the user group ",(0,s.jsx)(t.code,{children:"vboxsf"})," on the ",(0,s.jsx)(t.strong,{children:"Guest"})," operating system."]}),"\n",(0,s.jsx)(t.p,{children:"Execute these commands to set the permissions and add yourself to the group"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"sudo gpasswd -a $USER vboxsf\n"})}),"\n",(0,s.jsx)(t.h2,{id:"troubleshooting",children:"Troubleshooting"}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{alt:"VBOX Kernel",src:r(74848).Z+"",width:"500",height:"336"})}),"\n",(0,s.jsxs)(t.p,{children:["The Error ",(0,s.jsx)(t.code,{children:"Kernel driver not installed (rc=-1908)"})," may occur if"]}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:"The computer was not restarted before launching VirtualBox for the first time"}),"\n",(0,s.jsx)(t.li,{children:"The computer is not booted on the latest kernel. Make sure to apply the updates from the Software Center and restart your machine."}),"\n",(0,s.jsx)(t.li,{children:"The wrong VirtualBox package was installed. Please check the instructions just above to install the correct package for your kernel."}),"\n",(0,s.jsx)(t.li,{children:"VirtualBox was manually installed and it conflicts with the version installed from the Solus Repository."}),"\n"]})]})}function h(e={}){const{wrapper:t}={...(0,n.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(u,{...e})}):u(e)}},74848:(e,t,r)=>{r.d(t,{Z:()=>s});const s=r.p+"assets/images/vbox-kernel-85eb11034e02dafe61706f4d967580fe.png"},11151:(e,t,r)=>{r.d(t,{Z:()=>l,a:()=>i});var s=r(67294);const n={},o=s.createContext(n);function i(e){const t=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:i(e.components),s.createElement(o.Provider,{value:t},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/74470af4.cf7ecb52.js b/assets/js/74470af4.cf7ecb52.js
deleted file mode 100644
index 562adfa38..000000000
--- a/assets/js/74470af4.cf7ecb52.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[1896],{97588:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>a,contentTitle:()=>i,default:()=>h,frontMatter:()=>o,metadata:()=>l,toc:()=>d});var s=r(85893),n=r(11151);const o={title:"VirtualBox",summary:"Quick start guide for VirtualBox on Solus"},i="VirtualBox",l={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,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/virtualization/virtualbox.md",tags:[],version:"current",lastUpdatedAt:171439918e4,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"}},a={},d=[{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}];function u(e){const t={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",h4:"h4",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,n.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(t.h1,{id:"virtualbox",children:"VirtualBox"}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.a,{href:"https://www.virtualbox.org/",children:"VirtualBox"})," is an x86 and x86_64 virtualization software package developed by Oracle."]}),"\n",(0,s.jsx)(t.h2,{id:"before-you-start",children:"Before you start"}),"\n",(0,s.jsxs)(t.p,{children:["This section applies to new installations for both ",(0,s.jsx)(t.strong,{children:"Host"})," and ",(0,s.jsx)(t.strong,{children:"Guest"}),"."]}),"\n",(0,s.jsx)(t.h3,{id:"remove-prior-installation",children:"Remove prior installation"}),"\n",(0,s.jsxs)(t.p,{children:["It is important to uninstall any version of VirtualBox (or VirtualBox Guest Additions) that ",(0,s.jsx)(t.strong,{children:"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:"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"sudo /opt/VirtualBox/uninstall.sh\n"})}),"\n",(0,s.jsx)(t.h3,{id:"update-your-system",children:"Update your system"}),"\n",(0,s.jsx)(t.p,{children:"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."}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"sudo eopkg upgrade\n"})}),"\n",(0,s.jsx)(t.h3,{id:"determine-which-kernel-you-are-using",children:"Determine which kernel you are using"}),"\n",(0,s.jsxs)(t.p,{children:["Solus support both a ",(0,s.jsx)(t.code,{children:"current"})," and ",(0,s.jsx)(t.code,{children:"lts"})," kernel. It is important to install the version that corresponds to your kernel."]}),"\n",(0,s.jsx)(t.p,{children:"If you aren't sure which kernel you are running, run the following in terminal:"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"uname -r\n"})}),"\n",(0,s.jsxs)(t.p,{children:["You will either have a ",(0,s.jsx)(t.code,{children:".current"})," or ",(0,s.jsx)(t.code,{children:".lts"})," suffix. Examples: ",(0,s.jsx)(t.code,{children:"5.13.1-187.current"})," or ",(0,s.jsx)(t.code,{children:"4.14.237-175.lts"})]}),"\n",(0,s.jsx)(t.h2,{id:"solus-as-host",children:"Solus as host"}),"\n",(0,s.jsx)(t.p,{children:"VirtualBox is available in the Software Center, select the package that matches your kernel."}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:"virtualbox"}),(0,s.jsx)(t.th,{children:"virtualbox-current"})]})}),(0,s.jsx)(t.tbody,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsxs)(t.td,{children:["VirtualBox host modules for the ",(0,s.jsx)(t.strong,{children:"linux-lts"})," kernel"]}),(0,s.jsxs)(t.td,{children:["VirtualBox host modules for the ",(0,s.jsx)(t.strong,{children:"linux-current"})," kernel"]})]})})]}),"\n",(0,s.jsxs)(t.p,{children:["You ",(0,s.jsx)(t.strong,{children:"must"})," reboot your computer before running VirtualBox for the first time."]}),"\n",(0,s.jsx)(t.h2,{id:"solus-as-guest",children:"Solus as guest"}),"\n",(0,s.jsx)(t.p,{children:"VirtualBox Guest Additions are available in the Software Center, select the package that matches kernel version on the Solus virtual machine."}),"\n",(0,s.jsxs)(t.table,{children:[(0,s.jsx)(t.thead,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsx)(t.th,{children:"virtualbox-guest"}),(0,s.jsx)(t.th,{children:"virtualbox-guest-common"})]})}),(0,s.jsx)(t.tbody,{children:(0,s.jsxs)(t.tr,{children:[(0,s.jsxs)(t.td,{children:["VirtualBox guest modules for the ",(0,s.jsx)(t.strong,{children:"linux-lts"})," kernel"]}),(0,s.jsxs)(t.td,{children:["Install this package if the ",(0,s.jsx)(t.strong,{children:"linux-current"})," kernel is used"]})]})})]}),"\n",(0,s.jsxs)(t.p,{children:["You ",(0,s.jsx)(t.strong,{children:"must"})," reboot your virtual machine to load the newly installed modules"]}),"\n",(0,s.jsx)(t.h2,{id:"extra-configuration",children:"Extra configuration"}),"\n",(0,s.jsx)(t.h4,{id:"usb-controller",children:"USB controller"}),"\n",(0,s.jsxs)(t.p,{children:["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,s.jsx)(t.a,{href:"https://www.virtualbox.org/manual/ch01.html#intro-installing",children:"extension pack"}),"."]}),"\n",(0,s.jsxs)(t.p,{children:["Note: Access to USB is granted by the user group ",(0,s.jsx)(t.code,{children:"vboxusers"})," on the ",(0,s.jsx)(t.strong,{children:"Host"})," operating system. You can add yourself to this group with the following command"]}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"sudo gpasswd -a $USER vboxusers\n"})}),"\n",(0,s.jsx)(t.h4,{id:"shared-folders",children:"Shared folders"}),"\n",(0,s.jsx)(t.p,{children:"Share folders let you access files from the host system from within a guest machine."}),"\n",(0,s.jsxs)(t.p,{children:[(0,s.jsx)(t.strong,{children:"Note:"})," auto-mounted shared folders are mounted into the ",(0,s.jsx)(t.code,{children:"/media"})," directory, along with the prefix ",(0,s.jsx)(t.code,{children:"sf_"}),". For example, the shared folder ",(0,s.jsx)(t.code,{children:"myfiles"})," would be mounted to ",(0,s.jsx)(t.code,{children:"/media/sf_myfiles"}),"."]}),"\n",(0,s.jsxs)(t.p,{children:["Access to the shared folders is only granted to the user group ",(0,s.jsx)(t.code,{children:"vboxsf"})," on the ",(0,s.jsx)(t.strong,{children:"Guest"})," operating system."]}),"\n",(0,s.jsx)(t.p,{children:"Execute these commands to set the permissions and add yourself to the group"}),"\n",(0,s.jsx)(t.pre,{children:(0,s.jsx)(t.code,{className:"language-bash",children:"sudo gpasswd -a $USER vboxsf\n"})}),"\n",(0,s.jsx)(t.h2,{id:"troubleshooting",children:"Troubleshooting"}),"\n",(0,s.jsx)(t.p,{children:(0,s.jsx)(t.img,{alt:"VBOX Kernel",src:r(74848).Z+"",width:"500",height:"336"})}),"\n",(0,s.jsxs)(t.p,{children:["The Error ",(0,s.jsx)(t.code,{children:"Kernel driver not installed (rc=-1908)"})," may occur if"]}),"\n",(0,s.jsxs)(t.ul,{children:["\n",(0,s.jsx)(t.li,{children:"The computer was not restarted before launching VirtualBox for the first time"}),"\n",(0,s.jsx)(t.li,{children:"The computer is not booted on the latest kernel. Make sure to apply the updates from the Software Center and restart your machine."}),"\n",(0,s.jsx)(t.li,{children:"The wrong VirtualBox package was installed. Please check the instructions just above to install the correct package for your kernel."}),"\n",(0,s.jsx)(t.li,{children:"VirtualBox was manually installed and it conflicts with the version installed from the Solus Repository."}),"\n"]})]})}function h(e={}){const{wrapper:t}={...(0,n.a)(),...e.components};return t?(0,s.jsx)(t,{...e,children:(0,s.jsx)(u,{...e})}):u(e)}},74848:(e,t,r)=>{r.d(t,{Z:()=>s});const s=r.p+"assets/images/vbox-kernel-85eb11034e02dafe61706f4d967580fe.png"},11151:(e,t,r)=>{r.d(t,{Z:()=>l,a:()=>i});var s=r(67294);const n={},o=s.createContext(n);function i(e){const t=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:i(e.components),s.createElement(o.Provider,{value:t},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/75c41d11.a1cf3139.js b/assets/js/75c41d11.a1cf3139.js
deleted file mode 100644
index dc0955995..000000000
--- a/assets/js/75c41d11.a1cf3139.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[3337],{32559:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>d,contentTitle:()=>o,default:()=>l,frontMatter:()=>i,metadata:()=>c,toc:()=>a});var r=s(85893),n=s(11151);const i={title:"Tips and Tricks",summary:"Helpful tips and tricks for using XFCE on Solus"},o="Tips and Tricks",c={id:"user/editions/xfce/tips-and-tricks",title:"Tips and Tricks",description:"XFCE Keyboard Shortcuts",source:"@site/docs/user/editions/xfce/tips-and-tricks.md",sourceDirName:"user/editions/xfce",slug:"/user/editions/xfce/tips-and-tricks",permalink:"/docs/user/editions/xfce/tips-and-tricks",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/editions/xfce/tips-and-tricks.md",tags:[],version:"current",lastUpdatedAt:171439918e4,frontMatter:{title:"Tips and Tricks",summary:"Helpful tips and tricks for using XFCE on Solus"},sidebar:"userSidebar",previous:{title:"Configuration",permalink:"/docs/user/editions/xfce/configuration"},next:{title:"Hardware",permalink:"/docs/user/hardware/"}},d={},a=[{value:"XFCE Keyboard Shortcuts",id:"xfce-keyboard-shortcuts",level:2}];function u(e){const t={h1:"h1",h2:"h2",p:"p",...(0,n.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.h1,{id:"tips-and-tricks",children:"Tips and Tricks"}),"\n",(0,r.jsx)(t.h2,{id:"xfce-keyboard-shortcuts",children:"XFCE Keyboard Shortcuts"}),"\n",(0,r.jsx)(t.p,{children:"TODO: Provide a table of short-cuts like we did for Budgie"}),"\n",(0,r.jsx)(t.p,{children:"TODO: Add a few other tips and tricks useful to XFCE users"})]})}function l(e={}){const{wrapper:t}={...(0,n.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(u,{...e})}):u(e)}},11151:(e,t,s)=>{s.d(t,{Z:()=>c,a:()=>o});var r=s(67294);const n={},i=r.createContext(n);function o(e){const t=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:o(e.components),r.createElement(i.Provider,{value:t},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/75c41d11.b30478a9.js b/assets/js/75c41d11.b30478a9.js
new file mode 100644
index 000000000..d338ffe92
--- /dev/null
+++ b/assets/js/75c41d11.b30478a9.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[3337],{32559:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>d,contentTitle:()=>o,default:()=>l,frontMatter:()=>i,metadata:()=>c,toc:()=>a});var r=s(85893),n=s(11151);const i={title:"Tips and Tricks",summary:"Helpful tips and tricks for using XFCE on Solus"},o="Tips and Tricks",c={id:"user/editions/xfce/tips-and-tricks",title:"Tips and Tricks",description:"XFCE Keyboard Shortcuts",source:"@site/docs/user/editions/xfce/tips-and-tricks.md",sourceDirName:"user/editions/xfce",slug:"/user/editions/xfce/tips-and-tricks",permalink:"/docs/user/editions/xfce/tips-and-tricks",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/editions/xfce/tips-and-tricks.md",tags:[],version:"current",lastUpdatedAt:1714518504e3,frontMatter:{title:"Tips and Tricks",summary:"Helpful tips and tricks for using XFCE on Solus"},sidebar:"userSidebar",previous:{title:"Configuration",permalink:"/docs/user/editions/xfce/configuration"},next:{title:"Hardware",permalink:"/docs/user/hardware/"}},d={},a=[{value:"XFCE Keyboard Shortcuts",id:"xfce-keyboard-shortcuts",level:2}];function u(e){const t={h1:"h1",h2:"h2",p:"p",...(0,n.a)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.h1,{id:"tips-and-tricks",children:"Tips and Tricks"}),"\n",(0,r.jsx)(t.h2,{id:"xfce-keyboard-shortcuts",children:"XFCE Keyboard Shortcuts"}),"\n",(0,r.jsx)(t.p,{children:"TODO: Provide a table of short-cuts like we did for Budgie"}),"\n",(0,r.jsx)(t.p,{children:"TODO: Add a few other tips and tricks useful to XFCE users"})]})}function l(e={}){const{wrapper:t}={...(0,n.a)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(u,{...e})}):u(e)}},11151:(e,t,s)=>{s.d(t,{Z:()=>c,a:()=>o});var r=s(67294);const n={},i=r.createContext(n);function o(e){const t=r.useContext(i);return r.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:o(e.components),r.createElement(i.Provider,{value:t},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/793c86b2.48de87a1.js b/assets/js/793c86b2.48de87a1.js
new file mode 100644
index 000000000..bde6f9646
--- /dev/null
+++ b/assets/js/793c86b2.48de87a1.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[168],{36891:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>r,contentTitle:()=>a,default:()=>c,frontMatter:()=>o,metadata:()=>h,toc:()=>t});var i=s(85893),l=s(11151);const o={title:"Command Line",summary:"Installation and configuration of popular command line programs on Solus"},a="Command Line",h={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,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/command-line/index.md",tags:[],version:"current",lastUpdatedAt:1714518504e3,frontMatter:{title:"Command Line",summary:"Installation and configuration of popular command line programs on Solus"},sidebar:"userSidebar",previous:{title:"DroidCam",permalink:"/docs/user/software/camera/droidcam"},next:{title:"Configuration File Locations",permalink:"/docs/user/software/configuration_files"}},r={},t=[{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}];function d(e){const n={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",pre:"pre",ul:"ul",...(0,l.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"command-line",children:"Command Line"}),"\n",(0,i.jsx)(n.h2,{id:"changing-shell",children:"Changing Shell"}),"\n",(0,i.jsx)(n.p,{children:"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."}),"\n",(0,i.jsxs)(n.p,{children:["Solus makes available other shells via our repository, with a full list available in ",(0,i.jsx)(n.code,{children:"/usr/share/defaults/etc/shells"}),". Common shells, aside from Bash, are:"]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"http://gondor.apana.org.au/~herbert/dash/",children:"DASH"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://fishshell.com/",children:"fish"})}),"\n",(0,i.jsx)(n.li,{children:(0,i.jsx)(n.a,{href:"https://zsh.sourceforge.io/",children:"zsh"})}),"\n"]}),"\n",(0,i.jsx)(n.h3,{id:"installation",children:"Installation"}),"\n",(0,i.jsxs)(n.p,{children:["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,i.jsx)(n.em,{children:"System utilities"})," category, or via the command-line with ",(0,i.jsx)(n.code,{children:"sudo eopkg install 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}];function h(e){const s={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",p:"p",pre:"pre",...(0,o.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.h1,{id:"kde-wallet-and-ssh-keys",children:"KDE Wallet and SSH keys"}),"\n",(0,n.jsx)(s.p,{children:"In KDE Plasma, the KDE Wallet is responsible for securely storing and supplying user credentials to the various KDE applications that request them."}),"\n",(0,n.jsx)(s.p,{children:"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."}),"\n",(0,n.jsx)(s.p,{children:"However, additional configuration is needed to make the KDE Wallet manage SSH key passphrases."}),"\n",(0,n.jsx)(s.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,n.jsx)(s.p,{children:"This document assumes that you are familiar with utilising SSH key passphrases."}),"\n",(0,n.jsxs)(s.p,{children:["For more information, see ",(0,n.jsx)(s.a,{href:"https://docs.github.com/en/authentication/connecting-to-github-with-ssh/working-with-ssh-key-passphrases",children:"working with SSH key passphrases"})]}),"\n",(0,n.jsxs)(s.h2,{id:"the-ssh_askpass-environment-variable",children:["The ",(0,n.jsx)(s.code,{children:"SSH_ASKPASS"})," environment variable"]}),"\n",(0,n.jsxs)(s.p,{children:["The ",(0,n.jsx)(s.code,{children:"SSH_ASKPASS"})," environment variable tells the SSH subsystem which application to use when prompting the user for SSH key passphrases."]}),"\n",(0,n.jsxs)(s.p,{children:["On the Solus KDE Plasma Desktop spin, ",(0,n.jsx)(s.code,{children:"ksshaskpass"})," is installed out of the box and ",(0,n.jsx)(s.code,{children:"SSH_ASKPASS"})," is set to ",(0,n.jsx)(s.code,{children:"ksshaskpass"})," in the file ",(0,n.jsx)(s.code,{children:"/usr/share/xdg/plasma-workspace/env/50-solus-defaults.sh"})," by default."]}),"\n",(0,n.jsxs)(s.h2,{id:"create-configautostartssh-adddesktop",children:["Create ",(0,n.jsx)(s.code,{children:"~/.config/autostart/ssh-add.desktop"})]}),"\n",(0,n.jsxs)(s.p,{children:["The contents of ",(0,n.jsx)(s.code,{children:"~/.config/autostart/ssh-add.desktop"})," should reflect the SSH keys you want to manage using the KDE Wallet."]}),"\n",(0,n.jsx)(s.h3,{id:"example",children:"Example"}),"\n",(0,n.jsxs)(s.p,{children:["Below is an example of the contents of ",(0,n.jsx)(s.code,{children:"~/.config/autostart/ssh-add.desktop"}),":"]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{children:"[Desktop Entry]\nExec=ssh-add -q\nName=ssh-add\nType=Application\n"})}),"\n",(0,n.jsxs)(s.p,{children:["Tip: The above ssh-add.desktop file will only add the default key ",(0,n.jsx)(s.code,{children:"~/.ssh/id_rsa"}),". Assuming you have different keys named key1, key2 etc you need to change the above desktop file to"]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{children:"[Desktop Entry]\nExec=ssh-add -q ~/.ssh/key1 ~/.ssh/key2 ~/.ssh/key3\nName=ssh-add\nType=Application\n"})}),"\n",(0,n.jsx)(s.h3,{id:"set-correct-permissions",children:"Set correct permissions"}),"\n",(0,n.jsx)(s.p,{children:"After you created your file inside the autostart folder you have to give it the correct permissions"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{children:"chmod 700 ~/.config/autostart/ssh-add.desktop\n"})}),"\n",(0,n.jsx)(s.p,{children:"with this the file should appear inside the autostart settings"}),"\n",(0,n.jsx)(s.h2,{id:"re-log-to-test-your-changes",children:"Re-log to test your changes"}),"\n",(0,n.jsx)(s.p,{children:"After logging out and back in, you should now be prompted by the KDE Wallet to input your SSH key passphrases."}),"\n",(0,n.jsx)(s.h2,{id:"unlock-ssh-key-passphrases-automatically-on-login",children:"Unlock SSH key passphrases automatically on login"}),"\n",(0,n.jsx)(s.p,{children:"KDE Wallet supports automatically unlocking your SSH key passphrases on login."}),"\n",(0,n.jsx)(s.p,{children:"For this to work, your KDE Wallet password needs to be identical to your login password."}),"\n",(0,n.jsx)(s.h2,{id:"troubleshooting",children:"Troubleshooting"}),"\n",(0,n.jsx)(s.p,{children:"ssh key doesn't get triggered, you can force this manually by running this command."}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{children:"SSH_ASKPASS=/usr/bin/ksshaskpass ssh-add < /dev/null\n"})})]})}function c(e={}){const{wrapper:s}={...(0,o.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(h,{...e})}):h(e)}},11151:(e,s,t)=>{t.d(s,{Z:()=>r,a:()=>a});var n=t(67294);const o={},i=n.createContext(o);function a(e){const s=n.useContext(i);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function r(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:a(e.components),n.createElement(i.Provider,{value:s},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/88a83a8c.fc0955f8.js b/assets/js/88a83a8c.fc0955f8.js
deleted file mode 100644
index ef2207574..000000000
--- a/assets/js/88a83a8c.fc0955f8.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[1242],{83269:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>l,contentTitle:()=>a,default:()=>c,frontMatter:()=>i,metadata:()=>r,toc:()=>d});var n=t(85893),o=t(11151);const i={title:"KDE Wallet",summary:"A quick introduction to using KWallet on Solus"},a="KDE Wallet and SSH keys",r={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,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/utilities/kwallet.md",tags:[],version:"current",lastUpdatedAt:171439918e4,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"}},l={},d=[{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}];function h(e){const s={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",p:"p",pre:"pre",...(0,o.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(s.h1,{id:"kde-wallet-and-ssh-keys",children:"KDE Wallet and SSH keys"}),"\n",(0,n.jsx)(s.p,{children:"In KDE Plasma, the KDE Wallet is responsible for securely storing and supplying user credentials to the various KDE applications that request them."}),"\n",(0,n.jsx)(s.p,{children:"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."}),"\n",(0,n.jsx)(s.p,{children:"However, additional configuration is needed to make the KDE Wallet manage SSH key passphrases."}),"\n",(0,n.jsx)(s.h2,{id:"prerequisites",children:"Prerequisites"}),"\n",(0,n.jsx)(s.p,{children:"This document assumes that you are familiar with utilising SSH key passphrases."}),"\n",(0,n.jsxs)(s.p,{children:["For more information, see ",(0,n.jsx)(s.a,{href:"https://docs.github.com/en/authentication/connecting-to-github-with-ssh/working-with-ssh-key-passphrases",children:"working with SSH key passphrases"})]}),"\n",(0,n.jsxs)(s.h2,{id:"the-ssh_askpass-environment-variable",children:["The ",(0,n.jsx)(s.code,{children:"SSH_ASKPASS"})," environment variable"]}),"\n",(0,n.jsxs)(s.p,{children:["The ",(0,n.jsx)(s.code,{children:"SSH_ASKPASS"})," environment variable tells the SSH subsystem which application to use when prompting the user for SSH key passphrases."]}),"\n",(0,n.jsxs)(s.p,{children:["On the Solus KDE Plasma Desktop spin, ",(0,n.jsx)(s.code,{children:"ksshaskpass"})," is installed out of the box and ",(0,n.jsx)(s.code,{children:"SSH_ASKPASS"})," is set to ",(0,n.jsx)(s.code,{children:"ksshaskpass"})," in the file ",(0,n.jsx)(s.code,{children:"/usr/share/xdg/plasma-workspace/env/50-solus-defaults.sh"})," by default."]}),"\n",(0,n.jsxs)(s.h2,{id:"create-configautostartssh-adddesktop",children:["Create ",(0,n.jsx)(s.code,{children:"~/.config/autostart/ssh-add.desktop"})]}),"\n",(0,n.jsxs)(s.p,{children:["The contents of ",(0,n.jsx)(s.code,{children:"~/.config/autostart/ssh-add.desktop"})," should reflect the SSH keys you want to manage using the KDE Wallet."]}),"\n",(0,n.jsx)(s.h3,{id:"example",children:"Example"}),"\n",(0,n.jsxs)(s.p,{children:["Below is an example of the contents of ",(0,n.jsx)(s.code,{children:"~/.config/autostart/ssh-add.desktop"}),":"]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{children:"[Desktop Entry]\nExec=ssh-add -q\nName=ssh-add\nType=Application\n"})}),"\n",(0,n.jsxs)(s.p,{children:["Tip: The above ssh-add.desktop file will only add the default key ",(0,n.jsx)(s.code,{children:"~/.ssh/id_rsa"}),". Assuming you have different keys named key1, key2 etc you need to change the above desktop file to"]}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{children:"[Desktop Entry]\nExec=ssh-add -q ~/.ssh/key1 ~/.ssh/key2 ~/.ssh/key3\nName=ssh-add\nType=Application\n"})}),"\n",(0,n.jsx)(s.h3,{id:"set-correct-permissions",children:"Set correct permissions"}),"\n",(0,n.jsx)(s.p,{children:"After you created your file inside the autostart folder you have to give it the correct permissions"}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{children:"chmod 700 ~/.config/autostart/ssh-add.desktop\n"})}),"\n",(0,n.jsx)(s.p,{children:"with this the file should appear inside the autostart settings"}),"\n",(0,n.jsx)(s.h2,{id:"re-log-to-test-your-changes",children:"Re-log to test your changes"}),"\n",(0,n.jsx)(s.p,{children:"After logging out and back in, you should now be prompted by the KDE Wallet to input your SSH key passphrases."}),"\n",(0,n.jsx)(s.h2,{id:"unlock-ssh-key-passphrases-automatically-on-login",children:"Unlock SSH key passphrases automatically on login"}),"\n",(0,n.jsx)(s.p,{children:"KDE Wallet supports automatically unlocking your SSH key passphrases on login."}),"\n",(0,n.jsx)(s.p,{children:"For this to work, your KDE Wallet password needs to be identical to your login password."}),"\n",(0,n.jsx)(s.h2,{id:"troubleshooting",children:"Troubleshooting"}),"\n",(0,n.jsx)(s.p,{children:"ssh key doesn't get triggered, you can force this manually by running this command."}),"\n",(0,n.jsx)(s.pre,{children:(0,n.jsx)(s.code,{children:"SSH_ASKPASS=/usr/bin/ksshaskpass ssh-add < /dev/null\n"})})]})}function c(e={}){const{wrapper:s}={...(0,o.a)(),...e.components};return s?(0,n.jsx)(s,{...e,children:(0,n.jsx)(h,{...e})}):h(e)}},11151:(e,s,t)=>{t.d(s,{Z:()=>r,a:()=>a});var n=t(67294);const o={},i=n.createContext(o);function a(e){const s=n.useContext(i);return n.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function r(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:a(e.components),n.createElement(i.Provider,{value:s},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/8e3d5b32.03cc18b4.js b/assets/js/8e3d5b32.03cc18b4.js
new file mode 100644
index 000000000..4e994045b
--- /dev/null
+++ b/assets/js/8e3d5b32.03cc18b4.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[8499],{95475:(e,i,t)=>{t.r(i),t.d(i,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>a,metadata:()=>r,toc:()=>d});var n=t(85893),s=t(11151);const a={title:"IBus",summary:"Configuration of additional languages via IBUS"},o="IBus",r={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,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/localization/ibus.md",tags:[],version:"current",lastUpdatedAt:1714518504e3,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"}},l={},d=[{value:"Configuration",id:"configuration",level:2},{value:"IBus IME package list",id:"ibus-ime-package-list",level:2}];function c(e){const i={a:"a",code:"code",h1:"h1",h2:"h2",img:"img",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,s.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(i.h1,{id:"ibus",children:"IBus"}),"\n",(0,n.jsx)(i.h2,{id:"configuration",children:"Configuration"}),"\n",(0,n.jsxs)(i.p,{children:["Find the IME (Input Method Editor) you require from the ",(0,n.jsx)(i.a,{href:"#ibus-ime-package-list",children:"IBus IME package list"}),' and then search for it in the Software Center. Click "Install" to add the IME.']}),"\n",(0,n.jsx)(i.p,{children:(0,n.jsx)(i.img,{alt:"IBus IME Install",src:t(38161).Z+"",width:"812",height:"315"})}),"\n",(0,n.jsx)(i.p,{children:"You may have to agree to install some additional dependencies and will need to type in your user password as authentication is required."}),"\n",(0,n.jsx)(i.p,{children:(0,n.jsx)(i.img,{alt:"IBus IME Dependencies",src:t(11533).Z+"",width:"446",height:"445"})}),"\n",(0,n.jsxs)(i.p,{children:["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,n.jsx)(i.code,{children:"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."]}),"\n",(0,n.jsx)(i.p,{children:(0,n.jsx)(i.img,{alt:"IBus Region and Language",src:t(99809).Z+"",width:"742",height:"394"})}),"\n",(0,n.jsxs)(i.p,{children:["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,n.jsx)(i.code,{children:"ibus-hangul"})," settings window is shown below but this will vary between the different IME's."]}),"\n",(0,n.jsx)(i.p,{children:(0,n.jsx)(i.img,{alt:"IBus IME Settings Example: Hangul",src:t(40584).Z+"",width:"347",height:"405"})}),"\n",(0,n.jsx)(i.h2,{id:"ibus-ime-package-list",children:"IBus IME package list"}),"\n",(0,n.jsx)(i.p,{children:"A list of IBus IME packages available in the Solus software repository."}),"\n",(0,n.jsxs)(i.table,{children:[(0,n.jsx)(i.thead,{children:(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.th,{children:"Package"}),(0,n.jsx)(i.th,{children:"Input Method"})]})}),(0,n.jsxs)(i.tbody,{children:[(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{children:"ibus-anthy"}),(0,n.jsx)(i.td,{children:"Japanese"})]}),(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{children:"ibus-chewing"}),(0,n.jsx)(i.td,{children:"Phonetic Chinese input method for Zhuyin (Bopomofo)"})]}),(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{children:"ibus-hangul"}),(0,n.jsx)(i.td,{children:"Korean"})]}),(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{children:"ibus-m17n"}),(0,n.jsx)(i.td,{children:"Multiple Languages"})]}),(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{children:"ibus-unikey"}),(0,n.jsx)(i.td,{children:"Vietnamese"})]}),(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{children:"ibus-libpinyin"}),(0,n.jsx)(i.td,{children:"Chinese Pinyin and Bopomofo"})]}),(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{children:"ibus-libzhuyin"}),(0,n.jsx)(i.td,{children:"Chinese Zhuyin"})]}),(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{children:"ibus-cangjie"}),(0,n.jsx)(i.td,{children:"Simplified Cangjie"})]})]})]})]})}function h(e={}){const{wrapper:i}={...(0,s.a)(),...e.components};return i?(0,n.jsx)(i,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},11533:(e,i,t)=>{t.d(i,{Z:()=>n});const n=t.p+"assets/images/ibus-ime-dependencies-0dc4668d437230c7528de2f86647531b.jpg"},38161:(e,i,t)=>{t.d(i,{Z:()=>n});const n=t.p+"assets/images/ibus-ime-install-68ba41c372dec67147393ad161a0f6f9.jpg"},40584:(e,i,t)=>{t.d(i,{Z:()=>n});const n=t.p+"assets/images/ibus-ime-settings-hangul-27a3a73e189a7c7e02287539008b825c.jpg"},99809:(e,i,t)=>{t.d(i,{Z:()=>n});const n=t.p+"assets/images/ibus-region-and-languages-beb500ff774fb2dc414857fe1d196515.jpg"},11151:(e,i,t)=>{t.d(i,{Z:()=>r,a:()=>o});var n=t(67294);const s={},a=n.createContext(s);function o(e){const i=n.useContext(a);return n.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function r(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),n.createElement(a.Provider,{value:i},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/8e3d5b32.ebc00f0b.js b/assets/js/8e3d5b32.ebc00f0b.js
deleted file mode 100644
index d93f8023c..000000000
--- a/assets/js/8e3d5b32.ebc00f0b.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[8499],{95475:(e,i,t)=>{t.r(i),t.d(i,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>a,metadata:()=>r,toc:()=>d});var n=t(85893),s=t(11151);const a={title:"IBus",summary:"Configuration of additional languages via IBUS"},o="IBus",r={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,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/localization/ibus.md",tags:[],version:"current",lastUpdatedAt:171439918e4,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"}},l={},d=[{value:"Configuration",id:"configuration",level:2},{value:"IBus IME package list",id:"ibus-ime-package-list",level:2}];function c(e){const i={a:"a",code:"code",h1:"h1",h2:"h2",img:"img",p:"p",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",...(0,s.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(i.h1,{id:"ibus",children:"IBus"}),"\n",(0,n.jsx)(i.h2,{id:"configuration",children:"Configuration"}),"\n",(0,n.jsxs)(i.p,{children:["Find the IME (Input Method Editor) you require from the ",(0,n.jsx)(i.a,{href:"#ibus-ime-package-list",children:"IBus IME package list"}),' and then search for it in the Software Center. Click "Install" to add the IME.']}),"\n",(0,n.jsx)(i.p,{children:(0,n.jsx)(i.img,{alt:"IBus IME Install",src:t(38161).Z+"",width:"812",height:"315"})}),"\n",(0,n.jsx)(i.p,{children:"You may have to agree to install some additional dependencies and will need to type in your user password as authentication is required."}),"\n",(0,n.jsx)(i.p,{children:(0,n.jsx)(i.img,{alt:"IBus IME Dependencies",src:t(11533).Z+"",width:"446",height:"445"})}),"\n",(0,n.jsxs)(i.p,{children:["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,n.jsx)(i.code,{children:"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."]}),"\n",(0,n.jsx)(i.p,{children:(0,n.jsx)(i.img,{alt:"IBus Region and Language",src:t(99809).Z+"",width:"742",height:"394"})}),"\n",(0,n.jsxs)(i.p,{children:["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,n.jsx)(i.code,{children:"ibus-hangul"})," settings window is shown below but this will vary between the different IME's."]}),"\n",(0,n.jsx)(i.p,{children:(0,n.jsx)(i.img,{alt:"IBus IME Settings Example: Hangul",src:t(40584).Z+"",width:"347",height:"405"})}),"\n",(0,n.jsx)(i.h2,{id:"ibus-ime-package-list",children:"IBus IME package list"}),"\n",(0,n.jsx)(i.p,{children:"A list of IBus IME packages available in the Solus software repository."}),"\n",(0,n.jsxs)(i.table,{children:[(0,n.jsx)(i.thead,{children:(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.th,{children:"Package"}),(0,n.jsx)(i.th,{children:"Input Method"})]})}),(0,n.jsxs)(i.tbody,{children:[(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{children:"ibus-anthy"}),(0,n.jsx)(i.td,{children:"Japanese"})]}),(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{children:"ibus-chewing"}),(0,n.jsx)(i.td,{children:"Phonetic Chinese input method for Zhuyin (Bopomofo)"})]}),(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{children:"ibus-hangul"}),(0,n.jsx)(i.td,{children:"Korean"})]}),(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{children:"ibus-m17n"}),(0,n.jsx)(i.td,{children:"Multiple Languages"})]}),(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{children:"ibus-unikey"}),(0,n.jsx)(i.td,{children:"Vietnamese"})]}),(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{children:"ibus-libpinyin"}),(0,n.jsx)(i.td,{children:"Chinese Pinyin and Bopomofo"})]}),(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{children:"ibus-libzhuyin"}),(0,n.jsx)(i.td,{children:"Chinese Zhuyin"})]}),(0,n.jsxs)(i.tr,{children:[(0,n.jsx)(i.td,{children:"ibus-cangjie"}),(0,n.jsx)(i.td,{children:"Simplified Cangjie"})]})]})]})]})}function h(e={}){const{wrapper:i}={...(0,s.a)(),...e.components};return i?(0,n.jsx)(i,{...e,children:(0,n.jsx)(c,{...e})}):c(e)}},11533:(e,i,t)=>{t.d(i,{Z:()=>n});const n=t.p+"assets/images/ibus-ime-dependencies-0dc4668d437230c7528de2f86647531b.jpg"},38161:(e,i,t)=>{t.d(i,{Z:()=>n});const n=t.p+"assets/images/ibus-ime-install-68ba41c372dec67147393ad161a0f6f9.jpg"},40584:(e,i,t)=>{t.d(i,{Z:()=>n});const n=t.p+"assets/images/ibus-ime-settings-hangul-27a3a73e189a7c7e02287539008b825c.jpg"},99809:(e,i,t)=>{t.d(i,{Z:()=>n});const n=t.p+"assets/images/ibus-region-and-languages-beb500ff774fb2dc414857fe1d196515.jpg"},11151:(e,i,t)=>{t.d(i,{Z:()=>r,a:()=>o});var n=t(67294);const s={},a=n.createContext(s);function o(e){const i=n.useContext(a);return n.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function r(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:o(e.components),n.createElement(a.Provider,{value:i},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/8e861970.2254f707.js b/assets/js/8e861970.2254f707.js
deleted file mode 100644
index ca88f9862..000000000
--- a/assets/js/8e861970.2254f707.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[8026],{17066:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>c,contentTitle:()=>i,default:()=>p,frontMatter:()=>r,metadata:()=>o,toc:()=>u});var a=t(85893),n=t(11151);const r={title:"Requesting a Package",summary:"Requesting a new package"},i="Requesting A Package",o={id:"packaging/procedures/request-a-package",title:"Requesting a Package",description:"If you think Solus is missing a package that would be useful, you can let us know using our Issue 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,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/procedures/request-a-package.md",tags:[],version:"current",lastUpdatedAt:171439918e4,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:"Translation instructions",permalink:"/docs/packaging/translation-instructions"}},c={},u=[{value:"Steps to request a new package",id:"steps-to-request-a-new-package",level:2}];function l(e){const s={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,n.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(s.h1,{id:"requesting-a-package",children:"Requesting A Package"}),"\n",(0,a.jsx)(s.p,{children:"If you think Solus is missing a package that would be useful, you can let us know using our Issue Tracker."}),"\n",(0,a.jsx)(s.h2,{id:"steps-to-request-a-new-package",children:"Steps to request a new package"}),"\n",(0,a.jsxs)(s.ol,{children:["\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.a,{href:"https://github.com/getsolus/packages/issues?q=label%3A%22Package+Request%22",children:"Look to see if an issue has already been filed"})," for the package you want. If there is already request for your package, please do not open another issue. Instead, add your comments to the existing issue."]}),"\n",(0,a.jsxs)(s.li,{children:["Skim our ",(0,a.jsx)(s.a,{href:"/docs/packaging/procedures/package-inclusion",children:"Package inclusion policy"})," to make sure your request won't be rejected."]}),"\n",(0,a.jsxs)(s.li,{children:["Open a new ",(0,a.jsx)(s.a,{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",children:"issue"})," for your package using the ",(0,a.jsx)(s.em,{children:"Request a new package"})," template. The template will ask you for the following information. Please complete as much as you can.","\n",(0,a.jsxs)(s.ul,{children:["\n",(0,a.jsx)(s.li,{children:"Name"}),"\n",(0,a.jsx)(s.li,{children:"Homepage"}),"\n",(0,a.jsxs)(s.li,{children:["Why should this be included in the repository? If we already offer similar packages in our repository ",(0,a.jsx)(s.strong,{children:"or third party repository"}),", please tell us what your new package does that our existing packages do not (",(0,a.jsx)(s.em,{children:"How is it different or better"}),")."]}),"\n",(0,a.jsxs)(s.li,{children:["Are we allowed to distribute it?","\n",(0,a.jsxs)(s.ul,{children:["\n",(0,a.jsxs)(s.li,{children:["For Solus to distribute the package it must use a license found on the ",(0,a.jsx)(s.a,{href:"https://spdx.org/licenses/",children:"SPDX License List"}),", or Solus must be given permission to redistribute it by the owner."]}),"\n"]}),"\n"]}),"\n",(0,a.jsx)(s.li,{children:"What kind of user will use this package, and how many users do you think will use this package?"}),"\n",(0,a.jsxs)(s.li,{children:["Link to source tarball/zip file. This must point to a stable, versioned source, for example: ",(0,a.jsx)(s.code,{children:"1.2.3.tar.gz"})," or ",(0,a.jsx)(s.code,{children:"packagename-1.2.3"}),". Nightlies, snapshots and pre-releases are not allowed."]}),"\n"]}),"\n"]}),"\n",(0,a.jsx)(s.li,{children:"Wait for Solus Staff to approve or reject your request."}),"\n"]})]})}function p(e={}){const{wrapper:s}={...(0,n.a)(),...e.components};return s?(0,a.jsx)(s,{...e,children:(0,a.jsx)(l,{...e})}):l(e)}},11151:(e,s,t)=>{t.d(s,{Z:()=>o,a:()=>i});var a=t(67294);const n={},r=a.createContext(n);function i(e){const s=a.useContext(r);return a.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function o(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:i(e.components),a.createElement(r.Provider,{value:s},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/8e861970.523f83ab.js b/assets/js/8e861970.523f83ab.js
new file mode 100644
index 000000000..e1dbdc59f
--- /dev/null
+++ b/assets/js/8e861970.523f83ab.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[8026],{17066:(e,s,t)=>{t.r(s),t.d(s,{assets:()=>c,contentTitle:()=>i,default:()=>p,frontMatter:()=>r,metadata:()=>o,toc:()=>u});var a=t(85893),n=t(11151);const r={title:"Requesting a Package",summary:"Requesting a new package"},i="Requesting A Package",o={id:"packaging/procedures/request-a-package",title:"Requesting a Package",description:"If you think Solus is missing a package that would be useful, you can let us know using our Issue 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,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/procedures/request-a-package.md",tags:[],version:"current",lastUpdatedAt:1714518504e3,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:"Translation instructions",permalink:"/docs/packaging/translation-instructions"}},c={},u=[{value:"Steps to request a new package",id:"steps-to-request-a-new-package",level:2}];function l(e){const s={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",li:"li",ol:"ol",p:"p",strong:"strong",ul:"ul",...(0,n.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(s.h1,{id:"requesting-a-package",children:"Requesting A Package"}),"\n",(0,a.jsx)(s.p,{children:"If you think Solus is missing a package that would be useful, you can let us know using our Issue Tracker."}),"\n",(0,a.jsx)(s.h2,{id:"steps-to-request-a-new-package",children:"Steps to request a new package"}),"\n",(0,a.jsxs)(s.ol,{children:["\n",(0,a.jsxs)(s.li,{children:[(0,a.jsx)(s.a,{href:"https://github.com/getsolus/packages/issues?q=label%3A%22Package+Request%22",children:"Look to see if an issue has already been filed"})," for the package you want. If there is already request for your package, please do not open another issue. Instead, add your comments to the existing issue."]}),"\n",(0,a.jsxs)(s.li,{children:["Skim our ",(0,a.jsx)(s.a,{href:"/docs/packaging/procedures/package-inclusion",children:"Package inclusion policy"})," to make sure your request won't be rejected."]}),"\n",(0,a.jsxs)(s.li,{children:["Open a new ",(0,a.jsx)(s.a,{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",children:"issue"})," for your package using the ",(0,a.jsx)(s.em,{children:"Request a new package"})," template. The template will ask you for the following information. Please complete as much as you can.","\n",(0,a.jsxs)(s.ul,{children:["\n",(0,a.jsx)(s.li,{children:"Name"}),"\n",(0,a.jsx)(s.li,{children:"Homepage"}),"\n",(0,a.jsxs)(s.li,{children:["Why should this be included in the repository? If we already offer similar packages in our repository ",(0,a.jsx)(s.strong,{children:"or third party repository"}),", please tell us what your new package does that our existing packages do not (",(0,a.jsx)(s.em,{children:"How is it different or better"}),")."]}),"\n",(0,a.jsxs)(s.li,{children:["Are we allowed to distribute it?","\n",(0,a.jsxs)(s.ul,{children:["\n",(0,a.jsxs)(s.li,{children:["For Solus to distribute the package it must use a license found on the ",(0,a.jsx)(s.a,{href:"https://spdx.org/licenses/",children:"SPDX License List"}),", or Solus must be given permission to redistribute it by the owner."]}),"\n"]}),"\n"]}),"\n",(0,a.jsx)(s.li,{children:"What kind of user will use this package, and how many users do you think will use this package?"}),"\n",(0,a.jsxs)(s.li,{children:["Link to source tarball/zip file. This must point to a stable, versioned source, for example: ",(0,a.jsx)(s.code,{children:"1.2.3.tar.gz"})," or ",(0,a.jsx)(s.code,{children:"packagename-1.2.3"}),". Nightlies, snapshots and pre-releases are not allowed."]}),"\n"]}),"\n"]}),"\n",(0,a.jsx)(s.li,{children:"Wait for Solus Staff to approve or reject your request."}),"\n"]})]})}function p(e={}){const{wrapper:s}={...(0,n.a)(),...e.components};return s?(0,a.jsx)(s,{...e,children:(0,a.jsx)(l,{...e})}):l(e)}},11151:(e,s,t)=>{t.d(s,{Z:()=>o,a:()=>i});var a=t(67294);const n={},r=a.createContext(n);function i(e){const s=a.useContext(r);return a.useMemo((function(){return"function"==typeof e?e(s):{...s,...e}}),[s,e])}function o(e){let s;return s=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:i(e.components),a.createElement(r.Provider,{value:s},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/8e886580.233dcd7c.js b/assets/js/8e886580.233dcd7c.js
new file mode 100644
index 000000000..76ba7c5a4
--- /dev/null
+++ b/assets/js/8e886580.233dcd7c.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[4978],{58508:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>a,contentTitle:()=>i,default:()=>c,frontMatter:()=>r,metadata:()=>l,toc:()=>d});var n=s(85893),o=s(11151);const r={title:"Rust",summary:"A quick guide to getting set up for Rust development on Solus"},i="Rust",l={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,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/development/rust.md",tags:[],version:"current",lastUpdatedAt:1714518504e3,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"}},a={},d=[];function u(e){const t={a:"a",blockquote:"blockquote",code:"code",h1:"h1",li:"li",p:"p",strong:"strong",ul:"ul",...(0,o.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h1,{id:"rust",children:"Rust"}),"\n",(0,n.jsx)(t.p,{children:"There are two ways to install Rust. This article explains how they differ and which one should be used, according to users' needs."}),"\n",(0,n.jsx)(t.p,{children:"Rust can be obtained by:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:["Installing the ",(0,n.jsx)(t.code,{children:"rustup"})," package, then installing any Rust target and/or tool using ",(0,n.jsx)(t.code,{children:"rustup"})," itself"]}),"\n",(0,n.jsxs)(t.li,{children:["Installing the ",(0,n.jsx)(t.code,{children:"rust"})," package"]}),"\n"]}),"\n",(0,n.jsxs)(t.p,{children:["Users should prefer the ",(0,n.jsx)(t.code,{children:"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,n.jsx)(t.code,{children:"PATH"})," variable depending on your shell setup. According to the official Rust ",(0,n.jsx)(t.a,{href:"https://www.rust-lang.org/tools/install",children:"installation guide"}),":"]}),"\n",(0,n.jsxs)(t.blockquote,{children:["\n",(0,n.jsxs)(t.p,{children:["It is customary for Rust developers to include ",(0,n.jsx)(t.code,{children:"~/.cargo/bin"})," in their ",(0,n.jsx)(t.code,{children:"PATH "}),"environment variable. During installation rustup will attempt to configure the ",(0,n.jsx)(t.code,{children:"PATH"}),". Because of differences between platforms, command shells, and bugs in rustup, the modifications to ",(0,n.jsx)(t.code,{children:"PATH"})," may not take effect until the console is restarted, or the user is logged out, or it may not succeed at all."]}),"\n"]}),"\n",(0,n.jsxs)(t.p,{children:["The ",(0,n.jsx)(t.code,{children:"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,n.jsx)(t.code,{children:"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,n.jsx)(t.code,{children:"cargo"}),". On the other hand, the ",(0,n.jsx)(t.code,{children:"rust"})," package is ready to use after its installation with no extra configurations."]}),"\n",(0,n.jsxs)(t.p,{children:["Either way, it is also recommended to install our ",(0,n.jsx)(t.code,{children:"system.devel"})," component, which is typically required for compiling. See our documentation for it ",(0,n.jsx)(t.a,{href:"/docs/user/software/development",children:"here"}),"."]}),"\n",(0,n.jsxs)(t.p,{children:["As a final note, it is possible to ",(0,n.jsx)(t.a,{href:"https://rust-lang.github.io/rustup/installation/already-installed-rust.html",children:"configure"})," ",(0,n.jsx)(t.code,{children:"rustup"})," to use the system toolchain. This setup is ",(0,n.jsx)(t.strong,{children:"discouraged"})," unless aimed at developing applications targeting Solus itself."]})]})}function c(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(u,{...e})}):u(e)}},11151:(e,t,s)=>{s.d(t,{Z:()=>l,a:()=>i});var n=s(67294);const o={},r=n.createContext(o);function i(e){const t=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),n.createElement(r.Provider,{value:t},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/8e886580.60e0f5fb.js b/assets/js/8e886580.60e0f5fb.js
deleted file mode 100644
index 74e98e270..000000000
--- a/assets/js/8e886580.60e0f5fb.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[4978],{58508:(e,t,s)=>{s.r(t),s.d(t,{assets:()=>a,contentTitle:()=>i,default:()=>c,frontMatter:()=>r,metadata:()=>l,toc:()=>d});var n=s(85893),o=s(11151);const r={title:"Rust",summary:"A quick guide to getting set up for Rust development on Solus"},i="Rust",l={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,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/development/rust.md",tags:[],version:"current",lastUpdatedAt:171439918e4,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"}},a={},d=[];function u(e){const t={a:"a",blockquote:"blockquote",code:"code",h1:"h1",li:"li",p:"p",strong:"strong",ul:"ul",...(0,o.a)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(t.h1,{id:"rust",children:"Rust"}),"\n",(0,n.jsx)(t.p,{children:"There are two ways to install Rust. This article explains how they differ and which one should be used, according to users' needs."}),"\n",(0,n.jsx)(t.p,{children:"Rust can be obtained by:"}),"\n",(0,n.jsxs)(t.ul,{children:["\n",(0,n.jsxs)(t.li,{children:["Installing the ",(0,n.jsx)(t.code,{children:"rustup"})," package, then installing any Rust target and/or tool using ",(0,n.jsx)(t.code,{children:"rustup"})," itself"]}),"\n",(0,n.jsxs)(t.li,{children:["Installing the ",(0,n.jsx)(t.code,{children:"rust"})," package"]}),"\n"]}),"\n",(0,n.jsxs)(t.p,{children:["Users should prefer the ",(0,n.jsx)(t.code,{children:"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,n.jsx)(t.code,{children:"PATH"})," variable depending on your shell setup. According to the official Rust ",(0,n.jsx)(t.a,{href:"https://www.rust-lang.org/tools/install",children:"installation guide"}),":"]}),"\n",(0,n.jsxs)(t.blockquote,{children:["\n",(0,n.jsxs)(t.p,{children:["It is customary for Rust developers to include ",(0,n.jsx)(t.code,{children:"~/.cargo/bin"})," in their ",(0,n.jsx)(t.code,{children:"PATH "}),"environment variable. During installation rustup will attempt to configure the ",(0,n.jsx)(t.code,{children:"PATH"}),". Because of differences between platforms, command shells, and bugs in rustup, the modifications to ",(0,n.jsx)(t.code,{children:"PATH"})," may not take effect until the console is restarted, or the user is logged out, or it may not succeed at all."]}),"\n"]}),"\n",(0,n.jsxs)(t.p,{children:["The ",(0,n.jsx)(t.code,{children:"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,n.jsx)(t.code,{children:"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,n.jsx)(t.code,{children:"cargo"}),". On the other hand, the ",(0,n.jsx)(t.code,{children:"rust"})," package is ready to use after its installation with no extra configurations."]}),"\n",(0,n.jsxs)(t.p,{children:["Either way, it is also recommended to install our ",(0,n.jsx)(t.code,{children:"system.devel"})," component, which is typically required for compiling. See our documentation for it ",(0,n.jsx)(t.a,{href:"/docs/user/software/development",children:"here"}),"."]}),"\n",(0,n.jsxs)(t.p,{children:["As a final note, it is possible to ",(0,n.jsx)(t.a,{href:"https://rust-lang.github.io/rustup/installation/already-installed-rust.html",children:"configure"})," ",(0,n.jsx)(t.code,{children:"rustup"})," to use the system toolchain. This setup is ",(0,n.jsx)(t.strong,{children:"discouraged"})," unless aimed at developing applications targeting Solus itself."]})]})}function c(e={}){const{wrapper:t}={...(0,o.a)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(u,{...e})}):u(e)}},11151:(e,t,s)=>{s.d(t,{Z:()=>l,a:()=>i});var n=s(67294);const o={},r=n.createContext(o);function i(e){const t=n.useContext(r);return n.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function l(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:i(e.components),n.createElement(r.Provider,{value:t},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/9284d474.919750c6.js b/assets/js/9284d474.919750c6.js
deleted file mode 100644
index 7b9d2b4bf..000000000
--- a/assets/js/9284d474.919750c6.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[7626],{39842:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>a,default:()=>h,frontMatter:()=>r,metadata:()=>o,toc:()=>d});var i=s(85893),t=s(11151);const r={title:"Gaming",summary:"Instructions for installing various gaming software on Solus"},a="Gaming",o={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,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/gaming/index.md",tags:[],version:"current",lastUpdatedAt:171439918e4,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"}},l={},d=[{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}];function c(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",ul:"ul",...(0,t.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"gaming",children:"Gaming"}),"\n",(0,i.jsx)(n.h2,{id:"heroes-of-newerth",children:"Heroes of Newerth"}),"\n",(0,i.jsx)(n.p,{children:'First, install the latest version of HoN by downloading it and running "HoNClient.sh".'}),"\n",(0,i.jsx)(n.p,{children:"Assuming that you install to ~/HoN (default), you only need to run two commands:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"sudo eopkg it gconf libgcrypt11 libglu\n"})}),"\n",(0,i.jsx)(n.p,{children:"That installs all of the dependencies that HoN needs."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"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"})}),"\n",(0,i.jsx)(n.p,{children:"This removes all the libraries that conflict with the ones in Solus."}),"\n",(0,i.jsx)(n.h2,{id:"lutris",children:"Lutris"}),"\n",(0,i.jsxs)(n.p,{children:["Lutris is currently available via the Solus repository, as the ",(0,i.jsx)(n.code,{children:"lutris"})," package."]}),"\n",(0,i.jsx)(n.h3,{id:"about",children:"About"}),"\n",(0,i.jsx)(n.p,{children:"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!"}),"\n",(0,i.jsxs)(n.p,{children:["For more information you can visit their website at ",(0,i.jsx)(n.a,{href:"https://lutris.net",children:"lutris.net"}),". You can also see their list of games ",(0,i.jsx)(n.a,{href:"https://lutris.net/games/",children:"here"}),"."]}),"\n",(0,i.jsx)(n.h2,{id:"minecraft",children:"Minecraft"}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.a,{href:"https://www.minecraft.net",children:"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.']}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Minecraft Screenshot",src:s(15528).Z+"",width:"1920",height:"1080"})}),"\n",(0,i.jsx)(n.h3,{id:"installation",children:"Installation"}),"\n",(0,i.jsx)(n.p,{children:"Install dependencies and download Minecraft:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"sudo eopkg it gconf binutils\nwget https://launcher.mojang.com/download/Minecraft.deb\n"})}),"\n",(0,i.jsx)(n.p,{children:"Extract files and remove old archive:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"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"})}),"\n",(0,i.jsx)(n.p,{children:"Integrate the installed files into your system:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"sudo usysconf run -f\n"})}),"\n",(0,i.jsx)(n.h2,{id:"retroarch",children:"RetroArch"}),"\n",(0,i.jsx)(n.p,{children:"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."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"RetroArch Screenshot",src:s(30963).Z+"",width:"960",height:"746"})}),"\n",(0,i.jsx)(n.h3,{id:"installing-the-assets",children:"Installing the assets"}),"\n",(0,i.jsx)(n.p,{children:'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".'}),"\n",(0,i.jsx)(n.h2,{id:"steam",children:"Steam"}),"\n",(0,i.jsxs)(n.p,{children:["Steam is currently available via the Solus repository, as the ",(0,i.jsx)(n.code,{children:"steam"})," package."]}),"\n",(0,i.jsx)(n.h3,{id:"nvidia",children:"NVIDIA"}),"\n",(0,i.jsx)(n.p,{children:"For systems running NVIDIA graphics hardware, you will need to install the corresponding 32bit video driver for your card, listed below:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Current Gen: ",(0,i.jsx)(n.code,{children:"nvidia-glx-driver-32bit"})]}),"\n",(0,i.jsxs)(n.li,{children:["470 series: ",(0,i.jsx)(n.code,{children:"nvidia-470-glx-driver-32bit"})]}),"\n"]}),"\n",(0,i.jsx)(n.admonition,{type:"info",children:(0,i.jsx)(n.p,{children:'You can use our "Hardware Drivers" utility to find the right driver for your system.'})})]})}function h(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},15528:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/minecraft-7079f00591b397a6d96d8b3603f5d05f.jpg"},30963:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/retroarch-9d687fb4c01f4d4f393f10b277b10e9c.jpg"},11151:(e,n,s)=>{s.d(n,{Z:()=>o,a:()=>a});var i=s(67294);const t={},r=i.createContext(t);function a(e){const n=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:a(e.components),i.createElement(r.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/9284d474.a3b30657.js b/assets/js/9284d474.a3b30657.js
new file mode 100644
index 000000000..a80060cb5
--- /dev/null
+++ b/assets/js/9284d474.a3b30657.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[7626],{39842:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>l,contentTitle:()=>a,default:()=>h,frontMatter:()=>r,metadata:()=>o,toc:()=>d});var i=s(85893),t=s(11151);const r={title:"Gaming",summary:"Instructions for installing various gaming software on Solus"},a="Gaming",o={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,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/gaming/index.md",tags:[],version:"current",lastUpdatedAt:1714518504e3,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"}},l={},d=[{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}];function c(e){const n={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",img:"img",li:"li",p:"p",pre:"pre",ul:"ul",...(0,t.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"gaming",children:"Gaming"}),"\n",(0,i.jsx)(n.h2,{id:"heroes-of-newerth",children:"Heroes of Newerth"}),"\n",(0,i.jsx)(n.p,{children:'First, install the latest version of HoN by downloading it and running "HoNClient.sh".'}),"\n",(0,i.jsx)(n.p,{children:"Assuming that you install to ~/HoN (default), you only need to run two commands:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"sudo eopkg it gconf libgcrypt11 libglu\n"})}),"\n",(0,i.jsx)(n.p,{children:"That installs all of the dependencies that HoN needs."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"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"})}),"\n",(0,i.jsx)(n.p,{children:"This removes all the libraries that conflict with the ones in Solus."}),"\n",(0,i.jsx)(n.h2,{id:"lutris",children:"Lutris"}),"\n",(0,i.jsxs)(n.p,{children:["Lutris is currently available via the Solus repository, as the ",(0,i.jsx)(n.code,{children:"lutris"})," package."]}),"\n",(0,i.jsx)(n.h3,{id:"about",children:"About"}),"\n",(0,i.jsx)(n.p,{children:"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!"}),"\n",(0,i.jsxs)(n.p,{children:["For more information you can visit their website at ",(0,i.jsx)(n.a,{href:"https://lutris.net",children:"lutris.net"}),". You can also see their list of games ",(0,i.jsx)(n.a,{href:"https://lutris.net/games/",children:"here"}),"."]}),"\n",(0,i.jsx)(n.h2,{id:"minecraft",children:"Minecraft"}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.a,{href:"https://www.minecraft.net",children:"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.']}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"Minecraft Screenshot",src:s(15528).Z+"",width:"1920",height:"1080"})}),"\n",(0,i.jsx)(n.h3,{id:"installation",children:"Installation"}),"\n",(0,i.jsx)(n.p,{children:"Install dependencies and download Minecraft:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"sudo eopkg it gconf binutils\nwget https://launcher.mojang.com/download/Minecraft.deb\n"})}),"\n",(0,i.jsx)(n.p,{children:"Extract files and remove old archive:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"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"})}),"\n",(0,i.jsx)(n.p,{children:"Integrate the installed files into your system:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"sudo usysconf run -f\n"})}),"\n",(0,i.jsx)(n.h2,{id:"retroarch",children:"RetroArch"}),"\n",(0,i.jsx)(n.p,{children:"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."}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{alt:"RetroArch Screenshot",src:s(30963).Z+"",width:"960",height:"746"})}),"\n",(0,i.jsx)(n.h3,{id:"installing-the-assets",children:"Installing the assets"}),"\n",(0,i.jsx)(n.p,{children:'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".'}),"\n",(0,i.jsx)(n.h2,{id:"steam",children:"Steam"}),"\n",(0,i.jsxs)(n.p,{children:["Steam is currently available via the Solus repository, as the ",(0,i.jsx)(n.code,{children:"steam"})," package."]}),"\n",(0,i.jsx)(n.h3,{id:"nvidia",children:"NVIDIA"}),"\n",(0,i.jsx)(n.p,{children:"For systems running NVIDIA graphics hardware, you will need to install the corresponding 32bit video driver for your card, listed below:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["Current Gen: ",(0,i.jsx)(n.code,{children:"nvidia-glx-driver-32bit"})]}),"\n",(0,i.jsxs)(n.li,{children:["470 series: ",(0,i.jsx)(n.code,{children:"nvidia-470-glx-driver-32bit"})]}),"\n"]}),"\n",(0,i.jsx)(n.admonition,{type:"info",children:(0,i.jsx)(n.p,{children:'You can use our "Hardware Drivers" utility to find the right driver for your system.'})})]})}function h(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(c,{...e})}):c(e)}},15528:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/minecraft-7079f00591b397a6d96d8b3603f5d05f.jpg"},30963:(e,n,s)=>{s.d(n,{Z:()=>i});const i=s.p+"assets/images/retroarch-9d687fb4c01f4d4f393f10b277b10e9c.jpg"},11151:(e,n,s)=>{s.d(n,{Z:()=>o,a:()=>a});var i=s(67294);const t={},r=i.createContext(t);function a(e){const n=i.useContext(r);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function o(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:a(e.components),i.createElement(r.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/947d9ca4.502c9c37.js b/assets/js/947d9ca4.502c9c37.js
new file mode 100644
index 000000000..f9e4761e1
--- /dev/null
+++ b/assets/js/947d9ca4.502c9c37.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[1944],{32810:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>a,contentTitle:()=>l,default:()=>h,frontMatter:()=>s,metadata:()=>d,toc:()=>r});var o=t(85893),i=t(11151);const s={title:"Web Development",summary:"Install and configure different web development tools on Solus."},l="Web Development",d={id:"user/software/development/web",title:"Web Development",description:"Solus provides multiple web servers for local testing of web applications.",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,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/development/web.md",tags:[],version:"current",lastUpdatedAt:1714518504e3,frontMatter:{title:"Web Development",summary:"Install and configure different web development tools on Solus."},sidebar:"userSidebar",previous:{title:"Rust",permalink:"/docs/user/software/development/rust"},next:{title:"Gaming",permalink:"/docs/user/software/gaming/"}},a={},r=[{value:"Caddy",id:"caddy",level:2},{value:"Installation",id:"installation",level:3},{value:"Configuration",id:"configuration",level:3},{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",level:3},{value:"Configuration and DocumentRoot",id:"configuration-and-documentroot",level:4},{value:"Enabling PHP support",id:"enabling-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-1",level:3},{value:"Configuration",id:"configuration-1",level:4},{value:"Management",id:"management-2",level:4}];function c(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,i.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h1,{id:"web-development",children:"Web Development"}),"\n",(0,o.jsx)(n.h1,{id:"servers",children:"Servers"}),"\n",(0,o.jsx)(n.p,{children:"Solus provides multiple web servers for local testing of web applications."}),"\n",(0,o.jsx)(n.admonition,{title:"Important",type:"caution",children:(0,o.jsxs)(n.p,{children:[(0,o.jsx)(n.strong,{children:"Solus is not a server operating system"}),". Usage of server packages outside local testing is not recommended."]})}),"\n",(0,o.jsx)(n.h2,{id:"caddy",children:"Caddy"}),"\n",(0,o.jsx)(n.p,{children:"Caddy is installed with a default configuration that you can customize as needed."}),"\n",(0,o.jsx)(n.h3,{id:"installation",children:"Installation"}),"\n",(0,o.jsxs)(n.p,{children:["To install ",(0,o.jsx)(n.code,{children:"caddy"}),", use the Software Center or execute the following command:"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"sudo eopkg install caddy\n"})}),"\n",(0,o.jsx)(n.h3,{id:"configuration",children:"Configuration"}),"\n",(0,o.jsxs)(n.p,{children:["You can configure Caddy using a ",(0,o.jsx)(n.em,{children:"Caddyfile"}),", a text file that contains configuration directives. The default Caddyfile is located at ",(0,o.jsx)(n.code,{children:"/usr/share/caddy/Caddyfile"}),"."]}),"\n",(0,o.jsx)(n.p,{children:"To reload Caddy with a new configuration file, use the following command:"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"caddy reload --config /path/to/new/caddyfile\n"})}),"\n",(0,o.jsxs)(n.p,{children:["For more information, see the Caddy documentation at ",(0,o.jsx)(n.a,{href:"https://caddyserver.com/docs/",children:"https://caddyserver.com/docs/"}),"."]}),"\n",(0,o.jsx)(n.h4,{id:"management",children:"Management"}),"\n",(0,o.jsx)(n.p,{children:"You can use the following commands to manage Caddy:"}),"\n",(0,o.jsxs)(n.ul,{children:["\n",(0,o.jsxs)(n.li,{children:["Enable Caddy on startup and start immediately after enabling: ",(0,o.jsx)(n.code,{children:"sudo systemctl enable --now caddy"})]}),"\n",(0,o.jsxs)(n.li,{children:["Stop Caddy: ",(0,o.jsx)(n.code,{children:"sudo systemctl stop caddy"})]}),"\n"]}),"\n",(0,o.jsx)(n.h2,{id:"httpd-apache",children:"httpd (Apache)"}),"\n",(0,o.jsx)(n.p,{children:"httpd (Apache) is installed with a default configuration that you can customize as needed."}),"\n",(0,o.jsx)(n.h3,{id:"installation-1",children:"Installation"}),"\n",(0,o.jsxs)(n.p,{children:["To install ",(0,o.jsx)(n.code,{children:"httpd"}),", use the Software Center or execute the following command:"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"sudo eopkg install httpd\n"})}),"\n",(0,o.jsx)(n.h3,{id:"usage",children:"Usage"}),"\n",(0,o.jsx)(n.h4,{id:"configuration-and-documentroot",children:"Configuration and DocumentRoot"}),"\n",(0,o.jsxs)(n.p,{children:["The default configuration files for Apache are located in the ",(0,o.jsx)(n.code,{children:"/usr/share/defaults/httpd/"})," directory. To override the default configuration, create a new file with the ",(0,o.jsx)(n.code,{children:".conf"})," extension in the ",(0,o.jsx)(n.code,{children:"/etc/httpd/conf.d"})," directory."]}),"\n",(0,o.jsx)(n.admonition,{title:"Important",type:"caution",children:(0,o.jsxs)(n.p,{children:["If you modify the configuration files located in the ",(0,o.jsx)(n.code,{children:"/usr/share/defaults/httpd/"})," folder, your changes might be overwritten during a system update."]})}),"\n",(0,o.jsxs)(n.p,{children:["The document root is the directory where Apache serves files from. By default, the document root is ",(0,o.jsx)(n.code,{children:"/var/www/"}),"."]}),"\n",(0,o.jsx)(n.h4,{id:"enabling-php-support",children:"Enabling PHP support"}),"\n",(0,o.jsxs)(n.ol,{children:["\n",(0,o.jsxs)(n.li,{children:["Install ",(0,o.jsx)(n.code,{children:"php"})," from the Software Center or execute the following command: ",(0,o.jsx)(n.code,{children:"sudo eopkg install php"}),"."]}),"\n",(0,o.jsxs)(n.li,{children:["Create a new ",(0,o.jsx)(n.code,{children:"/etc/httpd/conf.d/php.conf"})," file with the following contents:"]}),"\n"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{children:'LoadModule proxy_module lib64/httpd/mod_proxy.so\nLoadModule proxy_fcgi_module lib64/httpd/mod_proxy_fcgi.so\nsolbuild
and the system",id:"update-solbuild-and-the-system",level:2}];function l(e){const o={a:"a",code:"code",h1:"h1",h2:"h2",li:"li",ol:"ol",p:"p",pre:"pre",...(0,a.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(o.h1,{id:"update-your-development-environment",children:"Update Your Development Environment"}),"\n",(0,t.jsx)(o.p,{children:"Always make sure your development environment and system are up to date before beginning work on a package"}),"\n",(0,t.jsxs)(o.ol,{children:["\n",(0,t.jsxs)(o.li,{children:["Update your fork of the ",(0,t.jsx)(o.a,{href:"https://github.com/getsolus/packages",children:"getsolus/packages"})," repository."]}),"\n",(0,t.jsx)(o.li,{children:"Update your local clone of your fork."}),"\n",(0,t.jsxs)(o.li,{children:["Update the solbuild base image ",(0,t.jsx)(o.code,{children:"sudo solbuild update"})]}),"\n",(0,t.jsx)(o.li,{children:"Update the system."}),"\n"]}),"\n",(0,t.jsx)(o.h2,{id:"update-your-fork-of-the-getsoluspackages-repository",children:"Update your fork of the getsolus/packages repository"}),"\n",(0,t.jsxs)(o.p,{children:["If you already have a fork of ",(0,t.jsx)(o.a,{href:"https://github.com/getsolus/packages",children:"getsolus/packages"})," in GitHub, log into GitHub. Make sure you're looking at the ",(0,t.jsx)(o.code,{children:"main"}),' branch. Check to see that your fork is up to date with the main repository it was forked from. If your fork indicates it is behind, use the "Sync fork" button to bring it up to date.']}),"\n",(0,t.jsx)(o.h2,{id:"update-your-local-clone-of-your-fork",children:"Update your local clone of your fork"}),"\n",(0,t.jsx)(o.p,{children:"If you already have a local clone, you need to bring it up to date. To do so run:"}),"\n",(0,t.jsx)(o.pre,{children:(0,t.jsx)(o.code,{className:"language-bash",children:"cd ~/solus-packages\ngit switch main\ngit pull\n"})}),"\n",(0,t.jsxs)(o.h2,{id:"update-solbuild-and-the-system",children:["Update ",(0,t.jsx)(o.code,{children:"solbuild"})," and the system"]}),"\n",(0,t.jsx)(o.pre,{children:(0,t.jsx)(o.code,{className:"language-bash",children:"sudo solbuild update\nsudo eopkg up\n"})}),"\n",(0,t.jsxs)(o.p,{children:["Next, you can either ",(0,t.jsx)(o.a,{href:"/docs/packaging/creating-a-new-package",children:"Submit a New Package"})," or ",(0,t.jsx)(o.a,{href:"/docs/packaging/updating-an-existing-package",children:"Update an Existing Package"})]})]})}function p(e={}){const{wrapper:o}={...(0,a.a)(),...e.components};return o?(0,t.jsx)(o,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},11151:(e,o,n)=>{n.d(o,{Z:()=>i,a:()=>s});var t=n(67294);const a={},r=t.createContext(a);function s(e){const o=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function i(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:s(e.components),t.createElement(r.Provider,{value:o},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/be79d003.8792989c.js b/assets/js/be79d003.8792989c.js
deleted file mode 100644
index 94e47b1e4..000000000
--- a/assets/js/be79d003.8792989c.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[6012],{29303:(e,o,n)=>{n.r(o),n.d(o,{assets:()=>d,contentTitle:()=>s,default:()=>p,frontMatter:()=>r,metadata:()=>i,toc:()=>c});var t=n(85893),a=n(11151);const r={title:"Update Your Development Environment",summary:"Update your development environment before working on a package",sidebar_position:2},s="Update Your Development Environment",i={id:"packaging/update-dev-environment",title:"Update Your Development Environment",description:"Always make sure your development environment and system are up to date before beginning work on a package",source:"@site/docs/packaging/update-dev-environment.md",sourceDirName:"packaging",slug:"/packaging/update-dev-environment",permalink:"/docs/packaging/update-dev-environment",draft:!1,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/update-dev-environment.md",tags:[],version:"current",lastUpdatedAt:171439918e4,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"}},d={},c=[{value:"Update your fork of the getsolus/packages repository",id:"update-your-fork-of-the-getsoluspackages-repository",level:2},{value:"Update your local clone of your fork",id:"update-your-local-clone-of-your-fork",level:2},{value:"Update solbuild
and the system",id:"update-solbuild-and-the-system",level:2}];function l(e){const o={a:"a",code:"code",h1:"h1",h2:"h2",li:"li",ol:"ol",p:"p",pre:"pre",...(0,a.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(o.h1,{id:"update-your-development-environment",children:"Update Your Development Environment"}),"\n",(0,t.jsx)(o.p,{children:"Always make sure your development environment and system are up to date before beginning work on a package"}),"\n",(0,t.jsxs)(o.ol,{children:["\n",(0,t.jsxs)(o.li,{children:["Update your fork of the ",(0,t.jsx)(o.a,{href:"https://github.com/getsolus/packages",children:"getsolus/packages"})," repository."]}),"\n",(0,t.jsx)(o.li,{children:"Update your local clone of your fork."}),"\n",(0,t.jsxs)(o.li,{children:["Update the solbuild base image ",(0,t.jsx)(o.code,{children:"sudo solbuild update"})]}),"\n",(0,t.jsx)(o.li,{children:"Update the system."}),"\n"]}),"\n",(0,t.jsx)(o.h2,{id:"update-your-fork-of-the-getsoluspackages-repository",children:"Update your fork of the getsolus/packages repository"}),"\n",(0,t.jsxs)(o.p,{children:["If you already have a fork of ",(0,t.jsx)(o.a,{href:"https://github.com/getsolus/packages",children:"getsolus/packages"})," in GitHub, log into GitHub. Make sure you're looking at the ",(0,t.jsx)(o.code,{children:"main"}),' branch. Check to see that your fork is up to date with the main repository it was forked from. If your fork indicates it is behind, use the "Sync fork" button to bring it up to date.']}),"\n",(0,t.jsx)(o.h2,{id:"update-your-local-clone-of-your-fork",children:"Update your local clone of your fork"}),"\n",(0,t.jsx)(o.p,{children:"If you already have a local clone, you need to bring it up to date. To do so run:"}),"\n",(0,t.jsx)(o.pre,{children:(0,t.jsx)(o.code,{className:"language-bash",children:"cd ~/solus-packages\ngit switch main\ngit pull\n"})}),"\n",(0,t.jsxs)(o.h2,{id:"update-solbuild-and-the-system",children:["Update ",(0,t.jsx)(o.code,{children:"solbuild"})," and the system"]}),"\n",(0,t.jsx)(o.pre,{children:(0,t.jsx)(o.code,{className:"language-bash",children:"sudo solbuild update\nsudo eopkg up\n"})}),"\n",(0,t.jsxs)(o.p,{children:["Next, you can either ",(0,t.jsx)(o.a,{href:"/docs/packaging/creating-a-new-package",children:"Submit a New Package"})," or ",(0,t.jsx)(o.a,{href:"/docs/packaging/updating-an-existing-package",children:"Update an Existing Package"})]})]})}function p(e={}){const{wrapper:o}={...(0,a.a)(),...e.components};return o?(0,t.jsx)(o,{...e,children:(0,t.jsx)(l,{...e})}):l(e)}},11151:(e,o,n)=>{n.d(o,{Z:()=>i,a:()=>s});var t=n(67294);const a={},r=t.createContext(a);function s(e){const o=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(o):{...o,...e}}),[o,e])}function i(e){let o;return o=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:s(e.components),t.createElement(r.Provider,{value:o},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/c55c138b.dafa46ef.js b/assets/js/c55c138b.dafa46ef.js
new file mode 100644
index 000000000..6818ccff1
--- /dev/null
+++ b/assets/js/c55c138b.dafa46ef.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[7465],{62069:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>r,contentTitle:()=>t,default:()=>h,frontMatter:()=>o,metadata:()=>l,toc:()=>c});var s=n(85893),a=n(11151);const o={title:"Packaging Changes",summary:"Changes to packaging environment and instructions",sidebar_position:7},t="Packaging Changes",l={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,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/packaging-changes.md",tags:[],version:"current",lastUpdatedAt:1714518504e3,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"}},r={},c=[{value:"2024",id:"2024",level:2},{value:"February",id:"february",level:3},{value:"Begin adding monitoring.yml
to packages",id:"begin-adding-monitoringyml-to-packages",level:4},{value:"2023",id:"2023",level:2},{value:"October",id:"october",level:3},{value:"Adding checkdeps
in package.yml
",id:"adding-checkdeps-in-packageyml",level:4},{value:"Git hooks",id:"git-hooks",level:4},{value:"Requiring homepage
in package.yml
",id:"requiring-homepage-in-packageyml",level:4},{value:"Recommending amending commits in Pull Requests",id:"recommending-amending-commits-in-pull-requests",level:4},{value:"September",id:"september",level:3},{value:"Switch to asterisk bolding for PR template",id:"switch-to-asterisk-bolding-for-pr-template",level:4},{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}];function d(e){const i={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",ul:"ul",...(0,a.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(i.h1,{id:"packaging-changes",children:"Packaging Changes"}),"\n",(0,s.jsx)(i.p,{children:"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."}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"This list is not exhaustive"}),"\n",(0,s.jsxs)(i.li,{children:["This list is in ",(0,s.jsx)(i.em,{children:"reverse chronological order"})," (newest first)"]}),"\n"]}),"\n",(0,s.jsx)(i.h2,{id:"2024",children:"2024"}),"\n",(0,s.jsx)(i.h3,{id:"february",children:"February"}),"\n",(0,s.jsxs)(i.h4,{id:"begin-adding-monitoringyml-to-packages",children:["Begin adding ",(0,s.jsx)(i.code,{children:"monitoring.yml"})," to packages"]}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["A new per-package file was introduced: ",(0,s.jsx)(i.code,{children:"monitoring.yml"}),". Used to monitor packages for releases and security advisories; see ",(0,s.jsx)(i.a,{href:"/docs/packaging/monitoring.yml",children:"monitoring.yml"}),"."]}),"\n",(0,s.jsx)(i.li,{children:"This is not enforced by automatic checks yet, but we may ask that it be added."}),"\n"]}),"\n",(0,s.jsx)(i.h2,{id:"2023",children:"2023"}),"\n",(0,s.jsx)(i.h3,{id:"october",children:"October"}),"\n",(0,s.jsxs)(i.h4,{id:"adding-checkdeps-in-packageyml",children:["Adding ",(0,s.jsx)(i.code,{children:"checkdeps"})," in ",(0,s.jsx)(i.code,{children:"package.yml"})]}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["A new type of packaging dependency was added: ",(0,s.jsx)(i.code,{children:"checkdeps"}),". They behave the same as ",(0,s.jsx)(i.code,{children:"builddeps"}),", except they are not considered when determining build order for automatic builds. See the ",(0,s.jsx)(i.a,{href:"/docs/packaging/package.yml",children:"package.yml page"}),"."]}),"\n"]}),"\n",(0,s.jsx)(i.h4,{id:"git-hooks",children:"Git hooks"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["Run ",(0,s.jsx)(i.code,{children:"go-task init"})," to initialize Git hooks for the packages repository. See ",(0,s.jsx)(i.a,{href:"/docs/packaging/prepare-for-packaging#initialize-git-hooks",children:"Prepare for packaging"}),"."]}),"\n",(0,s.jsxs)(i.li,{children:["Use ",(0,s.jsx)(i.code,{children:"git commit"})," for committing packaging changes and fill in the template shown.\nIt is no longer required to manually copy-paste the template or use ",(0,s.jsx)(i.code,{children:"git commit --cleanup=scissors"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(i.h4,{id:"requiring-homepage-in-packageyml",children:["Requiring ",(0,s.jsx)(i.code,{children:"homepage"})," in ",(0,s.jsx)(i.code,{children:"package.yml"})]}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["The ",(0,s.jsx)(i.code,{children:"homepage"})," key in ",(0,s.jsx)(i.code,{children:"package.yml"})," has become mandatory. Use the address to the upstream source repository (eg: the GitHub page) if a package does not have a homepage."]}),"\n",(0,s.jsx)(i.li,{children:"This is enforced by checks on all pull requests."}),"\n"]}),"\n",(0,s.jsx)(i.h4,{id:"recommending-amending-commits-in-pull-requests",children:"Recommending amending commits in Pull Requests"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["Amending commits and force pushing the changes works better with our build tooling.","\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"It was thought that abandoning this practice would be okay, but it turns out not to be the case."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(i.h3,{id:"september",children:"September"}),"\n",(0,s.jsx)(i.h4,{id:"switch-to-asterisk-bolding-for-pr-template",children:"Switch to asterisk bolding for PR template"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["The initial PR template for the ",(0,s.jsx)(i.code,{children:"packages"})," repository used markdown header styling (",(0,s.jsx)(i.code,{children:"## Heading text"}),"), but ",(0,s.jsx)(i.code,{children:"solus-sc"})," does not render that styling, so the template was changed to asterisk bolding (",(0,s.jsx)(i.code,{children:"**Heading text**"}),")"]}),"\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.a,{href:"https://github.com/getsolus/packages/pull/366",children:"https://github.com/getsolus/packages/pull/366"})}),"\n"]}),"\n",(0,s.jsxs)(i.h4,{id:"switching-from-make-to-go-task",children:["Switching From ",(0,s.jsx)(i.code,{children:"make"})," to ",(0,s.jsx)(i.code,{children:"go-task"})]}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["All packaging actions are now handled by ",(0,s.jsx)(i.code,{children:"go-task"})," rather than ",(0,s.jsx)(i.code,{children:"make"}),".","\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["Building a package can be done using ",(0,s.jsx)(i.code,{children:"go-task"})," rather than ",(0,s.jsx)(i.code,{children:"make"}),"."]}),"\n",(0,s.jsxs)(i.li,{children:["Commands are the same: ",(0,s.jsx)(i.code,{children:"make local"}),", for example, is replaced by ",(0,s.jsx)(i.code,{children:"go-task local"}),"."]}),"\n",(0,s.jsxs)(i.li,{children:["You can see all available commands by either browsing to ",(0,s.jsx)(i.code,{children:"Taskfile.yml"})," in the ",(0,s.jsxs)(i.a,{href:"https://github.com/getsolus/packages/blob/main/Taskfile.yml",children:[(0,s.jsx)(i.code,{children:"packages"})," repository"]})," OR running ",(0,s.jsx)(i.code,{children:"go-task -l"})," somewhere in your updated clone of the packages git monorepo."]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:["Packagers should install ",(0,s.jsx)(i.code,{children:"go-task"})," on their machines if they have not already."]}),"\n",(0,s.jsxs)(i.li,{children:["The ",(0,s.jsx)(i.code,{children:"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."]}),"\n"]}),"\n",(0,s.jsx)(i.h4,{id:"github-monorepo-migration",children:"GitHub Monorepo Migration"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["Packages were moved from the initial multirepo setup to the ",(0,s.jsx)(i.code,{children:"packages"})," monorepo: ",(0,s.jsx)(i.a,{href:"https://github.com/getsolus/packages",children:"github.com/getsolus/packages"})," Now packagers only need to clone/fork one repository for all packages."]}),"\n",(0,s.jsx)(i.li,{children:"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."}),"\n",(0,s.jsxs)(i.li,{children:["Packagers should now title commits like ",(0,s.jsx)(i.code,{children:"packagename: Action"}),"; for example: ",(0,s.jsx)(i.code,{children:"nano: Update to 9.0"}),". Generic titles like ",(0,s.jsx)(i.code,{children:"Update to 9.0"})," should not be used, except for rebuilds."]}),"\n",(0,s.jsx)(i.li,{children:"Packagers should use the pull request template for package updates, filling out the Summary and Test Plan sections as usual."}),"\n"]}),"\n",(0,s.jsx)(i.h3,{id:"august",children:"August"}),"\n",(0,s.jsx)(i.h4,{id:"initial-github-migration-from-old-phabricator-dev-tracker",children:"Initial GitHub Migration from old Phabricator Dev Tracker"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.em,{children:"This change was superseded by the later monorepo migration."})}),"\n",(0,s.jsxs)(i.li,{children:["The new multirepo setup for packages was under ",(0,s.jsx)(i.code,{children:"github.com/solus-packages"})," organization, packages were updated with PRs to individual repositories."]}),"\n",(0,s.jsxs)(i.li,{children:["Issues were migrated to ",(0,s.jsx)(i.code,{children:"github.com/getsolus/packages"})," from Phabricator. ",(0,s.jsx)(i.em,{children:"Closed issues were not migrated."})]}),"\n",(0,s.jsxs)(i.li,{children:["A read-only instance of the old Dev Tracker is available at ",(0,s.jsx)(i.a,{href:"https://phab.getsol.us",children:"phab.getsol.us"}),". ",(0,s.jsx)(i.em,{children:"This will eventually be shut down."})]}),"\n"]}),"\n",(0,s.jsx)(i.h3,{id:"april",children:"April"}),"\n",(0,s.jsxs)(i.p,{children:["The repository index was moved to ",(0,s.jsx)(i.code,{children:"cdn.getsol.us"}),"."]}),"\n",(0,s.jsx)(i.h2,{id:"2022-and-earlier",children:"2022 and Earlier"}),"\n",(0,s.jsx)(i.p,{children:"Not included in this list."})]})}function h(e={}){const{wrapper:i}={...(0,a.a)(),...e.components};return i?(0,s.jsx)(i,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},11151:(e,i,n)=>{n.d(i,{Z:()=>l,a:()=>t});var s=n(67294);const a={},o=s.createContext(a);function t(e){const i=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function l(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:t(e.components),s.createElement(o.Provider,{value:i},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/c55c138b.e8ee2667.js b/assets/js/c55c138b.e8ee2667.js
deleted file mode 100644
index 8b6fa543b..000000000
--- a/assets/js/c55c138b.e8ee2667.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[7465],{62069:(e,i,n)=>{n.r(i),n.d(i,{assets:()=>r,contentTitle:()=>t,default:()=>h,frontMatter:()=>o,metadata:()=>l,toc:()=>c});var s=n(85893),a=n(11151);const o={title:"Packaging Changes",summary:"Changes to packaging environment and instructions",sidebar_position:7},t="Packaging Changes",l={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,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/packaging-changes.md",tags:[],version:"current",lastUpdatedAt:171439918e4,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"}},r={},c=[{value:"2024",id:"2024",level:2},{value:"February",id:"february",level:3},{value:"Begin adding monitoring.yml
to packages",id:"begin-adding-monitoringyml-to-packages",level:4},{value:"2023",id:"2023",level:2},{value:"October",id:"october",level:3},{value:"Adding checkdeps
in package.yml
",id:"adding-checkdeps-in-packageyml",level:4},{value:"Git hooks",id:"git-hooks",level:4},{value:"Requiring homepage
in package.yml
",id:"requiring-homepage-in-packageyml",level:4},{value:"Recommending amending commits in Pull Requests",id:"recommending-amending-commits-in-pull-requests",level:4},{value:"September",id:"september",level:3},{value:"Switch to asterisk bolding for PR template",id:"switch-to-asterisk-bolding-for-pr-template",level:4},{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}];function d(e){const i={a:"a",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",ul:"ul",...(0,a.a)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(i.h1,{id:"packaging-changes",children:"Packaging Changes"}),"\n",(0,s.jsx)(i.p,{children:"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."}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"This list is not exhaustive"}),"\n",(0,s.jsxs)(i.li,{children:["This list is in ",(0,s.jsx)(i.em,{children:"reverse chronological order"})," (newest first)"]}),"\n"]}),"\n",(0,s.jsx)(i.h2,{id:"2024",children:"2024"}),"\n",(0,s.jsx)(i.h3,{id:"february",children:"February"}),"\n",(0,s.jsxs)(i.h4,{id:"begin-adding-monitoringyml-to-packages",children:["Begin adding ",(0,s.jsx)(i.code,{children:"monitoring.yml"})," to packages"]}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["A new per-package file was introduced: ",(0,s.jsx)(i.code,{children:"monitoring.yml"}),". Used to monitor packages for releases and security advisories; see ",(0,s.jsx)(i.a,{href:"/docs/packaging/monitoring.yml",children:"monitoring.yml"}),"."]}),"\n",(0,s.jsx)(i.li,{children:"This is not enforced by automatic checks yet, but we may ask that it be added."}),"\n"]}),"\n",(0,s.jsx)(i.h2,{id:"2023",children:"2023"}),"\n",(0,s.jsx)(i.h3,{id:"october",children:"October"}),"\n",(0,s.jsxs)(i.h4,{id:"adding-checkdeps-in-packageyml",children:["Adding ",(0,s.jsx)(i.code,{children:"checkdeps"})," in ",(0,s.jsx)(i.code,{children:"package.yml"})]}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["A new type of packaging dependency was added: ",(0,s.jsx)(i.code,{children:"checkdeps"}),". They behave the same as ",(0,s.jsx)(i.code,{children:"builddeps"}),", except they are not considered when determining build order for automatic builds. See the ",(0,s.jsx)(i.a,{href:"/docs/packaging/package.yml",children:"package.yml page"}),"."]}),"\n"]}),"\n",(0,s.jsx)(i.h4,{id:"git-hooks",children:"Git hooks"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["Run ",(0,s.jsx)(i.code,{children:"go-task init"})," to initialize Git hooks for the packages repository. See ",(0,s.jsx)(i.a,{href:"/docs/packaging/prepare-for-packaging#initialize-git-hooks",children:"Prepare for packaging"}),"."]}),"\n",(0,s.jsxs)(i.li,{children:["Use ",(0,s.jsx)(i.code,{children:"git commit"})," for committing packaging changes and fill in the template shown.\nIt is no longer required to manually copy-paste the template or use ",(0,s.jsx)(i.code,{children:"git commit --cleanup=scissors"}),"."]}),"\n"]}),"\n",(0,s.jsxs)(i.h4,{id:"requiring-homepage-in-packageyml",children:["Requiring ",(0,s.jsx)(i.code,{children:"homepage"})," in ",(0,s.jsx)(i.code,{children:"package.yml"})]}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["The ",(0,s.jsx)(i.code,{children:"homepage"})," key in ",(0,s.jsx)(i.code,{children:"package.yml"})," has become mandatory. Use the address to the upstream source repository (eg: the GitHub page) if a package does not have a homepage."]}),"\n",(0,s.jsx)(i.li,{children:"This is enforced by checks on all pull requests."}),"\n"]}),"\n",(0,s.jsx)(i.h4,{id:"recommending-amending-commits-in-pull-requests",children:"Recommending amending commits in Pull Requests"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["Amending commits and force pushing the changes works better with our build tooling.","\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:"It was thought that abandoning this practice would be okay, but it turns out not to be the case."}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,s.jsx)(i.h3,{id:"september",children:"September"}),"\n",(0,s.jsx)(i.h4,{id:"switch-to-asterisk-bolding-for-pr-template",children:"Switch to asterisk bolding for PR template"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["The initial PR template for the ",(0,s.jsx)(i.code,{children:"packages"})," repository used markdown header styling (",(0,s.jsx)(i.code,{children:"## Heading text"}),"), but ",(0,s.jsx)(i.code,{children:"solus-sc"})," does not render that styling, so the template was changed to asterisk bolding (",(0,s.jsx)(i.code,{children:"**Heading text**"}),")"]}),"\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.a,{href:"https://github.com/getsolus/packages/pull/366",children:"https://github.com/getsolus/packages/pull/366"})}),"\n"]}),"\n",(0,s.jsxs)(i.h4,{id:"switching-from-make-to-go-task",children:["Switching From ",(0,s.jsx)(i.code,{children:"make"})," to ",(0,s.jsx)(i.code,{children:"go-task"})]}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["All packaging actions are now handled by ",(0,s.jsx)(i.code,{children:"go-task"})," rather than ",(0,s.jsx)(i.code,{children:"make"}),".","\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["Building a package can be done using ",(0,s.jsx)(i.code,{children:"go-task"})," rather than ",(0,s.jsx)(i.code,{children:"make"}),"."]}),"\n",(0,s.jsxs)(i.li,{children:["Commands are the same: ",(0,s.jsx)(i.code,{children:"make local"}),", for example, is replaced by ",(0,s.jsx)(i.code,{children:"go-task local"}),"."]}),"\n",(0,s.jsxs)(i.li,{children:["You can see all available commands by either browsing to ",(0,s.jsx)(i.code,{children:"Taskfile.yml"})," in the ",(0,s.jsxs)(i.a,{href:"https://github.com/getsolus/packages/blob/main/Taskfile.yml",children:[(0,s.jsx)(i.code,{children:"packages"})," repository"]})," OR running ",(0,s.jsx)(i.code,{children:"go-task -l"})," somewhere in your updated clone of the packages git monorepo."]}),"\n"]}),"\n"]}),"\n",(0,s.jsxs)(i.li,{children:["Packagers should install ",(0,s.jsx)(i.code,{children:"go-task"})," on their machines if they have not already."]}),"\n",(0,s.jsxs)(i.li,{children:["The ",(0,s.jsx)(i.code,{children:"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."]}),"\n"]}),"\n",(0,s.jsx)(i.h4,{id:"github-monorepo-migration",children:"GitHub Monorepo Migration"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsxs)(i.li,{children:["Packages were moved from the initial multirepo setup to the ",(0,s.jsx)(i.code,{children:"packages"})," monorepo: ",(0,s.jsx)(i.a,{href:"https://github.com/getsolus/packages",children:"github.com/getsolus/packages"})," Now packagers only need to clone/fork one repository for all packages."]}),"\n",(0,s.jsx)(i.li,{children:"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."}),"\n",(0,s.jsxs)(i.li,{children:["Packagers should now title commits like ",(0,s.jsx)(i.code,{children:"packagename: Action"}),"; for example: ",(0,s.jsx)(i.code,{children:"nano: Update to 9.0"}),". Generic titles like ",(0,s.jsx)(i.code,{children:"Update to 9.0"})," should not be used, except for rebuilds."]}),"\n",(0,s.jsx)(i.li,{children:"Packagers should use the pull request template for package updates, filling out the Summary and Test Plan sections as usual."}),"\n"]}),"\n",(0,s.jsx)(i.h3,{id:"august",children:"August"}),"\n",(0,s.jsx)(i.h4,{id:"initial-github-migration-from-old-phabricator-dev-tracker",children:"Initial GitHub Migration from old Phabricator Dev Tracker"}),"\n",(0,s.jsxs)(i.ul,{children:["\n",(0,s.jsx)(i.li,{children:(0,s.jsx)(i.em,{children:"This change was superseded by the later monorepo migration."})}),"\n",(0,s.jsxs)(i.li,{children:["The new multirepo setup for packages was under ",(0,s.jsx)(i.code,{children:"github.com/solus-packages"})," organization, packages were updated with PRs to individual repositories."]}),"\n",(0,s.jsxs)(i.li,{children:["Issues were migrated to ",(0,s.jsx)(i.code,{children:"github.com/getsolus/packages"})," from Phabricator. ",(0,s.jsx)(i.em,{children:"Closed issues were not migrated."})]}),"\n",(0,s.jsxs)(i.li,{children:["A read-only instance of the old Dev Tracker is available at ",(0,s.jsx)(i.a,{href:"https://phab.getsol.us",children:"phab.getsol.us"}),". ",(0,s.jsx)(i.em,{children:"This will eventually be shut down."})]}),"\n"]}),"\n",(0,s.jsx)(i.h3,{id:"april",children:"April"}),"\n",(0,s.jsxs)(i.p,{children:["The repository index was moved to ",(0,s.jsx)(i.code,{children:"cdn.getsol.us"}),"."]}),"\n",(0,s.jsx)(i.h2,{id:"2022-and-earlier",children:"2022 and Earlier"}),"\n",(0,s.jsx)(i.p,{children:"Not included in this list."})]})}function h(e={}){const{wrapper:i}={...(0,a.a)(),...e.components};return i?(0,s.jsx)(i,{...e,children:(0,s.jsx)(d,{...e})}):d(e)}},11151:(e,i,n)=>{n.d(i,{Z:()=>l,a:()=>t});var s=n(67294);const a={},o=s.createContext(a);function t(e){const i=s.useContext(o);return s.useMemo((function(){return"function"==typeof e?e(i):{...i,...e}}),[i,e])}function l(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:t(e.components),s.createElement(o.Provider,{value:i},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/c5de29d4.206f96a4.js b/assets/js/c5de29d4.206f96a4.js
new file mode 100644
index 000000000..755d2ac0b
--- /dev/null
+++ b/assets/js/c5de29d4.206f96a4.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[3851],{44832:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>c,contentTitle:()=>r,default:()=>h,frontMatter:()=>t,metadata:()=>l,toc:()=>o});var i=a(85893),s=a(11151);const t={title:"Creating a New Package",summary:"Creating a Package For Inclusion in the Repositories",sidebar_position:3},r="Creating a New Package",l={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,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/creating-a-new-package.md",tags:[],version:"current",lastUpdatedAt:1714518504e3,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"}},c={},o=[{value:"Update an existing clone",id:"update-an-existing-clone",level:3},{value:"Create a new branch",id:"create-a-new-branch",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}];function d(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"creating-a-new-package",children:"Creating a New Package"}),"\n",(0,i.jsxs)(n.p,{children:["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.jsx)(n.a,{href:"https://gitlab.com/OldManProgrammer/unix-tree",children:"tree"}),", which is already packaged for Solus, but we will pretend like it's not."]}),"\n",(0,i.jsxs)(n.admonition,{type:"note",children:[(0,i.jsxs)(n.p,{children:[(0,i.jsxs)(n.strong,{children:["Please ",(0,i.jsx)(n.a,{href:"https://github.com/getsolus/packages/issues?q=label%3A%22Package+Request%22",children:"look to see if an issue has been filed"})," and ",(0,i.jsx)(n.em,{children:"accepted"})," 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.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"This PR resolves software request https://github.com/getsolus/packages/issues/123\n"})})]}),"\n",(0,i.jsx)(n.h3,{id:"update-an-existing-clone",children:"Update an existing clone"}),"\n",(0,i.jsxs)(n.p,{children:["If you do not have a local clone set up yet, see ",(0,i.jsx)(n.a,{href:"/docs/packaging/prepare-for-packaging#fork-the-getsoluspackages-repository",children:"Prepare for Packaging"})]}),"\n",(0,i.jsx)(n.p,{children:"Bring your local clone up to date. Run:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"cd ~/solus-packages\ngit switch main\ngit pull\n"})}),"\n",(0,i.jsx)(n.h2,{id:"create-a-new-branch",children:"Create a new branch"}),"\n",(0,i.jsx)(n.p,{children:"It's always a good idea to switch to a new git branch before beginning packaging work. This helps to 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:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"git switch -c your-branch\n"})}),"\n",(0,i.jsxs)(n.h2,{id:"create-the-maintainersmd-file",children:["Create the ",(0,i.jsx)(n.code,{children:"MAINTAINERS.md"})," file"]}),"\n",(0,i.jsxs)(n.p,{children:["You must add a file called ",(0,i.jsx)(n.code,{children:"MAINTAINERS.md"})," using the template in ",(0,i.jsx)(n.a,{href:"/docs/packaging/procedures/maintainership",children:"Maintainership"}),". Solus uses this to track the primary maintainer(s) for each package."]}),"\n",(0,i.jsxs)(n.h2,{id:"create-the-packageyml-file",children:["Create the ",(0,i.jsx)(n.code,{children:"package.yml"})," file"]}),"\n",(0,i.jsx)(n.p,{children:"You will need a link to the most recent source tarball for this from the software's website."}),"\n",(0,i.jsxs)(n.p,{children:["To create a skeleton ",(0,i.jsx)(n.code,{children:"package.yml"})," file, use the ",(0,i.jsx)(n.code,{children:"go-task new"})," command."]}),"\n",(0,i.jsx)(n.p,{children:"This command takes two arguments, in the following order:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsx)(n.li,{children:"Package name"}),"\n",(0,i.jsx)(n.li,{children:"Source URL"}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"go-task new -- tree https://gitlab.com/OldManProgrammer/unix-tree/-/archive/2.1.1/unix-tree-2.1.1.tar.gz\n"})}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.code,{children:"go-task new"})," command will automatically place the new ",(0,i.jsx)(n.code,{children:"package.yml"})," in the proper directory according the package name, ",(0,i.jsxs)(n.em,{children:["and will overwrite any existing ",(0,i.jsx)(n.code,{children:"package.yml"})," file at that location"]}),"."]}),"\n",(0,i.jsx)(n.admonition,{type:"note",children:(0,i.jsxs)(n.p,{children:["You can, of course, create your ",(0,i.jsx)(n.code,{children:"package.yml"})," file entirely from scratch, but ",(0,i.jsx)(n.code,{children:"go-task new"})," will give you a better starting point. We recommend using the ",(0,i.jsx)(n.code,{children:"go-task new"})," command."]})}),"\n",(0,i.jsxs)(n.p,{children:["Now you should have a ",(0,i.jsx)(n.code,{children:"package.yml"})," file that looks something like this:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"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"})}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.code,{children:"go-task new"})," command 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.jsx)(n.a,{href:"/docs/packaging/package.yml",children:"package.yml page"})," to see how each field should be used."]}),"\n",(0,i.jsx)(n.p,{children:"For this example, we need to fix the following:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["The name needs to be ",(0,i.jsx)(n.code,{children:"tree"}),", so update it."]}),"\n",(0,i.jsxs)(n.li,{children:["The ",(0,i.jsx)(n.code,{children:"license"}),' is correct, so we remove the comment. License values need to match an "Identifier" in the ',(0,i.jsx)(n.a,{href:"https://spdx.org/licenses/",children:"SPDX License List"}),"."]}),"\n",(0,i.jsxs)(n.li,{children:["Fill in ",(0,i.jsx)(n.code,{children:"homepage"}),", ",(0,i.jsx)(n.code,{children:"component"}),", ",(0,i.jsx)(n.code,{children:"summary"}),", and ",(0,i.jsx)(n.code,{children:"description"}),"."]}),"\n",(0,i.jsxs)(n.li,{children:["Remove ",(0,i.jsx)(n.code,{children:"builddeps"}),". This package has no build dependencies beyond the ones already available for every package (the ",(0,i.jsx)(n.code,{children:"system.devel"})," packages)."]}),"\n",(0,i.jsxs)(n.li,{children:["The ",(0,i.jsx)(n.code,{children:"setup"})," step is not required, remove it."]}),"\n",(0,i.jsxs)(n.li,{children:["In the ",(0,i.jsx)(n.code,{children:"install"})," key, we can't use the ",(0,i.jsx)(n.code,{children:"%make_install"})," macro for this package. The files are installed in their correct locations individually."]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"After updating the file, it will now look like:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"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"})}),"\n",(0,i.jsxs)(n.p,{children:["To read more about finding and including dependencies and other parts of ",(0,i.jsx)(n.code,{children:"package.yml"})," please see ",(0,i.jsx)(n.a,{href:"/docs/packaging/packaging-practices",children:"Packaging Practices"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["Understanding how to translate source code into a good ",(0,i.jsx)(n.code,{children:"package.yml"})," file is the heart of packaging. If you are stumped, or have questions, ",(0,i.jsxs)(n.strong,{children:["ask for help in our Solus Packaging room on ",(0,i.jsx)(n.a,{href:"/docs/user/contributing/getting-involved#matrix-chat",children:"Matrix"}),"."]})]}),"\n",(0,i.jsx)(n.h2,{id:"build-the-package",children:"Build the package"}),"\n",(0,i.jsxs)(n.p,{children:["Build the package using ",(0,i.jsx)(n.code,{children:"go-task"}),". The default task will build the package against the Unstable repository, so you don't have to specify a task here."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"go-task\n"})}),"\n",(0,i.jsx)(n.p,{children:"Once the build completes, your directory should now include the following files:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-text",children:"\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"})}),"\n",(0,i.jsxs)(n.p,{children:["All these files ",(0,i.jsx)(n.em,{children:"except"})," the ",(0,i.jsx)(n.code,{children:"*eopkg"})," file(s) should be included in your pull request. You will remove the ",(0,i.jsx)(n.code,{children:".eopkg"})," files after testing the package."]}),"\n",(0,i.jsxs)(n.p,{children:["Once your package has built successfully, you will need to ",(0,i.jsx)(n.a,{href:"testing-a-package",children:"test it"}),"."]}),"\n",(0,i.jsx)(n.h2,{id:"commit-your-changes",children:"Commit your changes"}),"\n",(0,i.jsxs)(n.p,{children:["Check the ",(0,i.jsx)(n.a,{href:"git-basics#check-the-changes-in-your-files",children:"changes in your files"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.a,{href:"/docs/packaging/git-basics",children:"Add / remove files as necessary to the commit"}),". Then, ",(0,i.jsx)(n.strong,{children:"check your branch"}),"."]}),"\n",(0,i.jsx)(n.p,{children:"Double-check that everything looks correct and all of the files have been staged before committing."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"git status\n"})}),"\n",(0,i.jsx)(n.p,{children:"If all looks well, commit your changes."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"git commit\n"})}),"\n",(0,i.jsx)(n.h3,{id:"commit-message-format-for-new-packages",children:"Commit message format for new packages"}),"\n",(0,i.jsx)(n.p,{children:"There should be a summary line (with the package name), a blank line, and then the rest of the commit message."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"There should at the minimum be a Summary and Test Plan."}),"\n",(0,i.jsx)(n.li,{children:"Bullet point lists should start with a dash."}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Here is an example in our standard format (make sure to check the box in the checklist):"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"tree: Add at v2.1.1\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"})}),"\n",(0,i.jsxs)(n.p,{children:["For more information on suitable commit messages, please check the ",(0,i.jsx)(n.a,{href:"https://github.com/solus-project/tooling-central/blob/master/README.rst#using-git",children:"tooling central documentation"}),"."]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["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.jsx)(n.code,{children:"The inclusion of 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}];function d(e){const n={a:"a",admonition:"admonition",code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.h1,{id:"creating-a-new-package",children:"Creating a New Package"}),"\n",(0,i.jsxs)(n.p,{children:["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.jsx)(n.a,{href:"https://gitlab.com/OldManProgrammer/unix-tree",children:"tree"}),", which is already packaged for Solus, but we will pretend like it's not."]}),"\n",(0,i.jsxs)(n.admonition,{type:"note",children:[(0,i.jsxs)(n.p,{children:[(0,i.jsxs)(n.strong,{children:["Please ",(0,i.jsx)(n.a,{href:"https://github.com/getsolus/packages/issues?q=label%3A%22Package+Request%22",children:"look to see if an issue has been filed"})," and ",(0,i.jsx)(n.em,{children:"accepted"})," 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.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"This PR resolves software request https://github.com/getsolus/packages/issues/123\n"})})]}),"\n",(0,i.jsx)(n.h3,{id:"update-an-existing-clone",children:"Update an existing clone"}),"\n",(0,i.jsxs)(n.p,{children:["If you do not have a local clone set up yet, see ",(0,i.jsx)(n.a,{href:"/docs/packaging/prepare-for-packaging#fork-the-getsoluspackages-repository",children:"Prepare for Packaging"})]}),"\n",(0,i.jsx)(n.p,{children:"Bring your local clone up to date. Run:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"cd ~/solus-packages\ngit switch main\ngit pull\n"})}),"\n",(0,i.jsx)(n.h2,{id:"create-a-new-branch",children:"Create a new branch"}),"\n",(0,i.jsx)(n.p,{children:"It's always a good idea to switch to a new git branch before beginning packaging work. This helps to 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:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"git switch -c your-branch\n"})}),"\n",(0,i.jsxs)(n.h2,{id:"create-the-maintainersmd-file",children:["Create the ",(0,i.jsx)(n.code,{children:"MAINTAINERS.md"})," file"]}),"\n",(0,i.jsxs)(n.p,{children:["You must add a file called ",(0,i.jsx)(n.code,{children:"MAINTAINERS.md"})," using the template in ",(0,i.jsx)(n.a,{href:"/docs/packaging/procedures/maintainership",children:"Maintainership"}),". Solus uses this to track the primary maintainer(s) for each package."]}),"\n",(0,i.jsxs)(n.h2,{id:"create-the-packageyml-file",children:["Create the ",(0,i.jsx)(n.code,{children:"package.yml"})," file"]}),"\n",(0,i.jsx)(n.p,{children:"You will need a link to the most recent source tarball for this from the software's website."}),"\n",(0,i.jsxs)(n.p,{children:["To create a skeleton ",(0,i.jsx)(n.code,{children:"package.yml"})," file, use the ",(0,i.jsx)(n.code,{children:"go-task new"})," command."]}),"\n",(0,i.jsx)(n.p,{children:"This command takes two arguments, in the following order:"}),"\n",(0,i.jsxs)(n.ol,{children:["\n",(0,i.jsx)(n.li,{children:"Package name"}),"\n",(0,i.jsx)(n.li,{children:"Source URL"}),"\n"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"go-task new -- tree https://gitlab.com/OldManProgrammer/unix-tree/-/archive/2.1.1/unix-tree-2.1.1.tar.gz\n"})}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.code,{children:"go-task new"})," command will automatically place the new ",(0,i.jsx)(n.code,{children:"package.yml"})," in the proper directory according the package name, ",(0,i.jsxs)(n.em,{children:["and will overwrite any existing ",(0,i.jsx)(n.code,{children:"package.yml"})," file at that location"]}),"."]}),"\n",(0,i.jsx)(n.admonition,{type:"note",children:(0,i.jsxs)(n.p,{children:["You can, of course, create your ",(0,i.jsx)(n.code,{children:"package.yml"})," file entirely from scratch, but ",(0,i.jsx)(n.code,{children:"go-task new"})," will give you a better starting point. We recommend using the ",(0,i.jsx)(n.code,{children:"go-task new"})," command."]})}),"\n",(0,i.jsxs)(n.p,{children:["Now you should have a ",(0,i.jsx)(n.code,{children:"package.yml"})," file that looks something like this:"]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"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"})}),"\n",(0,i.jsxs)(n.p,{children:["The ",(0,i.jsx)(n.code,{children:"go-task new"})," command 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.jsx)(n.a,{href:"/docs/packaging/package.yml",children:"package.yml page"})," to see how each field should be used."]}),"\n",(0,i.jsx)(n.p,{children:"For this example, we need to fix the following:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["The name needs to be ",(0,i.jsx)(n.code,{children:"tree"}),", so update it."]}),"\n",(0,i.jsxs)(n.li,{children:["The ",(0,i.jsx)(n.code,{children:"license"}),' is correct, so we remove the comment. License values need to match an "Identifier" in the ',(0,i.jsx)(n.a,{href:"https://spdx.org/licenses/",children:"SPDX License List"}),"."]}),"\n",(0,i.jsxs)(n.li,{children:["Fill in ",(0,i.jsx)(n.code,{children:"homepage"}),", ",(0,i.jsx)(n.code,{children:"component"}),", ",(0,i.jsx)(n.code,{children:"summary"}),", and ",(0,i.jsx)(n.code,{children:"description"}),"."]}),"\n",(0,i.jsxs)(n.li,{children:["Remove ",(0,i.jsx)(n.code,{children:"builddeps"}),". This package has no build dependencies beyond the ones already available for every package (the ",(0,i.jsx)(n.code,{children:"system.devel"})," packages)."]}),"\n",(0,i.jsxs)(n.li,{children:["The ",(0,i.jsx)(n.code,{children:"setup"})," step is not required, remove it."]}),"\n",(0,i.jsxs)(n.li,{children:["In the ",(0,i.jsx)(n.code,{children:"install"})," key, we can't use the ",(0,i.jsx)(n.code,{children:"%make_install"})," macro for this package. The files are installed in their correct locations individually."]}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"After updating the file, it will now look like:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-yaml",children:"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"})}),"\n",(0,i.jsxs)(n.p,{children:["To read more about finding and including dependencies and other parts of ",(0,i.jsx)(n.code,{children:"package.yml"})," please see ",(0,i.jsx)(n.a,{href:"/docs/packaging/packaging-practices",children:"Packaging Practices"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:["Understanding how to translate source code into a good ",(0,i.jsx)(n.code,{children:"package.yml"})," file is the heart of packaging. If you are stumped, or have questions, ",(0,i.jsxs)(n.strong,{children:["ask for help in our Solus Packaging room on ",(0,i.jsx)(n.a,{href:"/docs/user/contributing/getting-involved#matrix-chat",children:"Matrix"}),"."]})]}),"\n",(0,i.jsx)(n.h2,{id:"build-the-package",children:"Build the package"}),"\n",(0,i.jsxs)(n.p,{children:["Build the package using ",(0,i.jsx)(n.code,{children:"go-task"}),". The default task will build the package against the Unstable repository, so you don't have to specify a task here."]}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"go-task\n"})}),"\n",(0,i.jsx)(n.p,{children:"Once the build completes, your directory should now include the following files:"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-text",children:"\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"})}),"\n",(0,i.jsxs)(n.p,{children:["All these files ",(0,i.jsx)(n.em,{children:"except"})," the ",(0,i.jsx)(n.code,{children:"*eopkg"})," file(s) should be included in your pull request. You will remove the ",(0,i.jsx)(n.code,{children:".eopkg"})," files after testing the package."]}),"\n",(0,i.jsxs)(n.p,{children:["Once your package has built successfully, you will need to ",(0,i.jsx)(n.a,{href:"testing-a-package",children:"test it"}),"."]}),"\n",(0,i.jsx)(n.h2,{id:"commit-your-changes",children:"Commit your changes"}),"\n",(0,i.jsxs)(n.p,{children:["Check the ",(0,i.jsx)(n.a,{href:"git-basics#check-the-changes-in-your-files",children:"changes in your files"}),"."]}),"\n",(0,i.jsxs)(n.p,{children:[(0,i.jsx)(n.a,{href:"/docs/packaging/git-basics",children:"Add / remove files as necessary to the commit"}),". Then, ",(0,i.jsx)(n.strong,{children:"check your branch"}),"."]}),"\n",(0,i.jsx)(n.p,{children:"Double-check that everything looks correct and all of the files have been staged before committing."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"git status\n"})}),"\n",(0,i.jsx)(n.p,{children:"If all looks well, commit your changes."}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{className:"language-bash",children:"git commit\n"})}),"\n",(0,i.jsx)(n.h3,{id:"commit-message-format-for-new-packages",children:"Commit message format for new packages"}),"\n",(0,i.jsx)(n.p,{children:"There should be a summary line (with the package name), a blank line, and then the rest of the commit message."}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"There should at the minimum be a Summary and Test Plan."}),"\n",(0,i.jsx)(n.li,{children:"Bullet point lists should start with a dash."}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"Here is an example in our standard format (make sure to check the box in the checklist):"}),"\n",(0,i.jsx)(n.pre,{children:(0,i.jsx)(n.code,{children:"tree: Add at v2.1.1\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"})}),"\n",(0,i.jsxs)(n.p,{children:["For more information on suitable commit messages, please check the ",(0,i.jsx)(n.a,{href:"https://github.com/solus-project/tooling-central/blob/master/README.rst#using-git",children:"tooling central documentation"}),"."]}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsxs)(n.li,{children:["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.jsx)(n.code,{children:"The inclusion of 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}];function d(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,t.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h1,{id:"your-first-package-update",children:"Your First Package Update"}),"\n",(0,o.jsxs)(n.p,{children:["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,o.jsx)(n.a,{href:"/docs/packaging/prepare-for-packaging",children:"build environment is set up correctly"}),". You will clone an existing package, build it, then install it, and finally remove it."]}),"\n",(0,o.jsxs)(n.h2,{id:"cloning-and-building-nano",children:["Cloning and building ",(0,o.jsx)(n.code,{children:"nano"})]}),"\n",(0,o.jsxs)(n.p,{children:["For this example we will use the text editor ",(0,o.jsx)(n.code,{children:"nano"}),"."]}),"\n",(0,o.jsx)(n.p,{children:"Change to your packaging directory. Your directory may have a different name or location:"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"cd ~/solus-packages\n"})}),"\n",(0,o.jsxs)(n.p,{children:["Switch to the directory containing the ",(0,o.jsx)(n.code,{children:"nano"})," recipe:"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"cd packages/n/nano\n"})}),"\n",(0,o.jsxs)(n.p,{children:["Alternatively, if you've set up the ",(0,o.jsx)(n.a,{href:"/docs/packaging/prepare-for-packaging#set-up-repository-helper-functions-optional",children:"Monorepo Helper Functions"})," you can replace the above to steps by these simple commands",":n"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"gotosoluspkgs\ngotopkg nano\n"})}),"\n",(0,o.jsx)(n.p,{children:'Increase the release number by one ("bump" the package) and then check the results:'}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"go-task bump\ngit diff\n"})}),"\n",(0,o.jsx)(n.p,{children:"You should see output from git similar to the following:"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-diff",children:"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"})}),"\n",(0,o.jsx)(n.p,{children:"Next, build the package:"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"go-task\n"})}),"\n",(0,o.jsxs)(n.p,{children:["You will be prompted to enter your password by sudo, and the ",(0,o.jsx)(n.code,{children:"solbuild"})," tool will build the package.\nIf the build is successful, you will have a ",(0,o.jsx)(n.code,{children:"nano"})," package file with a name like ",(0,o.jsx)(n.code,{children:"nano-7.2-161-1-x86_64.eopkg"}),". Run the ",(0,o.jsx)(n.code,{children:"ls"})," tool to check the exact name:"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"$ ls\nabi_used_libs files package.yml\nabi_used_symbols nano-7.2-162-1-x86_64.eopkg pspec_x86_64.xml\n"})}),"\n",(0,o.jsx)(n.p,{children:"Congratulations! You have successfully built your first package on Solus."}),"\n",(0,o.jsxs)(n.h2,{id:"installing-your-new-nano-package",children:["Installing your new ",(0,o.jsx)(n.code,{children:"nano"})," package"]}),"\n",(0,o.jsxs)(n.p,{children:["To install your new ",(0,o.jsx)(n.code,{children:"nano"})," package, run the following command. Your filename will probably be slightly different."]}),"\n",(0,o.jsx)(n.p,{children:"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."}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"sudo eopkg it nano-7.2-162-1-x86_64.eopkg\n"})}),"\n",(0,o.jsxs)(n.p,{children:["Testing ",(0,o.jsx)(n.code,{children:"nano"})," is pretty easy. Testing other packages may be more complicated, depending on what they do."]}),"\n",(0,o.jsxs)(n.p,{children:["To test your newly built ",(0,o.jsx)(n.code,{children:"nano"})," package, simply run it on command line, then make sure you can edit and save a file."]}),"\n",(0,o.jsx)(n.h2,{id:"returning-to-the-repository-version-optional",children:"Returning to the repository version (optional)"}),"\n",(0,o.jsx)(n.p,{children:"It is a good idea to remove the package you built, and return to the repository version, once you are done testing."}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"sudo eopkg it --reinstall nano\n"})})]})}function p(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},11151:(e,n,a)=>{a.d(n,{Z:()=>r,a:()=>i});var o=a(67294);const t={},s=o.createContext(t);function i(e){const n=o.useContext(s);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:i(e.components),o.createElement(s.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/d00f7e62.b10d4563.js b/assets/js/d00f7e62.b10d4563.js
deleted file mode 100644
index 010d89296..000000000
--- a/assets/js/d00f7e62.b10d4563.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[255],{14406:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>c,contentTitle:()=>i,default:()=>p,frontMatter:()=>s,metadata:()=>r,toc:()=>l});var o=a(85893),t=a(11151);const s={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",r={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,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/your-first-package-update.md",tags:[],version:"current",lastUpdatedAt:171439918e4,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:"Translation instructions",permalink:"/docs/packaging/translation-instructions"}},c={},l=[{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}];function d(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",p:"p",pre:"pre",...(0,t.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(n.h1,{id:"your-first-package-update",children:"Your First Package Update"}),"\n",(0,o.jsxs)(n.p,{children:["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,o.jsx)(n.a,{href:"/docs/packaging/prepare-for-packaging",children:"build environment is set up correctly"}),". You will clone an existing package, build it, then install it, and finally remove it."]}),"\n",(0,o.jsxs)(n.h2,{id:"cloning-and-building-nano",children:["Cloning and building ",(0,o.jsx)(n.code,{children:"nano"})]}),"\n",(0,o.jsxs)(n.p,{children:["For this example we will use the text editor ",(0,o.jsx)(n.code,{children:"nano"}),"."]}),"\n",(0,o.jsx)(n.p,{children:"Change to your packaging directory. Your directory may have a different name or location:"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"cd ~/solus-packages\n"})}),"\n",(0,o.jsxs)(n.p,{children:["Switch to the directory containing the ",(0,o.jsx)(n.code,{children:"nano"})," recipe:"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"cd packages/n/nano\n"})}),"\n",(0,o.jsxs)(n.p,{children:["Alternatively, if you've set up the ",(0,o.jsx)(n.a,{href:"/docs/packaging/prepare-for-packaging#set-up-repository-helper-functions-optional",children:"Monorepo Helper Functions"})," you can replace the above to steps by these simple commands",":n"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"gotosoluspkgs\ngotopkg nano\n"})}),"\n",(0,o.jsx)(n.p,{children:'Increase the release number by one ("bump" the package) and then check the results:'}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"go-task bump\ngit diff\n"})}),"\n",(0,o.jsx)(n.p,{children:"You should see output from git similar to the following:"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-diff",children:"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"})}),"\n",(0,o.jsx)(n.p,{children:"Next, build the package:"}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"go-task\n"})}),"\n",(0,o.jsxs)(n.p,{children:["You will be prompted to enter your password by sudo, and the ",(0,o.jsx)(n.code,{children:"solbuild"})," tool will build the package.\nIf the build is successful, you will have a ",(0,o.jsx)(n.code,{children:"nano"})," package file with a name like ",(0,o.jsx)(n.code,{children:"nano-7.2-161-1-x86_64.eopkg"}),". Run the ",(0,o.jsx)(n.code,{children:"ls"})," tool to check the exact name:"]}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"$ ls\nabi_used_libs files package.yml\nabi_used_symbols nano-7.2-162-1-x86_64.eopkg pspec_x86_64.xml\n"})}),"\n",(0,o.jsx)(n.p,{children:"Congratulations! You have successfully built your first package on Solus."}),"\n",(0,o.jsxs)(n.h2,{id:"installing-your-new-nano-package",children:["Installing your new ",(0,o.jsx)(n.code,{children:"nano"})," package"]}),"\n",(0,o.jsxs)(n.p,{children:["To install your new ",(0,o.jsx)(n.code,{children:"nano"})," package, run the following command. Your filename will probably be slightly different."]}),"\n",(0,o.jsx)(n.p,{children:"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."}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"sudo eopkg it nano-7.2-162-1-x86_64.eopkg\n"})}),"\n",(0,o.jsxs)(n.p,{children:["Testing ",(0,o.jsx)(n.code,{children:"nano"})," is pretty easy. Testing other packages may be more complicated, depending on what they do."]}),"\n",(0,o.jsxs)(n.p,{children:["To test your newly built ",(0,o.jsx)(n.code,{children:"nano"})," package, simply run it on command line, then make sure you can edit and save a file."]}),"\n",(0,o.jsx)(n.h2,{id:"returning-to-the-repository-version-optional",children:"Returning to the repository version (optional)"}),"\n",(0,o.jsx)(n.p,{children:"It is a good idea to remove the package you built, and return to the repository version, once you are done testing."}),"\n",(0,o.jsx)(n.pre,{children:(0,o.jsx)(n.code,{className:"language-bash",children:"sudo eopkg it --reinstall nano\n"})})]})}function p(e={}){const{wrapper:n}={...(0,t.a)(),...e.components};return n?(0,o.jsx)(n,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},11151:(e,n,a)=>{a.d(n,{Z:()=>r,a:()=>i});var o=a(67294);const t={},s=o.createContext(t);function i(e){const n=o.useContext(s);return o.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:i(e.components),o.createElement(s.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/d0d2faf6.1b2039d2.js b/assets/js/d0d2faf6.1b2039d2.js
deleted file mode 100644
index 91f3f6c6e..000000000
--- a/assets/js/d0d2faf6.1b2039d2.js
+++ /dev/null
@@ -1 +0,0 @@
-"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[4507],{68021:(e,s,n)=>{n.r(s),n.d(s,{assets:()=>l,contentTitle:()=>o,default:()=>h,frontMatter:()=>r,metadata:()=>i,toc:()=>c});var a=n(85893),t=n(11151);const r={title:"Release Processes",summary:"Release Processes"},o="Release Processes",i={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,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/packaging/procedures/release-processes.md",tags:[],version:"current",lastUpdatedAt:171439918e4,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={},c=[{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}];function d(e){const s={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",li:"li",ol:"ol",p:"p",strong:"strong",...(0,t.a)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(s.h1,{id:"release-processes",children:"Release Processes"}),"\n",(0,a.jsx)(s.p,{children:"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."}),"\n",(0,a.jsx)(s.h2,{id:"repository-staging",children:"Repository staging"}),"\n",(0,a.jsxs)(s.p,{children:["All package builds for Solus, updates or otherwise, will always enter the ",(0,a.jsx)(s.code,{children:"unstable"})," repository first. Consequently, all Solus developers and contributors should ensure ",(0,a.jsx)(s.code,{children:"solbuild"})," is configured to use the unstable target. As and when the weekly stabilization efforts have completed, the ",(0,a.jsx)(s.code,{children:"unstable"})," repository will be pulled into ",(0,a.jsx)(s.code,{children:"shannon"}),", the stable target."]}),"\n",(0,a.jsxs)(s.p,{children:["This effectively means that ",(0,a.jsx)(s.code,{children:"shannon"})," is a rolling snapshot of ",(0,a.jsx)(s.code,{children:"unstable"}),". Note that the weekly sync will not make each repository match identically - the ",(0,a.jsx)(s.strong,{children:"tip"})," of every package in ",(0,a.jsx)(s.code,{children:"unstable"})," will be merged into ",(0,a.jsx)(s.code,{children:"shannon"}),". This ensures that the ",(0,a.jsx)(s.code,{children:"shannon"})," update path is cost-efficient in terms of package availability, and that the delta packages provided on ",(0,a.jsx)(s.code,{children:"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."]}),"\n",(0,a.jsxs)(s.p,{children:["Solus installations always default to the ",(0,a.jsx)(s.code,{children:"shannon"})," repository, making shannon the published distribution, and ",(0,a.jsx)(s.code,{children:"unstable"})," the development distribution."]}),"\n",(0,a.jsx)(s.h2,{id:"weekly-sync---every-friday",children:"Weekly Sync - Every Friday"}),"\n",(0,a.jsx)(s.p,{children:"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 stabilize the repository before releasing changes on the Friday."}),"\n",(0,a.jsxs)(s.p,{children:["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,a.jsx)(s.strong,{children:"always respected"}),"."]}),"\n",(0,a.jsx)(s.p,{children:"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."}),"\n",(0,a.jsx)(s.h2,{id:"package-deprecation",children:"Package deprecation"}),"\n",(0,a.jsx)(s.p,{children:"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."}),"\n",(0,a.jsxs)(s.p,{children:["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,a.jsx)(s.code,{children:"Obsolete"})," in the index."]}),"\n",(0,a.jsx)(s.h3,{id:"deprecating-a-package",children:"Deprecating a package"}),"\n",(0,a.jsx)(s.p,{children:"Follow these steps to submit a package for deprecation:"}),"\n",(0,a.jsxs)(s.ol,{children:["\n",(0,a.jsxs)(s.li,{children:["Fork and clone the ",(0,a.jsx)(s.code,{children:"solus-sc"})," repo ",(0,a.jsx)(s.a,{href:"https://github.com/getsolus/solus-sc",children:"on GitHub"}),", and/or create a new branch"]}),"\n",(0,a.jsxs)(s.li,{children:["Edit ",(0,a.jsx)(s.code,{children:"repo_data/distribution.xml.in"})]}),"\n",(0,a.jsxs)(s.li,{children:["Add the package you wish to deprecate at the end of the ",(0,a.jsx)(s.code,{children:"install.package()
on Solus",id:"how-to-use-installpackage-on-solus",level:3},{value:"Additional discovered dependencies",id:"additional-discovered-dependencies",level:4}];function c(e){const n={code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",strong:"strong",ul:"ul",...(0,i.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"r-and-rstudio",children:"R and RStudio"}),"\n",(0,t.jsx)(n.p,{children:"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."}),"\n",(0,t.jsx)(n.h2,{id:"downloading-r",children:"Downloading R"}),"\n",(0,t.jsxs)(n.p,{children:["It is recommended to download R before downloading RStudio. This can be accomplished easily in any of three ways.\n",(0,t.jsx)(n.strong,{children:"NOTE:"})," Both R and RStudio are available natively on Solus thanks to their amazing maintainers, it is not necessary to go to either software's respective website."]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["The easiest way to do this is to search for R within the ",(0,t.jsx)(n.strong,{children:"Software Center"})]}),"\n",(0,t.jsxs)(n.li,{children:["Alternatively you can enter the ",(0,t.jsx)(n.strong,{children:"Software Center"}),", select ",(0,t.jsx)(n.strong,{children:"Programming Languages & Tools"}),", then select ",(0,t.jsx)(n.strong,{children:"Programming"})," and scroll down until you see ",(0,t.jsx)(n.strong,{children:"r"}),". ",(0,t.jsx)(n.em,{children:"The list itself is in alphabetical order so it will be near the bottom."})]}),"\n",(0,t.jsxs)(n.li,{children:["The third option for install is to open your terminal and enter the command ",(0,t.jsx)(n.code,{children:"sudo eopkg it r"})]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"downloading-rstudio",children:"Downloading RStudio"}),"\n",(0,t.jsx)(n.p,{children:"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."}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["The easiest way to do this is to search for RStudio within the ",(0,t.jsx)(n.strong,{children:"Software Center"})]}),"\n",(0,t.jsxs)(n.li,{children:["Alternatively you can enter the ",(0,t.jsx)(n.strong,{children:"Software Center"}),", select ",(0,t.jsx)(n.strong,{children:"Programming Languages & Tools"}),", then select ",(0,t.jsx)(n.strong,{children:"Integrated Development Environments"})," and scroll down until you see ",(0,t.jsx)(n.strong,{children:"r"}),". ",(0,t.jsx)(n.em,{children:"The list itself is in alphabetical order so it will be near the bottom."})]}),"\n",(0,t.jsxs)(n.li,{children:["The third option for install is to open your terminal and enter the command ",(0,t.jsx)(n.code,{children:"sudo eopkg it rstudio"})]}),"\n"]}),"\n",(0,t.jsxs)(n.h3,{id:"how-to-use-installpackage-on-solus",children:["How to use ",(0,t.jsx)(n.code,{children:"install.package()"})," on Solus"]}),"\n",(0,t.jsxs)(n.p,{children:["Unless you are only going to use base R functions, you will need to make use of ",(0,t.jsx)(n.code,{children:"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."]}),"\n",(0,t.jsx)(n.p,{children:"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."}),"\n",(0,t.jsxs)(n.p,{children:["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,t.jsx)(n.code,{children:"system.devel"})," and ",(0,t.jsx)(n.code,{children:"curl-devel"}),"."]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"system.devel"})," can ",(0,t.jsx)(n.strong,{children:"ONLY"})," be installed from within terminal by running the command ",(0,t.jsx)(n.code,{children:"sudo eopkg it -c system.devel"})]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"curl-devel"})," can be found by searching in the ",(0,t.jsx)(n.strong,{children:"Software Center"})," or by running the command ",(0,t.jsx)(n.code,{children:"sudo eopkg it curl-devel"})]}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["Once these two Solus packages are installed ",(0,t.jsx)(n.code,{children:"install.package()"})," will work as usual within R for most packages like ",(0,t.jsx)(n.code,{children:"tidyverse"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["If when you try to install a CRAN library with ",(0,t.jsx)(n.code,{children:"install.package()"})," from within R and you are presented with an error that says ",(0,t.jsx)(n.code,{children:"...exited with non zero exit status"})," this is most likely because one of the required dependencies, ",(0,t.jsx)(n.em,{children:"which will be listed within the R console detailing the error"}),", is contained within a Solus devel package you have not yet installed."]}),"\n",(0,t.jsx)(n.h4,{id:"additional-discovered-dependencies",children:"Additional discovered dependencies"}),"\n",(0,t.jsx)(n.p,{children:"This section should be edited to help future users to know what Solus devel packages are needed to install additional, more specialized CRAN packages."}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["To successfully run ",(0,t.jsx)(n.code,{children:'install.package("RCurl")'})," within R requires ",(0,t.jsx)(n.code,{children:"nghttp2-devel"}),", ",(0,t.jsx)(n.code,{children:"libssh2-devel"}),", and ",(0,t.jsx)(n.code,{children:"kerberos-devel"})," to be installed from the Solus ",(0,t.jsx)(n.strong,{children:"Software Center"})]}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},11151:(e,n,s)=>{s.d(n,{Z:()=>r,a:()=>l});var t=s(67294);const i={},o=t.createContext(i);function l(e){const n=t.useContext(o);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:l(e.components),t.createElement(o.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/fc733b73.f66d278d.js b/assets/js/fc733b73.f66d278d.js
new file mode 100644
index 000000000..af18f5905
--- /dev/null
+++ b/assets/js/fc733b73.f66d278d.js
@@ -0,0 +1 @@
+"use strict";(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[6042],{68435:(e,n,s)=>{s.r(n),s.d(n,{assets:()=>d,contentTitle:()=>l,default:()=>h,frontMatter:()=>o,metadata:()=>r,toc:()=>a});var t=s(85893),i=s(11151);const o={title:"R and RStudio",summary:"Quick start guide for R and RStudio on Solus"},l="R and RStudio",r={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,unlisted:!1,editUrl:"https://github.com/getsolus/help-center-docs/tree/master/docs/user/software/development/r-and-rstudio.md",tags:[],version:"current",lastUpdatedAt:1714518504e3,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"}},d={},a=[{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}];function c(e){const n={code:"code",em:"em",h1:"h1",h2:"h2",h3:"h3",h4:"h4",li:"li",p:"p",strong:"strong",ul:"ul",...(0,i.a)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(n.h1,{id:"r-and-rstudio",children:"R and RStudio"}),"\n",(0,t.jsx)(n.p,{children:"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."}),"\n",(0,t.jsx)(n.h2,{id:"downloading-r",children:"Downloading R"}),"\n",(0,t.jsxs)(n.p,{children:["It is recommended to download R before downloading RStudio. This can be accomplished easily in any of three ways.\n",(0,t.jsx)(n.strong,{children:"NOTE:"})," Both R and RStudio are available natively on Solus thanks to their amazing maintainers, it is not necessary to go to either software's respective website."]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["The easiest way to do this is to search for R within the ",(0,t.jsx)(n.strong,{children:"Software Center"})]}),"\n",(0,t.jsxs)(n.li,{children:["Alternatively you can enter the ",(0,t.jsx)(n.strong,{children:"Software Center"}),", select ",(0,t.jsx)(n.strong,{children:"Programming Languages & Tools"}),", then select ",(0,t.jsx)(n.strong,{children:"Programming"})," and scroll down until you see ",(0,t.jsx)(n.strong,{children:"r"}),". ",(0,t.jsx)(n.em,{children:"The list itself is in alphabetical order so it will be near the bottom."})]}),"\n",(0,t.jsxs)(n.li,{children:["The third option for install is to open your terminal and enter the command ",(0,t.jsx)(n.code,{children:"sudo eopkg it r"})]}),"\n"]}),"\n",(0,t.jsx)(n.h2,{id:"downloading-rstudio",children:"Downloading RStudio"}),"\n",(0,t.jsx)(n.p,{children:"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."}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["The easiest way to do this is to search for RStudio within the ",(0,t.jsx)(n.strong,{children:"Software Center"})]}),"\n",(0,t.jsxs)(n.li,{children:["Alternatively you can enter the ",(0,t.jsx)(n.strong,{children:"Software Center"}),", select ",(0,t.jsx)(n.strong,{children:"Programming Languages & Tools"}),", then select ",(0,t.jsx)(n.strong,{children:"Integrated Development Environments"})," and scroll down until you see ",(0,t.jsx)(n.strong,{children:"r"}),". ",(0,t.jsx)(n.em,{children:"The list itself is in alphabetical order so it will be near the bottom."})]}),"\n",(0,t.jsxs)(n.li,{children:["The third option for install is to open your terminal and enter the command ",(0,t.jsx)(n.code,{children:"sudo eopkg it rstudio"})]}),"\n"]}),"\n",(0,t.jsxs)(n.h3,{id:"how-to-use-installpackage-on-solus",children:["How to use ",(0,t.jsx)(n.code,{children:"install.package()"})," on Solus"]}),"\n",(0,t.jsxs)(n.p,{children:["Unless you are only going to use base R functions, you will need to make use of ",(0,t.jsx)(n.code,{children:"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."]}),"\n",(0,t.jsx)(n.p,{children:"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."}),"\n",(0,t.jsxs)(n.p,{children:["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,t.jsx)(n.code,{children:"system.devel"})," and ",(0,t.jsx)(n.code,{children:"curl-devel"}),"."]}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"system.devel"})," can ",(0,t.jsx)(n.strong,{children:"ONLY"})," be installed from within terminal by running the command ",(0,t.jsx)(n.code,{children:"sudo eopkg it -c system.devel"})]}),"\n",(0,t.jsxs)(n.li,{children:[(0,t.jsx)(n.code,{children:"curl-devel"})," can be found by searching in the ",(0,t.jsx)(n.strong,{children:"Software Center"})," or by running the command ",(0,t.jsx)(n.code,{children:"sudo eopkg it curl-devel"})]}),"\n"]}),"\n",(0,t.jsxs)(n.p,{children:["Once these two Solus packages are installed ",(0,t.jsx)(n.code,{children:"install.package()"})," will work as usual within R for most packages like ",(0,t.jsx)(n.code,{children:"tidyverse"}),"."]}),"\n",(0,t.jsxs)(n.p,{children:["If when you try to install a CRAN library with ",(0,t.jsx)(n.code,{children:"install.package()"})," from within R and you are presented with an error that says ",(0,t.jsx)(n.code,{children:"...exited with non zero exit status"})," this is most likely because one of the required dependencies, ",(0,t.jsx)(n.em,{children:"which will be listed within the R console detailing the error"}),", is contained within a Solus devel package you have not yet installed."]}),"\n",(0,t.jsx)(n.h4,{id:"additional-discovered-dependencies",children:"Additional discovered dependencies"}),"\n",(0,t.jsx)(n.p,{children:"This section should be edited to help future users to know what Solus devel packages are needed to install additional, more specialized CRAN packages."}),"\n",(0,t.jsxs)(n.ul,{children:["\n",(0,t.jsxs)(n.li,{children:["To successfully run ",(0,t.jsx)(n.code,{children:'install.package("RCurl")'})," within R requires ",(0,t.jsx)(n.code,{children:"nghttp2-devel"}),", ",(0,t.jsx)(n.code,{children:"libssh2-devel"}),", and ",(0,t.jsx)(n.code,{children:"kerberos-devel"})," to be installed from the Solus ",(0,t.jsx)(n.strong,{children:"Software Center"})]}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,i.a)(),...e.components};return n?(0,t.jsx)(n,{...e,children:(0,t.jsx)(c,{...e})}):c(e)}},11151:(e,n,s)=>{s.d(n,{Z:()=>r,a:()=>l});var t=s(67294);const i={},o=t.createContext(i);function l(e){const n=t.useContext(o);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:l(e.components),t.createElement(o.Provider,{value:n},e.children)}}}]);
\ No newline at end of file
diff --git a/assets/js/main.2e2ca29e.js b/assets/js/main.2e2ca29e.js
new file mode 100644
index 000000000..e9da992ad
--- /dev/null
+++ b/assets/js/main.2e2ca29e.js
@@ -0,0 +1,2 @@
+/*! For license information please see main.2e2ca29e.js.LICENSE.txt */
+(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[179],{78179:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});n(67294);var r=n(68356),o=n.n(r),a=n(16887);const i={"01a85c17":[()=>Promise.all([n.e(532),n.e(4013)]).then(n.bind(n,85539)),"@theme/BlogTagsListPage",85539],"042222b7":[()=>n.e(6003).then(n.t.bind(n,99026,19)),"~blog/default/blog-tags-gnu-46e.json",99026],"042d98a6":[()=>n.e(5093).then(n.t.bind(n,72334,19)),"~docs/default/category-docs-usersidebar-category-software-e55.json",72334],"04b18502":[()=>n.e(1942).then(n.bind(n,51872)),"@site/docs/packaging/index.md",51872],"06b3584f":[()=>n.e(7876).then(n.t.bind(n,13909,19)),"~docs/default/category-docs-usersidebar-category-utilities-737.json",13909],"080a8349":[()=>n.e(224).then(n.bind(n,59256)),"@site/docs/packaging/monitoring.yml.md",59256],"08bef15d":[()=>n.e(7228).then(n.bind(n,87479)),"@site/docs/user/privacy.md",87479],"09dbd43b":[()=>n.e(9397).then(n.bind(n,54152)),"@site/docs/user/troubleshooting/boot-rescue.md",54152],"0b254e3a":[()=>n.e(6726).then(n.bind(n,2604)),"@site/docs/packaging/updating-an-existing-package.md",2604],"0e3c5e6b":[()=>n.e(4859).then(n.bind(n,24109)),"@site/docs/user/editions/plasma/index.md",24109],"0e862883":[()=>n.e(172).then(n.bind(n,56087)),"@site/docs/user/contributing/testing-an-iso.md",56087],"109d511c":[()=>n.e(5135).then(n.t.bind(n,24469,19)),"/home/runner/work/help-center-docs/help-center-docs/.docusaurus/docusaurus-plugin-content-blog/default/plugin-route-context-module-100.json",24469],"11b387c8":[()=>n.e(4548).then(n.t.bind(n,4926,19)),"~blog/default/blog-tags-lto-66d.json",4926],"14488e92":[()=>n.e(4815).then(n.bind(n,83474)),"@site/docs/user/quick-start/default-applications.md",83474],"14eb3368":[()=>Promise.all([n.e(532),n.e(9817)]).then(n.bind(n,10587)),"@theme/DocCategoryGeneratedIndexPage",10587],17896441:[()=>Promise.all([n.e(532),n.e(2416),n.e(7918)]).then(n.bind(n,28634)),"@theme/DocItem",28634],"1a5bd866":[()=>n.e(7180).then(n.t.bind(n,99758,19)),"~docs/default/category-docs-usersidebar-category-web-586.json",99758],"1a698c37":[()=>Promise.all([n.e(3323),n.e(8917),n.e(6126)]).then(n.bind(n,40619)),"@site/docs/user/editions/index.mdx",40619],"1ae709a2":[()=>n.e(355).then(n.bind(n,37718)),"@site/docs/user/package-management/history-and-rollback.md",37718],"1df93b7f":[()=>Promise.all([n.e(3323),n.e(3237)]).then(n.bind(n,20780)),"@site/src/pages/index.tsx",20780],21944812:[()=>n.e(9873).then(n.bind(n,30836)),"@site/docs/user/software/desktops/index.md",30836],"257b9082":[()=>n.e(3192).then(n.bind(n,74382)),"@site/docs/user/software/development/containers.md",74382],"2598a3a5":[()=>n.e(5951).then(n.bind(n,81529)),"@site/docs/user/editions/mate/configuration.md",81529],"2609550e":[()=>n.e(3206).then(n.bind(n,65565)),"@site/docs/user/software/networking/samba.md",65565],"26308ea3":[()=>Promise.all([n.e(532),n.e(2416),n.e(6485)]).then(n.bind(n,49160)),"@site/docs/packaging/submitting-a-pull-request.mdx",49160],"287b5a0f":[()=>n.e(613).then(n.t.bind(n,98232,19)),"~blog/default/blog-tags-llvm-224.json",98232],"29788ff6":[()=>n.e(7609).then(n.t.bind(n,59490,19)),"~blog/default/blog-tags-pgo-223-list.json",59490],"2a34ce22":[()=>n.e(6074).then(n.bind(n,2314)),"@site/docs/user/quick-start/installation/system-requirements.md",2314],"2a37c7d8":[()=>n.e(9995).then(n.bind(n,85501)),"@site/docs/user/editions/plasma/tips-and-tricks.md",85501],"2a7fbffb":[()=>n.e(3119).then(n.t.bind(n,74049,19)),"~blog/default/blog-tags-3-b6c-list.json",74049],"2b4abe09":[()=>n.e(2413).then(n.bind(n,55717)),"@site/docs/user/troubleshooting/index.md",55717],"2b61a93c":[()=>n.e(9897).then(n.bind(n,47560)),"@site/docs/user/editions/mate/index.md",47560],"2c3e84bd":[()=>n.e(8157).then(n.bind(n,89541)),"@site/docs/user/quick-start/installation/disks.md",89541],"307dbfd9":[()=>n.e(485).then(n.t.bind(n,12081,19)),"~blog/default/blog-tags-solus-d3b.json",12081],"30a24c52":[()=>n.e(453).then(n.t.bind(n,98605,19)),"~blog/default/blog-tags-hello-039.json",98605],"38920c38":[()=>n.e(5481).then(n.bind(n,98585)),"@site/docs/user/hardware/peripherals/printers-and-scanners.md",98585],"393e2f44":[()=>n.e(7856).then(n.t.bind(n,27328,19)),"~blog/default/blog-tags-optimization-29d-list.json",27328],"3fdfc7ff":[()=>n.e(4608).then(n.bind(n,15343)),"@site/docs/user/package-management/basics.md",15343],"3ff05326":[()=>n.e(2775).then(n.bind(n,31333)),"@site/docs/packaging/package.yml.md",31333],"418a6276":[()=>n.e(6160).then(n.bind(n,71697)),"@site/devlog/2024-01-19-eopkg-is-dead.md?truncated=true",71697],"41a4de91":[()=>n.e(7682).then(n.bind(n,67913)),"@site/docs/user/software/third-party/index.md",67913],"424f562c":[()=>n.e(3122).then(n.bind(n,15054)),"@site/devlog/2024-02-09-Intro-to-optimizing-packages-on-solus.md?truncated=true",15054],"4570a037":[()=>n.e(5460).then(n.t.bind(n,47829,19)),"~blog/default/blog-tags-devlog-6a1.json",47829],"45e9d313":[()=>n.e(6114).then(n.bind(n,7415)),"@site/docs/packaging/testing-a-package.md",7415],"46a65d96":[()=>n.e(8092).then(n.bind(n,1907)),"@site/docs/user/package-management/repo-management.md",1907],"4802fa93":[()=>n.e(1774).then(n.bind(n,48815)),"@site/devlog/2024-01-29-dont-call-me-mate.md",48815],"49b71c16":[()=>n.e(3783).then(n.bind(n,73384)),"@site/docs/packaging/packaging-practices.md",73384],"4d0779a0":[()=>n.e(5103).then(n.t.bind(n,44860,19)),"~blog/default/blog-tags-gnu-46e-list.json",44860],"4d1ac072":[()=>n.e(2920).then(n.t.bind(n,88107,19)),"~blog/default/blog-tags-solus-d3b-list.json",88107],"4f4f8e43":[()=>n.e(5749).then(n.t.bind(n,77499,19)),"~blog/default/blog-tags-packaging-d86-list.json",77499],"513b6405":[()=>n.e(4278).then(n.bind(n,75081)),"@site/docs/packaging/prepare-for-packaging.md",75081],"528b6a6b":[()=>n.e(7822).then(n.bind(n,48222)),"@site/docs/user/software/utilities/ksysguard.md",48222],"529038c2":[()=>n.e(8371).then(n.t.bind(n,32179,19)),"~blog/default/blog-tags-mate-3bd.json",32179],"533eefa9":[()=>n.e(4002).then(n.bind(n,73112)),"@site/docs/user/quick-start/installation/index.md",73112],"5685b4d8":[()=>n.e(1540).then(n.bind(n,28594)),"@site/docs/user/editions/xfce/configuration.md",28594],"57b995c1":[()=>n.e(6322).then(n.t.bind(n,55249,19)),"~blog/default/blog-tags-glibc-a93-list.json",55249],"59804d2a":[()=>n.e(9097).then(n.t.bind(n,51668,19)),"~blog/default/blog-tags-hwcaps-d19-list.json",51668],"5b7f3753":[()=>n.e(6413).then(n.bind(n,17754)),"@site/docs/packaging/git-basics.md",17754],"5e95c892":[()=>n.e(9661).then(n.bind(n,14399)),"@theme/DocsRoot",14399],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,36809)),"@generated/docusaurus.config",36809],"5f194406":[()=>n.e(7607).then(n.bind(n,48230)),"@site/docs/user/contributing/community-guidelines.md",48230],"61c953b4":[()=>n.e(8032).then(n.bind(n,49578)),"@site/docs/packaging/procedures/maintainership.md",49578],"631f4b15":[()=>n.e(3203).then(n.t.bind(n,79073,19)),"~docs/default/category-docs-usersidebar-category-quick-start-776.json",79073],64699048:[()=>n.e(2151).then(n.bind(n,56259)),"@site/docs/user/software/development/index.md",56259],66406991:[()=>n.e(110).then(n.t.bind(n,70711,19)),"~blog/default/blog-tags-hello-039-list.json",70711],"6787574e":[()=>n.e(4500).then(n.bind(n,29852)),"@site/docs/user/intro.md",29852],"6873f895":[()=>n.e(8849).then(n.bind(n,18733)),"@site/docs/user/contributing/style.md",18733],"6875c492":[()=>Promise.all([n.e(532),n.e(2416),n.e(4268),n.e(8610)]).then(n.bind(n,23966)),"@theme/BlogTagsPostsPage",23966],"6cfdd309":[()=>n.e(2535).then(n.t.bind(n,49617,19)),"~blog/default/blog-tags-eopkg-3ac-list.json",49617],"6cfe09a0":[()=>n.e(1174).then(n.bind(n,49134)),"@site/docs/user/software/networking/tigervnc.md",49134],"703776e7":[()=>n.e(220).then(n.t.bind(n,43294,19)),"~blog/default/blog-tags-mate-3bd-list.json",43294],"70838ee1":[()=>n.e(8216).then(n.t.bind(n,32112,19)),"~blog/default/blog-tags-x-86-64-v-3-793.json",32112],"72054e31":[()=>n.e(7135).then(n.bind(n,83888)),"@site/devlog/2024-02-09-Intro-to-optimizing-packages-on-solus.md",83888],"74470af4":[()=>n.e(1896).then(n.bind(n,97588)),"@site/docs/user/software/virtualization/virtualbox.md",97588],"75c41d11":[()=>n.e(3337).then(n.bind(n,32559)),"@site/docs/user/editions/xfce/tips-and-tricks.md",32559],"76f543fe":[()=>n.e(8308).then(n.t.bind(n,99511,19)),"~blog/default/blog-tags-llvm-224-list.json",99511],"793c86b2":[()=>n.e(168).then(n.bind(n,36891)),"@site/docs/user/software/command-line/index.md",36891],"79ac1368":[()=>n.e(5413).then(n.t.bind(n,68723,19)),"~blog/default/blog-tags-clang-b6e-list.json",68723],"7a24477a":[()=>n.e(9135).then(n.bind(n,44642)),"@site/docs/user/contributing/getting-involved.md",44642],"7a9ac8db":[()=>n.e(5175).then(n.t.bind(n,15745,19)),"/home/runner/work/help-center-docs/help-center-docs/.docusaurus/docusaurus-plugin-content-pages/default/plugin-route-context-module-100.json",15745],"7e4100d6":[()=>n.e(6990).then(n.bind(n,93791)),"@site/docs/user/software/networking/wireshark.md",93791],"7e68a92e":[()=>n.e(3779).then(n.t.bind(n,54716,19)),"~blog/default/blog-tags-3-b6c.json",54716],"814f3328":[()=>n.e(4631).then(n.t.bind(n,45641,19)),"~blog/default/blog-post-list-prop-default.json",45641],"81f578fd":[()=>n.e(2461).then(n.t.bind(n,26015,19)),"~blog/default/blog-tags-moss-0ed.json",26015],"8490a22d":[()=>n.e(8575).then(n.bind(n,27781)),"@site/docs/packaging/advanced-config/local-repository.md",27781],86417241:[()=>n.e(2033).then(n.t.bind(n,93806,19)),"~blog/default/blog-tags-pgo-223.json",93806],"88a83a8c":[()=>n.e(1242).then(n.bind(n,83269)),"@site/docs/user/software/utilities/kwallet.md",83269],"8a038edf":[()=>n.e(6610).then(n.t.bind(n,72142,19)),"~blog/default/blog-tags-devlog-6a1-list.json",72142],"8d193990":[()=>n.e(1539).then(n.bind(n,5436)),"@site/devlog/2024-01-19-eopkg-is-dead.md",5436],"8e3d5b32":[()=>n.e(8499).then(n.bind(n,95475)),"@site/docs/user/software/localization/ibus.md",95475],"8e861970":[()=>n.e(8026).then(n.bind(n,17066)),"@site/docs/packaging/procedures/request-a-package.md",17066],"8e886580":[()=>n.e(4978).then(n.bind(n,58508)),"@site/docs/user/software/development/rust.md",58508],"8f3b2f9d":[()=>n.e(3234).then(n.t.bind(n,44666,19)),"~blog/default/blog-tags-optimization-29d.json",44666],"9284d474":[()=>n.e(7626).then(n.bind(n,39842)),"@site/docs/user/software/gaming/index.md",39842],"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,32810)),"@site/docs/user/software/development/web.md",32810],"9485dea6":[()=>n.e(2358).then(n.bind(n,88132)),"@site/docs/user/hardware/compatibility/wifi.md",88132],"96af6484":[()=>n.e(6225).then(n.bind(n,28936)),"@site/docs/user/hardware/peripherals/mice-and-touchpads.md",28936],"97c623e4":[()=>n.e(6427).then(n.bind(n,85870)),"@site/docs/packaging/procedures/request-a-package-update.md",85870],"99bedda9":[()=>n.e(8639).then(n.bind(n,24065)),"@site/docs/user/hardware/index.md",24065],"9c593943":[()=>n.e(1965).then(n.t.bind(n,62503,19)),"~blog/default/blog-tags-eopkg-3ac.json",62503],"9e4087bc":[()=>n.e(3608).then(n.bind(n,8635)),"@theme/BlogArchivePage",8635],a05bfad9:[()=>n.e(885).then(n.bind(n,94369)),"@site/docs/user/editions/budgie/tips-and-tricks.md",94369],a0baa67f:[()=>n.e(8149).then(n.t.bind(n,95307,19)),"~docs/default/category-docs-usersidebar-category-peripherals-aa8.json",95307],a2035002:[()=>n.e(641).then(n.t.bind(n,74867,19)),"~blog/default/blog-tags-x-86-64-v-3-793-list.json",74867],a398ef57:[()=>n.e(2586).then(n.bind(n,67404)),"@site/docs/user/hardware/mobile/apple.md",67404],a52026b8:[()=>n.e(7862).then(n.bind(n,19253)),"@site/devlog/2024-01-13-welcome-devlog.md?truncated=true",19253],a6aa9e1f:[()=>Promise.all([n.e(532),n.e(2416),n.e(4268),n.e(3089)]).then(n.bind(n,33587)),"@theme/BlogListPage",33587],a7023ddc:[()=>n.e(1713).then(n.t.bind(n,53457,19)),"~blog/default/blog-tags-tags-4c2.json",53457],a70a81b4:[()=>n.e(5259).then(n.t.bind(n,35960,19)),"~docs/default/category-docs-usersidebar-category-compatibility-3ab.json",35960],a7bd4aaa:[()=>n.e(8518).then(n.bind(n,89615)),"@theme/DocVersionRoot",89615],a94703ab:[()=>Promise.all([n.e(532),n.e(4368)]).then(n.bind(n,98234)),"@theme/DocRoot",98234],a9e19215:[()=>n.e(333).then(n.bind(n,35984)),"@site/docs/user/software/networking/xrdp.md",35984],ab89b7a6:[()=>n.e(5575).then(n.bind(n,16440)),"@site/docs/user/editions/xfce/index.md",16440],acecf23e:[()=>n.e(7393).then(n.t.bind(n,81838,19)),"~blog/default/blogMetadata-default.json",81838],b0fe077f:[()=>n.e(237).then(n.t.bind(n,55178,19)),"~blog/default/blog-tags-lto-66d-list.json",55178],b2b675dd:[()=>n.e(533).then(n.t.bind(n,28017,19)),"~blog/default/blog-c06.json",28017],b2f554cd:[()=>n.e(1477).then(n.t.bind(n,30010,19)),"~blog/default/blog-archive-80c.json",30010],b4302412:[()=>n.e(2081).then(n.bind(n,81677)),"@site/docs/user/editions/gnome/tips-and-tricks.md",81677],b44cea7d:[()=>n.e(9825).then(n.t.bind(n,64963,19)),"~blog/default/blog-tags-firstpost-059-list.json",64963],baa66232:[()=>n.e(984).then(n.bind(n,9565)),"@site/docs/user/software/camera/droidcam.md",9565],baf1b6e8:[()=>n.e(9677).then(n.bind(n,47971)),"@site/docs/user/software/development/java.md",47971],be4ac66b:[()=>n.e(4869).then(n.bind(n,20990)),"@site/docs/user/hardware/compatibility/laptops.md",20990],be79d003:[()=>n.e(6012).then(n.bind(n,29303)),"@site/docs/packaging/update-dev-environment.md",29303],c30932c8:[()=>n.e(9668).then(n.t.bind(n,57252,19)),"~docs/default/category-docs-usersidebar-category-localization-344.json",57252],c55c138b:[()=>n.e(7465).then(n.bind(n,62069)),"@site/docs/packaging/packaging-changes.md",62069],c5de29d4:[()=>n.e(3851).then(n.bind(n,44832)),"@site/docs/packaging/creating-a-new-package.md",44832],c7b6dda1:[()=>n.e(3944).then(n.t.bind(n,95202,19)),"~blog/default/blog-tags-packaging-d86.json",95202],c83790d5:[()=>n.e(3568).then(n.t.bind(n,57830,19)),"~docs/default/category-docs-packagingsidebar-category-advanced-configuration-bd0.json",57830],c9c1a3f4:[()=>n.e(6121).then(n.bind(n,13311)),"@site/docs/user/editions/budgie/configuration.md",13311],cb6b48ec:[()=>n.e(2642).then(n.t.bind(n,16872,19)),"~blog/default/blog-tags-firstpost-059.json",16872],cca891e2:[()=>n.e(9773).then(n.bind(n,57646)),"@site/docs/packaging/procedures/package-inclusion.md",57646],ccc49370:[()=>Promise.all([n.e(532),n.e(2416),n.e(4268),n.e(6103)]).then(n.bind(n,88987)),"@theme/BlogPostPage",88987],cd144304:[()=>n.e(8879).then(n.t.bind(n,38406,19)),"~docs/default/category-docs-usersidebar-category-camera-358.json",38406],cde788f0:[()=>n.e(1037).then(n.t.bind(n,30547,19)),"~blog/default/blog-tags-glibc-a93.json",30547],ce4855c1:[()=>n.e(3440).then(n.bind(n,13013)),"@site/docs/packaging/translation-instructions.md",13013],cec10a63:[()=>n.e(8422).then(n.bind(n,14702)),"@site/docs/user/editions/plasma/configuration.md",14702],d00f7e62:[()=>n.e(255).then(n.bind(n,14406)),"@site/docs/packaging/your-first-package-update.md",14406],d0d2faf6:[()=>n.e(4507).then(n.bind(n,68021)),"@site/docs/packaging/procedures/release-processes.md",68021],d0e18f29:[()=>n.e(8944).then(n.t.bind(n,64713,19)),"~docs/default/category-docs-packagingsidebar-category-procedures-3af.json",64713],d4762887:[()=>n.e(3624).then(n.bind(n,58194)),"@site/docs/user/troubleshooting/installation.md",58194],d5670106:[()=>n.e(1950).then(n.bind(n,52384)),"@site/docs/user/troubleshooting/plasma.md",52384],d817f3ef:[()=>n.e(4907).then(n.t.bind(n,24332,19)),"~blog/default/blog-tags-clang-b6e.json",24332],da539e45:[()=>n.e(9986).then(n.t.bind(n,46050,19)),"~docs/default/category-docs-usersidebar-category-mobile-260.json",46050],dabd6b33:[()=>n.e(1059).then(n.bind(n,41129)),"@site/docs/packaging/advanced-config/eopkg-configuration.md",41129],db847870:[()=>n.e(8214).then(n.t.bind(n,96173,19)),"~docs/default/category-docs-usersidebar-category-networking-3ea.json",96173],ddc41e4a:[()=>n.e(9451).then(n.bind(n,49029)),"@site/docs/user/software/sound/index.md",49029],e11848e1:[()=>n.e(278).then(n.t.bind(n,94416,19)),"~blog/default/blog-tags-moss-0ed-list.json",94416],e5595530:[()=>n.e(1648).then(n.bind(n,72905)),"@site/docs/user/quick-start/boot-management.md",72905],e6b730ee:[()=>n.e(5021).then(n.t.bind(n,83769,19)),"/home/runner/work/help-center-docs/help-center-docs/.docusaurus/docusaurus-plugin-content-docs/default/plugin-route-context-module-100.json",83769],e747afee:[()=>n.e(748).then(n.t.bind(n,81341,19)),"~docs/default/category-docs-usersidebar-category-virtualization-e92.json",81341],eb074ba1:[()=>n.e(3705).then(n.bind(n,46198)),"@site/docs/user/software/configuration_files.md",46198],ec4e4367:[()=>n.e(4529).then(n.bind(n,64870)),"@site/docs/user/hardware/mobile/android.md",64870],ec9a4674:[()=>n.e(7331).then(n.t.bind(n,1239,19)),"~docs/default/category-docs-usersidebar-category-package-management-e37.json",1239],ecdeb26c:[()=>n.e(1971).then(n.bind(n,35247)),"@site/devlog/2024-01-29-dont-call-me-mate.md?truncated=true",35247],ed2a5927:[()=>n.e(4560).then(n.bind(n,59075)),"@site/docs/user/quick-start/software-center/index.md",59075],f0629c21:[()=>n.e(3375).then(n.bind(n,28914)),"@site/docs/user/software/web/obs.md",28914],f1d13e1b:[()=>n.e(5462).then(n.bind(n,77470)),"@site/docs/user/editions/mate/tips-and-tricks.md",77470],f35b91b6:[()=>n.e(9749).then(n.bind(n,78677)),"@site/devlog/2024-01-13-welcome-devlog.md",78677],f4aa4739:[()=>n.e(9170).then(n.bind(n,37334)),"@site/docs/user/editions/budgie/index.md",37334],f4c9601b:[()=>n.e(2595).then(n.bind(n,75678)),"@site/docs/user/quick-start/installation/secure-boot.md",75678],f6faa2b4:[()=>n.e(8143).then(n.bind(n,44334)),"@site/docs/user/hardware/peripherals/midi-keyboard.md",44334],f8dd8223:[()=>n.e(7212).then(n.bind(n,20822)),"@site/docs/user/software/development/postgresql.md",20822],fb6dc457:[()=>n.e(5482).then(n.bind(n,71321)),"@site/docs/user/editions/gnome/configuration.md",71321],fb8d634e:[()=>n.e(999).then(n.bind(n,72895)),"@site/docs/user/editions/gnome/index.md",72895],fc733b73:[()=>n.e(6042).then(n.bind(n,68435)),"@site/docs/user/software/development/r-and-rstudio.md",68435],fed8ce91:[()=>n.e(3145).then(n.t.bind(n,55225,19)),"~docs/default/category-docs-usersidebar-category-contributing-387.json",55225],ffe4d879:[()=>n.e(4570).then(n.t.bind(n,37689,19)),"~blog/default/blog-tags-hwcaps-d19.json",37689]};var s=n(85893);function l(e){let{error:t,retry:n,pastDelay:r}=e;return t?(0,s.jsxs)("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%"},children:[(0,s.jsx)("p",{children:String(t)}),(0,s.jsx)("div",{children:(0,s.jsx)("button",{type:"button",onClick:n,children:"Retry"})})]}):r?(0,s.jsx)("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"},children:(0,s.jsx)("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",children:(0,s.jsxs)("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2",children:[(0,s.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,s.jsx)("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,s.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,s.jsx)("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,s.jsx)("circle",{cx:"22",cy:"22",r:"8",children:(0,s.jsx)("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"})})]})})}):null}var c=n(44151),u=n(13736);function d(e,t){if("*"===e)return o()({loading:l,loader:()=>n.e(7734).then(n.bind(n,57734)),modules:["@theme/NotFound"],webpack:()=>[57734],render(e,t){const n=e.default;return(0,s.jsx)(u.z,{value:{plugin:{name:"native",id:"default"}},children:(0,s.jsx)(n,{...t})})}});const r=a[`${e}-${t}`],d={},p=[],f=[],g=(0,c.Z)(r);return Object.entries(g).forEach((e=>{let[t,n]=e;const r=i[n];r&&(d[t]=r[0],p.push(r[1]),f.push(r[2]))})),o().Map({loading:l,loader:d,modules:p,webpack:()=>f,render(t,n){const o=JSON.parse(JSON.stringify(r));Object.entries(t).forEach((t=>{let[n,r]=t;const a=r.default;if(!a)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 a&&"function"!=typeof a||Object.keys(r).filter((e=>"default"!==e)).forEach((e=>{a[e]=r[e]}));let i=o;const s=n.split(".");s.slice(0,-1).forEach((e=>{i=i[e]})),i[s[s.length-1]]=a}));const a=o.__comp;delete o.__comp;const i=o.__context;return delete o.__context,(0,s.jsx)(u.z,{value:i,children:(0,s.jsx)(a,{...o,...n})})}})}const p=[{path:"/blog",component:d("/blog","c23"),exact:!0},{path:"/blog/archive",component:d("/blog/archive","f12"),exact:!0},{path:"/blog/dont-call-me-mate-pal",component:d("/blog/dont-call-me-mate-pal","c62"),exact:!0},{path:"/blog/eopkg-is-dead-long-live-eopkg",component:d("/blog/eopkg-is-dead-long-live-eopkg","40f"),exact:!0},{path:"/blog/solus-optimizing-packages",component:d("/blog/solus-optimizing-packages","323"),exact:!0},{path:"/blog/tags",component:d("/blog/tags","9e5"),exact:!0},{path:"/blog/tags/3",component:d("/blog/tags/3","1c1"),exact:!0},{path:"/blog/tags/clang",component:d("/blog/tags/clang","477"),exact:!0},{path:"/blog/tags/devlog",component:d("/blog/tags/devlog","c1e"),exact:!0},{path:"/blog/tags/eopkg",component:d("/blog/tags/eopkg","d15"),exact:!0},{path:"/blog/tags/firstpost",component:d("/blog/tags/firstpost","494"),exact:!0},{path:"/blog/tags/glibc",component:d("/blog/tags/glibc","9d8"),exact:!0},{path:"/blog/tags/gnu",component:d("/blog/tags/gnu","239"),exact:!0},{path:"/blog/tags/hello",component:d("/blog/tags/hello","66a"),exact:!0},{path:"/blog/tags/hwcaps",component:d("/blog/tags/hwcaps","a36"),exact:!0},{path:"/blog/tags/llvm",component:d("/blog/tags/llvm","239"),exact:!0},{path:"/blog/tags/lto",component:d("/blog/tags/lto","f28"),exact:!0},{path:"/blog/tags/mate",component:d("/blog/tags/mate","5ac"),exact:!0},{path:"/blog/tags/moss",component:d("/blog/tags/moss","c62"),exact:!0},{path:"/blog/tags/optimization",component:d("/blog/tags/optimization","edf"),exact:!0},{path:"/blog/tags/packaging",component:d("/blog/tags/packaging","7e3"),exact:!0},{path:"/blog/tags/pgo",component:d("/blog/tags/pgo","fec"),exact:!0},{path:"/blog/tags/solus",component:d("/blog/tags/solus","41c"),exact:!0},{path:"/blog/tags/x-86-64-v-3",component:d("/blog/tags/x-86-64-v-3","ce8"),exact:!0},{path:"/blog/welcome-solus-devlog-v1",component:d("/blog/welcome-solus-devlog-v1","9ae"),exact:!0},{path:"/docs",component:d("/docs","478"),routes:[{path:"/docs",component:d("/docs","d96"),routes:[{path:"/docs",component:d("/docs","4b7"),routes:[{path:"/docs/category/advanced-configuration",component:d("/docs/category/advanced-configuration","067"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/category/camera",component:d("/docs/category/camera","062"),exact:!0,sidebar:"userSidebar"},{path:"/docs/category/compatibility",component:d("/docs/category/compatibility","745"),exact:!0,sidebar:"userSidebar"},{path:"/docs/category/contributing",component:d("/docs/category/contributing","069"),exact:!0,sidebar:"userSidebar"},{path:"/docs/category/localization",component:d("/docs/category/localization","b0c"),exact:!0,sidebar:"userSidebar"},{path:"/docs/category/mobile",component:d("/docs/category/mobile","7d4"),exact:!0,sidebar:"userSidebar"},{path:"/docs/category/networking",component:d("/docs/category/networking","edb"),exact:!0,sidebar:"userSidebar"},{path:"/docs/category/package-management",component:d("/docs/category/package-management","7f4"),exact:!0,sidebar:"userSidebar"},{path:"/docs/category/peripherals",component:d("/docs/category/peripherals","04b"),exact:!0,sidebar:"userSidebar"},{path:"/docs/category/procedures",component:d("/docs/category/procedures","dd2"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/category/quick-start",component:d("/docs/category/quick-start","9ec"),exact:!0,sidebar:"userSidebar"},{path:"/docs/category/software",component:d("/docs/category/software","c71"),exact:!0,sidebar:"userSidebar"},{path:"/docs/category/utilities",component:d("/docs/category/utilities","bed"),exact:!0,sidebar:"userSidebar"},{path:"/docs/category/virtualization",component:d("/docs/category/virtualization","432"),exact:!0,sidebar:"userSidebar"},{path:"/docs/category/web",component:d("/docs/category/web","057"),exact:!0,sidebar:"userSidebar"},{path:"/docs/packaging/",component:d("/docs/packaging/","fda"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/advanced-config/eopkg-configuration",component:d("/docs/packaging/advanced-config/eopkg-configuration","ace"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/advanced-config/local-repository",component:d("/docs/packaging/advanced-config/local-repository","ce8"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/creating-a-new-package",component:d("/docs/packaging/creating-a-new-package","33c"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/git-basics",component:d("/docs/packaging/git-basics","0c1"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/monitoring.yml",component:d("/docs/packaging/monitoring.yml","ef2"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/package.yml",component:d("/docs/packaging/package.yml","642"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/packaging-changes",component:d("/docs/packaging/packaging-changes","a22"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/packaging-practices",component:d("/docs/packaging/packaging-practices","45d"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/prepare-for-packaging",component:d("/docs/packaging/prepare-for-packaging","d0a"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/procedures/maintainership",component:d("/docs/packaging/procedures/maintainership","a9a"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/procedures/package-inclusion",component:d("/docs/packaging/procedures/package-inclusion","d43"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/procedures/release-processes",component:d("/docs/packaging/procedures/release-processes","c1f"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/procedures/request-a-package",component:d("/docs/packaging/procedures/request-a-package","5db"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/procedures/request-a-package-update",component:d("/docs/packaging/procedures/request-a-package-update","517"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/submitting-a-pull-request",component:d("/docs/packaging/submitting-a-pull-request","ca5"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/testing-a-package",component:d("/docs/packaging/testing-a-package","04f"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/translation-instructions",component:d("/docs/packaging/translation-instructions","135"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/update-dev-environment",component:d("/docs/packaging/update-dev-environment","66c"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/updating-an-existing-package",component:d("/docs/packaging/updating-an-existing-package","67e"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/your-first-package-update",component:d("/docs/packaging/your-first-package-update","4e3"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/user/contributing/community-guidelines",component:d("/docs/user/contributing/community-guidelines","a58"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/contributing/getting-involved",component:d("/docs/user/contributing/getting-involved","919"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/contributing/style",component:d("/docs/user/contributing/style","34f"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/contributing/testing-an-iso",component:d("/docs/user/contributing/testing-an-iso","4f3"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/editions/",component:d("/docs/user/editions/","16d"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/editions/budgie/",component:d("/docs/user/editions/budgie/","65e"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/editions/budgie/configuration",component:d("/docs/user/editions/budgie/configuration","965"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/editions/budgie/tips-and-tricks",component:d("/docs/user/editions/budgie/tips-and-tricks","c96"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/editions/gnome/",component:d("/docs/user/editions/gnome/","2ed"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/editions/gnome/configuration",component:d("/docs/user/editions/gnome/configuration","b6a"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/editions/gnome/tips-and-tricks",component:d("/docs/user/editions/gnome/tips-and-tricks","dbd"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/editions/mate/",component:d("/docs/user/editions/mate/","718"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/editions/mate/configuration",component:d("/docs/user/editions/mate/configuration","bc1"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/editions/mate/tips-and-tricks",component:d("/docs/user/editions/mate/tips-and-tricks","7a1"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/editions/plasma/",component:d("/docs/user/editions/plasma/","097"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/editions/plasma/configuration",component:d("/docs/user/editions/plasma/configuration","7f2"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/editions/plasma/tips-and-tricks",component:d("/docs/user/editions/plasma/tips-and-tricks","c8c"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/editions/xfce/",component:d("/docs/user/editions/xfce/","a73"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/editions/xfce/configuration",component:d("/docs/user/editions/xfce/configuration","2a0"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/editions/xfce/tips-and-tricks",component:d("/docs/user/editions/xfce/tips-and-tricks","aaf"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/hardware/",component:d("/docs/user/hardware/","4a1"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/hardware/compatibility/laptops",component:d("/docs/user/hardware/compatibility/laptops","315"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/hardware/compatibility/wifi",component:d("/docs/user/hardware/compatibility/wifi","a67"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/hardware/mobile/android",component:d("/docs/user/hardware/mobile/android","e20"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/hardware/mobile/apple",component:d("/docs/user/hardware/mobile/apple","05e"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/hardware/peripherals/mice-and-touchpads",component:d("/docs/user/hardware/peripherals/mice-and-touchpads","049"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/hardware/peripherals/midi-keyboard",component:d("/docs/user/hardware/peripherals/midi-keyboard","2c9"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/hardware/peripherals/printers-and-scanners",component:d("/docs/user/hardware/peripherals/printers-and-scanners","0d0"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/intro",component:d("/docs/user/intro","b6f"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/package-management/basics",component:d("/docs/user/package-management/basics","979"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/package-management/history-and-rollback",component:d("/docs/user/package-management/history-and-rollback","8f6"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/package-management/repo-management",component:d("/docs/user/package-management/repo-management","c5d"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/privacy",component:d("/docs/user/privacy","fdb"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/quick-start/boot-management",component:d("/docs/user/quick-start/boot-management","5bc"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/quick-start/default-applications",component:d("/docs/user/quick-start/default-applications","46b"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/quick-start/installation/",component:d("/docs/user/quick-start/installation/","e26"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/quick-start/installation/disks",component:d("/docs/user/quick-start/installation/disks","d1b"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/quick-start/installation/secure-boot",component:d("/docs/user/quick-start/installation/secure-boot","7ce"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/quick-start/installation/system-requirements",component:d("/docs/user/quick-start/installation/system-requirements","e9f"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/quick-start/software-center/",component:d("/docs/user/quick-start/software-center/","6b3"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/camera/droidcam",component:d("/docs/user/software/camera/droidcam","b60"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/command-line/",component:d("/docs/user/software/command-line/","f08"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/configuration_files",component:d("/docs/user/software/configuration_files","dab"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/desktops/",component:d("/docs/user/software/desktops/","eaa"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/development/",component:d("/docs/user/software/development/","424"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/development/containers",component:d("/docs/user/software/development/containers","d70"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/development/java",component:d("/docs/user/software/development/java","124"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/development/postgresql",component:d("/docs/user/software/development/postgresql","2b9"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/development/r-and-rstudio",component:d("/docs/user/software/development/r-and-rstudio","b15"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/development/rust",component:d("/docs/user/software/development/rust","b6a"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/development/web",component:d("/docs/user/software/development/web","7d9"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/gaming/",component:d("/docs/user/software/gaming/","703"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/localization/ibus",component:d("/docs/user/software/localization/ibus","82f"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/networking/samba",component:d("/docs/user/software/networking/samba","238"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/networking/tigervnc",component:d("/docs/user/software/networking/tigervnc","333"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/networking/wireshark",component:d("/docs/user/software/networking/wireshark","398"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/networking/xrdp",component:d("/docs/user/software/networking/xrdp","f59"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/sound/",component:d("/docs/user/software/sound/","343"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/third-party/",component:d("/docs/user/software/third-party/","e94"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/utilities/ksysguard",component:d("/docs/user/software/utilities/ksysguard","ac6"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/utilities/kwallet",component:d("/docs/user/software/utilities/kwallet","7af"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/virtualization/virtualbox",component:d("/docs/user/software/virtualization/virtualbox","876"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/web/obs",component:d("/docs/user/software/web/obs","fe6"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/troubleshooting/",component:d("/docs/user/troubleshooting/","b50"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/troubleshooting/boot-rescue",component:d("/docs/user/troubleshooting/boot-rescue","d86"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/troubleshooting/installation",component:d("/docs/user/troubleshooting/installation","c7c"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/troubleshooting/plasma",component:d("/docs/user/troubleshooting/plasma","5be"),exact:!0,sidebar:"userSidebar"}]}]}]},{path:"/",component:d("/","9ba"),exact:!0},{path:"*",component:d("*")}]},72278:(e,t,n)=>{var r,o;!function(){var a,i,s,l,c,u,d,p,f,g,m,h,b,y,v,w,k,S,x,_,E,O,P,j,C,T,I,A,N,L,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;rYour Docusaurus site did not load properly.
\nA very common reason is a wrong site baseUrl configuration.
\nCurrent configured baseUrl = ${e} ${"/"===e?" (default value)":""}
\nWe suggest trying baseUrl =
\ne||125 {const s=t.toLowerCase(),l=((e,t)=>{const[n,o]=(0,r.useState)(Z(t,e)),a=(0,r.useRef)(),i=(0,r.useRef)();return(0,r.useEffect)((()=>{t===a.current&&e===i.current||(a.current=t,i.current=e,o(Z(t,e)))}),[e,t]),n})(s,o),c=(e=>(0,r.useCallback)((t=>{var n=t,{className:r,style:o,line:i}=n,s=_(n,["className","style","line"]);const l=x(S({},s),{className:a("token-line",r)});return"object"==typeof e&&"plain"in e&&(l.style=e.plain),"object"==typeof o&&(l.style=S(S({},l.style||{}),o)),l}),[e]))(l),u=(e=>{const t=(0,r.useCallback)((({types:t,empty:n})=>{if(null!=e)return 1===t.length&&"plain"===t[0]?null!=n?{display:"inline-block"}:void 0:1===t.length&&null!=n?e[t[0]]:Object.assign(null!=n?{display:"inline-block"}:{},...t.map((t=>e[t])))}),[e]);return(0,r.useCallback)((e=>{var n=e,{token:r,className:o,style:i}=n,s=_(n,["token","className","style"]);const l=x(S({},s),{className:a("token",...r.types,o),children:r.content,style:t(r)});return null!=i&&(l.style=S(S({},l.style||{}),i)),l}),[t])})(l),d=(({prism:e,code:t,grammar:n,language:o})=>{const a=(0,r.useRef)(e);return(0,r.useMemo)((()=>{if(null==n)return K([t]);const e={code:t,grammar:n,language:o,tokens:[]};return a.current.hooks.run("before-tokenize",e),e.tokens=a.current.tokenize(t,n),a.current.hooks.run("after-tokenize",e),K(e.tokens)}),[t,n,o])})({prism:i,language:s,code:n,grammar:i.languages[s]});return e({tokens:d,className:`prism-code language-${s}`,style:null!=l?l.root:{},getLineProps:c,getTokenProps:u})},J=e=>(0,r.createElement)(X,x(S({},e),{prism:e.prism||O,theme:e.theme||U,code:e.code,language:e.language}))},38776:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=!0,o="Invariant failed";function a(e,t){if(!e){if(r)throw new Error(o);var n="function"==typeof t?t():t,a=n?"".concat(o,": ").concat(n):o;throw new Error(a)}}},57529:e=>{"use strict";e.exports=JSON.parse('{"cmfcmf/d-s-l.searchBar.placeholder":"Search...","cmfcmf/d-s-l.searchBar.noResults":"No results found.","cmfcmf/d-s-l.searchBar.clearButtonTitle":"Clear","cmfcmf/d-s-l.searchBar.detachedCancelButtonText":"Cancel","cmfcmf/d-s-l.searchBar.submitButtonTitle":"Submit","edition.budgie.description":"A feature-rich, luxurious desktop using the most modern technologies.","edition.plasma.description":"A sophisticated desktop experience for the tinkerers. Simple by default, powerful when needed.","edition.gnome.description":"A simple, streamlined desktop for more modern hardware.","edition.mate.description":"A traditional desktop for advanced users and older hardware.","edition.xfce.description":"A lightweight desktop that aims to be fast while still being friendly.","edition.card.configuration":"Configuration","edition.card.tipsntricks":"Tips & Tricks","theme.ErrorPageContent.title":"This page crashed.","theme.NotFound.title":"Page Not Found","theme.NotFound.p1":"We could not find what you were looking for.","theme.NotFound.p2":"Please contact the owner of the site that linked you to the original URL and let them know their link is broken.","theme.admonition.note":"note","theme.admonition.tip":"tip","theme.admonition.danger":"danger","theme.admonition.info":"info","theme.admonition.caution":"caution","theme.BackToTopButton.buttonAriaLabel":"Scroll back to top","theme.blog.archive.title":"Archive","theme.blog.archive.description":"Archive","theme.blog.paginator.navAriaLabel":"Blog list page navigation","theme.blog.paginator.newerEntries":"Newer Entries","theme.blog.paginator.olderEntries":"Older Entries","theme.blog.post.paginator.navAriaLabel":"Blog post page navigation","theme.blog.post.paginator.newerPost":"Newer Post","theme.blog.post.paginator.olderPost":"Older Post","theme.blog.post.plurals":"One post|{count} posts","theme.blog.tagTitle":"{nPosts} tagged with \\"{tagName}\\"","theme.tags.tagsPageLink":"View All Tags","theme.colorToggle.ariaLabel":"Switch between dark and light mode (currently {mode})","theme.colorToggle.ariaLabel.mode.dark":"dark mode","theme.colorToggle.ariaLabel.mode.light":"light mode","theme.docs.breadcrumbs.navAriaLabel":"Breadcrumbs","theme.docs.DocCard.categoryDescription":"{count} items","theme.docs.paginator.navAriaLabel":"Docs pages","theme.docs.paginator.previous":"Previous","theme.docs.paginator.next":"Next","theme.docs.tagDocListPageTitle.nDocsTagged":"One doc tagged|{count} docs tagged","theme.docs.tagDocListPageTitle":"{nDocsTagged} with \\"{tagName}\\"","theme.docs.versionBadge.label":"Version: {versionLabel}","theme.docs.versions.unreleasedVersionLabel":"This is unreleased documentation for {siteTitle} {versionLabel} version.","theme.docs.versions.unmaintainedVersionLabel":"This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained.","theme.docs.versions.latestVersionSuggestionLabel":"For up-to-date documentation, see the {latestVersionLink} ({versionLabel}).","theme.docs.versions.latestVersionLinkLabel":"latest version","theme.common.editThisPage":"Edit this page","theme.common.headingLinkTitle":"Direct link to {heading}","theme.lastUpdated.atDate":" on {date}","theme.lastUpdated.byUser":" by {user}","theme.lastUpdated.lastUpdatedAtBy":"Last updated{atDate}{byUser}","theme.navbar.mobileVersionsDropdown.label":"Versions","theme.tags.tagsListLabel":"Tags:","theme.AnnouncementBar.closeButtonAriaLabel":"Close","theme.blog.sidebar.navAriaLabel":"Blog recent posts navigation","theme.CodeBlock.copied":"Copied","theme.CodeBlock.copyButtonAriaLabel":"Copy code to clipboard","theme.CodeBlock.copy":"Copy","theme.CodeBlock.wordWrapToggle":"Toggle word wrap","theme.DocSidebarItem.toggleCollapsedCategoryAriaLabel":"Toggle the collapsible sidebar category \'{label}\'","theme.NavBar.navAriaLabel":"Main","theme.navbar.mobileLanguageDropdown.label":"Languages","theme.TOCCollapsible.toggleButtonLabel":"On this page","theme.blog.post.readMore":"Read More","theme.blog.post.readMoreLabel":"Read more about {title}","theme.blog.post.readingTime.plurals":"One min read|{readingTime} min read","theme.docs.breadcrumbs.home":"Home page","theme.docs.sidebar.collapseButtonTitle":"Collapse sidebar","theme.docs.sidebar.collapseButtonAriaLabel":"Collapse sidebar","theme.docs.sidebar.navAriaLabel":"Docs sidebar","theme.docs.sidebar.closeSidebarButtonAriaLabel":"Close navigation bar","theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel":"\u2190 Back to main menu","theme.docs.sidebar.toggleSidebarButtonAriaLabel":"Toggle navigation bar","theme.docs.sidebar.expandButtonTitle":"Expand sidebar","theme.docs.sidebar.expandButtonAriaLabel":"Expand sidebar","theme.IdealImageMessage.loading":"Loading...","theme.IdealImageMessage.load":"Click to load{sizeMessage}","theme.IdealImageMessage.offline":"Your browser is offline. Image not loaded","theme.IdealImageMessage.404error":"404. Image not found","theme.IdealImageMessage.error":"Error. Click to reload","theme.ErrorPageContent.tryAgain":"Try again","theme.common.skipToMainContent":"Skip to main content","theme.tags.tagsPageTitle":"Tags","edition.card.image":"Screenshot of {name} edition"}')},16887:e=>{"use strict";e.exports=JSON.parse('{"/blog-c23":{"__comp":"a6aa9e1f","__context":{"plugin":"109d511c"},"sidebar":"814f3328","items":[{"content":"424f562c"},{"content":"ecdeb26c"},{"content":"418a6276"},{"content":"a52026b8"}],"metadata":"b2b675dd"},"/blog/archive-f12":{"__comp":"9e4087bc","__context":{"plugin":"109d511c"},"archive":"b2f554cd"},"/blog/dont-call-me-mate-pal-c62":{"__comp":"ccc49370","__context":{"data":{"blogMetadata":"acecf23e"},"plugin":"109d511c"},"sidebar":"814f3328","content":"4802fa93"},"/blog/eopkg-is-dead-long-live-eopkg-40f":{"__comp":"ccc49370","__context":{"data":{"blogMetadata":"acecf23e"},"plugin":"109d511c"},"sidebar":"814f3328","content":"8d193990"},"/blog/solus-optimizing-packages-323":{"__comp":"ccc49370","__context":{"data":{"blogMetadata":"acecf23e"},"plugin":"109d511c"},"sidebar":"814f3328","content":"72054e31"},"/blog/tags-9e5":{"__comp":"01a85c17","__context":{"plugin":"109d511c"},"sidebar":"814f3328","tags":"a7023ddc"},"/blog/tags/3-1c1":{"__comp":"6875c492","__context":{"plugin":"109d511c"},"sidebar":"814f3328","items":[{"content":"424f562c"}],"tag":"7e68a92e","listMetadata":"2a7fbffb"},"/blog/tags/clang-477":{"__comp":"6875c492","__context":{"plugin":"109d511c"},"sidebar":"814f3328","items":[{"content":"424f562c"}],"tag":"d817f3ef","listMetadata":"79ac1368"},"/blog/tags/devlog-c1e":{"__comp":"6875c492","__context":{"plugin":"109d511c"},"sidebar":"814f3328","items":[{"content":"ecdeb26c"},{"content":"418a6276"},{"content":"a52026b8"}],"tag":"4570a037","listMetadata":"8a038edf"},"/blog/tags/eopkg-d15":{"__comp":"6875c492","__context":{"plugin":"109d511c"},"sidebar":"814f3328","items":[{"content":"418a6276"}],"tag":"9c593943","listMetadata":"6cfdd309"},"/blog/tags/firstpost-494":{"__comp":"6875c492","__context":{"plugin":"109d511c"},"sidebar":"814f3328","items":[{"content":"a52026b8"}],"tag":"cb6b48ec","listMetadata":"b44cea7d"},"/blog/tags/glibc-9d8":{"__comp":"6875c492","__context":{"plugin":"109d511c"},"sidebar":"814f3328","items":[{"content":"424f562c"}],"tag":"cde788f0","listMetadata":"57b995c1"},"/blog/tags/gnu-239":{"__comp":"6875c492","__context":{"plugin":"109d511c"},"sidebar":"814f3328","items":[{"content":"424f562c"}],"tag":"042222b7","listMetadata":"4d0779a0"},"/blog/tags/hello-66a":{"__comp":"6875c492","__context":{"plugin":"109d511c"},"sidebar":"814f3328","items":[{"content":"a52026b8"}],"tag":"30a24c52","listMetadata":"66406991"},"/blog/tags/hwcaps-a36":{"__comp":"6875c492","__context":{"plugin":"109d511c"},"sidebar":"814f3328","items":[{"content":"424f562c"}],"tag":"ffe4d879","listMetadata":"59804d2a"},"/blog/tags/llvm-239":{"__comp":"6875c492","__context":{"plugin":"109d511c"},"sidebar":"814f3328","items":[{"content":"424f562c"}],"tag":"287b5a0f","listMetadata":"76f543fe"},"/blog/tags/lto-f28":{"__comp":"6875c492","__context":{"plugin":"109d511c"},"sidebar":"814f3328","items":[{"content":"424f562c"}],"tag":"11b387c8","listMetadata":"b0fe077f"},"/blog/tags/mate-5ac":{"__comp":"6875c492","__context":{"plugin":"109d511c"},"sidebar":"814f3328","items":[{"content":"ecdeb26c"}],"tag":"529038c2","listMetadata":"703776e7"},"/blog/tags/moss-c62":{"__comp":"6875c492","__context":{"plugin":"109d511c"},"sidebar":"814f3328","items":[{"content":"418a6276"}],"tag":"81f578fd","listMetadata":"e11848e1"},"/blog/tags/optimization-edf":{"__comp":"6875c492","__context":{"plugin":"109d511c"},"sidebar":"814f3328","items":[{"content":"424f562c"}],"tag":"8f3b2f9d","listMetadata":"393e2f44"},"/blog/tags/packaging-7e3":{"__comp":"6875c492","__context":{"plugin":"109d511c"},"sidebar":"814f3328","items":[{"content":"424f562c"}],"tag":"c7b6dda1","listMetadata":"4f4f8e43"},"/blog/tags/pgo-fec":{"__comp":"6875c492","__context":{"plugin":"109d511c"},"sidebar":"814f3328","items":[{"content":"424f562c"}],"tag":"86417241","listMetadata":"29788ff6"},"/blog/tags/solus-41c":{"__comp":"6875c492","__context":{"plugin":"109d511c"},"sidebar":"814f3328","items":[{"content":"424f562c"},{"content":"ecdeb26c"},{"content":"418a6276"},{"content":"a52026b8"}],"tag":"307dbfd9","listMetadata":"4d1ac072"},"/blog/tags/x-86-64-v-3-ce8":{"__comp":"6875c492","__context":{"plugin":"109d511c"},"sidebar":"814f3328","items":[{"content":"424f562c"}],"tag":"70838ee1","listMetadata":"a2035002"},"/blog/welcome-solus-devlog-v1-9ae":{"__comp":"ccc49370","__context":{"data":{"blogMetadata":"acecf23e"},"plugin":"109d511c"},"sidebar":"814f3328","content":"f35b91b6"},"/docs-478":{"__comp":"5e95c892","__context":{"plugin":"e6b730ee"}},"/docs-d96":{"__comp":"a7bd4aaa","version":"935f2afb"},"/docs-4b7":{"__comp":"a94703ab"},"/docs/category/advanced-configuration-067":{"__comp":"14eb3368","categoryGeneratedIndex":"c83790d5"},"/docs/category/camera-062":{"__comp":"14eb3368","categoryGeneratedIndex":"cd144304"},"/docs/category/compatibility-745":{"__comp":"14eb3368","categoryGeneratedIndex":"a70a81b4"},"/docs/category/contributing-069":{"__comp":"14eb3368","categoryGeneratedIndex":"fed8ce91"},"/docs/category/localization-b0c":{"__comp":"14eb3368","categoryGeneratedIndex":"c30932c8"},"/docs/category/mobile-7d4":{"__comp":"14eb3368","categoryGeneratedIndex":"da539e45"},"/docs/category/networking-edb":{"__comp":"14eb3368","categoryGeneratedIndex":"db847870"},"/docs/category/package-management-7f4":{"__comp":"14eb3368","categoryGeneratedIndex":"ec9a4674"},"/docs/category/peripherals-04b":{"__comp":"14eb3368","categoryGeneratedIndex":"a0baa67f"},"/docs/category/procedures-dd2":{"__comp":"14eb3368","categoryGeneratedIndex":"d0e18f29"},"/docs/category/quick-start-9ec":{"__comp":"14eb3368","categoryGeneratedIndex":"631f4b15"},"/docs/category/software-c71":{"__comp":"14eb3368","categoryGeneratedIndex":"042d98a6"},"/docs/category/utilities-bed":{"__comp":"14eb3368","categoryGeneratedIndex":"06b3584f"},"/docs/category/virtualization-432":{"__comp":"14eb3368","categoryGeneratedIndex":"e747afee"},"/docs/category/web-057":{"__comp":"14eb3368","categoryGeneratedIndex":"1a5bd866"},"/docs/packaging/-fda":{"__comp":"17896441","content":"04b18502"},"/docs/packaging/advanced-config/eopkg-configuration-ace":{"__comp":"17896441","content":"dabd6b33"},"/docs/packaging/advanced-config/local-repository-ce8":{"__comp":"17896441","content":"8490a22d"},"/docs/packaging/creating-a-new-package-33c":{"__comp":"17896441","content":"c5de29d4"},"/docs/packaging/git-basics-0c1":{"__comp":"17896441","content":"5b7f3753"},"/docs/packaging/monitoring.yml-ef2":{"__comp":"17896441","content":"080a8349"},"/docs/packaging/package.yml-642":{"__comp":"17896441","content":"3ff05326"},"/docs/packaging/packaging-changes-a22":{"__comp":"17896441","content":"c55c138b"},"/docs/packaging/packaging-practices-45d":{"__comp":"17896441","content":"49b71c16"},"/docs/packaging/prepare-for-packaging-d0a":{"__comp":"17896441","content":"513b6405"},"/docs/packaging/procedures/maintainership-a9a":{"__comp":"17896441","content":"61c953b4"},"/docs/packaging/procedures/package-inclusion-d43":{"__comp":"17896441","content":"cca891e2"},"/docs/packaging/procedures/release-processes-c1f":{"__comp":"17896441","content":"d0d2faf6"},"/docs/packaging/procedures/request-a-package-5db":{"__comp":"17896441","content":"8e861970"},"/docs/packaging/procedures/request-a-package-update-517":{"__comp":"17896441","content":"97c623e4"},"/docs/packaging/submitting-a-pull-request-ca5":{"__comp":"17896441","content":"26308ea3"},"/docs/packaging/testing-a-package-04f":{"__comp":"17896441","content":"45e9d313"},"/docs/packaging/translation-instructions-135":{"__comp":"17896441","content":"ce4855c1"},"/docs/packaging/update-dev-environment-66c":{"__comp":"17896441","content":"be79d003"},"/docs/packaging/updating-an-existing-package-67e":{"__comp":"17896441","content":"0b254e3a"},"/docs/packaging/your-first-package-update-4e3":{"__comp":"17896441","content":"d00f7e62"},"/docs/user/contributing/community-guidelines-a58":{"__comp":"17896441","content":"5f194406"},"/docs/user/contributing/getting-involved-919":{"__comp":"17896441","content":"7a24477a"},"/docs/user/contributing/style-34f":{"__comp":"17896441","content":"6873f895"},"/docs/user/contributing/testing-an-iso-4f3":{"__comp":"17896441","content":"0e862883"},"/docs/user/editions/-16d":{"__comp":"17896441","content":"1a698c37"},"/docs/user/editions/budgie/-65e":{"__comp":"17896441","content":"f4aa4739"},"/docs/user/editions/budgie/configuration-965":{"__comp":"17896441","content":"c9c1a3f4"},"/docs/user/editions/budgie/tips-and-tricks-c96":{"__comp":"17896441","content":"a05bfad9"},"/docs/user/editions/gnome/-2ed":{"__comp":"17896441","content":"fb8d634e"},"/docs/user/editions/gnome/configuration-b6a":{"__comp":"17896441","content":"fb6dc457"},"/docs/user/editions/gnome/tips-and-tricks-dbd":{"__comp":"17896441","content":"b4302412"},"/docs/user/editions/mate/-718":{"__comp":"17896441","content":"2b61a93c"},"/docs/user/editions/mate/configuration-bc1":{"__comp":"17896441","content":"2598a3a5"},"/docs/user/editions/mate/tips-and-tricks-7a1":{"__comp":"17896441","content":"f1d13e1b"},"/docs/user/editions/plasma/-097":{"__comp":"17896441","content":"0e3c5e6b"},"/docs/user/editions/plasma/configuration-7f2":{"__comp":"17896441","content":"cec10a63"},"/docs/user/editions/plasma/tips-and-tricks-c8c":{"__comp":"17896441","content":"2a37c7d8"},"/docs/user/editions/xfce/-a73":{"__comp":"17896441","content":"ab89b7a6"},"/docs/user/editions/xfce/configuration-2a0":{"__comp":"17896441","content":"5685b4d8"},"/docs/user/editions/xfce/tips-and-tricks-aaf":{"__comp":"17896441","content":"75c41d11"},"/docs/user/hardware/-4a1":{"__comp":"17896441","content":"99bedda9"},"/docs/user/hardware/compatibility/laptops-315":{"__comp":"17896441","content":"be4ac66b"},"/docs/user/hardware/compatibility/wifi-a67":{"__comp":"17896441","content":"9485dea6"},"/docs/user/hardware/mobile/android-e20":{"__comp":"17896441","content":"ec4e4367"},"/docs/user/hardware/mobile/apple-05e":{"__comp":"17896441","content":"a398ef57"},"/docs/user/hardware/peripherals/mice-and-touchpads-049":{"__comp":"17896441","content":"96af6484"},"/docs/user/hardware/peripherals/midi-keyboard-2c9":{"__comp":"17896441","content":"f6faa2b4"},"/docs/user/hardware/peripherals/printers-and-scanners-0d0":{"__comp":"17896441","content":"38920c38"},"/docs/user/intro-b6f":{"__comp":"17896441","content":"6787574e"},"/docs/user/package-management/basics-979":{"__comp":"17896441","content":"3fdfc7ff"},"/docs/user/package-management/history-and-rollback-8f6":{"__comp":"17896441","content":"1ae709a2"},"/docs/user/package-management/repo-management-c5d":{"__comp":"17896441","content":"46a65d96"},"/docs/user/privacy-fdb":{"__comp":"17896441","content":"08bef15d"},"/docs/user/quick-start/boot-management-5bc":{"__comp":"17896441","content":"e5595530"},"/docs/user/quick-start/default-applications-46b":{"__comp":"17896441","content":"14488e92"},"/docs/user/quick-start/installation/-e26":{"__comp":"17896441","content":"533eefa9"},"/docs/user/quick-start/installation/disks-d1b":{"__comp":"17896441","content":"2c3e84bd"},"/docs/user/quick-start/installation/secure-boot-7ce":{"__comp":"17896441","content":"f4c9601b"},"/docs/user/quick-start/installation/system-requirements-e9f":{"__comp":"17896441","content":"2a34ce22"},"/docs/user/quick-start/software-center/-6b3":{"__comp":"17896441","content":"ed2a5927"},"/docs/user/software/camera/droidcam-b60":{"__comp":"17896441","content":"baa66232"},"/docs/user/software/command-line/-f08":{"__comp":"17896441","content":"793c86b2"},"/docs/user/software/configuration_files-dab":{"__comp":"17896441","content":"eb074ba1"},"/docs/user/software/desktops/-eaa":{"__comp":"17896441","content":"21944812"},"/docs/user/software/development/-424":{"__comp":"17896441","content":"64699048"},"/docs/user/software/development/containers-d70":{"__comp":"17896441","content":"257b9082"},"/docs/user/software/development/java-124":{"__comp":"17896441","content":"baf1b6e8"},"/docs/user/software/development/postgresql-2b9":{"__comp":"17896441","content":"f8dd8223"},"/docs/user/software/development/r-and-rstudio-b15":{"__comp":"17896441","content":"fc733b73"},"/docs/user/software/development/rust-b6a":{"__comp":"17896441","content":"8e886580"},"/docs/user/software/development/web-7d9":{"__comp":"17896441","content":"947d9ca4"},"/docs/user/software/gaming/-703":{"__comp":"17896441","content":"9284d474"},"/docs/user/software/localization/ibus-82f":{"__comp":"17896441","content":"8e3d5b32"},"/docs/user/software/networking/samba-238":{"__comp":"17896441","content":"2609550e"},"/docs/user/software/networking/tigervnc-333":{"__comp":"17896441","content":"6cfe09a0"},"/docs/user/software/networking/wireshark-398":{"__comp":"17896441","content":"7e4100d6"},"/docs/user/software/networking/xrdp-f59":{"__comp":"17896441","content":"a9e19215"},"/docs/user/software/sound/-343":{"__comp":"17896441","content":"ddc41e4a"},"/docs/user/software/third-party/-e94":{"__comp":"17896441","content":"41a4de91"},"/docs/user/software/utilities/ksysguard-ac6":{"__comp":"17896441","content":"528b6a6b"},"/docs/user/software/utilities/kwallet-7af":{"__comp":"17896441","content":"88a83a8c"},"/docs/user/software/virtualization/virtualbox-876":{"__comp":"17896441","content":"74470af4"},"/docs/user/software/web/obs-fe6":{"__comp":"17896441","content":"f0629c21"},"/docs/user/troubleshooting/-b50":{"__comp":"17896441","content":"2b4abe09"},"/docs/user/troubleshooting/boot-rescue-d86":{"__comp":"17896441","content":"09dbd43b"},"/docs/user/troubleshooting/installation-c7c":{"__comp":"17896441","content":"d4762887"},"/docs/user/troubleshooting/plasma-5be":{"__comp":"17896441","content":"d5670106"},"/-9ba":{"__comp":"1df93b7f","__context":{"plugin":"7a9ac8db"},"config":"5e9f5e1a"}}')}},e=>{e.O(0,[532],(()=>{return t=28337,e(e.s=t);var t}));e.O()}]);
\ No newline at end of file
diff --git a/assets/js/main.8dd9c2c5.js.LICENSE.txt b/assets/js/main.2e2ca29e.js.LICENSE.txt
similarity index 100%
rename from assets/js/main.8dd9c2c5.js.LICENSE.txt
rename to assets/js/main.2e2ca29e.js.LICENSE.txt
diff --git a/assets/js/main.8dd9c2c5.js b/assets/js/main.8dd9c2c5.js
deleted file mode 100644
index 595c3efc5..000000000
--- a/assets/js/main.8dd9c2c5.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/*! For license information please see main.8dd9c2c5.js.LICENSE.txt */
-(self.webpackChunksolus_help_center=self.webpackChunksolus_help_center||[]).push([[179],{78179:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});n(67294);var r=n(68356),o=n.n(r),a=n(16887);const i={"01a85c17":[()=>Promise.all([n.e(532),n.e(4013)]).then(n.bind(n,85539)),"@theme/BlogTagsListPage",85539],"042222b7":[()=>n.e(6003).then(n.t.bind(n,99026,19)),"~blog/default/blog-tags-gnu-46e.json",99026],"042d98a6":[()=>n.e(5093).then(n.t.bind(n,72334,19)),"~docs/default/category-docs-usersidebar-category-software-e55.json",72334],"04b18502":[()=>n.e(1942).then(n.bind(n,51872)),"@site/docs/packaging/index.md",51872],"06b3584f":[()=>n.e(7876).then(n.t.bind(n,13909,19)),"~docs/default/category-docs-usersidebar-category-utilities-737.json",13909],"080a8349":[()=>n.e(224).then(n.bind(n,59256)),"@site/docs/packaging/monitoring.yml.md",59256],"08bef15d":[()=>n.e(7228).then(n.bind(n,87479)),"@site/docs/user/privacy.md",87479],"09dbd43b":[()=>n.e(9397).then(n.bind(n,54152)),"@site/docs/user/troubleshooting/boot-rescue.md",54152],"0b254e3a":[()=>n.e(6726).then(n.bind(n,2604)),"@site/docs/packaging/updating-an-existing-package.md",2604],"0e3c5e6b":[()=>n.e(4859).then(n.bind(n,24109)),"@site/docs/user/editions/plasma/index.md",24109],"0e862883":[()=>n.e(172).then(n.bind(n,56087)),"@site/docs/user/contributing/testing-an-iso.md",56087],"109d511c":[()=>n.e(5135).then(n.t.bind(n,24469,19)),"/home/runner/work/help-center-docs/help-center-docs/.docusaurus/docusaurus-plugin-content-blog/default/plugin-route-context-module-100.json",24469],"11b387c8":[()=>n.e(4548).then(n.t.bind(n,4926,19)),"~blog/default/blog-tags-lto-66d.json",4926],"14488e92":[()=>n.e(4815).then(n.bind(n,83474)),"@site/docs/user/quick-start/default-applications.md",83474],"14eb3368":[()=>Promise.all([n.e(532),n.e(9817)]).then(n.bind(n,10587)),"@theme/DocCategoryGeneratedIndexPage",10587],17896441:[()=>Promise.all([n.e(532),n.e(2416),n.e(7918)]).then(n.bind(n,28634)),"@theme/DocItem",28634],"1a5bd866":[()=>n.e(7180).then(n.t.bind(n,99758,19)),"~docs/default/category-docs-usersidebar-category-web-586.json",99758],"1a698c37":[()=>Promise.all([n.e(3323),n.e(8917),n.e(6126)]).then(n.bind(n,40619)),"@site/docs/user/editions/index.mdx",40619],"1ae709a2":[()=>n.e(355).then(n.bind(n,37718)),"@site/docs/user/package-management/history-and-rollback.md",37718],"1df93b7f":[()=>Promise.all([n.e(3323),n.e(3237)]).then(n.bind(n,20780)),"@site/src/pages/index.tsx",20780],21944812:[()=>n.e(9873).then(n.bind(n,30836)),"@site/docs/user/software/desktops/index.md",30836],"257b9082":[()=>n.e(3192).then(n.bind(n,74382)),"@site/docs/user/software/development/containers.md",74382],"2598a3a5":[()=>n.e(5951).then(n.bind(n,81529)),"@site/docs/user/editions/mate/configuration.md",81529],"2609550e":[()=>n.e(3206).then(n.bind(n,65565)),"@site/docs/user/software/networking/samba.md",65565],"26308ea3":[()=>Promise.all([n.e(532),n.e(2416),n.e(6485)]).then(n.bind(n,49160)),"@site/docs/packaging/submitting-a-pull-request.mdx",49160],"287b5a0f":[()=>n.e(613).then(n.t.bind(n,98232,19)),"~blog/default/blog-tags-llvm-224.json",98232],"29788ff6":[()=>n.e(7609).then(n.t.bind(n,59490,19)),"~blog/default/blog-tags-pgo-223-list.json",59490],"2a34ce22":[()=>n.e(6074).then(n.bind(n,2314)),"@site/docs/user/quick-start/installation/system-requirements.md",2314],"2a37c7d8":[()=>n.e(9995).then(n.bind(n,85501)),"@site/docs/user/editions/plasma/tips-and-tricks.md",85501],"2a7fbffb":[()=>n.e(3119).then(n.t.bind(n,74049,19)),"~blog/default/blog-tags-3-b6c-list.json",74049],"2b4abe09":[()=>n.e(2413).then(n.bind(n,55717)),"@site/docs/user/troubleshooting/index.md",55717],"2b61a93c":[()=>n.e(9897).then(n.bind(n,47560)),"@site/docs/user/editions/mate/index.md",47560],"2c3e84bd":[()=>n.e(8157).then(n.bind(n,89541)),"@site/docs/user/quick-start/installation/disks.md",89541],"307dbfd9":[()=>n.e(485).then(n.t.bind(n,12081,19)),"~blog/default/blog-tags-solus-d3b.json",12081],"30a24c52":[()=>n.e(453).then(n.t.bind(n,98605,19)),"~blog/default/blog-tags-hello-039.json",98605],"38920c38":[()=>n.e(5481).then(n.bind(n,98585)),"@site/docs/user/hardware/peripherals/printers-and-scanners.md",98585],"393e2f44":[()=>n.e(7856).then(n.t.bind(n,27328,19)),"~blog/default/blog-tags-optimization-29d-list.json",27328],"3fdfc7ff":[()=>n.e(4608).then(n.bind(n,15343)),"@site/docs/user/package-management/basics.md",15343],"3ff05326":[()=>n.e(2775).then(n.bind(n,31333)),"@site/docs/packaging/package.yml.md",31333],"418a6276":[()=>n.e(6160).then(n.bind(n,71697)),"@site/devlog/2024-01-19-eopkg-is-dead.md?truncated=true",71697],"41a4de91":[()=>n.e(7682).then(n.bind(n,67913)),"@site/docs/user/software/third-party/index.md",67913],"424f562c":[()=>n.e(3122).then(n.bind(n,15054)),"@site/devlog/2024-02-09-Intro-to-optimizing-packages-on-solus.md?truncated=true",15054],"4570a037":[()=>n.e(5460).then(n.t.bind(n,47829,19)),"~blog/default/blog-tags-devlog-6a1.json",47829],"45e9d313":[()=>n.e(6114).then(n.bind(n,7415)),"@site/docs/packaging/testing-a-package.md",7415],"46a65d96":[()=>n.e(8092).then(n.bind(n,1907)),"@site/docs/user/package-management/repo-management.md",1907],"4802fa93":[()=>n.e(1774).then(n.bind(n,48815)),"@site/devlog/2024-01-29-dont-call-me-mate.md",48815],"49b71c16":[()=>n.e(3783).then(n.bind(n,73384)),"@site/docs/packaging/packaging-practices.md",73384],"4d0779a0":[()=>n.e(5103).then(n.t.bind(n,44860,19)),"~blog/default/blog-tags-gnu-46e-list.json",44860],"4d1ac072":[()=>n.e(2920).then(n.t.bind(n,88107,19)),"~blog/default/blog-tags-solus-d3b-list.json",88107],"4f4f8e43":[()=>n.e(5749).then(n.t.bind(n,77499,19)),"~blog/default/blog-tags-packaging-d86-list.json",77499],"513b6405":[()=>n.e(4278).then(n.bind(n,75081)),"@site/docs/packaging/prepare-for-packaging.md",75081],"528b6a6b":[()=>n.e(7822).then(n.bind(n,48222)),"@site/docs/user/software/utilities/ksysguard.md",48222],"529038c2":[()=>n.e(8371).then(n.t.bind(n,32179,19)),"~blog/default/blog-tags-mate-3bd.json",32179],"533eefa9":[()=>n.e(4002).then(n.bind(n,73112)),"@site/docs/user/quick-start/installation/index.md",73112],"5685b4d8":[()=>n.e(1540).then(n.bind(n,28594)),"@site/docs/user/editions/xfce/configuration.md",28594],"57b995c1":[()=>n.e(6322).then(n.t.bind(n,55249,19)),"~blog/default/blog-tags-glibc-a93-list.json",55249],"59804d2a":[()=>n.e(9097).then(n.t.bind(n,51668,19)),"~blog/default/blog-tags-hwcaps-d19-list.json",51668],"5b7f3753":[()=>n.e(6413).then(n.bind(n,17754)),"@site/docs/packaging/git-basics.md",17754],"5e95c892":[()=>n.e(9661).then(n.bind(n,14399)),"@theme/DocsRoot",14399],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,36809)),"@generated/docusaurus.config",36809],"5f194406":[()=>n.e(7607).then(n.bind(n,48230)),"@site/docs/user/contributing/community-guidelines.md",48230],"61c953b4":[()=>n.e(8032).then(n.bind(n,49578)),"@site/docs/packaging/procedures/maintainership.md",49578],"631f4b15":[()=>n.e(3203).then(n.t.bind(n,79073,19)),"~docs/default/category-docs-usersidebar-category-quick-start-776.json",79073],64699048:[()=>n.e(2151).then(n.bind(n,56259)),"@site/docs/user/software/development/index.md",56259],66406991:[()=>n.e(110).then(n.t.bind(n,70711,19)),"~blog/default/blog-tags-hello-039-list.json",70711],"6787574e":[()=>n.e(4500).then(n.bind(n,29852)),"@site/docs/user/intro.md",29852],"6873f895":[()=>n.e(8849).then(n.bind(n,18733)),"@site/docs/user/contributing/style.md",18733],"6875c492":[()=>Promise.all([n.e(532),n.e(2416),n.e(4268),n.e(8610)]).then(n.bind(n,23966)),"@theme/BlogTagsPostsPage",23966],"6cfdd309":[()=>n.e(2535).then(n.t.bind(n,49617,19)),"~blog/default/blog-tags-eopkg-3ac-list.json",49617],"6cfe09a0":[()=>n.e(1174).then(n.bind(n,49134)),"@site/docs/user/software/networking/tigervnc.md",49134],"703776e7":[()=>n.e(220).then(n.t.bind(n,43294,19)),"~blog/default/blog-tags-mate-3bd-list.json",43294],"70838ee1":[()=>n.e(8216).then(n.t.bind(n,32112,19)),"~blog/default/blog-tags-x-86-64-v-3-793.json",32112],"72054e31":[()=>n.e(7135).then(n.bind(n,83888)),"@site/devlog/2024-02-09-Intro-to-optimizing-packages-on-solus.md",83888],"74470af4":[()=>n.e(1896).then(n.bind(n,97588)),"@site/docs/user/software/virtualization/virtualbox.md",97588],"75c41d11":[()=>n.e(3337).then(n.bind(n,32559)),"@site/docs/user/editions/xfce/tips-and-tricks.md",32559],"76f543fe":[()=>n.e(8308).then(n.t.bind(n,99511,19)),"~blog/default/blog-tags-llvm-224-list.json",99511],"793c86b2":[()=>n.e(168).then(n.bind(n,36891)),"@site/docs/user/software/command-line/index.md",36891],"79ac1368":[()=>n.e(5413).then(n.t.bind(n,68723,19)),"~blog/default/blog-tags-clang-b6e-list.json",68723],"7a24477a":[()=>n.e(9135).then(n.bind(n,44642)),"@site/docs/user/contributing/getting-involved.md",44642],"7a9ac8db":[()=>n.e(5175).then(n.t.bind(n,15745,19)),"/home/runner/work/help-center-docs/help-center-docs/.docusaurus/docusaurus-plugin-content-pages/default/plugin-route-context-module-100.json",15745],"7e4100d6":[()=>n.e(6990).then(n.bind(n,93791)),"@site/docs/user/software/networking/wireshark.md",93791],"7e68a92e":[()=>n.e(3779).then(n.t.bind(n,54716,19)),"~blog/default/blog-tags-3-b6c.json",54716],"814f3328":[()=>n.e(4631).then(n.t.bind(n,45641,19)),"~blog/default/blog-post-list-prop-default.json",45641],"81f578fd":[()=>n.e(2461).then(n.t.bind(n,26015,19)),"~blog/default/blog-tags-moss-0ed.json",26015],"8490a22d":[()=>n.e(8575).then(n.bind(n,27781)),"@site/docs/packaging/advanced-config/local-repository.md",27781],86417241:[()=>n.e(2033).then(n.t.bind(n,93806,19)),"~blog/default/blog-tags-pgo-223.json",93806],"88a83a8c":[()=>n.e(1242).then(n.bind(n,83269)),"@site/docs/user/software/utilities/kwallet.md",83269],"8a038edf":[()=>n.e(6610).then(n.t.bind(n,72142,19)),"~blog/default/blog-tags-devlog-6a1-list.json",72142],"8d193990":[()=>n.e(1539).then(n.bind(n,5436)),"@site/devlog/2024-01-19-eopkg-is-dead.md",5436],"8e3d5b32":[()=>n.e(8499).then(n.bind(n,95475)),"@site/docs/user/software/localization/ibus.md",95475],"8e861970":[()=>n.e(8026).then(n.bind(n,17066)),"@site/docs/packaging/procedures/request-a-package.md",17066],"8e886580":[()=>n.e(4978).then(n.bind(n,58508)),"@site/docs/user/software/development/rust.md",58508],"8f3b2f9d":[()=>n.e(3234).then(n.t.bind(n,44666,19)),"~blog/default/blog-tags-optimization-29d.json",44666],"9284d474":[()=>n.e(7626).then(n.bind(n,39842)),"@site/docs/user/software/gaming/index.md",39842],"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,32810)),"@site/docs/user/software/development/web.md",32810],"9485dea6":[()=>n.e(2358).then(n.bind(n,88132)),"@site/docs/user/hardware/compatibility/wifi.md",88132],"96af6484":[()=>n.e(6225).then(n.bind(n,28936)),"@site/docs/user/hardware/peripherals/mice-and-touchpads.md",28936],"97c623e4":[()=>n.e(6427).then(n.bind(n,85870)),"@site/docs/packaging/procedures/request-a-package-update.md",85870],"99bedda9":[()=>n.e(8639).then(n.bind(n,24065)),"@site/docs/user/hardware/index.md",24065],"9c593943":[()=>n.e(1965).then(n.t.bind(n,62503,19)),"~blog/default/blog-tags-eopkg-3ac.json",62503],"9e4087bc":[()=>n.e(3608).then(n.bind(n,8635)),"@theme/BlogArchivePage",8635],a05bfad9:[()=>n.e(885).then(n.bind(n,94369)),"@site/docs/user/editions/budgie/tips-and-tricks.md",94369],a0baa67f:[()=>n.e(8149).then(n.t.bind(n,95307,19)),"~docs/default/category-docs-usersidebar-category-peripherals-aa8.json",95307],a2035002:[()=>n.e(641).then(n.t.bind(n,74867,19)),"~blog/default/blog-tags-x-86-64-v-3-793-list.json",74867],a398ef57:[()=>n.e(2586).then(n.bind(n,67404)),"@site/docs/user/hardware/mobile/apple.md",67404],a52026b8:[()=>n.e(7862).then(n.bind(n,19253)),"@site/devlog/2024-01-13-welcome-devlog.md?truncated=true",19253],a6aa9e1f:[()=>Promise.all([n.e(532),n.e(2416),n.e(4268),n.e(3089)]).then(n.bind(n,33587)),"@theme/BlogListPage",33587],a7023ddc:[()=>n.e(1713).then(n.t.bind(n,53457,19)),"~blog/default/blog-tags-tags-4c2.json",53457],a70a81b4:[()=>n.e(5259).then(n.t.bind(n,35960,19)),"~docs/default/category-docs-usersidebar-category-compatibility-3ab.json",35960],a7bd4aaa:[()=>n.e(8518).then(n.bind(n,89615)),"@theme/DocVersionRoot",89615],a94703ab:[()=>Promise.all([n.e(532),n.e(4368)]).then(n.bind(n,98234)),"@theme/DocRoot",98234],a9e19215:[()=>n.e(333).then(n.bind(n,35984)),"@site/docs/user/software/networking/xrdp.md",35984],ab89b7a6:[()=>n.e(5575).then(n.bind(n,16440)),"@site/docs/user/editions/xfce/index.md",16440],acecf23e:[()=>n.e(7393).then(n.t.bind(n,81838,19)),"~blog/default/blogMetadata-default.json",81838],b0fe077f:[()=>n.e(237).then(n.t.bind(n,55178,19)),"~blog/default/blog-tags-lto-66d-list.json",55178],b2b675dd:[()=>n.e(533).then(n.t.bind(n,28017,19)),"~blog/default/blog-c06.json",28017],b2f554cd:[()=>n.e(1477).then(n.t.bind(n,30010,19)),"~blog/default/blog-archive-80c.json",30010],b4302412:[()=>n.e(2081).then(n.bind(n,81677)),"@site/docs/user/editions/gnome/tips-and-tricks.md",81677],b44cea7d:[()=>n.e(9825).then(n.t.bind(n,64963,19)),"~blog/default/blog-tags-firstpost-059-list.json",64963],baa66232:[()=>n.e(984).then(n.bind(n,9565)),"@site/docs/user/software/camera/droidcam.md",9565],baf1b6e8:[()=>n.e(9677).then(n.bind(n,47971)),"@site/docs/user/software/development/java.md",47971],be4ac66b:[()=>n.e(4869).then(n.bind(n,20990)),"@site/docs/user/hardware/compatibility/laptops.md",20990],be79d003:[()=>n.e(6012).then(n.bind(n,29303)),"@site/docs/packaging/update-dev-environment.md",29303],c30932c8:[()=>n.e(9668).then(n.t.bind(n,57252,19)),"~docs/default/category-docs-usersidebar-category-localization-344.json",57252],c55c138b:[()=>n.e(7465).then(n.bind(n,62069)),"@site/docs/packaging/packaging-changes.md",62069],c5de29d4:[()=>n.e(3851).then(n.bind(n,44832)),"@site/docs/packaging/creating-a-new-package.md",44832],c7b6dda1:[()=>n.e(3944).then(n.t.bind(n,95202,19)),"~blog/default/blog-tags-packaging-d86.json",95202],c83790d5:[()=>n.e(3568).then(n.t.bind(n,57830,19)),"~docs/default/category-docs-packagingsidebar-category-advanced-configuration-bd0.json",57830],c9c1a3f4:[()=>n.e(6121).then(n.bind(n,13311)),"@site/docs/user/editions/budgie/configuration.md",13311],cb6b48ec:[()=>n.e(2642).then(n.t.bind(n,16872,19)),"~blog/default/blog-tags-firstpost-059.json",16872],cca891e2:[()=>n.e(9773).then(n.bind(n,57646)),"@site/docs/packaging/procedures/package-inclusion.md",57646],ccc49370:[()=>Promise.all([n.e(532),n.e(2416),n.e(4268),n.e(6103)]).then(n.bind(n,88987)),"@theme/BlogPostPage",88987],cd144304:[()=>n.e(8879).then(n.t.bind(n,38406,19)),"~docs/default/category-docs-usersidebar-category-camera-358.json",38406],cde788f0:[()=>n.e(1037).then(n.t.bind(n,30547,19)),"~blog/default/blog-tags-glibc-a93.json",30547],ce4855c1:[()=>n.e(3440).then(n.bind(n,13013)),"@site/docs/packaging/translation-instructions.md",13013],cec10a63:[()=>n.e(8422).then(n.bind(n,14702)),"@site/docs/user/editions/plasma/configuration.md",14702],d00f7e62:[()=>n.e(255).then(n.bind(n,14406)),"@site/docs/packaging/your-first-package-update.md",14406],d0d2faf6:[()=>n.e(4507).then(n.bind(n,68021)),"@site/docs/packaging/procedures/release-processes.md",68021],d0e18f29:[()=>n.e(8944).then(n.t.bind(n,64713,19)),"~docs/default/category-docs-packagingsidebar-category-procedures-3af.json",64713],d4762887:[()=>n.e(3624).then(n.bind(n,58194)),"@site/docs/user/troubleshooting/installation.md",58194],d5670106:[()=>n.e(1950).then(n.bind(n,52384)),"@site/docs/user/troubleshooting/plasma.md",52384],d817f3ef:[()=>n.e(4907).then(n.t.bind(n,24332,19)),"~blog/default/blog-tags-clang-b6e.json",24332],da539e45:[()=>n.e(9986).then(n.t.bind(n,46050,19)),"~docs/default/category-docs-usersidebar-category-mobile-260.json",46050],dabd6b33:[()=>n.e(1059).then(n.bind(n,41129)),"@site/docs/packaging/advanced-config/eopkg-configuration.md",41129],db847870:[()=>n.e(8214).then(n.t.bind(n,96173,19)),"~docs/default/category-docs-usersidebar-category-networking-3ea.json",96173],ddc41e4a:[()=>n.e(9451).then(n.bind(n,49029)),"@site/docs/user/software/sound/index.md",49029],e11848e1:[()=>n.e(278).then(n.t.bind(n,94416,19)),"~blog/default/blog-tags-moss-0ed-list.json",94416],e5595530:[()=>n.e(1648).then(n.bind(n,72905)),"@site/docs/user/quick-start/boot-management.md",72905],e6b730ee:[()=>n.e(5021).then(n.t.bind(n,83769,19)),"/home/runner/work/help-center-docs/help-center-docs/.docusaurus/docusaurus-plugin-content-docs/default/plugin-route-context-module-100.json",83769],e747afee:[()=>n.e(748).then(n.t.bind(n,81341,19)),"~docs/default/category-docs-usersidebar-category-virtualization-e92.json",81341],eb074ba1:[()=>n.e(3705).then(n.bind(n,46198)),"@site/docs/user/software/configuration_files.md",46198],ec4e4367:[()=>n.e(4529).then(n.bind(n,64870)),"@site/docs/user/hardware/mobile/android.md",64870],ec9a4674:[()=>n.e(7331).then(n.t.bind(n,1239,19)),"~docs/default/category-docs-usersidebar-category-package-management-e37.json",1239],ecdeb26c:[()=>n.e(1971).then(n.bind(n,35247)),"@site/devlog/2024-01-29-dont-call-me-mate.md?truncated=true",35247],ed2a5927:[()=>n.e(4560).then(n.bind(n,59075)),"@site/docs/user/quick-start/software-center/index.md",59075],f0629c21:[()=>n.e(3375).then(n.bind(n,28914)),"@site/docs/user/software/web/obs.md",28914],f1d13e1b:[()=>n.e(5462).then(n.bind(n,77470)),"@site/docs/user/editions/mate/tips-and-tricks.md",77470],f35b91b6:[()=>n.e(9749).then(n.bind(n,78677)),"@site/devlog/2024-01-13-welcome-devlog.md",78677],f4aa4739:[()=>n.e(9170).then(n.bind(n,37334)),"@site/docs/user/editions/budgie/index.md",37334],f4c9601b:[()=>n.e(2595).then(n.bind(n,75678)),"@site/docs/user/quick-start/installation/secure-boot.md",75678],f6faa2b4:[()=>n.e(8143).then(n.bind(n,44334)),"@site/docs/user/hardware/peripherals/midi-keyboard.md",44334],f8dd8223:[()=>n.e(7212).then(n.bind(n,20822)),"@site/docs/user/software/development/postgresql.md",20822],fb6dc457:[()=>n.e(5482).then(n.bind(n,71321)),"@site/docs/user/editions/gnome/configuration.md",71321],fb8d634e:[()=>n.e(999).then(n.bind(n,72895)),"@site/docs/user/editions/gnome/index.md",72895],fc733b73:[()=>n.e(6042).then(n.bind(n,68435)),"@site/docs/user/software/development/r-and-rstudio.md",68435],fed8ce91:[()=>n.e(3145).then(n.t.bind(n,55225,19)),"~docs/default/category-docs-usersidebar-category-contributing-387.json",55225],ffe4d879:[()=>n.e(4570).then(n.t.bind(n,37689,19)),"~blog/default/blog-tags-hwcaps-d19.json",37689]};var s=n(85893);function l(e){let{error:t,retry:n,pastDelay:r}=e;return t?(0,s.jsxs)("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%"},children:[(0,s.jsx)("p",{children:String(t)}),(0,s.jsx)("div",{children:(0,s.jsx)("button",{type:"button",onClick:n,children:"Retry"})})]}):r?(0,s.jsx)("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"},children:(0,s.jsx)("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",children:(0,s.jsxs)("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2",children:[(0,s.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,s.jsx)("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,s.jsxs)("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0",children:[(0,s.jsx)("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),(0,s.jsx)("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})]}),(0,s.jsx)("circle",{cx:"22",cy:"22",r:"8",children:(0,s.jsx)("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"})})]})})}):null}var c=n(44151),u=n(13736);function d(e,t){if("*"===e)return o()({loading:l,loader:()=>n.e(7734).then(n.bind(n,57734)),modules:["@theme/NotFound"],webpack:()=>[57734],render(e,t){const n=e.default;return(0,s.jsx)(u.z,{value:{plugin:{name:"native",id:"default"}},children:(0,s.jsx)(n,{...t})})}});const r=a[`${e}-${t}`],d={},p=[],f=[],m=(0,c.Z)(r);return Object.entries(m).forEach((e=>{let[t,n]=e;const r=i[n];r&&(d[t]=r[0],p.push(r[1]),f.push(r[2]))})),o().Map({loading:l,loader:d,modules:p,webpack:()=>f,render(t,n){const o=JSON.parse(JSON.stringify(r));Object.entries(t).forEach((t=>{let[n,r]=t;const a=r.default;if(!a)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 a&&"function"!=typeof a||Object.keys(r).filter((e=>"default"!==e)).forEach((e=>{a[e]=r[e]}));let i=o;const s=n.split(".");s.slice(0,-1).forEach((e=>{i=i[e]})),i[s[s.length-1]]=a}));const a=o.__comp;delete o.__comp;const i=o.__context;return delete o.__context,(0,s.jsx)(u.z,{value:i,children:(0,s.jsx)(a,{...o,...n})})}})}const p=[{path:"/blog",component:d("/blog","c23"),exact:!0},{path:"/blog/archive",component:d("/blog/archive","f12"),exact:!0},{path:"/blog/dont-call-me-mate-pal",component:d("/blog/dont-call-me-mate-pal","c62"),exact:!0},{path:"/blog/eopkg-is-dead-long-live-eopkg",component:d("/blog/eopkg-is-dead-long-live-eopkg","40f"),exact:!0},{path:"/blog/solus-optimizing-packages",component:d("/blog/solus-optimizing-packages","323"),exact:!0},{path:"/blog/tags",component:d("/blog/tags","9e5"),exact:!0},{path:"/blog/tags/3",component:d("/blog/tags/3","1c1"),exact:!0},{path:"/blog/tags/clang",component:d("/blog/tags/clang","477"),exact:!0},{path:"/blog/tags/devlog",component:d("/blog/tags/devlog","c1e"),exact:!0},{path:"/blog/tags/eopkg",component:d("/blog/tags/eopkg","d15"),exact:!0},{path:"/blog/tags/firstpost",component:d("/blog/tags/firstpost","494"),exact:!0},{path:"/blog/tags/glibc",component:d("/blog/tags/glibc","9d8"),exact:!0},{path:"/blog/tags/gnu",component:d("/blog/tags/gnu","239"),exact:!0},{path:"/blog/tags/hello",component:d("/blog/tags/hello","66a"),exact:!0},{path:"/blog/tags/hwcaps",component:d("/blog/tags/hwcaps","a36"),exact:!0},{path:"/blog/tags/llvm",component:d("/blog/tags/llvm","239"),exact:!0},{path:"/blog/tags/lto",component:d("/blog/tags/lto","f28"),exact:!0},{path:"/blog/tags/mate",component:d("/blog/tags/mate","5ac"),exact:!0},{path:"/blog/tags/moss",component:d("/blog/tags/moss","c62"),exact:!0},{path:"/blog/tags/optimization",component:d("/blog/tags/optimization","edf"),exact:!0},{path:"/blog/tags/packaging",component:d("/blog/tags/packaging","7e3"),exact:!0},{path:"/blog/tags/pgo",component:d("/blog/tags/pgo","fec"),exact:!0},{path:"/blog/tags/solus",component:d("/blog/tags/solus","41c"),exact:!0},{path:"/blog/tags/x-86-64-v-3",component:d("/blog/tags/x-86-64-v-3","ce8"),exact:!0},{path:"/blog/welcome-solus-devlog-v1",component:d("/blog/welcome-solus-devlog-v1","9ae"),exact:!0},{path:"/docs",component:d("/docs","cc9"),routes:[{path:"/docs",component:d("/docs","9e8"),routes:[{path:"/docs",component:d("/docs","f15"),routes:[{path:"/docs/category/advanced-configuration",component:d("/docs/category/advanced-configuration","067"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/category/camera",component:d("/docs/category/camera","062"),exact:!0,sidebar:"userSidebar"},{path:"/docs/category/compatibility",component:d("/docs/category/compatibility","745"),exact:!0,sidebar:"userSidebar"},{path:"/docs/category/contributing",component:d("/docs/category/contributing","069"),exact:!0,sidebar:"userSidebar"},{path:"/docs/category/localization",component:d("/docs/category/localization","b0c"),exact:!0,sidebar:"userSidebar"},{path:"/docs/category/mobile",component:d("/docs/category/mobile","7d4"),exact:!0,sidebar:"userSidebar"},{path:"/docs/category/networking",component:d("/docs/category/networking","edb"),exact:!0,sidebar:"userSidebar"},{path:"/docs/category/package-management",component:d("/docs/category/package-management","7f4"),exact:!0,sidebar:"userSidebar"},{path:"/docs/category/peripherals",component:d("/docs/category/peripherals","04b"),exact:!0,sidebar:"userSidebar"},{path:"/docs/category/procedures",component:d("/docs/category/procedures","dd2"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/category/quick-start",component:d("/docs/category/quick-start","9ec"),exact:!0,sidebar:"userSidebar"},{path:"/docs/category/software",component:d("/docs/category/software","c71"),exact:!0,sidebar:"userSidebar"},{path:"/docs/category/utilities",component:d("/docs/category/utilities","bed"),exact:!0,sidebar:"userSidebar"},{path:"/docs/category/virtualization",component:d("/docs/category/virtualization","432"),exact:!0,sidebar:"userSidebar"},{path:"/docs/category/web",component:d("/docs/category/web","057"),exact:!0,sidebar:"userSidebar"},{path:"/docs/packaging/",component:d("/docs/packaging/","7ad"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/advanced-config/eopkg-configuration",component:d("/docs/packaging/advanced-config/eopkg-configuration","dd4"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/advanced-config/local-repository",component:d("/docs/packaging/advanced-config/local-repository","dc1"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/creating-a-new-package",component:d("/docs/packaging/creating-a-new-package","314"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/git-basics",component:d("/docs/packaging/git-basics","044"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/monitoring.yml",component:d("/docs/packaging/monitoring.yml","aad"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/package.yml",component:d("/docs/packaging/package.yml","000"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/packaging-changes",component:d("/docs/packaging/packaging-changes","763"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/packaging-practices",component:d("/docs/packaging/packaging-practices","833"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/prepare-for-packaging",component:d("/docs/packaging/prepare-for-packaging","c15"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/procedures/maintainership",component:d("/docs/packaging/procedures/maintainership","4c4"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/procedures/package-inclusion",component:d("/docs/packaging/procedures/package-inclusion","ce1"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/procedures/release-processes",component:d("/docs/packaging/procedures/release-processes","0de"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/procedures/request-a-package",component:d("/docs/packaging/procedures/request-a-package","88a"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/procedures/request-a-package-update",component:d("/docs/packaging/procedures/request-a-package-update","f28"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/submitting-a-pull-request",component:d("/docs/packaging/submitting-a-pull-request","9f4"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/testing-a-package",component:d("/docs/packaging/testing-a-package","af1"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/translation-instructions",component:d("/docs/packaging/translation-instructions","605"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/update-dev-environment",component:d("/docs/packaging/update-dev-environment","06c"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/updating-an-existing-package",component:d("/docs/packaging/updating-an-existing-package","fcc"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/packaging/your-first-package-update",component:d("/docs/packaging/your-first-package-update","182"),exact:!0,sidebar:"packagingSidebar"},{path:"/docs/user/contributing/community-guidelines",component:d("/docs/user/contributing/community-guidelines","74b"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/contributing/getting-involved",component:d("/docs/user/contributing/getting-involved","0bb"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/contributing/style",component:d("/docs/user/contributing/style","0eb"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/contributing/testing-an-iso",component:d("/docs/user/contributing/testing-an-iso","dd0"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/editions/",component:d("/docs/user/editions/","4ad"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/editions/budgie/",component:d("/docs/user/editions/budgie/","3d0"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/editions/budgie/configuration",component:d("/docs/user/editions/budgie/configuration","a8b"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/editions/budgie/tips-and-tricks",component:d("/docs/user/editions/budgie/tips-and-tricks","5e4"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/editions/gnome/",component:d("/docs/user/editions/gnome/","c3a"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/editions/gnome/configuration",component:d("/docs/user/editions/gnome/configuration","2e7"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/editions/gnome/tips-and-tricks",component:d("/docs/user/editions/gnome/tips-and-tricks","563"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/editions/mate/",component:d("/docs/user/editions/mate/","b84"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/editions/mate/configuration",component:d("/docs/user/editions/mate/configuration","1d4"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/editions/mate/tips-and-tricks",component:d("/docs/user/editions/mate/tips-and-tricks","339"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/editions/plasma/",component:d("/docs/user/editions/plasma/","920"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/editions/plasma/configuration",component:d("/docs/user/editions/plasma/configuration","555"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/editions/plasma/tips-and-tricks",component:d("/docs/user/editions/plasma/tips-and-tricks","e06"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/editions/xfce/",component:d("/docs/user/editions/xfce/","991"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/editions/xfce/configuration",component:d("/docs/user/editions/xfce/configuration","4e4"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/editions/xfce/tips-and-tricks",component:d("/docs/user/editions/xfce/tips-and-tricks","7bb"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/hardware/",component:d("/docs/user/hardware/","516"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/hardware/compatibility/laptops",component:d("/docs/user/hardware/compatibility/laptops","093"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/hardware/compatibility/wifi",component:d("/docs/user/hardware/compatibility/wifi","39d"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/hardware/mobile/android",component:d("/docs/user/hardware/mobile/android","72f"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/hardware/mobile/apple",component:d("/docs/user/hardware/mobile/apple","ad6"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/hardware/peripherals/mice-and-touchpads",component:d("/docs/user/hardware/peripherals/mice-and-touchpads","96c"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/hardware/peripherals/midi-keyboard",component:d("/docs/user/hardware/peripherals/midi-keyboard","a9a"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/hardware/peripherals/printers-and-scanners",component:d("/docs/user/hardware/peripherals/printers-and-scanners","2fc"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/intro",component:d("/docs/user/intro","bda"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/package-management/basics",component:d("/docs/user/package-management/basics","622"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/package-management/history-and-rollback",component:d("/docs/user/package-management/history-and-rollback","30a"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/package-management/repo-management",component:d("/docs/user/package-management/repo-management","a08"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/privacy",component:d("/docs/user/privacy","d5e"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/quick-start/boot-management",component:d("/docs/user/quick-start/boot-management","239"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/quick-start/default-applications",component:d("/docs/user/quick-start/default-applications","079"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/quick-start/installation/",component:d("/docs/user/quick-start/installation/","6be"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/quick-start/installation/disks",component:d("/docs/user/quick-start/installation/disks","ae1"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/quick-start/installation/secure-boot",component:d("/docs/user/quick-start/installation/secure-boot","b06"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/quick-start/installation/system-requirements",component:d("/docs/user/quick-start/installation/system-requirements","7d5"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/quick-start/software-center/",component:d("/docs/user/quick-start/software-center/","4d1"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/camera/droidcam",component:d("/docs/user/software/camera/droidcam","2fa"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/command-line/",component:d("/docs/user/software/command-line/","187"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/configuration_files",component:d("/docs/user/software/configuration_files","67b"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/desktops/",component:d("/docs/user/software/desktops/","f69"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/development/",component:d("/docs/user/software/development/","0c3"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/development/containers",component:d("/docs/user/software/development/containers","fbb"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/development/java",component:d("/docs/user/software/development/java","d8e"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/development/postgresql",component:d("/docs/user/software/development/postgresql","02f"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/development/r-and-rstudio",component:d("/docs/user/software/development/r-and-rstudio","9c4"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/development/rust",component:d("/docs/user/software/development/rust","57f"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/development/web",component:d("/docs/user/software/development/web","818"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/gaming/",component:d("/docs/user/software/gaming/","ecf"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/localization/ibus",component:d("/docs/user/software/localization/ibus","58e"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/networking/samba",component:d("/docs/user/software/networking/samba","cf0"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/networking/tigervnc",component:d("/docs/user/software/networking/tigervnc","82f"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/networking/wireshark",component:d("/docs/user/software/networking/wireshark","807"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/networking/xrdp",component:d("/docs/user/software/networking/xrdp","4f4"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/sound/",component:d("/docs/user/software/sound/","2d5"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/third-party/",component:d("/docs/user/software/third-party/","9f5"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/utilities/ksysguard",component:d("/docs/user/software/utilities/ksysguard","522"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/utilities/kwallet",component:d("/docs/user/software/utilities/kwallet","4bc"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/virtualization/virtualbox",component:d("/docs/user/software/virtualization/virtualbox","aa9"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/software/web/obs",component:d("/docs/user/software/web/obs","2ae"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/troubleshooting/",component:d("/docs/user/troubleshooting/","45d"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/troubleshooting/boot-rescue",component:d("/docs/user/troubleshooting/boot-rescue","59d"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/troubleshooting/installation",component:d("/docs/user/troubleshooting/installation","811"),exact:!0,sidebar:"userSidebar"},{path:"/docs/user/troubleshooting/plasma",component:d("/docs/user/troubleshooting/plasma","00a"),exact:!0,sidebar:"userSidebar"}]}]}]},{path:"/",component:d("/","9ba"),exact:!0},{path:"*",component:d("*")}]},72278:(e,t,n)=>{var r,o;!function(){var a,i,s,l,c,u,d,p,f,m,g,h,b,y,v,w,k,S,x,_,E,O,j,C,P,T,I,A,L,N,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;r Your Docusaurus site did not load properly. A very common reason is a wrong site baseUrl configuration. Current configured baseUrl = ${e} ${"/"===e?" (default value)":""} We suggest trying baseUrl = /g,(function(){return n})).replace(/*\/?)?>/.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(/