linux-kernel-manager 0.1.2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. linux_kernel_manager-0.1.2.dist-info/METADATA +271 -0
  2. linux_kernel_manager-0.1.2.dist-info/RECORD +45 -0
  3. linux_kernel_manager-0.1.2.dist-info/WHEEL +4 -0
  4. linux_kernel_manager-0.1.2.dist-info/entry_points.txt +3 -0
  5. linux_kernel_manager-0.1.2.dist-info/licenses/LICENSE +675 -0
  6. lkm/__init__.py +2 -0
  7. lkm/cli/__init__.py +0 -0
  8. lkm/cli/main.py +332 -0
  9. lkm/cli/output.py +57 -0
  10. lkm/core/__init__.py +0 -0
  11. lkm/core/backends/__init__.py +54 -0
  12. lkm/core/backends/apk.py +46 -0
  13. lkm/core/backends/apt.py +77 -0
  14. lkm/core/backends/base.py +81 -0
  15. lkm/core/backends/dnf.py +44 -0
  16. lkm/core/backends/nix.py +195 -0
  17. lkm/core/backends/pacman.py +78 -0
  18. lkm/core/backends/portage.py +107 -0
  19. lkm/core/backends/xbps.py +139 -0
  20. lkm/core/backends/zypper.py +44 -0
  21. lkm/core/kernel.py +95 -0
  22. lkm/core/manager.py +243 -0
  23. lkm/core/providers/__init__.py +62 -0
  24. lkm/core/providers/base.py +88 -0
  25. lkm/core/providers/distro.py +139 -0
  26. lkm/core/providers/gentoo.py +68 -0
  27. lkm/core/providers/liquorix.py +80 -0
  28. lkm/core/providers/lkf_build.py +355 -0
  29. lkm/core/providers/local_file.py +104 -0
  30. lkm/core/providers/mainline.py +106 -0
  31. lkm/core/providers/nixos.py +76 -0
  32. lkm/core/providers/void.py +69 -0
  33. lkm/core/providers/xanmod.py +81 -0
  34. lkm/core/system.py +235 -0
  35. lkm/gui/__init__.py +0 -0
  36. lkm/gui/app.py +94 -0
  37. lkm/gui/kernel_model.py +98 -0
  38. lkm/gui/main_window.py +385 -0
  39. lkm/gui/widgets/__init__.py +0 -0
  40. lkm/gui/widgets/gentoo_compile_dialog.py +132 -0
  41. lkm/gui/widgets/kernel_view.py +121 -0
  42. lkm/gui/widgets/lkf_build_dialog.py +370 -0
  43. lkm/gui/widgets/log_panel.py +78 -0
  44. lkm/gui/widgets/note_dialog.py +38 -0
  45. lkm/qt.py +122 -0
@@ -0,0 +1,271 @@
1
+ Metadata-Version: 2.4
2
+ Name: linux-kernel-manager
3
+ Version: 0.1.2
4
+ Summary: Linux Kernel Manager — build, install, and manage kernels across all major distros and architectures
5
+ Project-URL: Repository, https://github.com/Interested-Deving-1896/lkm
6
+ License: GPL-3.0-or-later
7
+ License-File: LICENSE
8
+ Keywords: kernel,kernel-manager,linux,liquorix,lkf,nixos,package-manager,ukm,void,xanmod
9
+ Classifier: Development Status :: 3 - Alpha
10
+ Classifier: Environment :: Console
11
+ Classifier: Environment :: X11 Applications :: Qt
12
+ Classifier: Intended Audience :: Developers
13
+ Classifier: Intended Audience :: System Administrators
14
+ Classifier: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)
15
+ Classifier: Operating System :: POSIX :: Linux
16
+ Classifier: Programming Language :: Python :: 3
17
+ Classifier: Programming Language :: Python :: 3.11
18
+ Classifier: Programming Language :: Python :: 3.12
19
+ Classifier: Topic :: System :: Operating System Kernels :: Linux
20
+ Classifier: Topic :: System :: Systems Administration
21
+ Classifier: Topic :: Utilities
22
+ Requires-Python: >=3.11
23
+ Requires-Dist: docopt-ng>=0.9
24
+ Requires-Dist: requests>=2.31
25
+ Provides-Extra: dev
26
+ Requires-Dist: mypy; extra == 'dev'
27
+ Requires-Dist: pyside6>=6.6; extra == 'dev'
28
+ Requires-Dist: pytest-cov; extra == 'dev'
29
+ Requires-Dist: pytest>=8; extra == 'dev'
30
+ Requires-Dist: ruff; extra == 'dev'
31
+ Provides-Extra: dev-no-gui
32
+ Requires-Dist: mypy; extra == 'dev-no-gui'
33
+ Requires-Dist: pytest-cov; extra == 'dev-no-gui'
34
+ Requires-Dist: pytest>=8; extra == 'dev-no-gui'
35
+ Requires-Dist: ruff; extra == 'dev-no-gui'
36
+ Provides-Extra: pyqt6
37
+ Requires-Dist: pyqt6>=6.6; extra == 'pyqt6'
38
+ Provides-Extra: pyside6
39
+ Requires-Dist: pyside6>=6.6; extra == 'pyside6'
40
+ Description-Content-Type: text/markdown
41
+
42
+ # lkm — Linux Kernel Manager
43
+
44
+ Install, build, and manage Linux kernels across all major distributions and CPU architectures from a single CLI or GUI.
45
+
46
+ Merges **[lkf](https://github.com/Interested-Deving-1896/lkf)** (Linux Kernel Framework — shell build pipeline) and **[ukm](https://github.com/Interested-Deving-1896/ukm)** (Universal Kernel Manager — runtime management) into one tool covering the full kernel lifecycle:
47
+
48
+ ```
49
+ fetch → patch → configure → compile → package → install → hold → remove
50
+ ```
51
+
52
+ ---
53
+
54
+ ## Kernel sources
55
+
56
+ | Source | Architectures |
57
+ |---|---|
58
+ | Ubuntu Mainline PPA | amd64, arm64, armhf, ppc64el, s390x, i386 |
59
+ | XanMod | amd64 (v1–v4, edge, lts, rt) |
60
+ | Liquorix | amd64 |
61
+ | Distro-native (via system package manager) | all |
62
+ | Gentoo source compilation | all |
63
+ | Local file (.deb / .rpm / .pkg.tar.* / .apk / .xbps) | all |
64
+ | **lkf build** (compile from source via lkf profiles) | all |
65
+
66
+ ## Distributions supported
67
+
68
+ Any distro using one of these package managers:
69
+
70
+ | Package manager | Distros |
71
+ |---|---|
72
+ | `apt` | Debian, Ubuntu, Mint, Pop!\_OS, Kali, Kubuntu, Xubuntu, Lubuntu, Devuan, MX Linux, antiX, Zorin, elementary, KDE neon, SparkyLinux, BunsenLabs, Parrot, Proxmox, PikaOS, Bodhi, Lite, Emmabuntüs, Voyager, Linuxfx, Kodachi, AV Linux, wattOS, Feren, Peppermint, Q4OS, Ubuntu MATE, Ubuntu Studio, DragonOS, … |
73
+ | `pacman` | Arch, Manjaro, EndeavourOS, CachyOS, Artix, RebornOS, ArchBang, Archcraft, Bluestar, Mabox, … |
74
+ | `dnf` | Fedora, RHEL, AlmaLinux, Rocky, Nobara, Ultramarine, Bazzite, Oracle, Red Hat, … |
75
+ | `zypper` | openSUSE Leap, openSUSE Tumbleweed, SLES, Regata, … |
76
+ | `apk` | Alpine Linux |
77
+ | `portage` | Gentoo |
78
+ | `xbps` | Void Linux |
79
+ | `nix` | NixOS |
80
+
81
+ ---
82
+
83
+ ## Install
84
+
85
+ ```sh
86
+ # CLI only
87
+ pip install lkm
88
+
89
+ # GUI (PySide6 — recommended, LGPL)
90
+ pip install "lkm[pyside6]"
91
+
92
+ # GUI (PyQt6 — alternative, GPL)
93
+ pip install "lkm[pyqt6]"
94
+ ```
95
+
96
+ To force a specific Qt binding at runtime:
97
+
98
+ ```sh
99
+ LKM_QT=PyQt6 lkm-gui
100
+ ```
101
+
102
+ ---
103
+
104
+ ## CLI usage
105
+
106
+ ### Runtime management
107
+
108
+ ```sh
109
+ lkm list # all kernels from all sources
110
+ lkm list --family=xanmod # filter by family
111
+ lkm list --installed # installed only
112
+ lkm list --json # machine-readable output
113
+ lkm list --refresh # force re-fetch remote indexes
114
+
115
+ lkm install 6.12.0 # install by version
116
+ lkm install 6.12.0 --flavor=rt # install specific flavor
117
+ lkm install 6.12.0 --provider=xanmod
118
+ lkm install --local ./linux-image-6.12.0_amd64.deb
119
+
120
+ lkm remove 6.8.0
121
+ lkm remove 6.8.0 --purge # also remove config files
122
+
123
+ lkm hold 6.12.0 # pin kernel (excluded from auto-upgrades)
124
+ lkm unhold 6.12.0
125
+
126
+ lkm note 6.12.0 "stable, use this" # attach a note to a kernel
127
+
128
+ lkm remove-old # remove all but running + most recent
129
+ lkm remove-old --keep=2 # keep 2 most recent
130
+
131
+ lkm providers # list available providers
132
+ lkm info # system info (distro, arch, running kernel)
133
+ ```
134
+
135
+ ### Building with lkf
136
+
137
+ Requires [lkf](https://github.com/Interested-Deving-1896/lkf) to be installed (`make install` from the lkf repo).
138
+
139
+ ```sh
140
+ # Build from a remix.toml profile and install the result
141
+ lkm remix --file ~/.local/share/lkf/profiles/gaming.toml --install
142
+
143
+ # Build mainline 6.12 with Clang/LLVM + thin LTO, produce a .deb, then install
144
+ lkm build --version 6.12 --flavor mainline --llvm --lto thin --output deb --install
145
+
146
+ # Build without installing (package lands in ~/.cache/lkm/lkf-output/)
147
+ lkm build --version 6.12 --flavor tkg --arch aarch64 --output rpm
148
+ ```
149
+
150
+ ---
151
+
152
+ ## GUI
153
+
154
+ ```sh
155
+ lkm-gui
156
+ ```
157
+
158
+ The GUI shows a tabbed window — one tab per kernel family plus an **All** tab. Each tab has a search bar, family/status filters, a sortable kernel table, and a live log panel at the bottom.
159
+
160
+ Right-click any kernel row for: Install / Remove / Hold / Unhold / Edit Note.
161
+
162
+ ### Build tab
163
+
164
+ The **⚙ Build…** toolbar button opens the lkf build dialog with two modes:
165
+
166
+ - **Profile** — pick a `remix.toml` from discovered lkf profiles (or browse for one). Streams `lkf remix` output live.
167
+ - **Custom** — specify version, flavor, arch, compiler flags (LLVM/LTO), and output format. Streams `lkf build` output live.
168
+
169
+ On a successful build, lkm offers to install the resulting package immediately.
170
+
171
+ ---
172
+
173
+ ## Architecture
174
+
175
+ ```
176
+ lkm/
177
+ ├── qt.py # PySide6/PyQt6 compatibility shim
178
+ ├── core/
179
+ │ ├── kernel.py # KernelEntry, KernelVersion, KernelFamily, KernelStatus
180
+ │ ├── system.py # distro/arch/package-manager detection
181
+ │ ├── manager.py # KernelManager — central coordinator, state persistence
182
+ │ ├── backends/ # Package manager backends
183
+ │ │ ├── apt.py # Debian / Ubuntu / Mint / …
184
+ │ │ ├── pacman.py # Arch / Manjaro / CachyOS / …
185
+ │ │ ├── dnf.py # Fedora / RHEL / AlmaLinux / …
186
+ │ │ ├── zypper.py # openSUSE
187
+ │ │ ├── apk.py # Alpine
188
+ │ │ ├── portage.py # Gentoo
189
+ │ │ ├── xbps.py # Void Linux
190
+ │ │ └── nix.py # NixOS
191
+ │ └── providers/ # Kernel source providers
192
+ │ ├── mainline.py # Ubuntu Mainline PPA
193
+ │ ├── xanmod.py # XanMod
194
+ │ ├── liquorix.py # Liquorix
195
+ │ ├── distro.py # Distro-native packages
196
+ │ ├── local_file.py # Pre-built local package files
197
+ │ ├── lkf_build.py # lkf build pipeline bridge
198
+ │ ├── gentoo.py # Gentoo source compilation
199
+ │ ├── void.py # Void Linux (xbps)
200
+ │ └── nixos.py # NixOS (declarative)
201
+ ├── cli/
202
+ │ ├── main.py # CLI entry point
203
+ │ └── output.py # Colour output, tables, JSON mode
204
+ └── gui/
205
+ ├── app.py # QApplication entry point + stylesheet
206
+ ├── kernel_model.py # QAbstractTableModel for KernelEntry lists
207
+ ├── main_window.py # Main window (toolbar, tabs, log panel)
208
+ └── widgets/
209
+ ├── kernel_view.py # Filterable, sortable kernel table
210
+ ├── log_panel.py # Collapsible live log panel
211
+ ├── lkf_build_dialog.py # lkf build dialog (Profile + Custom modes)
212
+ ├── gentoo_compile_dialog.py
213
+ └── note_dialog.py
214
+ ```
215
+
216
+ Adding a new kernel source: implement `KernelProvider` in `lkm/core/providers/` and register it in `lkm/core/providers/__init__.py`.
217
+
218
+ Adding a new package manager: implement `PackageBackend` in `lkm/core/backends/` and register it in `lkm/core/backends/__init__.py` and `lkm/core/system.py`.
219
+
220
+ ---
221
+
222
+ ## Development
223
+
224
+ ```sh
225
+ git clone https://github.com/Interested-Deving-1896/lkm
226
+ cd lkm
227
+ python3 -m venv .venv && source .venv/bin/activate
228
+ pip install -e ".[dev]"
229
+
230
+ # Run tests
231
+ pytest
232
+
233
+ # Lint
234
+ ruff check lkm/
235
+
236
+ # Type check
237
+ mypy lkm/
238
+
239
+ # Launch GUI
240
+ lkm-gui
241
+
242
+ # Launch CLI
243
+ lkm info
244
+ lkm list
245
+ ```
246
+
247
+ ---
248
+
249
+ ## Notes on specific providers
250
+
251
+ **Ubuntu Mainline PPA** — packages are unsigned and will not boot with Secure Boot enabled. lkm warns at startup if Secure Boot is detected.
252
+
253
+ **XanMod / Liquorix** — x86-64 only. On first use, lkm offers to add the required apt repository and signing key automatically.
254
+
255
+ **lkf build** — requires [lkf](https://github.com/Interested-Deving-1896/lkf) on PATH. Set `LKF_ROOT` to point lkm at a non-standard lkf installation. Build output lands in `~/.cache/lkm/lkf-output/` by default; override with `LKF_OUTPUT_DIR`.
256
+
257
+ **Gentoo** — `lkm build` (via lkf) prints the interactive `make menuconfig` command for you to run in a terminal. The GUI Gentoo compile dialog streams the full build output live.
258
+
259
+ **NixOS** — kernel selection is declarative. lkm emits the `boot.kernelPackages` configuration snippet and optionally runs `nixos-rebuild switch`. It does not edit `configuration.nix` directly. Run lkm inside a `nix-shell` (or `nix develop`) to ensure build tools are on PATH.
260
+
261
+ ---
262
+
263
+ ## License
264
+
265
+ GPL-3.0-or-later. See [LICENSE](LICENSE).
266
+
267
+ ## Origins
268
+
269
+ lkm is a merger of:
270
+ - **[lkf](https://github.com/Interested-Deving-1896/lkf)** — Linux Kernel Framework (shell, build pipeline)
271
+ - **[ukm](https://github.com/Interested-Deving-1896/ukm)** — Universal Kernel Manager (Python, runtime management)
@@ -0,0 +1,45 @@
1
+ lkm/__init__.py,sha256=QXQ_e-ZYFEqwclZUa1vzq8x0tI97KFcv2xc-BE4lkbQ,76
2
+ lkm/qt.py,sha256=tWEy0d3EfBqM0AleclZXsswX6Ak1Q5lzO31u-kxwoRU,2845
3
+ lkm/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
+ lkm/cli/main.py,sha256=nBuq3-IwZxOMh6zAhSYCvm5MC34TeU4D6hZzoVEAY-Q,10052
5
+ lkm/cli/output.py,sha256=MJHrzQ1EE1XZcMaDCCwMVC9n8hGRAp9vjAfW42cIssc,1535
6
+ lkm/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
+ lkm/core/kernel.py,sha256=3TR88RqOSANdqkUBdTx293-BXDEkaCYOPZpJaZhehyg,3099
8
+ lkm/core/manager.py,sha256=Xi8zWiXOz0bfCF2OjIk-0sRse9zBH4LAV1T1Oy89hJM,9561
9
+ lkm/core/system.py,sha256=-NYZ77BxzF_Qjd92IQg5Kyzzv2giduWRSoCC4ziqfuQ,7552
10
+ lkm/core/backends/__init__.py,sha256=n-qEF9mg2LPEpd12Pd8cvFUQZff9CxxVI2XpuPNYnlk,1694
11
+ lkm/core/backends/apk.py,sha256=Z8aGgNscPDUpUrjgnq-wbZinL2xEu-sFlLSRpqFWwKs,1611
12
+ lkm/core/backends/apt.py,sha256=aFEiXEMaXw3WdPj9bKYGJTUoRGJ7rW5KCUCN4b65Guc,3199
13
+ lkm/core/backends/base.py,sha256=vM8pksqmmJpligAUpz2jIzFsZC-0l5F4OkgVdQeBd-M,2893
14
+ lkm/core/backends/dnf.py,sha256=k0NIHQI6yjnCefTa_2tf1CJl3rKAHPV6B-6N5i3csBE,1515
15
+ lkm/core/backends/nix.py,sha256=LWjaRH2jdJnlBx1qyAgbkUmFyqbPUYzvj5ShXXbGNuI,6999
16
+ lkm/core/backends/pacman.py,sha256=S7kJlEaEeuLPjlhRjCEjubQE6BPJOAYgx67GZ0OwzdY,2743
17
+ lkm/core/backends/portage.py,sha256=CcnkZlOtj8_fzezcw1EQ5wJPybznj2H3roth9fOfXjo,3950
18
+ lkm/core/backends/xbps.py,sha256=4h_788dpBbe-g_CA72V8uF8_CWgccDIipc5rlomNuTE,5026
19
+ lkm/core/backends/zypper.py,sha256=MttVePMUNVsvcWEfCBL4E2iJ3Ev-5BJHncO_kDgiBCg,1537
20
+ lkm/core/providers/__init__.py,sha256=Uk11Z5uCdzlBncn0CACN7CigGVxkCQ9NApb61bdnX2Q,2078
21
+ lkm/core/providers/base.py,sha256=e_RfocIUbXzWxnu3Q12tqKvfhx1-dwg5csuRtrwGLv8,2745
22
+ lkm/core/providers/distro.py,sha256=qEWpduxR8W7d9DEm17lgDVxpQD12dUtXjOklbWlYs-c,5095
23
+ lkm/core/providers/gentoo.py,sha256=8UzbUo3BMEeTHtvTgTQRxPd5GVQiCpWAbdr1Pu-7YWg,2197
24
+ lkm/core/providers/liquorix.py,sha256=FODkTga8DvRunr70Yvn1cRQmqjpcHr_GUzaiip0L_9c,2853
25
+ lkm/core/providers/lkf_build.py,sha256=we9WSzaq5Wb6wH-9XPT9fK8E6IDxS8ZXRR_gZt8Sk0o,11343
26
+ lkm/core/providers/local_file.py,sha256=vgbLXjZj7vBibKT2SxULYJccSnn6nBb_sAOOb6N1L7I,3580
27
+ lkm/core/providers/mainline.py,sha256=lrRBX1QllrH519mQ2STQV6sZeNXe89Pp0zbqIpGYR18,3477
28
+ lkm/core/providers/nixos.py,sha256=KHkfz4Fg09HrwP3YGo3TuBsMle7P8tdlAoqIgJr1bAc,2440
29
+ lkm/core/providers/void.py,sha256=UhvEHzX-MSODU4Y-OMyN8RwTdN2la03Ahkci_wugZQk,2096
30
+ lkm/core/providers/xanmod.py,sha256=UETKOY63GBuxZrHV4KN74w2c5U7DYgK-EFgWE3aufyA,2701
31
+ lkm/gui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
32
+ lkm/gui/app.py,sha256=uNdeC4weZ276irehIIAzGmI_SFSga-GhvWUWt6QohqA,1952
33
+ lkm/gui/kernel_model.py,sha256=WsjACbAk2bEZ25SMAwqtCAxdtTMajkuDu9WAPr8WELI,3006
34
+ lkm/gui/main_window.py,sha256=QgrF4M04hjvDh38D5zI10cq8OP6fDpL2gK1D_2g08rE,13616
35
+ lkm/gui/widgets/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
36
+ lkm/gui/widgets/gentoo_compile_dialog.py,sha256=rl9TobTUhIsgTzOLduNL_4LJSTR0hLwxcp2QCq6_keM,4244
37
+ lkm/gui/widgets/kernel_view.py,sha256=0RbayzBGnXJQUFXYdMqC-VcKDc_3IfHyQkhTY9B9U54,4545
38
+ lkm/gui/widgets/lkf_build_dialog.py,sha256=DM4JxKy3XDIS5lnj9EqDB1PSmHaesNJilERO2pmmHws,12855
39
+ lkm/gui/widgets/log_panel.py,sha256=EjVkgCR6JPzUBs-155P39jM4JlY9xzcO3SfR_lLvmnQ,2298
40
+ lkm/gui/widgets/note_dialog.py,sha256=-lzZAgQNMx4hQe9vIM0oXFWQ7PsaH90x02YRJBy1g7c,1066
41
+ linux_kernel_manager-0.1.2.dist-info/METADATA,sha256=EwzRku9jneFlBro8P6Q4hJLKBp5my7vxXw_06xoM6tM,10381
42
+ linux_kernel_manager-0.1.2.dist-info/WHEEL,sha256=QccIxa26bgl1E6uMy58deGWi-0aeIkkangHcxk2kWfw,87
43
+ linux_kernel_manager-0.1.2.dist-info/entry_points.txt,sha256=1MV7lTPs9YRsQp_wvfYFJSfmypHRYDnCriGtGot2vEE,69
44
+ linux_kernel_manager-0.1.2.dist-info/licenses/LICENSE,sha256=5X8cMguM-HmKfS_4Om-eBqM6A1hfbgZf6pfx2G24QFI,35150
45
+ linux_kernel_manager-0.1.2.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: hatchling 1.29.0
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
@@ -0,0 +1,3 @@
1
+ [console_scripts]
2
+ lkm = lkm.cli.main:main
3
+ lkm-gui = lkm.gui.app:main