A collection of KDE resources and repos exposed as a Repo manifest for all your grep-finding pleasure.
Linux badly needs to distribute sources with distributions/packages and make it obvious how to find the source – and not on a project by project basis.
This is mostly intended to keep source up to date for reference. to develop using repo, you need to group the projects that share common build targets with that in mind. See the android or chromium XML’s. it has all the same traps of git submodules because it’s the domain that’s complex. it doesn’t matter how that complexity is specified.
Each invent.kde.org
group should have it’s own XML file.
For the plasma
group of projects, you would:
- create a containing directory at
$_ECTO/kde
- create a subdirectory at
$_ECTO/kde/plasma
andcd
to it - run
repo init -u https://github.com/ectorepo/kde -m plasma.xml
- run
repo sync
to bring all repositories up to date. - cross your fingers and hope no one renamed a branch to
main
if so, regenerate the XML by tangling the file or fix it manually. Since repo is async, it doesn’t really tell you what project it’s failing on in a “linear” fashion.
To avoid the warnings use repo sync --no-clone-bundle
to avoid the warnings.
The clone bundle usually resolves reliability issues, but I think also minimizes
bandwidth.
Once you clone, you can check out a repo branch and set various subprojects to it, in case the top development trunk is another branch.
The sync for plasma should give you up to date copies of the following repositories below.
aura-browser | kdeplasma-addons | ksystemstats | oxygen | plasma-mobile | plasma-workspace |
bluedevil | kde-vdg-extras | kwallet-pam | oxygen-gtk | plasma-nano | plasma-workspace-wallpapers |
breeze | kgamma5 | kwayland-integration | oxygen-sounds | plasma-nm | plymouth-kcm |
breeze-grub | kglobalacceld | kwayland-server | pico-wizard | plasma-pa | polkit-kde-agent-1 |
breeze-gtk | khotkeys | kwin | plank-player | plasma-pass | powerdevil |
breeze-plymouth | kinfocenter | kwrited | plasma5support | plasma-redshift-control | qqc2-breeze-style |
discover | kmenuedit | lancelot | plasma-active-window-control | plasma-sdk | sddm-kcm |
drkonqi | kpipewire | latte-dock | plasma-bigscreen | plasma-simplemenu | smaragd |
flatpak-kcm | krdp | layer-shell-qt | plasma-browser-integration | plasma-systemmonitor | systemsettings |
kactivitymanagerd | kscreen | libkscreen | plasma-desktop | plasma-tests | user-manager |
kde-cli-tools | kscreenlocker | libksysguard | plasma-disks | plasma-thunderbolt | xdg-desktop-portal-kde |
kdecoration | ksshaskpass | milou | plasma-firewall | plasma-vault | |
kde-gtk-config | ksysguard | ocean-sound-theme | plasma-integration | plasma-welcome |
- [X] Utilities
- [X] Graphics
- [X] Documentation
- [X] Acessibility
- [X] System
- [X] Libraries
- [X] Games
- [X] Network
- [X] Sdk
- [X] Rolisteam
- [X] plasma
- [X] Frameworks
These are larger or have more complex categorization/subpaths.
- [ ] plasma-bigscreen
- [ ] plasma-mobile
- [ ] qt
- [ ] maui
(setq-local org-confirm-babel-evaluate nil
gitlab-username "gitlab-username")
Max number of results/repositories.
100
Not really working
;; #+call: graphql-eld-to-xml(gqldata=(format (identity projects-query) “utilities”)) ;; ;; (call_runquery (gql=(format projects-query “utilities”))) ;; #+name: invent-utilities-xml ;; #+call: graphql-eld-to-xml(gqldata=runquery(gql=(identity invent-utilities-gql)))
Get the groups for reference
query { groups(first: 100) { nodes { id name parent { id name path fullPath } description path fullPath projects { count } } } }
For now, a hack.
{ group(fullPath: "%s") { projects(first: 100, sort: ACTIVITY_DESC) { nodes { id name topics path fullPath visibility repository { rootRef exists } } } } }
Run the query … wow how did i not figure out that it can take a string?! That would’ve saved so much time (I tried)
(ghub-graphql gql nil
:username gitlab-username
:host "invent.kde.org"
:forge 'gitlab)
This function will transform the graphql
results from unserialized eld
to
xml
in #+call:
(thread-first
(thread-last
(a-get* (nthcdr 0 gqldata) 'data 'group 'projects 'nodes)
;(mapcar (lambda (el) (a-get* el 'node)))
;(seq-filter (lambda (el) (not (a-get* el 'isArchived))))
(mapcar (lambda (el)
(let* (;; (defaultBranchRef (a-get* 'defaultBranchRef))
(path (a-get* el 'path))
(name (a-get* el 'fullPath))
(root-ref (a-get* el 'repository 'rootRef))
(ref (concat "refs/heads/" root-ref)))
(concat "<project"
" name=\"" name
"\" path=\"" path
"\" revision=\"" ref "\" remote=\"invent\"/>")))))
(cl-sort 'string-lessp :key 'downcase)
(string-join "\n"))
Invent.kde.org is the main forge for KDE. It’s split into the following groups, which we can pull with their Gitlab API, via org-babel and either restclient or graphql.
Assuming that the presence of Gitlab GraphQL docs in KDE’s integration docs implies that feature is active, that would be far more convenient. Checking the Gitlab GraphQL docs (including the Getting Started guide) gives us some more info.
This just demostrates in place querying on returned data, which could
just be GraphIQL queries saved to /tmp
(json-encode eld)
All the text is escaped or it can’t be formatted.
- as TSV:
#+begin_src jq :results output file :file /tmp/invent.groups.tsv
- stdin doesn’t work too well
#+headers: :stdin invent-groups-json
#+name invent-groups-tsv
.data.groups.nodes[]
| [.name, .projects.count, .path, .fullPath, .description]
| @tsv
cat the tsv … csv … TSV to a table
# cat /tmp/invent.groups.tsv
cat /tmp/invent.groups.tsv #| sed -e 's/\\"//g'
(format gqlt "utilities")
Set to :cache yes
after eval, turn the lights off and kindly spin your k8s down.
Generate utilities.xml
manifest
<?xml version="1.0" encoding="utf-8"?>
<manifest>
<include name="_remotes.xml"/>
<default remote="invent" sync-j="8" revision="refs/heads/master"/>
<<invent-utilities-xml()>>
</manifest>
The graphics apps are likely large. I’m not sure how large, but some of these XML’s can expand to be huge.
(format gqlt "graphics")
Caching stores the results in a hash, keyed by the arguments, which should be
deterministic. If the source block contains a time
or a random
or network
data
that changes you’ll likely need to reevaluate it.
Generate graphics.xml
manifest
<?xml version="1.0" encoding="utf-8"?>
<manifest>
<include name="_remotes.xml"/>
<default remote="invent" sync-j="8" revision="refs/heads/master"/>
<<invent-graphics-xml()>>
</manifest>
And hopefully the git-repo
paths are good because can be tough to change
later.
Docs are good to grep
(format gqlt "documentation")
Find and replace
Generate documentation.xml
manifest
<?xml version="1.0" encoding="utf-8"?>
<manifest>
<include name="_remotes.xml"/>
<default remote="invent" sync-j="8" revision="refs/heads/master"/>
<<invent-documentation-xml()>>
</manifest>
Now simply
(format gqlt "system")
Find and replace
Generate system.xml
manifest
<?xml version="1.0" encoding="utf-8"?>
<manifest>
<include name="_remotes.xml"/>
<default remote="invent" sync-j="8" revision="refs/heads/master"/>
<<invent-system-xml()>>
</manifest>
Now simply
(format gqlt "accessibility")
Find and replace
Generate accessibility.xml
manifest
<?xml version="1.0" encoding="utf-8"?>
<manifest>
<include name="_remotes.xml"/>
<default remote="invent" sync-j="8" revision="refs/heads/master"/>
<<invent-accessibility-xml()>>
</manifest>
Now simply
(format gqlt "games")
Find and replace
Generate games.xml
manifest
<?xml version="1.0" encoding="utf-8"?>
<manifest>
<include name="_remotes.xml"/>
<default remote="invent" sync-j="8" revision="refs/heads/master"/>
<<invent-games-xml()>>
</manifest>
Now simply
(format gqlt "rolisteam")
Find and replace
Generate rolisteam.xml
manifest
<?xml version="1.0" encoding="utf-8"?>
<manifest>
<include name="_remotes.xml"/>
<default remote="invent" sync-j="8" revision="refs/heads/master"/>
<<invent-rolisteam-xml()>>
</manifest>
Now simply
(format gqlt "education")
Find and replace
Generate education.xml
manifest
<?xml version="1.0" encoding="utf-8"?>
<manifest>
<include name="_remotes.xml"/>
<default remote="invent" sync-j="8" revision="refs/heads/master"/>
<<invent-education-xml()>>
</manifest>
Now simply
(format gqlt "network")
Find and replace
Generate network.xml
manifest
<?xml version="1.0" encoding="utf-8"?>
<manifest>
<include name="_remotes.xml"/>
<default remote="invent" sync-j="8" revision="refs/heads/master"/>
<<invent-network-xml()>>
</manifest>
Now simply
(format gqlt "multimedia")
Find and replace
Generate multimedia.xml
manifest
<?xml version="1.0" encoding="utf-8"?>
<manifest>
<include name="_remotes.xml"/>
<default remote="invent" sync-j="8" revision="refs/heads/master"/>
<<invent-multimedia-xml()>>
</manifest>
Now simply
(format gqlt "libraries")
Find and replace
Generate libraries.xml
manifest
<?xml version="1.0" encoding="utf-8"?>
<manifest>
<include name="_remotes.xml"/>
<default remote="invent" sync-j="8" revision="refs/heads/master"/>
<<invent-libraries-xml()>>
</manifest>
Apps to check later:
- Umbrello
- GUI for diagramming UML
- QML LSP
- contains qml-lsp, qml-dap, qml-refactor-fairy
- Rust Qt Binding Generator
- generate bindings to use Rust in Qt and QML
- Massif Visualizer
- Visualizer for Valgrind Massif data files
- KTechLab
- IDE for microcontrollers/electronics
- ELF Dissector
- inspect, analyze and optimize ELF
- Heaptrack
- Heap memory profiler for Linux
- KCacheGrind
- GUI to profilers like Valgrind
- Codevis
- visualize/analyze code maintenance for C++ codebases
- CuteHMI
- Open Source HMI (simulation/design?)
- Clazy
- Qt-oriented static code analyzer
- KDE Dev. Utilities and Scripts
(format gqlt "sdk")
Find and replace
Generate sdk.xml
manifest
<?xml version="1.0" encoding="utf-8"?>
<manifest>
<include name="_remotes.xml"/>
<default remote="invent" sync-j="8" revision="refs/heads/master"/>
<<invent-sdk-xml()>>
</manifest>
(format gqlt "plasma")
(thread-first
(thread-last
(a-get* (nthcdr 0 gqldata) 'data 'group 'projects 'nodes)
;(mapcar (lambda (el) (a-get* el 'node)))
;(seq-filter (lambda (el) (not (a-get* el 'isArchived))))
(mapcar (lambda (el)
(let* (;; (defaultBranchRef (a-get* 'defaultBranchRef))
(path (a-get* el 'path))
(name (a-get* el 'fullPath))
(root-ref (a-get* el 'repository 'rootRef))
(ref (concat "refs/heads/" root-ref)))
(concat "<project"
" name=\"" name
"\" path=\"" path
"\" revision=\"" ref "\" remote=\"invent\"/>")))))
(cl-sort 'string-lessp :key 'downcase)
(string-join "\n"))
Generate plasma.xml
manifest
<?xml version="1.0" encoding="utf-8"?>
<manifest>
<include name="_remotes.xml"/>
<default remote="invent" sync-j="8" revision="refs/heads/master"/>
<<invent-plasma-xml()>>
</manifest>
Now simply
(format gqlt "frameworks")
Find and replace
Generate frameworks.xml
manifest
<?xml version="1.0" encoding="utf-8"?>
<manifest>
<include name="_remotes.xml"/>
<default remote="invent" sync-j="8" revision="refs/heads/master"/>
<<invent-frameworks-xml()>>
</manifest>