⚡ 🐛 KDE Neon 6.0
This commit is contained in:
		@@ -3,11 +3,11 @@ hideDockIcon=false
 | 
			
		||||
hideMainWindowWhenStarted=true
 | 
			
		||||
 | 
			
		||||
[MainWindow]
 | 
			
		||||
pos=@Point(0 0)
 | 
			
		||||
size=@Size(640 480)
 | 
			
		||||
pos=@Point(1094 150)
 | 
			
		||||
size=@Size(640 585)
 | 
			
		||||
 | 
			
		||||
[RepoTreeView]
 | 
			
		||||
expandedCategories-e77d1fb=Moje knihovny\tNed\xe1vno aktualizovan\xe9\tSd\xedleno se skupinama
 | 
			
		||||
expandedCategories-e77d1fb=Ned\xe1vno aktualizovan\xe9\tMoje knihovny\tSd\xedleno se skupinama
 | 
			
		||||
 | 
			
		||||
[Settings]
 | 
			
		||||
computerName=TUXEDO-InfinityBook-s15gen6
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										26
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										26
									
								
								README.md
									
									
									
									
									
								
							@@ -51,6 +51,32 @@ see for example [How to Store Dotfiles - A Bare Git Repository \| Atlassian Git
 | 
			
		||||
## PC log (cs)
 | 
			
		||||
Sekce obsahuje log změn v Tuxedo laptopu s KDE Neon.
 | 
			
		||||
 | 
			
		||||
### KDE Neon 6.0 (22.04)
 | 
			
		||||
{NEXT <2024-03-20> *tilling* *hud* *html-wallpaper* *virtual-desktop* *klipper* agenda}$
 | 
			
		||||
 | 
			
		||||
- mostly OK
 | 
			
		||||
- [ ] desktop exceptionally freeze for less than a second: *investigation → report a bug*
 | 
			
		||||
- [ ] logout/poweroff dialog not showing and not working: *investigation → report a bug* … see below
 | 
			
		||||
- [x] krunner not launching → created `/usr/share/dbus-1/services/org.kde.krunner.service` (see below)
 | 
			
		||||
- [x] meta+tab (last virtual desktop) → workaround [./bin/kde6-workarounds.mjs](./bin/kde6-workarounds.mjs)
 | 
			
		||||
- [x] klipper (edit last item) → workaround [./bin/kde6-workarounds.mjs](./bin/kde6-workarounds.mjs)
 | 
			
		||||
- [ ] !!! Event calendar widget
 | 
			
		||||
- [x] Active Window Control replaced with Window Title widget and its better
 | 
			
		||||
- [ ] html wallpaper → workaround just concat images (see [./bin/§wallpaper\_BIOTD](./bin/§wallpaper_BIOTD))
 | 
			
		||||
- [ ] tilling → try to use native, try to use [zeroxoneafour/polonium: Tiling window manager for KWin 5.27](https://github.com/zeroxoneafour/polonium) (when there will be a new release)
 | 
			
		||||
- [ ] hud ([Zren/plasma-hud](https://github.com/Zren/plasma-hud) still works on X11), but maybe Ctrl+Alt+i and so on is OK?
 | 
			
		||||
 | 
			
		||||
```bash
 | 
			
		||||
qdbus org.kde.ksmserver /KSMServer org.kde.KSMServerInterface.logout 1
 | 
			
		||||
Cannot find 'org.kde.KSMServerInterface.logout' in object /KSMServer at org.kde.ksmserver
 | 
			
		||||
```
 | 
			
		||||
[KDE Bugtracking System Main Page](https://bugs.kde.org/)
 | 
			
		||||
```ini
 | 
			
		||||
[D-BUS Service]
 | 
			
		||||
Name=org.kde.krunner
 | 
			
		||||
Exec=/usr/bin/krunner
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### KDE neon 5.26 (22.04)
 | 
			
		||||
{DONE <2022-10-25 17:21> *mail* *hud* *klíčenka* agenda}$
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -7,9 +7,9 @@
 | 
			
		||||
            "file_name": "github-desktop",
 | 
			
		||||
            "exec": "yes",
 | 
			
		||||
            "description": "Fork of GitHub Desktop to support various Linux distributions",
 | 
			
		||||
            "last_update": "2023-12-20T15:25:06Z",
 | 
			
		||||
            "last_update": "2024-02-04T22:31:22Z",
 | 
			
		||||
            "downloads": "/home/jaandrle/bin/github-desktop",
 | 
			
		||||
            "version": "release-3.3.6-linux3"
 | 
			
		||||
            "version": "release-3.3.8-linux2"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "repository": "jaandrle/jaaCSS-cli",
 | 
			
		||||
@@ -29,9 +29,9 @@
 | 
			
		||||
            "group": "nondev",
 | 
			
		||||
            "file_name": "youtube-music",
 | 
			
		||||
            "exec": "yes",
 | 
			
		||||
            "last_update": "2024-01-05T14:44:27Z",
 | 
			
		||||
            "last_update": "2024-02-20T12:07:29Z",
 | 
			
		||||
            "downloads": "/home/jaandrle/bin/youtube-music",
 | 
			
		||||
            "version": "v3.2.2"
 | 
			
		||||
            "version": "v3.3.2"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "repository": "ArchGPT/insomnium",
 | 
			
		||||
@@ -108,9 +108,9 @@
 | 
			
		||||
            "group": "nondev",
 | 
			
		||||
            "file_name": "upscayl",
 | 
			
		||||
            "exec": "yes",
 | 
			
		||||
            "last_update": "2024-01-16T09:54:25Z",
 | 
			
		||||
            "last_update": "2024-02-10T12:17:10Z",
 | 
			
		||||
            "downloads": "/home/jaandrle/bin/upscayl",
 | 
			
		||||
            "version": "v2.9.8"
 | 
			
		||||
            "version": "v2.9.9"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "repository": "RasmusLindroth/tut",
 | 
			
		||||
@@ -152,9 +152,9 @@
 | 
			
		||||
            "group": "nondev",
 | 
			
		||||
            "file_name": "fedistar",
 | 
			
		||||
            "exec": "yes",
 | 
			
		||||
            "last_update": "2024-01-29T10:29:58Z",
 | 
			
		||||
            "last_update": "2024-02-09T11:38:02Z",
 | 
			
		||||
            "downloads": "/home/jaandrle/bin/fedistar",
 | 
			
		||||
            "version": "v1.8.3"
 | 
			
		||||
            "version": "v1.8.4"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "repository": "ollama/ollama",
 | 
			
		||||
@@ -163,9 +163,9 @@
 | 
			
		||||
            "group": "ai",
 | 
			
		||||
            "file_name": "ollama",
 | 
			
		||||
            "exec": "yes",
 | 
			
		||||
            "last_update": "2024-01-26T18:19:36Z",
 | 
			
		||||
            "last_update": "2024-02-22T22:55:46Z",
 | 
			
		||||
            "downloads": "/home/jaandrle/bin/ollama",
 | 
			
		||||
            "version": "v0.1.22"
 | 
			
		||||
            "version": "v0.1.27"
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            "repository": "neovim/neovim",
 | 
			
		||||
@@ -208,9 +208,9 @@
 | 
			
		||||
            "group": "ai",
 | 
			
		||||
            "file_name": "jan",
 | 
			
		||||
            "exec": "yes",
 | 
			
		||||
            "last_update": "2024-01-29T05:19:22Z",
 | 
			
		||||
            "last_update": "2024-02-26T03:30:36Z",
 | 
			
		||||
            "downloads": "/home/jaandrle/bin/jan",
 | 
			
		||||
            "version": "v0.4.5"
 | 
			
		||||
            "version": "v0.4.7"
 | 
			
		||||
        }
 | 
			
		||||
    ]
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										61
									
								
								bin/kde6-workarounds.mjs
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										61
									
								
								bin/kde6-workarounds.mjs
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,61 @@
 | 
			
		||||
#!/usr/bin/env nodejsscript
 | 
			
		||||
/* jshint esversion: 11,-W097, -W040, module: true, node: true, expr: true, undef: true *//* global echo, $, pipe, s, fetch, cyclicLoop */
 | 
			
		||||
 | 
			
		||||
const pathLastDesktop= ()=> $.xdg.temp`kde6-workarounds-last-desktop.txt`;
 | 
			
		||||
const css= echo.css`
 | 
			
		||||
	.code { color: gray; }
 | 
			
		||||
`;
 | 
			
		||||
 | 
			
		||||
$.api()
 | 
			
		||||
.version("2024-02-29")
 | 
			
		||||
.describe("Workarounds for KDE6.")
 | 
			
		||||
.command("klipper-edit", "Edit last item in klipper.")
 | 
			
		||||
.action(async function(){
 | 
			
		||||
	$.is_silent= true;
 | 
			
		||||
	const qdbus= "qdbus org.kde.klipper /klipper org.kde.klipper.klipper.";
 | 
			
		||||
	try{
 | 
			
		||||
		const candidate= s.run(`${qdbus}getClipboardContents`).trim();
 | 
			
		||||
		const content= await $.read({ "-p": "Edit", completions: [ candidate ] });
 | 
			
		||||
		s.run(`${qdbus}setClipboardContents "${content}"`);
 | 
			
		||||
		$.exit(0);
 | 
			
		||||
	} catch (_){
 | 
			
		||||
		$.exit(1);
 | 
			
		||||
	}
 | 
			
		||||
})
 | 
			
		||||
.command("desktops-alttab", "Workaround for KDE6 alt-tab between virtual desktops.")
 | 
			
		||||
.action(function(){
 | 
			
		||||
	const path= pathLastDesktop();
 | 
			
		||||
	// Regarding ★ : this is a workaround for diagonal switching (it duplicates desktop index)
 | 
			
		||||
	let desktop= s.cat(path).trim() || "1";
 | 
			
		||||
	if(desktop.length>3){ // ★
 | 
			
		||||
		const [ _1, _2, ..._3 ]= desktop.slice(-4, desktop.length);
 | 
			
		||||
		if(_1===_2)
 | 
			
		||||
			desktop= desktop.slice(0, -4).concat(_1, ..._3);
 | 
			
		||||
	}
 | 
			
		||||
	if(desktop.length>2){ // ★
 | 
			
		||||
		const [ _1, _2 ]= desktop.slice(-2, desktop.length);
 | 
			
		||||
		if(_1===_2)
 | 
			
		||||
			desktop= desktop.slice(0, -1);
 | 
			
		||||
	}
 | 
			
		||||
	if(desktop.length>2){
 | 
			
		||||
		desktop= desktop.slice(-2, desktop.length);
 | 
			
		||||
		s.echo(desktop).to(path);
 | 
			
		||||
	}
 | 
			
		||||
	echo(desktop);
 | 
			
		||||
	s.run`qdbus org.kde.KWin /KWin org.kde.KWin.setCurrentDesktop ${desktop[0]}`;
 | 
			
		||||
	$.exit(0);
 | 
			
		||||
})
 | 
			
		||||
.command("desktops-last <dbus>", "Workaround for KDE6 alt-tab between virtual desktops.")
 | 
			
		||||
.describe([
 | 
			
		||||
	"Use",
 | 
			
		||||
	echo.format('%cdbus-monitor "interface=org.kde.KWin.VirtualDesktopManager" "member=currentChanged" | xargs -e -I {} kde6-workarounds.mjs desktops-last {}', css.code)
 | 
			
		||||
])
 | 
			
		||||
.action(function(dbus){
 | 
			
		||||
	if(-1===dbus.indexOf("path=/VirtualDesktopManager; interface=org.kde.KWin.VirtualDesktopManager; member=currentChanged"))
 | 
			
		||||
		return $.exit(1);
 | 
			
		||||
	const desktop= s.run`qdbus org.kde.KWin /KWin org.kde.KWin.currentDesktop`.trim();
 | 
			
		||||
	s.echo(desktop).toEnd(pathLastDesktop());
 | 
			
		||||
})
 | 
			
		||||
.parse();
 | 
			
		||||
 | 
			
		||||
/* rofi -dmenu -l 4 --theme-str 'window { width: 50ch; }' -p "promt" */
 | 
			
		||||
@@ -9,36 +9,36 @@ const folder= homedir()+"/Obrázky/Bing Image Of The Day/";
 | 
			
		||||
 | 
			
		||||
get_(url_main+"/HPImageArchive.aspx?format=js&idx=0&n=2&mkt=cs-CZ")
 | 
			
		||||
.then(res=> {
 | 
			
		||||
    let body= "";
 | 
			
		||||
    res.on("data", chunk=> body+= chunk);
 | 
			
		||||
    res.on("end", ()=> pipe(data, update)(body));
 | 
			
		||||
	let body= "";
 | 
			
		||||
	res.on("data", chunk=> body+= chunk);
 | 
			
		||||
	res.on("end", ()=> pipe(data, update)(body));
 | 
			
		||||
})
 | 
			
		||||
.catch(e=> console.error(String(e)));
 | 
			
		||||
 | 
			
		||||
function update(data){
 | 
			
		||||
    if(data===null) return false;
 | 
			
		||||
    Promise.allSettled(data.map(({ url, copyright }, id)=> getImage_(url, id ? "prev" : "now", copyright)))
 | 
			
		||||
    .then(res=> {
 | 
			
		||||
        let template= readFileSync(folder+"index_template.html").toString();
 | 
			
		||||
        writeFileSync(folder+"index.html", res.reduce((out, { status, value })=> status==="rejected" ? out : out.replace(`::${value.name}::`, value.description), template));
 | 
			
		||||
    })
 | 
			
		||||
    .catch(e=> console.error(String(e)));
 | 
			
		||||
	if(data===null) return false;
 | 
			
		||||
	Promise.allSettled(data.map(({ url, copyright }, id)=> getImage_(url, id ? "prev" : "now", copyright)))
 | 
			
		||||
	.then(res=> {
 | 
			
		||||
		let template= readFileSync(folder+"index_template.html").toString();
 | 
			
		||||
		writeFileSync(folder+"index.html", res.reduce((out, { status, value })=> status==="rejected" ? out : out.replace(`::${value.name}::`, value.description), template));
 | 
			
		||||
	})
 | 
			
		||||
	.catch(e=> console.error(String(e)));
 | 
			
		||||
}
 | 
			
		||||
function getImage_(url, name, desc){
 | 
			
		||||
    const description= desc.replace("(©", "<br>(©");
 | 
			
		||||
    return get_(url_main+url)
 | 
			
		||||
    .then(res=> {
 | 
			
		||||
        const fs= createWriteStream(folder+name+'.jpg');
 | 
			
		||||
        res.pipe(fs);
 | 
			
		||||
        return new Promise(res=> fs.on("finish", ()=> {
 | 
			
		||||
            fs.close();
 | 
			
		||||
            res({ name, description });
 | 
			
		||||
        }));
 | 
			
		||||
    });
 | 
			
		||||
	const description= desc.replace("(©", "<br>(©");
 | 
			
		||||
	return get_(url_main+url)
 | 
			
		||||
	.then(res=> {
 | 
			
		||||
		const fs= createWriteStream(folder+name+'.jpg');
 | 
			
		||||
		res.pipe(fs);
 | 
			
		||||
		return new Promise(res=> fs.on("finish", ()=> {
 | 
			
		||||
			fs.close();
 | 
			
		||||
			res({ name, description });
 | 
			
		||||
		}));
 | 
			
		||||
	});
 | 
			
		||||
}
 | 
			
		||||
function data(body){
 | 
			
		||||
          try   { return JSON.parse(body).images; }
 | 
			
		||||
    catch (_)   { return null; }
 | 
			
		||||
		  try	{ return JSON.parse(body).images; }
 | 
			
		||||
	catch (_)	{ return null; }
 | 
			
		||||
}
 | 
			
		||||
function get_(url){ return new Promise(function(res,rej){ get(url, res).on("error", rej); }); }
 | 
			
		||||
function pipe(...f){ return Array.prototype.reduce.bind(f, (acc, f)=> f(acc)); }
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user