Skip to content

ectorepo/kde

Repository files navigation

Ectorepo: KDE

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.

Intended Usage

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 and cd 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-browserkdeplasma-addonsksystemstatsoxygenplasma-mobileplasma-workspace
bluedevilkde-vdg-extraskwallet-pamoxygen-gtkplasma-nanoplasma-workspace-wallpapers
breezekgamma5kwayland-integrationoxygen-soundsplasma-nmplymouth-kcm
breeze-grubkglobalacceldkwayland-serverpico-wizardplasma-papolkit-kde-agent-1
breeze-gtkkhotkeyskwinplank-playerplasma-passpowerdevil
breeze-plymouthkinfocenterkwritedplasma5supportplasma-redshift-controlqqc2-breeze-style
discoverkmenueditlancelotplasma-active-window-controlplasma-sdksddm-kcm
drkonqikpipewirelatte-dockplasma-bigscreenplasma-simplemenusmaragd
flatpak-kcmkrdplayer-shell-qtplasma-browser-integrationplasma-systemmonitorsystemsettings
kactivitymanagerdkscreenlibkscreenplasma-desktopplasma-testsuser-manager
kde-cli-toolskscreenlockerlibksysguardplasma-disksplasma-thunderboltxdg-desktop-portal-kde
kdecorationksshaskpassmilouplasma-firewallplasma-vault
kde-gtk-configksysguardocean-sound-themeplasma-integrationplasma-welcome
Test cloning repos
  • [X] Utilities
  • [X] Graphics
  • [X] Documentation
  • [X] Acessibility
  • [X] System
  • [X] Libraries
  • [X] Games
  • [X] Network
  • [X] Sdk
  • [X] Rolisteam
  • [X] plasma
  • [X] Frameworks
Qt, Framework and Other Repos

These are larger or have more complex categorization/subpaths.

  • [ ] plasma-bigscreen
  • [ ] plasma-mobile
  • [ ] qt
  • [ ] maui

Org Babel

(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)))

GraphQL Queries

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
        }
      }
    }
  }
}

Functions

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"))

KDE Invent

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.

Groups

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 tsvcsv … TSV to a table

# cat /tmp/invent.groups.tsv
cat /tmp/invent.groups.tsv  #| sed -e 's/\\"//g'

Utilities

(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>

Graphics

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.

Documentation

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>

System

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>

Accessibility

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>

Games

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>

Rolisteam

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>

Educaton

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>

Network

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>

Multimedia

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>

Libraries

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>

SDK

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>

Plasma

(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>

Frameworks

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>

Qt

Maui

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published