├── .gitignore ├── scripts └── tag.sh ├── .github ├── ISSUE_TEMPLATE │ ├── feature_request.md │ ├── bug_report.md │ └── config.yml └── workflows │ └── ci.yml ├── docs └── DEBUGGING.md ├── .gitmodules ├── TRADEMARK.md ├── justfile └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | .vscode 2 | cosmic-sysext 3 | *_build -------------------------------------------------------------------------------- /scripts/tag.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -e 4 | 5 | TAG="$1" 6 | 7 | if [ -z "$TAG" ] 8 | then 9 | echo "$0 [tag]" >&2 10 | exit 1 11 | fi 12 | 13 | echo "Do you want to tag the current state of cosmic-epoch with the tag $TAG? (y/N)" 14 | read answer 15 | if [ "$answer" != "y" ] 16 | then 17 | echo "Did not answer y, exiting" >&2 18 | exit 1 19 | fi 20 | 21 | set -x 22 | 23 | git fetch --recurse-submodules 24 | 25 | git tag --force "$TAG" 26 | git submodule foreach git tag --force "$TAG" 27 | 28 | git push --force origin tag "$TAG" 29 | git submodule foreach git push --force origin tag "$TAG" 30 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: enhancement 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context or screenshots about the feature request here. 21 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: bug 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **To Reproduce** 14 | Steps to reproduce the behavior: 15 | 1. Go to '...' 16 | 2. Click on '....' 17 | 3. Scroll down to '....' 18 | 4. See error 19 | 20 | **Expected behavior** 21 | A clear and concise description of what you expected to happen. 22 | 23 | **Screenshots** 24 | If applicable, add screenshots to help explain your problem. 25 | 26 | **Desktop (please complete the following information):** 27 | - OS: [e.g. Pop!_OS 24.04] 28 | 29 | **Additional context** 30 | Add any other context about the problem here. 31 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | # Use Arch to test build outside of Ubuntu/Pop. 2 | # 3 | # Tests with recent version of dependencies. Another testson a different 4 | # distro could be used to test for lowest supported. 5 | # 6 | # A minimal image should also help to confirm what dependencies are needed. 7 | 8 | name: CI 9 | 10 | on: 11 | pull_request: 12 | push: 13 | schedule: 14 | - cron: '0 7 * * *' # Midnight MST daily 15 | 16 | jobs: 17 | Test: 18 | runs-on: ubuntu-latest 19 | container: 20 | image: archlinux:latest 21 | volumes: 22 | - /:/host 23 | steps: 24 | - run: > 25 | pacman --noconfirm -Syu 26 | base-devel 27 | cargo 28 | clang 29 | desktop-file-utils 30 | git 31 | gtk3 32 | gtk4 33 | just 34 | libinput 35 | libxkbcommon 36 | llvm 37 | mesa 38 | meson 39 | pipewire 40 | pulseaudio 41 | seatd 42 | wayland 43 | lld 44 | expat 45 | fontconfig 46 | freetype2 47 | flatpak 48 | nasm 49 | - run: rm -rf /host/usr/local/lib/android # Free space 50 | - uses: actions/checkout@v3 51 | with: 52 | submodules: recursive 53 | # Safe directory behavior seems to have issues with `container:` 54 | # https://github.com/actions/checkout/issues/915 55 | - run: git config --global --add safe.directory '*' 56 | - run: just sysext 57 | -------------------------------------------------------------------------------- /docs/DEBUGGING.md: -------------------------------------------------------------------------------- 1 | Debugging COSMIC 2 | ================ 3 | 4 | An assortment of useful tools and settings for debugging COSMIC. 5 | 6 | ## Logs 7 | Cosmic-comp, cosmic-panel, and other components log to `stderr`, as well as journald (if present). 8 | 9 | ## Wayland and X11 Protocols 10 | 11 | Run clients with `WAYLAND_DEBUG=1` to see what wayland calls are made. `xtrace -n ` can be used to see what X calls an X11 client is making. 12 | 13 | ## XWayland 14 | 15 | A tool like `xprop` can be used to determine if an application is running in XWayland. If `xprop` is unable to select a window, it is a native Wayland window. 16 | 17 | ## Performance 18 | 19 | `sudo perf top` can be used to see what functions, across all processes, are using the most CPU time. The `-p` argument can be used to restrict this to a single process. The output is more useful for executables with debug symbols. 20 | 21 | `cosmic-comp` integrates Tracy for profiling. It can be built with `cargo build --features profile-with-tracy --profile fastdebug`, then the Tracy client can connect from the same system or a different one 22 | 23 | ## Graphics drivers 24 | `eglinfo` and `vulkaninfo` indicate what graphics cards and drivers are in use for hardware-accelerated rendering. 25 | 26 | On systems with NVIDIA graphics, `nvidia-smi` has information about the GPU and driver. 27 | 28 | ## DRM 29 | The Linux DRM subsystem handles graphics cards and display controllers. 30 | 31 | `drm_info` prints information about the outputs, planes, etc. associated with each GPU and their properties. The output of this command can be useful for understanding display related issues. 32 | 33 | https://gitlab.freedesktop.org/wlroots/wlroots/-/wikis/DRM-Debugging documents how to configure DRM to enable additional logging, which can be useful for understanding some DRM driver issues. 34 | 35 | ## Frozen desktop 36 | 37 | If the desktop is frozen and `ctrl+alt+f*` don't work to change to a TTY, [the magic SysRq key](https://www.kernel.org/doc/html/latest/admin-guide/sysrq.html) with `r` can be used to switch input into raw mode, so the kernel will handle the tty switch key binding. `/etc/sysctl.conf` or `/etc/sysctl.d` may need to be edited first to set `kernel.sysrq=1` or another value that allows this command. 38 | 39 | It is also possible to connect over `ssh` from another computer. 40 | 41 | Then `pidof cosmic-comp` can be used to get the PID of the compositor. Then it is possible to investigate further with tools like `gdb`, using `sudo gdb` and then `attach `. 42 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: false 2 | contact_links: 3 | - name: cosmic-applets 4 | url: https://github.com/pop-os/cosmic-applets/issues 5 | about: Concern all the applets living in the dock or the panel. 6 | 7 | - name: cosmic-comp 8 | url: https://github.com/pop-os/cosmic-comp/issues 9 | about: Responsible for composing your windows on the screen. If you see issues with the tilling features or your multiple displays, this is likely the place to go. 10 | 11 | - name: cosmic-edit 12 | url: https://github.com/pop-os/cosmic-edit/issues 13 | about: This is the issue tracker for COSMIC Text Editor. If you see issues with the text editor, report them here. 14 | 15 | - name: cosmic-files 16 | url: https://github.com/pop-os/cosmic-files/issues 17 | about: This is the issue tracker for COSMIC Files. If you see issues while navigating files, this is the place to go. 18 | 19 | - name: cosmic-settings 20 | url: https://github.com/pop-os/cosmic-settings/issues 21 | about: This is the issue tracker for COSMIC Settings. If you see issues while changing settings, this is the place to go. 22 | 23 | - name: cosmic-store 24 | url: https://github.com/pop-os/cosmic-store/issues 25 | about: This is the issue tracker for COSMIC Store. If you see issues with the app store, report them here. 26 | 27 | - name: cosmic-term 28 | url: https://github.com/pop-os/cosmic-term/issues 29 | about: This is the issue tracker for COSMIC Terminal. If you see issues with the terminal, report them here. 30 | 31 | - name: cosmic-panel 32 | url: https://github.com/pop-os/cosmic-panel/issues 33 | about: Contains the code to manage the dock and panel applets. You can see it as the compositor of applets. It is also responsible to draw the panel and dock at the right place (bottom, left, ect..). 34 | 35 | - name: cosmic-screenshot 36 | url: https://github.com/pop-os/cosmic-screenshot/issues 37 | about: This is the tool that help you take screenshots. 38 | 39 | - name: cosmic-workspaces-epoch 40 | url: https://github.com/pop-os/cosmic-workspaces-epoch/issues 41 | about: Responsible for the workspace overview. If you have an issue with workspaces, this is the place to go. 42 | 43 | - name: cosmic-greeter 44 | url: https://github.com/pop-os/cosmic-greeter/issues 45 | about: When your session is locked, or not opened yet, this is the window that will be shown. Basically the login screen. 46 | 47 | - name: cosmic-osd 48 | url: https://github.com/pop-os/cosmic-osd/issues 49 | about: Cosmic on screen display. This is for example, the audio notification when you change the volume, or the brightness one. 50 | 51 | - name: cosmic-applibrary 52 | url: https://github.com/pop-os/cosmic-applibrary/issues 53 | about: It is the application launched with super-a, that let you see what app are in your system, and launch them. 54 | 55 | - name: cosmic-launcher 56 | url: https://github.com/pop-os/cosmic-launcher/issues 57 | about: Launched with the super key. It lets you search in your application, and display the result in a list. 58 | 59 | - name: cosmic-bg 60 | url: https://github.com/pop-os/cosmic-bg/issues 61 | about: If you notice issues with the wallpaper, this is the place to go. 62 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "cosmic-session"] 2 | path = cosmic-session 3 | url = https://github.com/pop-os/cosmic-session 4 | branch = master 5 | [submodule "cosmic-comp"] 6 | path = cosmic-comp 7 | url = https://github.com/pop-os/cosmic-comp 8 | branch = master 9 | [submodule "cosmic-panel"] 10 | path = cosmic-panel 11 | url = https://github.com/pop-os/cosmic-panel 12 | branch = master 13 | [submodule "cosmic-applets"] 14 | path = cosmic-applets 15 | url = https://github.com/pop-os/cosmic-applets 16 | branch = master 17 | [submodule "cosmic-applibrary"] 18 | path = cosmic-applibrary 19 | url = https://github.com/pop-os/cosmic-applibrary 20 | branch = master 21 | [submodule "cosmic-launcher"] 22 | path = cosmic-launcher 23 | url = https://github.com/pop-os/cosmic-launcher 24 | branch = master 25 | [submodule "simple-wrapper"] 26 | path = simple-wrapper 27 | url = https://github.com/pop-os/simple-wrapper 28 | branch = master 29 | [submodule "cosmic-settings"] 30 | path = cosmic-settings 31 | url = https://github.com/pop-os/cosmic-settings 32 | branch = master 33 | [submodule "cosmic-settings-daemon"] 34 | path = cosmic-settings-daemon 35 | url = https://github.com/pop-os/cosmic-settings-daemon 36 | branch = master 37 | [submodule "xdg-desktop-portal-cosmic"] 38 | path = xdg-desktop-portal-cosmic 39 | url = https://github.com/pop-os/xdg-desktop-portal-cosmic.git 40 | branch = master 41 | [submodule "cosmic-osd"] 42 | path = cosmic-osd 43 | url = https://github.com/pop-os/cosmic-osd.git 44 | branch = master 45 | [submodule "cosmic-bg"] 46 | path = cosmic-bg 47 | url = https://github.com/pop-os/cosmic-bg.git 48 | branch = master 49 | [submodule "cosmic-workspaces-epoch"] 50 | path = cosmic-workspaces-epoch 51 | url = https://github.com/pop-os/cosmic-workspaces-epoch/ 52 | branch = master 53 | [submodule "cosmic-notifications"] 54 | path = cosmic-notifications 55 | url = https://github.com/pop-os/cosmic-notifications 56 | branch = master 57 | [submodule "cosmic-icons"] 58 | path = cosmic-icons 59 | url = https://github.com/pop-os/cosmic-icons.git 60 | branch = master 61 | [submodule "cosmic-greeter"] 62 | path = cosmic-greeter 63 | url = https://github.com/pop-os/cosmic-greeter 64 | branch = master 65 | [submodule "cosmic-screenshot"] 66 | path = cosmic-screenshot 67 | url = https://github.com/pop-os/cosmic-screenshot 68 | branch = master 69 | [submodule "cosmic-edit"] 70 | path = cosmic-edit 71 | url = https://github.com/pop-os/cosmic-edit 72 | branch = master 73 | [submodule "cosmic-term"] 74 | path = cosmic-term 75 | url = https://github.com/pop-os/cosmic-term.git 76 | branch = master 77 | [submodule "cosmic-randr"] 78 | path = cosmic-randr 79 | url = https://github.com/pop-os/cosmic-randr.git 80 | branch = master 81 | [submodule "cosmic-files"] 82 | path = cosmic-files 83 | url = https://github.com/pop-os/cosmic-files.git 84 | branch = master 85 | [submodule "cosmic-store"] 86 | path = cosmic-store 87 | url = https://github.com/pop-os/cosmic-store.git 88 | branch = master 89 | [submodule "cosmic-wallpapers"] 90 | path = cosmic-wallpapers 91 | url = https://github.com/pop-os/cosmic-wallpapers.git 92 | branch = master 93 | [submodule "cosmic-idle"] 94 | path = cosmic-idle 95 | url = https://github.com/pop-os/cosmic-idle.git 96 | branch = master 97 | [submodule "cosmic-player"] 98 | path = cosmic-player 99 | url = https://github.com/pop-os/cosmic-player.git 100 | branch = master 101 | [submodule "cosmic-initial-setup"] 102 | path = cosmic-initial-setup 103 | url = https://github.com/pop-os/cosmic-initial-setup 104 | branch = master 105 | [submodule "pop-launcher"] 106 | path = pop-launcher 107 | url = https://github.com/pop-os/launcher.git 108 | branch = master 109 | -------------------------------------------------------------------------------- /TRADEMARK.md: -------------------------------------------------------------------------------- 1 | # COSMIC Trademark Policy 2 | 3 | This document outlines the policy regarding the use of the COSMIC desktop environment trademark owned by System76. The purpose of this policy is to ensure that the COSMIC trademark is used correctly and consistently, maintaining the integrity and reputation of the COSMIC brand. 4 | 5 | 1. Usage of the COSMIC Trademark 6 | 1. The COSMIC trademark includes, but is not limited to, the name "COSMIC", “COSMIC DE” the COSMIC logo, and any associated symbols or designs. 7 | 2. The COSMIC trademark may only be used in accordance with this policy. Unauthorized use of the trademark is prohibited. 8 | 2. Permissible Use 9 | 1. Community Projects: Community projects such as Linux distributions may use the COSMIC trademark to refer to the desktop environment, provided that such use is not misleading and does not imply endorsement by System76 without explicit permission. 10 | 2. Educational and Informational Use: The COSMIC trademark may be used in educational and informational materials, including books, websites, and articles, to refer to the desktop environment, provided that such use complies with the guidelines set forth in this policy. 11 | 3. Marketing and Promotional Use: Partners and affiliates of System76 may use the COSMIC trademark in marketing and promotional materials with prior written consent from System76. 12 | 3. Prohibited Use 13 | 1. Misrepresentation: The COSMIC trademark must not be used in a way that misrepresents or implies false association with, endorsement by, or sponsorship from System76. 14 | 2. Modification: The COSMIC trademark must not be altered, modified, or used as part of another trademark or logo without prior written permission from System76. 15 | 3. Merchandising: The COSMIC trademark must not be used on merchandise (e.g., T-shirts, mugs) for commercial purposes without explicit authorization from System76. 16 | 4. Logo Usage Guidelines 17 | 1. The COSMIC logo must be used as provided by System76 without any modifications. This includes maintaining the logo’s colors, proportions, and overall design. 18 | 2. The COSMIC logo must be displayed in a manner that is clear and legible. Sufficient clear space should be maintained around the logo to ensure it is not crowded by other visual elements. 19 | 3. The COSMIC name should be identified as a trademark using the “™” symbol. 20 | 5. Official COSMIC Software 21 | 1. Software hosted at [System76's GitHub repository](https://github.com/pop-os) is considered official COSMIC software. Only software that has been approved by System76 is permitted to use the COSMIC trademarks to refer to itself. Applications and applets that are official COSMIC software use the “cosmic-” package namespace and “com.system76.” prefixed App ID. Other applications should avoid using these prefixes. 22 | 2. Third-party applications, applets, and software that integrate with or extend the COSMIC desktop environment must not use the COSMIC trademark in a way that implies official status or endorsement without prior approval from System76. Third-party developers are encouraged to use the "cosmic-ext-" package namespace. These applications and applets may be described as "for the COSMIC™ desktop". 23 | 3. Third-party applications and applets may request inclusion as official COSMIC software. To request inclusion, please contact System76 at cosmic@system76.com. 24 | 6. Request for Permission 25 | 1. To request permission for uses of the COSMIC trademark not covered by this policy, please contact System76 at trademark@system76.com. 26 | 2. All requests will be reviewed on a case-by-case basis, and System76 reserves the right to grant or deny permission at its sole discretion. 27 | 7. Enforcement 28 | 1. System76 reserves the right to take appropriate legal action against any unauthorized use of the COSMIC trademark. 29 | 2. System76 may, at its discretion, require the cessation of use of the COSMIC trademark by any party that fails to comply with this policy. 30 | 31 | ## Contact Information 32 | 33 | For any questions or to request permission to use the COSMIC trademark, please contact:

34 | System76, Inc.
35 | trademark@system76.com

36 | This trademark policy is effective as of June 3, 2024 and may be updated from time to time at the discretion of System76. 37 | 38 | --- 39 | By adhering to these guidelines, you help us protect the COSMIC brand and ensure it remains a symbol of quality and innovation. Thank you for your cooperation. 40 | -------------------------------------------------------------------------------- /justfile: -------------------------------------------------------------------------------- 1 | set dotenv-load 2 | just := just_executable() 3 | make := `which make` 4 | 5 | build: 6 | mkdir -p build 7 | {{ just }} cosmic-applets/build-release 8 | {{ just }} cosmic-applibrary/build-release 9 | {{ just }} cosmic-bg/build-release 10 | {{ make }} -C cosmic-comp all 11 | {{ just }} cosmic-edit/build-release 12 | {{ just }} cosmic-files/build-release 13 | {{ just }} cosmic-greeter/build-release 14 | {{ just }} cosmic-idle/build-release 15 | {{ just }} cosmic-initial-setup/build-release 16 | {{ just }} cosmic-launcher/build-release 17 | {{ just }} cosmic-notifications/build-release 18 | {{ just }} cosmic-osd/build-release 19 | {{ just }} cosmic-panel/build-release 20 | {{ just }} cosmic-player/build-release 21 | {{ just }} cosmic-randr/build-release 22 | {{ just }} cosmic-screenshot/build-release 23 | {{ just }} cosmic-settings/build-release 24 | {{ make }} -C cosmic-settings-daemon all 25 | {{ just }} cosmic-session/all 26 | {{ just }} cosmic-store/build-release 27 | {{ just }} cosmic-term/build-release 28 | {{ make }} -C cosmic-wallpapers all 29 | {{ make }} -C cosmic-workspaces-epoch all 30 | {{ just }} pop-launcher/build-release 31 | {{ make }} -C xdg-desktop-portal-cosmic all 32 | 33 | install rootdir="" prefix="/usr/local": build 34 | {{ just }} rootdir={{rootdir}} prefix={{prefix}} cosmic-applets/install 35 | {{ just }} rootdir={{rootdir}} prefix={{prefix}} cosmic-applibrary/install 36 | {{ just }} rootdir={{rootdir}} prefix={{prefix}} cosmic-bg/install 37 | {{ make }} -C cosmic-comp install DESTDIR={{rootdir}} prefix={{prefix}} 38 | {{ just }} rootdir={{rootdir}} prefix={{prefix}} cosmic-edit/install 39 | {{ just }} rootdir={{rootdir}} prefix={{prefix}} cosmic-files/install 40 | {{ just }} rootdir={{rootdir}} prefix={{prefix}} cosmic-greeter/install 41 | {{ just }} rootdir={{rootdir}} prefix={{prefix}} cosmic-icons/install 42 | {{ just }} rootdir={{rootdir}} prefix={{prefix}} cosmic-idle/install 43 | {{ just }} rootdir={{rootdir}} prefix={{prefix}} cosmic-initial-setup/install 44 | {{ just }} rootdir={{rootdir}} prefix={{prefix}} cosmic-launcher/install 45 | {{ just }} rootdir={{rootdir}} prefix={{prefix}} cosmic-notifications/install 46 | {{ just }} rootdir={{rootdir}} prefix={{prefix}} cosmic-osd/install 47 | {{ just }} rootdir={{rootdir}} prefix={{prefix}} cosmic-panel/install 48 | {{ just }} rootdir={{rootdir}} prefix={{prefix}} cosmic-player/install 49 | {{ just }} rootdir={{rootdir}} prefix={{prefix}} cosmic-randr/install 50 | {{ just }} rootdir={{rootdir}} prefix={{prefix}} cosmic-screenshot/install 51 | {{ just }} rootdir={{rootdir}} prefix={{prefix}} cosmic-settings/install 52 | {{ make }} -C cosmic-settings-daemon install DESTDIR={{rootdir}} prefix={{prefix}} 53 | {{ just }} rootdir={{rootdir}} prefix={{prefix}} cosmic-session/install 54 | {{ just }} rootdir={{rootdir}} prefix={{prefix}} cosmic-store/install 55 | {{ just }} rootdir={{rootdir}} prefix={{prefix}} cosmic-term/install 56 | {{ make }} -C cosmic-wallpapers install DESTDIR={{rootdir}} prefix={{prefix}} 57 | {{ make }} -C cosmic-workspaces-epoch install DESTDIR={{rootdir}} prefix={{prefix}} 58 | {{ just }} rootdir={{rootdir}} pop-launcher/install 59 | {{ make }} -C xdg-desktop-portal-cosmic install DESTDIR={{rootdir}} prefix={{prefix}} 60 | 61 | _mkdir dir: 62 | mkdir -p dir 63 | 64 | sysext dir=(invocation_directory() / "cosmic-sysext") version=("nightly-" + `git rev-parse --short HEAD`): (_mkdir dir) (install dir "/usr") 65 | #!/usr/bin/env sh 66 | mkdir -p {{dir}}/usr/lib/extension-release.d/ 67 | cat >{{dir}}/usr/lib/extension-release.d/extension-release.cosmic-sysext <