Compare commits
No commits in common. "main" and "plasma6" have entirely different histories.
132 changed files with 1783 additions and 6535 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -2,7 +2,6 @@
|
|||
# Ignore build outputs from performing a nix-build or `nix build` command
|
||||
result
|
||||
result-*
|
||||
repl-result*
|
||||
|
||||
# ---> Kate
|
||||
# Ignore kate's swap files
|
||||
|
|
|
|||
10
.justfile
10
.justfile
|
|
@ -14,10 +14,14 @@ print-recipes:
|
|||
update:
|
||||
nix flake update
|
||||
|
||||
# Update a single input
|
||||
update-input input:
|
||||
nix flake lock --update-input {{input}}
|
||||
|
||||
@edit-secrets:
|
||||
git clone ssh://forgejo@git.toast003.xyz:4222/Toast/nix-secrets.git /tmp/secrets
|
||||
sed -i 's\git+ssh://forgejo@git.toast003.xyz:4222/Toast/nix-secrets\/tmp/secrets\g' flake.nix
|
||||
nix flake update secrets
|
||||
git clone ssh://forgejo@git.everest.sable-pancake.ts.net:4222/Toast/nix-secrets.git /tmp/secrets
|
||||
sed -i 's\git+ssh://forgejo@git.everest.sable-pancake.ts.net:4222/Toast/nix-secrets\/tmp/secrets\g' flake.nix
|
||||
just -q update-input secrets
|
||||
echo "{{bold}}All done!"
|
||||
echo "{{normal}}Remember to restore flake.nix"
|
||||
echo ""
|
||||
|
|
|
|||
386
flake.lock
generated
386
flake.lock
generated
|
|
@ -10,11 +10,11 @@
|
|||
"systems": "systems"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1762618334,
|
||||
"narHash": "sha256-wyT7Pl6tMFbFrs8Lk/TlEs81N6L+VSybPfiIgzU8lbQ=",
|
||||
"lastModified": 1712079060,
|
||||
"narHash": "sha256-/JdiT9t+zzjChc5qQiF+jhrVhRt8figYH29rZO7pFe4=",
|
||||
"owner": "ryantm",
|
||||
"repo": "agenix",
|
||||
"rev": "fcdea223397448d35d9b31f798479227e80183f6",
|
||||
"rev": "1381a759b205dff7a6818733118d02253340fd5e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -24,101 +24,64 @@
|
|||
}
|
||||
},
|
||||
"catppuccin": {
|
||||
"locked": {
|
||||
"lastModified": 1713895615,
|
||||
"narHash": "sha256-SVkxhcL0/IN5fNI2dqr702wXOnzktsm0LCEVGRAJQcY=",
|
||||
"owner": "catppuccin",
|
||||
"repo": "nix",
|
||||
"rev": "a48e70a31616cb63e4794fd3465bff1835cc4246",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "catppuccin",
|
||||
"repo": "nix",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"catppuccin-vsc": {
|
||||
"inputs": {
|
||||
"nixpkgs": "nixpkgs"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1765990358,
|
||||
"narHash": "sha256-l8x0gU8mnYaGMl+gWrsSHKBJlZWD8KXJfHTkRlFiPI0=",
|
||||
"lastModified": 1713966850,
|
||||
"narHash": "sha256-AHAkkTUjk86rED3pQh8i4OiSze+OHe697L0o3zhv89A=",
|
||||
"owner": "catppuccin",
|
||||
"repo": "nix",
|
||||
"rev": "de1b60ca45a578f59f7d84c8d338b346017b2161",
|
||||
"repo": "vscode",
|
||||
"rev": "75d96f3ae48b249f77124688a026ca5d7eeb5fb2",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "catppuccin",
|
||||
"repo": "nix",
|
||||
"repo": "vscode",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"catppuccin-konsole": {
|
||||
"flake-compat": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1720277724,
|
||||
"narHash": "sha256-d5+ygDrNl2qBxZ5Cn4U7d836+ZHz77m6/yxTIANd9BU=",
|
||||
"owner": "catppuccin",
|
||||
"repo": "konsole",
|
||||
"rev": "3b64040e3f4ae5afb2347e7be8a38bc3cd8c73a8",
|
||||
"lastModified": 1696426674,
|
||||
"narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
|
||||
"owner": "edolstra",
|
||||
"repo": "flake-compat",
|
||||
"rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "catppuccin",
|
||||
"repo": "konsole",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"copyparty": {
|
||||
"inputs": {
|
||||
"flake-utils": "flake-utils",
|
||||
"nixpkgs": [
|
||||
"nixpkgs-raw"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1766045858,
|
||||
"narHash": "sha256-lsbdHVSc5EB2+XgKDbeG1DjLLY5DnzlKQIPV0uQu/bQ=",
|
||||
"owner": "9001",
|
||||
"repo": "copyparty",
|
||||
"rev": "0e6b167167eaf04036df8576f1ea96bc116ea951",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "9001",
|
||||
"repo": "copyparty",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"eza-themes": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1765813820,
|
||||
"narHash": "sha256-WcwzKm2mi/tyA+zZCpyvTdrOrZ1R1ENA3t622SGzFas=",
|
||||
"owner": "eza-community",
|
||||
"repo": "eza-themes",
|
||||
"rev": "1239cb1dd23fa8b70865550db77701b164a53cde",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "eza-community",
|
||||
"repo": "eza-themes",
|
||||
"owner": "edolstra",
|
||||
"repo": "flake-compat",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"flake-utils": {
|
||||
"locked": {
|
||||
"lastModified": 1678901627,
|
||||
"narHash": "sha256-U02riOqrKKzwjsxc/400XnElV+UtPUQWpANPlyazjH0=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "93a2b84fc4b70d9e089d029deacc3583435c2ed6",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"flake-utils_2": {
|
||||
"inputs": {
|
||||
"systems": "systems_2"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1731533236,
|
||||
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
|
||||
"lastModified": 1710146030,
|
||||
"narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
|
||||
"rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -127,54 +90,6 @@
|
|||
"type": "github"
|
||||
}
|
||||
},
|
||||
"flake-utils_3": {
|
||||
"inputs": {
|
||||
"systems": "systems_3"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1731533236,
|
||||
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"flakey-profile": {
|
||||
"locked": {
|
||||
"lastModified": 1712898590,
|
||||
"narHash": "sha256-FhGIEU93VHAChKEXx905TSiPZKga69bWl1VB37FK//I=",
|
||||
"owner": "lf-",
|
||||
"repo": "flakey-profile",
|
||||
"rev": "243c903fd8eadc0f63d205665a92d4df91d42d9d",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "lf-",
|
||||
"repo": "flakey-profile",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"flakey-profile_2": {
|
||||
"locked": {
|
||||
"lastModified": 1712898590,
|
||||
"narHash": "sha256-FhGIEU93VHAChKEXx905TSiPZKga69bWl1VB37FK//I=",
|
||||
"owner": "lf-",
|
||||
"repo": "flakey-profile",
|
||||
"rev": "243c903fd8eadc0f63d205665a92d4df91d42d9d",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "lf-",
|
||||
"repo": "flakey-profile",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"home-manager": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
|
|
@ -183,11 +98,11 @@
|
|||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1745494811,
|
||||
"narHash": "sha256-YZCh2o9Ua1n9uCvrvi5pRxtuVNml8X2a03qIFfRKpFs=",
|
||||
"lastModified": 1703113217,
|
||||
"narHash": "sha256-7ulcXOk63TIT2lVDSExj7XzFx09LpdSAPtvgtM7yQPE=",
|
||||
"owner": "nix-community",
|
||||
"repo": "home-manager",
|
||||
"rev": "abfad3d2958c9e6300a883bd443512c55dfeb1be",
|
||||
"rev": "3bfaacf46133c037bb356193bd2f1765d9dc82c1",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -203,11 +118,11 @@
|
|||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1765980955,
|
||||
"narHash": "sha256-rB45jv4uwC90vM9UZ70plfvY/2Kdygs+zlQ07dGQFk4=",
|
||||
"lastModified": 1714042918,
|
||||
"narHash": "sha256-4AItZA3EQIiSNAxliuYEJumw/LaVfrMv84gYyrs0r3U=",
|
||||
"owner": "nix-community",
|
||||
"repo": "home-manager",
|
||||
"rev": "89c9508bbe9b40d36b3dc206c2483ef176f15173",
|
||||
"rev": "0c5704eceefcb7bb238a958f532a86e3b59d76db",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -223,16 +138,16 @@
|
|||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1765979862,
|
||||
"narHash": "sha256-/r9/1KamvbHJx6I40H4HsSXnEcBAkj46ZwibhBx9kg0=",
|
||||
"lastModified": 1714043624,
|
||||
"narHash": "sha256-Xn2r0Jv95TswvPlvamCC46wwNo8ALjRCMBJbGykdhcM=",
|
||||
"owner": "nix-community",
|
||||
"repo": "home-manager",
|
||||
"rev": "d3135ab747fd9dac250ffb90b4a7e80634eacbe9",
|
||||
"rev": "86853e31dc1b62c6eeed11c667e8cdd0285d4411",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-community",
|
||||
"ref": "release-25.11",
|
||||
"ref": "release-23.11",
|
||||
"repo": "home-manager",
|
||||
"type": "github"
|
||||
}
|
||||
|
|
@ -245,11 +160,11 @@
|
|||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1766067735,
|
||||
"narHash": "sha256-cRC/rOYRtZNzc5y9nTccozyo/mkI4/1eFE33Aqgs+SQ=",
|
||||
"lastModified": 1714022840,
|
||||
"narHash": "sha256-i6xZsf7Kvp1n/Sn3nqPY1MJQx0gf80OGQw32PA/aZd8=",
|
||||
"owner": "Jovian-Experiments",
|
||||
"repo": "Jovian-NixOS",
|
||||
"rev": "34a16089be30f77ac9444907ec97c02b4b711896",
|
||||
"rev": "94def3af1d45fe4b142beda3aa59a6a98e62ce9e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -258,73 +173,13 @@
|
|||
"type": "github"
|
||||
}
|
||||
},
|
||||
"lix": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1765883751,
|
||||
"narHash": "sha256-clrWX/t2swPGBVs50Yegq2HK3q5bbwOt3kWMsL7JIZM=",
|
||||
"rev": "fc0073f54095f15ee272621d4746eb9f40946385",
|
||||
"type": "tarball",
|
||||
"url": "https://git.lix.systems/api/v1/repos/lix-project/lix/archive/fc0073f54095f15ee272621d4746eb9f40946385.tar.gz?rev=fc0073f54095f15ee272621d4746eb9f40946385"
|
||||
},
|
||||
"original": {
|
||||
"type": "tarball",
|
||||
"url": "https://git.lix.systems/lix-project/lix/archive/main.tar.gz"
|
||||
}
|
||||
},
|
||||
"lix-module": {
|
||||
"inputs": {
|
||||
"flake-utils": "flake-utils_2",
|
||||
"flakey-profile": "flakey-profile",
|
||||
"lix": [
|
||||
"lix"
|
||||
],
|
||||
"nixpkgs": [
|
||||
"nixpkgs-raw"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1764519849,
|
||||
"narHash": "sha256-XnNABKfIYKSimQVvKc9FnlC2H0LurOhd9MS6l0Z67lE=",
|
||||
"rev": "6c95c0b6f73f831226453fc6905c216ab634c30f",
|
||||
"type": "tarball",
|
||||
"url": "https://git.lix.systems/api/v1/repos/lix-project/nixos-module/archive/6c95c0b6f73f831226453fc6905c216ab634c30f.tar.gz?rev=6c95c0b6f73f831226453fc6905c216ab634c30f"
|
||||
},
|
||||
"original": {
|
||||
"type": "tarball",
|
||||
"url": "https://git.lix.systems/lix-project/nixos-module/archive/main.tar.gz"
|
||||
}
|
||||
},
|
||||
"lix-module-unstable": {
|
||||
"inputs": {
|
||||
"flake-utils": "flake-utils_3",
|
||||
"flakey-profile": "flakey-profile_2",
|
||||
"lix": [
|
||||
"lix"
|
||||
],
|
||||
"nixpkgs": [
|
||||
"nixpkgs-unstable-raw"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1764519849,
|
||||
"narHash": "sha256-XnNABKfIYKSimQVvKc9FnlC2H0LurOhd9MS6l0Z67lE=",
|
||||
"rev": "6c95c0b6f73f831226453fc6905c216ab634c30f",
|
||||
"type": "tarball",
|
||||
"url": "https://git.lix.systems/api/v1/repos/lix-project/nixos-module/archive/6c95c0b6f73f831226453fc6905c216ab634c30f.tar.gz?rev=6c95c0b6f73f831226453fc6905c216ab634c30f"
|
||||
},
|
||||
"original": {
|
||||
"type": "tarball",
|
||||
"url": "https://git.lix.systems/lix-project/nixos-module/archive/main.tar.gz"
|
||||
}
|
||||
},
|
||||
"nix-flatpak": {
|
||||
"locked": {
|
||||
"lastModified": 1754777568,
|
||||
"narHash": "sha256-0bBqT+3XncgF8F03RFAamw9vdf0VmaDoIJLTGkjfQZs=",
|
||||
"lastModified": 1711997375,
|
||||
"narHash": "sha256-KvU4gOtuFMS9Il67glRGtdNfguAINT9pCaXtvCL8uI8=",
|
||||
"owner": "gmodena",
|
||||
"repo": "nix-flatpak",
|
||||
"rev": "62f636b87ef6050760a8cb325cadb90674d1e23e",
|
||||
"rev": "45bf66f7068db79b552da864c0e87452be624d6c",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -342,11 +197,11 @@
|
|||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1729697500,
|
||||
"narHash": "sha256-VFTWrbzDlZyFHHb1AlKRiD/qqCJIripXKiCSFS8fAOY=",
|
||||
"lastModified": 1690328911,
|
||||
"narHash": "sha256-fxtExYk+aGf2YbjeWQ8JY9/n9dwuEt+ma1eUFzF8Jeo=",
|
||||
"owner": "zhaofengli",
|
||||
"repo": "nix-github-actions",
|
||||
"rev": "e418aeb728b6aa5ca8c5c71974e7159c2df1d8cf",
|
||||
"rev": "96df4a39c52f53cb7098b923224d8ce941b64747",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -358,11 +213,11 @@
|
|||
},
|
||||
"nix-impermanence": {
|
||||
"locked": {
|
||||
"lastModified": 1737831083,
|
||||
"narHash": "sha256-LJggUHbpyeDvNagTUrdhe/pRVp4pnS6wVKALS782gRI=",
|
||||
"lastModified": 1708968331,
|
||||
"narHash": "sha256-VUXLaPusCBvwM3zhGbRIJVeYluh2uWuqtj4WirQ1L9Y=",
|
||||
"owner": "nix-community",
|
||||
"repo": "impermanence",
|
||||
"rev": "4b3e914cdf97a5b536a889e939fb2fd2b043a170",
|
||||
"rev": "a33ef102a02ce77d3e39c25197664b7a636f9c30",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -378,11 +233,11 @@
|
|||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1765267181,
|
||||
"narHash": "sha256-d3NBA9zEtBu2JFMnTBqWj7Tmi7R5OikoU2ycrdhQEws=",
|
||||
"lastModified": 1713869268,
|
||||
"narHash": "sha256-o3CMQeu/S8/4zU0pMtYg51rd1FWdJsI2Xohzng1Ysdg=",
|
||||
"owner": "Mic92",
|
||||
"repo": "nix-index-database",
|
||||
"rev": "82befcf7dc77c909b0f2a09f5da910ec95c5b78f",
|
||||
"rev": "dcb6ac44922858ce3a5b46f77a36d6030181460c",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -398,11 +253,11 @@
|
|||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1765267181,
|
||||
"narHash": "sha256-d3NBA9zEtBu2JFMnTBqWj7Tmi7R5OikoU2ycrdhQEws=",
|
||||
"lastModified": 1713869268,
|
||||
"narHash": "sha256-o3CMQeu/S8/4zU0pMtYg51rd1FWdJsI2Xohzng1Ysdg=",
|
||||
"owner": "Mic92",
|
||||
"repo": "nix-index-database",
|
||||
"rev": "82befcf7dc77c909b0f2a09f5da910ec95c5b78f",
|
||||
"rev": "dcb6ac44922858ce3a5b46f77a36d6030181460c",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -413,11 +268,11 @@
|
|||
},
|
||||
"nixos-hardware": {
|
||||
"locked": {
|
||||
"lastModified": 1764440730,
|
||||
"narHash": "sha256-ZlJTNLUKQRANlLDomuRWLBCH5792x+6XUJ4YdFRjtO4=",
|
||||
"lastModified": 1713864415,
|
||||
"narHash": "sha256-/BPDMJEkrsFAFOsQWhwm31wezlgshPFlLBn34KEUdVA=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixos-hardware",
|
||||
"rev": "9154f4569b6cdfd3c595851a6ba51bfaa472d9f3",
|
||||
"rev": "797f8d8082c7cc3259cba7275c699d4991b09ecc",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -429,11 +284,11 @@
|
|||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1763966396,
|
||||
"narHash": "sha256-6eeL1YPcY1MV3DDStIDIdy/zZCDKgHdkCmsrLJFiZf0=",
|
||||
"lastModified": 1712963716,
|
||||
"narHash": "sha256-WKm9CvgCldeIVvRz87iOMi8CFVB1apJlkUT4GGvA0iM=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "5ae3b07d8d6527c42f17c876e404993199144b6a",
|
||||
"rev": "cfd6b5fc90b15709b780a5a1619695a88505a176",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -445,26 +300,26 @@
|
|||
},
|
||||
"nixpkgs-raw": {
|
||||
"locked": {
|
||||
"lastModified": 1765838191,
|
||||
"narHash": "sha256-m5KWt1nOm76ILk/JSCxBM4MfK3rYY7Wq9/TZIIeGnT8=",
|
||||
"lastModified": 1713995372,
|
||||
"narHash": "sha256-fFE3M0vCoiSwCX02z8VF58jXFRj9enYUSTqjyHAjrds=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "c6f52ebd45e5925c188d1a20119978aa4ffd5ef6",
|
||||
"rev": "dd37924974b9202f8226ed5d74a252a9785aedf8",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"id": "nixpkgs",
|
||||
"ref": "nixos-25.11",
|
||||
"ref": "nixos-23.11",
|
||||
"type": "indirect"
|
||||
}
|
||||
},
|
||||
"nixpkgs-unstable-raw": {
|
||||
"locked": {
|
||||
"lastModified": 1765779637,
|
||||
"narHash": "sha256-KJ2wa/BLSrTqDjbfyNx70ov/HdgNBCBBSQP3BIzKnv4=",
|
||||
"lastModified": 1713895582,
|
||||
"narHash": "sha256-cfh1hi+6muQMbi9acOlju3V1gl8BEaZBXBR9jQfQi4U=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "1306659b587dc277866c7b69eb97e5f07864d8c4",
|
||||
"rev": "572af610f6151fd41c212f897c71f7056e3fb518",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -473,6 +328,21 @@
|
|||
"type": "indirect"
|
||||
}
|
||||
},
|
||||
"nur": {
|
||||
"locked": {
|
||||
"lastModified": 1714114197,
|
||||
"narHash": "sha256-f1kMNBUgbY+2/N0YkeouGNYdL7HVsRgcQLf5zL/ayd0=",
|
||||
"owner": "nix-community",
|
||||
"repo": "NUR",
|
||||
"rev": "10fc1b8b048fe797ada9302f700590afb457dde2",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-community",
|
||||
"repo": "NUR",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"plasma-manager": {
|
||||
"inputs": {
|
||||
"home-manager": [
|
||||
|
|
@ -483,15 +353,16 @@
|
|||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1763909441,
|
||||
"narHash": "sha256-56LwV51TX/FhgX+5LCG6akQ5KrOWuKgcJa+eUsRMxsc=",
|
||||
"owner": "nix-community",
|
||||
"lastModified": 1714390161,
|
||||
"narHash": "sha256-hWPGLUGNr7IR2FT4xS0VlhTW3S6xpw0hU3LJJC3CaKo=",
|
||||
"owner": "toast003",
|
||||
"repo": "plasma-manager",
|
||||
"rev": "b24ed4b272256dfc1cc2291f89a9821d5f9e14b4",
|
||||
"rev": "d9754f6f5dcf96969ad40496326213d5344846e5",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-community",
|
||||
"owner": "toast003",
|
||||
"ref": "libinput",
|
||||
"repo": "plasma-manager",
|
||||
"type": "github"
|
||||
}
|
||||
|
|
@ -500,15 +371,10 @@
|
|||
"inputs": {
|
||||
"agenix": "agenix",
|
||||
"catppuccin": "catppuccin",
|
||||
"catppuccin-konsole": "catppuccin-konsole",
|
||||
"copyparty": "copyparty",
|
||||
"eza-themes": "eza-themes",
|
||||
"catppuccin-vsc": "catppuccin-vsc",
|
||||
"home-manager": "home-manager_2",
|
||||
"home-manager-unstable": "home-manager-unstable",
|
||||
"jovian": "jovian",
|
||||
"lix": "lix",
|
||||
"lix-module": "lix-module",
|
||||
"lix-module-unstable": "lix-module-unstable",
|
||||
"nix-flatpak": "nix-flatpak",
|
||||
"nix-impermanence": "nix-impermanence",
|
||||
"nix-index-db": "nix-index-db",
|
||||
|
|
@ -516,45 +382,26 @@
|
|||
"nixos-hardware": "nixos-hardware",
|
||||
"nixpkgs-raw": "nixpkgs-raw",
|
||||
"nixpkgs-unstable-raw": "nixpkgs-unstable-raw",
|
||||
"nur": "nur",
|
||||
"plasma-manager": "plasma-manager",
|
||||
"secrets": "secrets",
|
||||
"sops-nix": "sops-nix"
|
||||
"vscode-extensions": "vscode-extensions"
|
||||
}
|
||||
},
|
||||
"secrets": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1766143747,
|
||||
"narHash": "sha256-bG4QoCZLUDrubYFuRvxiXhycBD3R+UjrzXrNZ+qRnio=",
|
||||
"lastModified": 1713910881,
|
||||
"narHash": "sha256-MZ1+GmZL3V3Kqe4YrxPA2W8vrF/c+f7sYOpf+jw6ESc=",
|
||||
"ref": "refs/heads/main",
|
||||
"rev": "8921f23861a82f0f8d706c276bc738ca72c053b1",
|
||||
"revCount": 41,
|
||||
"rev": "918b61f3ee194d7e67fa1d3200b64fe7741dd24a",
|
||||
"revCount": 15,
|
||||
"type": "git",
|
||||
"url": "ssh://forgejo@git.toast003.xyz:4222/Toast/nix-secrets"
|
||||
"url": "ssh://forgejo@git.everest.sable-pancake.ts.net:4222/Toast/nix-secrets"
|
||||
},
|
||||
"original": {
|
||||
"type": "git",
|
||||
"url": "ssh://forgejo@git.toast003.xyz:4222/Toast/nix-secrets"
|
||||
}
|
||||
},
|
||||
"sops-nix": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"nixpkgs-unstable-raw"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1765836173,
|
||||
"narHash": "sha256-hWRYfdH2ONI7HXbqZqW8Q1y9IRbnXWvtvt/ONZovSNY=",
|
||||
"owner": "Mic92",
|
||||
"repo": "sops-nix",
|
||||
"rev": "443a7f2e7e118c4fc63b7fae05ab3080dd0e5c63",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "Mic92",
|
||||
"repo": "sops-nix",
|
||||
"type": "github"
|
||||
"url": "ssh://forgejo@git.everest.sable-pancake.ts.net:4222/Toast/nix-secrets"
|
||||
}
|
||||
},
|
||||
"systems": {
|
||||
|
|
@ -587,18 +434,25 @@
|
|||
"type": "github"
|
||||
}
|
||||
},
|
||||
"systems_3": {
|
||||
"vscode-extensions": {
|
||||
"inputs": {
|
||||
"flake-compat": "flake-compat",
|
||||
"flake-utils": "flake-utils",
|
||||
"nixpkgs": [
|
||||
"nixpkgs-unstable-raw"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1681028828,
|
||||
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||
"lastModified": 1714094499,
|
||||
"narHash": "sha256-SC6tm901h2tzRxd6hfzn5/bgLJ8R4ng39R7SIkg6wlo=",
|
||||
"owner": "nix-community",
|
||||
"repo": "nix-vscode-extensions",
|
||||
"rev": "e05ff96b9f710d57d7cd60641f0273176debf222",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"owner": "nix-community",
|
||||
"repo": "nix-vscode-extensions",
|
||||
"type": "github"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
247
flake.nix
247
flake.nix
|
|
@ -3,10 +3,10 @@
|
|||
|
||||
inputs = {
|
||||
secrets = {
|
||||
url = "git+ssh://forgejo@git.toast003.xyz:4222/Toast/nix-secrets";
|
||||
url = "git+ssh://forgejo@git.everest.sable-pancake.ts.net:4222/Toast/nix-secrets";
|
||||
flake = false;
|
||||
};
|
||||
nixpkgs-raw.url = "nixpkgs/nixos-25.11";
|
||||
nixpkgs-raw.url = "nixpkgs/nixos-23.11";
|
||||
nixpkgs-unstable-raw.url = "nixpkgs/nixos-unstable";
|
||||
|
||||
agenix = {
|
||||
|
|
@ -16,13 +16,9 @@
|
|||
darwin.follows = ""; # Not using this on MacOS, so this doesn't pull it's dependencies
|
||||
};
|
||||
};
|
||||
sops-nix = {
|
||||
url = "github:Mic92/sops-nix";
|
||||
inputs.nixpkgs.follows = "nixpkgs-unstable-raw";
|
||||
};
|
||||
|
||||
home-manager = {
|
||||
url = "github:nix-community/home-manager/release-25.11";
|
||||
url = "github:nix-community/home-manager/release-23.11";
|
||||
inputs.nixpkgs.follows = "nixpkgs-raw";
|
||||
};
|
||||
|
||||
|
|
@ -40,9 +36,6 @@
|
|||
|
||||
nix-impermanence.url = "github:nix-community/impermanence";
|
||||
|
||||
copyparty.url = "github:9001/copyparty";
|
||||
copyparty.inputs.nixpkgs.follows = "nixpkgs-raw";
|
||||
|
||||
/*
|
||||
These are the same input, just following different nixpkgs versions
|
||||
This avoids some wierdness when using one that follows unstable on a stable nixpkgs
|
||||
|
|
@ -58,41 +51,22 @@
|
|||
};
|
||||
|
||||
plasma-manager = {
|
||||
url = "github:nix-community/plasma-manager/";
|
||||
url = "github:toast003/plasma-manager/libinput";
|
||||
inputs.nixpkgs.follows = "nixpkgs-unstable-raw";
|
||||
inputs.home-manager.follows = "home-manager-unstable";
|
||||
};
|
||||
|
||||
catppuccin-vsc.url = "github:catppuccin/vscode";
|
||||
|
||||
vscode-extensions = {
|
||||
url = "github:nix-community/nix-vscode-extensions";
|
||||
inputs.nixpkgs.follows = "nixpkgs-unstable-raw";
|
||||
};
|
||||
nix-flatpak.url = "github:gmodena/nix-flatpak/main";
|
||||
|
||||
nur.url = "github:nix-community/NUR";
|
||||
|
||||
catppuccin.url = "github:catppuccin/nix";
|
||||
|
||||
lix-module = {
|
||||
url = "https://git.lix.systems/lix-project/nixos-module/archive/main.tar.gz";
|
||||
inputs.nixpkgs.follows = "nixpkgs-raw";
|
||||
inputs.lix.follows = "lix";
|
||||
};
|
||||
lix-module-unstable = {
|
||||
url = "https://git.lix.systems/lix-project/nixos-module/archive/main.tar.gz";
|
||||
inputs.nixpkgs.follows = "nixpkgs-unstable-raw";
|
||||
inputs.lix.follows = "lix";
|
||||
};
|
||||
|
||||
# Non flake inputs / random things
|
||||
lix = {
|
||||
url = "https://git.lix.systems/lix-project/lix/archive/main.tar.gz";
|
||||
flake = false;
|
||||
};
|
||||
|
||||
eza-themes = {
|
||||
url = "github:eza-community/eza-themes";
|
||||
flake = false;
|
||||
};
|
||||
|
||||
catppuccin-konsole = {
|
||||
url = "github:catppuccin/konsole";
|
||||
flake = false;
|
||||
};
|
||||
};
|
||||
|
||||
outputs = {...} @ inputs:
|
||||
|
|
@ -103,30 +77,28 @@
|
|||
nixpkgs-unstable-patched = nixpkgs-raw.legacyPackages.x86_64-linux.applyPatches {
|
||||
name = "patched-nixpkgs-unstable";
|
||||
src = nixpkgs-unstable-raw;
|
||||
patches = [
|
||||
./nixpkgs-patches/pr471291.patch
|
||||
./nixpkgs-patches/revert-mangohud-update.patch
|
||||
];
|
||||
patches = [];
|
||||
};
|
||||
nixpkgs-patched = nixpkgs-raw.legacyPackages.x86_64-linux.applyPatches {
|
||||
name = "patched-nixpkgs";
|
||||
src = nixpkgs-raw;
|
||||
patches = [
|
||||
./nixpkgs-patches/0001-catppuccin-add-grub-theme.patch
|
||||
./nixpkgs-patches/0002-catppuccin-add-starship-theme.patch
|
||||
];
|
||||
};
|
||||
# https://discourse.nixos.org/t/proper-way-of-applying-patch-to-system-managed-via-flake/21073/26
|
||||
nixpkgs-unstable = (import "${nixpkgs-unstable-patched}/flake.nix").outputs {self = inputs.nixpkgs-unstable-raw;};
|
||||
nixpkgs = (import "${nixpkgs-patched}/flake.nix").outputs {self = inputs.nixpkgs-raw;};
|
||||
nixpkgs-unstable = (import "${nixpkgs-unstable-patched}/flake.nix").outputs {self = inputs.self;};
|
||||
nixpkgs = (import "${nixpkgs-patched}/flake.nix").outputs {self = inputs.self;};
|
||||
in {
|
||||
formatter.x86_64-linux = nixpkgs-unstable.legacyPackages.x86_64-linux.alejandra;
|
||||
devShells.x86_64-linux.default = nixpkgs.legacyPackages.x86_64-linux.mkShellNoCC {
|
||||
devShells.x86_64-linux.default = nixpkgs.legacyPackages.x86_64-linux.mkShell {
|
||||
name = "toast-devshell";
|
||||
# The agenix cli is not needed to activate a configuration, so instead of installing it
|
||||
# I'll just add it to de devShell, since that's the only real time I'm going to use it.
|
||||
packages = with nixpkgs.legacyPackages.x86_64-linux; [
|
||||
agenix.packages.x86_64-linux.default
|
||||
git
|
||||
nvd
|
||||
nix-output-monitor
|
||||
nix-diff
|
||||
just
|
||||
|
|
@ -136,104 +108,117 @@
|
|||
export PS1="$PS1(toast-configs)> "
|
||||
'';
|
||||
};
|
||||
overlays.default = final: prev: {
|
||||
kasane-teto-cursor = final.callPackage ./pkgs/kasane-teto-cursor {};
|
||||
kame-editor = final.callPackage ./pkgs/kame-editor {};
|
||||
kame-tools = final.callPackage ./pkgs/kame-tools {};
|
||||
rstmcpp = final.callPackage ./pkgs/rstmcpp {};
|
||||
};
|
||||
packages = {
|
||||
x86_64-linux = with import nixpkgs-unstable-raw {
|
||||
system = "x86_64-linux";
|
||||
overlays = [self.overlays.default];
|
||||
}; {
|
||||
inherit kasane-teto-cursor kame-editor kame-tools rstmcpp;
|
||||
x86_64-linux = with import nixpkgs-unstable-raw {system = "x86_64-linux";}; {
|
||||
anything-sync-daemon = callPackage ./pkgs/anything-sync-daemon {};
|
||||
discord-krisp-fixer = callPackage ./pkgs/discord-krisp-fixer {};
|
||||
};
|
||||
};
|
||||
nixosConfigurations = let
|
||||
mkSystems = hosts:
|
||||
builtins.mapAttrs (
|
||||
host: settings: let
|
||||
pkgs =
|
||||
if isStable
|
||||
then nixpkgs
|
||||
else nixpkgs-unstable;
|
||||
isStable = (settings ? stable) && (settings.stable == true);
|
||||
in
|
||||
mkSystem host settings.modules pkgs isStable
|
||||
)
|
||||
hosts;
|
||||
mkSystem = host: modules: pkgs: stable:
|
||||
pkgs.lib.nixosSystem {
|
||||
system = "x86_64-linux";
|
||||
specialArgs = {
|
||||
flakeSelf = self;
|
||||
};
|
||||
lib = import ./lib {nixpkgs = pkgs;};
|
||||
modules =
|
||||
[
|
||||
agenix.nixosModules.default
|
||||
sops-nix.nixosModules.sops
|
||||
(
|
||||
if stable
|
||||
then home-manager
|
||||
else home-manager-unstable
|
||||
)
|
||||
.nixosModules
|
||||
.home-manager
|
||||
(
|
||||
if stable
|
||||
then nix-index-db
|
||||
else nix-index-db-unstable
|
||||
)
|
||||
.nixosModules
|
||||
.nix-index
|
||||
catppuccin.nixosModules.catppuccin
|
||||
(
|
||||
if stable
|
||||
then lix-module
|
||||
else lix-module-unstable
|
||||
)
|
||||
.nixosModules
|
||||
.default
|
||||
./roles/common
|
||||
(./machines + "/${host}")
|
||||
]
|
||||
++ modules;
|
||||
nixosConfigurations = {
|
||||
Archie = nixpkgs-unstable.lib.nixosSystem {
|
||||
system = "x86_64-linux";
|
||||
specialArgs = {
|
||||
systemPkgs = inputs.nixpkgs-unstable-raw;
|
||||
flakeSelf = self;
|
||||
};
|
||||
in
|
||||
mkSystems {
|
||||
Archie.modules = [
|
||||
nixos-hardware.nixosModules.common-cpu-amd-zenpower
|
||||
/*
|
||||
I used to set up nixpkgs in the flake, but doing that made
|
||||
defining overlays in modules impossible (or at least I could
|
||||
not figure out how)
|
||||
Also has nice side effect of making it easier to add new systems :3
|
||||
*/
|
||||
modules = [
|
||||
agenix.nixosModules.default
|
||||
home-manager-unstable.nixosModule
|
||||
nix-index-db-unstable.nixosModules.nix-index
|
||||
catppuccin.nixosModules.catppuccin
|
||||
./roles/common
|
||||
./roles/desktop
|
||||
./roles/kde
|
||||
./roles/gaming
|
||||
./roles/school
|
||||
./machines/Archie
|
||||
];
|
||||
SurfaceGo.modules = [
|
||||
};
|
||||
|
||||
SurfaceGo = nixpkgs-unstable.lib.nixosSystem {
|
||||
system = "x86_64-linux";
|
||||
specialArgs = {
|
||||
systemPkgs = inputs.nixpkgs-unstable-raw;
|
||||
flakeSelf = self;
|
||||
};
|
||||
modules = [
|
||||
agenix.nixosModules.default
|
||||
home-manager-unstable.nixosModule
|
||||
nixos-hardware.nixosModules.microsoft-surface-go
|
||||
nix-index-db-unstable.nixosModules.nix-index
|
||||
catppuccin.nixosModules.catppuccin
|
||||
./roles/common
|
||||
./roles/desktop
|
||||
./roles/kde
|
||||
./machines/SurfaceGo
|
||||
];
|
||||
SteamDeck.modules = [
|
||||
jovian.nixosModules.default
|
||||
./roles/desktop
|
||||
./roles/kde
|
||||
./roles/gaming
|
||||
];
|
||||
WinMax2.modules = [
|
||||
nixos-hardware.nixosModules.gpd-win-max-2-2023
|
||||
./roles/desktop
|
||||
./roles/kde
|
||||
./roles/gaming
|
||||
];
|
||||
Everest = {
|
||||
stable = true;
|
||||
modules = [
|
||||
copyparty.nixosModules.default
|
||||
./roles/server
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
SteamDeck = nixpkgs-unstable.lib.nixosSystem {
|
||||
system = "x86_64-linux";
|
||||
specialArgs = {
|
||||
systemPkgs = inputs.nixpkgs-unstable-raw;
|
||||
flakeSelf = self;
|
||||
};
|
||||
modules = [
|
||||
agenix.nixosModules.default
|
||||
jovian.nixosModules.default
|
||||
home-manager-unstable.nixosModule
|
||||
nix-index-db-unstable.nixosModules.nix-index
|
||||
catppuccin.nixosModules.catppuccin
|
||||
./roles/common
|
||||
./roles/desktop
|
||||
./roles/kde
|
||||
./roles/gaming
|
||||
./roles/school
|
||||
./machines/SteamDeck
|
||||
];
|
||||
};
|
||||
|
||||
WinMax2 = nixpkgs-unstable.lib.nixosSystem {
|
||||
system = "x86_64-linux";
|
||||
specialArgs = {
|
||||
systemPkgs = inputs.nixpkgs-unstable-raw;
|
||||
flakeSelf = self;
|
||||
};
|
||||
modules = [
|
||||
agenix.nixosModules.default
|
||||
jovian.nixosModules.default
|
||||
home-manager-unstable.nixosModule
|
||||
nix-index-db-unstable.nixosModules.nix-index
|
||||
nixos-hardware.nixosModules.gpd-win-max-2-2023
|
||||
catppuccin.nixosModules.catppuccin
|
||||
./roles/common
|
||||
./roles/desktop
|
||||
./roles/kde
|
||||
./roles/gaming
|
||||
./roles/school
|
||||
./machines/WinMax2
|
||||
];
|
||||
};
|
||||
|
||||
Everest = nixpkgs.lib.nixosSystem {
|
||||
system = "x86_64-linux";
|
||||
specialArgs = {
|
||||
systemPkgs = inputs.nixpkgs-raw;
|
||||
flakeSelf = self;
|
||||
};
|
||||
modules = [
|
||||
agenix.nixosModules.default
|
||||
home-manager.nixosModule
|
||||
nix-index-db.nixosModules.nix-index
|
||||
catppuccin.nixosModules.catppuccin
|
||||
./roles/common
|
||||
./roles/server
|
||||
./machines/Everest
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,10 +0,0 @@
|
|||
{nixpkgs}:
|
||||
nixpkgs.lib.extend (final: prev: {
|
||||
toast = let
|
||||
importLib = file: import file {lib = final;};
|
||||
in {
|
||||
patches = importLib ./patches.nix;
|
||||
networkManager = importLib ./networkManager.nix;
|
||||
syncthing = importLib ./syncthing.nix;
|
||||
};
|
||||
})
|
||||
|
|
@ -1,23 +0,0 @@
|
|||
{lib}: {
|
||||
/**
|
||||
Make a NetworkManager wifi profile, to be used with ensureProfiles
|
||||
*/
|
||||
mkWifiProfile = {
|
||||
id,
|
||||
ssid,
|
||||
priority ? 0,
|
||||
wifi-security,
|
||||
}: {
|
||||
connection = {
|
||||
inherit id;
|
||||
type = "wifi";
|
||||
autoconnect-priority = priority;
|
||||
};
|
||||
ipv4.method = "auto";
|
||||
wifi = {
|
||||
mode = "infrastructure";
|
||||
inherit ssid;
|
||||
};
|
||||
inherit wifi-security;
|
||||
};
|
||||
}
|
||||
|
|
@ -1,13 +0,0 @@
|
|||
{lib}: {
|
||||
/**
|
||||
Get a list of patches from a path.
|
||||
*/
|
||||
patchesInPath = path: let
|
||||
pathContents = builtins.readDir path;
|
||||
filter = name: value:
|
||||
(value == "regular" || value == "symlink") && lib.strings.hasSuffix ".patch" name;
|
||||
filteredContents = lib.attrsets.filterAttrs filter pathContents;
|
||||
patchFilenames = builtins.attrNames filteredContents;
|
||||
in
|
||||
builtins.map (value: lib.path.append path value) patchFilenames;
|
||||
}
|
||||
|
|
@ -1,5 +0,0 @@
|
|||
{lib}: let
|
||||
data = import ./../syncthing.nix;
|
||||
in {
|
||||
devices = builtins.getAttr "devices" data;
|
||||
}
|
||||
|
|
@ -14,28 +14,27 @@
|
|||
# Enable support for the Xbox One wireless dongle
|
||||
hardware.xone.enable = true;
|
||||
|
||||
boot.initrd.availableKernelModules = ["xhci_pci" "ahci" "usbhid" "nvme" "sd_mod"];
|
||||
boot.initrd.availableKernelModules = ["xhci_pci" "ahci" "usbhid" "usb_storage" "sd_mod"];
|
||||
boot.initrd.kernelModules = ["amdgpu"];
|
||||
boot.kernelModules = ["kvm-amd"];
|
||||
boot.extraModulePackages = [];
|
||||
boot.extraModprobeConfig = "options snd_hda_intel power_save=0";
|
||||
|
||||
fileSystems."/" = {
|
||||
device = "/dev/disk/by-uuid/5322c217-b87b-4150-8b4c-a8fa17a899bf";
|
||||
fsType = "btrfs";
|
||||
options = ["subvol=@root"];
|
||||
options = ["subvol=@root" "compress=zstd"];
|
||||
};
|
||||
|
||||
fileSystems."/nix" = {
|
||||
device = "/dev/disk/by-uuid/5322c217-b87b-4150-8b4c-a8fa17a899bf";
|
||||
fsType = "btrfs";
|
||||
options = ["subvol=@nix"];
|
||||
options = ["subvol=@nix" "compress=zstd"];
|
||||
};
|
||||
|
||||
fileSystems."/boot" = {
|
||||
device = "/dev/disk/by-uuid/5322c217-b87b-4150-8b4c-a8fa17a899bf";
|
||||
fsType = "btrfs";
|
||||
options = ["subvol=@boot"];
|
||||
options = ["subvol=@boot" "compress=zstd"];
|
||||
};
|
||||
|
||||
fileSystems."/boot/efi" = {
|
||||
|
|
@ -54,12 +53,6 @@
|
|||
fsType = config.fileSystems."/".fsType;
|
||||
options = ["subvolid=5" "ro"];
|
||||
};
|
||||
"/mnt/hdd" = {
|
||||
# device = "/dev/disk/by-id/ata-SAMSUNG_HD103SI_S1Y5J9CZA19763-part1";
|
||||
label = "Archie\\x20HDD";
|
||||
fsType = "bcachefs";
|
||||
options = ["x-systemd.automount"];
|
||||
};
|
||||
"/mnt/windows" = {
|
||||
device = "/dev/disk/by-uuid/B61AFDAC1AFD6A2F";
|
||||
fsType = "ntfs3";
|
||||
|
|
@ -69,12 +62,12 @@
|
|||
"/home" = {
|
||||
device = "/dev/disk/by-uuid/5322c217-b87b-4150-8b4c-a8fa17a899bf";
|
||||
fsType = "btrfs";
|
||||
options = ["subvol=@home"];
|
||||
options = ["subvol=@home" "compress=zstd"];
|
||||
};
|
||||
"/persist" = {
|
||||
device = "/dev/disk/by-uuid/5322c217-b87b-4150-8b4c-a8fa17a899bf";
|
||||
fsType = "btrfs";
|
||||
options = ["subvol=@persist"];
|
||||
options = ["subvol=@persist" "compress=zstd"];
|
||||
neededForBoot = true;
|
||||
};
|
||||
};
|
||||
|
|
|
|||
|
|
@ -22,22 +22,18 @@
|
|||
wakeOnLan.enable = true;
|
||||
ipv4.addresses = [
|
||||
{
|
||||
address = "192.168.1.160";
|
||||
address = "192.168.0.160";
|
||||
prefixLength = 24;
|
||||
}
|
||||
];
|
||||
};
|
||||
# I use networkd, so I need to declare the interface for the default gateway
|
||||
defaultGateway = {
|
||||
address = "192.168.1.1";
|
||||
address = "192.168.0.1";
|
||||
interface = "eno1";
|
||||
};
|
||||
nameservers = ["9.9.9.9"];
|
||||
};
|
||||
systemd.network.wait-online.extraArgs = ["--dns"];
|
||||
|
||||
time.timeZone = "Europe/Madrid";
|
||||
services.automatic-timezoned.enable = lib.mkForce false;
|
||||
|
||||
# Define a user account. Don't forget to set a password with ‘passwd’.
|
||||
users.users.toast = {
|
||||
|
|
@ -57,4 +53,11 @@
|
|||
};
|
||||
};
|
||||
};
|
||||
|
||||
# Open ports in the firewall.
|
||||
# No idea what ports 5201 and 21027 do tho
|
||||
networking.firewall.allowedTCPPorts = [5201];
|
||||
networking.firewall.allowedUDPPorts = [5201 21027];
|
||||
# Or disable the firewall altogether.
|
||||
# networking.firewall.enable = false;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -23,9 +23,9 @@
|
|||
options = ["compress=zstd" "subvol=@"];
|
||||
};
|
||||
"/nix" = {
|
||||
device = "/dev/disk/by-uuid/5322c217-b87b-4150-8b4c-a8fa17a899bf";
|
||||
device = "/dev/disk/by-label/Everest";
|
||||
fsType = "btrfs";
|
||||
options = ["subvol=@nix-server"];
|
||||
options = ["compress=zstd" "subvol=@nix"];
|
||||
};
|
||||
"/home" = {
|
||||
device = "/dev/disk/by-label/Everest";
|
||||
|
|
@ -37,11 +37,6 @@
|
|||
fsType = "btrfs";
|
||||
options = ["compress=zstd" "subvol=/" "ro"];
|
||||
};
|
||||
"/mnt/ssd" = {
|
||||
device = "/dev/disk/by-uuid/5322c217-b87b-4150-8b4c-a8fa17a899bf";
|
||||
fsType = "btrfs";
|
||||
options = ["subvol=/" "ro"];
|
||||
};
|
||||
"/persist" = {
|
||||
device = "/dev/disk/by-label/Everest";
|
||||
fsType = "btrfs";
|
||||
|
|
@ -51,7 +46,7 @@
|
|||
};
|
||||
|
||||
fileSystems."/boot/efi" = {
|
||||
device = "/dev/disk/by-uuid/FB87-4CBC";
|
||||
device = "/dev/disk/by-label/Boot";
|
||||
fsType = "vfat";
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@
|
|||
enable = true;
|
||||
autoStart = true;
|
||||
user = "toast";
|
||||
desktopSession = "plasma";
|
||||
desktopSession = "plasmawayland";
|
||||
};
|
||||
decky-loader = {
|
||||
enable = true;
|
||||
|
|
|
|||
|
|
@ -45,13 +45,6 @@ in {
|
|||
fsType = "btrfs";
|
||||
options = ["subvol=@" "compress=zstd"];
|
||||
};
|
||||
"btrfs_persist" = {
|
||||
mountPoint = "/persist";
|
||||
label = ssdLabel;
|
||||
fsType = "btrfs";
|
||||
options = ["subvol=@persist"];
|
||||
neededForBoot = true;
|
||||
};
|
||||
"btrfs_boot" = {
|
||||
mountPoint = "/boot";
|
||||
label = ssdLabel;
|
||||
|
|
|
|||
|
|
@ -7,19 +7,16 @@
|
|||
lib,
|
||||
...
|
||||
}: {
|
||||
# Use grub boot loader
|
||||
boot = {
|
||||
loader = {
|
||||
systemd-boot.enable = false;
|
||||
limine = {
|
||||
grub = {
|
||||
enable = true;
|
||||
enableEditor = true;
|
||||
secureBoot.enable = true;
|
||||
extraConfig = ''
|
||||
timeout: 3
|
||||
'';
|
||||
style = {
|
||||
graphicalTerminal.font.scale = "2x2";
|
||||
};
|
||||
device = "nodev";
|
||||
efiSupport = true;
|
||||
# No other OS on here :P
|
||||
useOSProber = false;
|
||||
};
|
||||
efi = {
|
||||
efiSysMountPoint = config.fileSystems."efi_boot_partition".mountPoint;
|
||||
|
|
@ -36,29 +33,24 @@
|
|||
|
||||
kernelPackages = pkgs.linuxPackages_latest;
|
||||
};
|
||||
catppuccin.limine.enable = true;
|
||||
|
||||
networking.hostName = "WinMax2"; # Define your hostname.
|
||||
|
||||
specialisation.noAVX512.configuration = {
|
||||
# For some reason The Finals crashes on CPUs that support AVX512
|
||||
boot.kernelParams = ["clearcpuid=304"];
|
||||
};
|
||||
|
||||
# Sleep fixes
|
||||
boot.kernelParams = ["rtc_cmos.use_acpi_alarm=1" "panic=5"];
|
||||
boot.kernelParams = ["rtc_cmos.use_acpi_alarm=1"];
|
||||
services.udev.extraRules = ''
|
||||
ACTION=="add", SUBSYSTEM=="i2c", ATTR{name}=="GXTP7385:00", ATTR{power/wakeup}="disabled"
|
||||
ACTION=="add", SUBSYSTEM=="i2c", ATTR{name}=="PNP0C50:00", ATTR{power/wakeup}="disabled"
|
||||
SUBSYSTEM=="usb", ATTR{idVendor}=="2541", ATTR{idProduct}=="9711", ATTR{remove}="1"
|
||||
'';
|
||||
|
||||
services = {
|
||||
hardware.bolt.enable = true;
|
||||
handheld-daemon = {
|
||||
enable = true;
|
||||
ui = {
|
||||
enable = true;
|
||||
};
|
||||
user = "toast";
|
||||
};
|
||||
# Input plumber conflicts with hhd, and it doesn't let me use mouse mode
|
||||
inputplumber.enable = lib.mkForce false;
|
||||
services.handheld-daemon = {
|
||||
enable = true;
|
||||
user = "toast";
|
||||
};
|
||||
|
||||
# Allow unfree packages
|
||||
|
|
@ -70,6 +62,29 @@
|
|||
|
||||
services = {
|
||||
xserver.xkb.layout = lib.mkForce "us";
|
||||
displayManager.sddm.settings = {
|
||||
General.GreeterEnvironment = "QT_SCREEN_SCALE_FACTORS=2";
|
||||
};
|
||||
};
|
||||
|
||||
jovian = {
|
||||
# Steam Deck UI settings
|
||||
steam = {
|
||||
enable = true;
|
||||
autoStart = false;
|
||||
user = "toast";
|
||||
desktopSession = "plasmawayland";
|
||||
};
|
||||
hardware.amd.gpu.enableBacklightControl = true;
|
||||
# Need patched mesa
|
||||
steamos = {
|
||||
enableMesaPatches = true;
|
||||
enableVendorRadv = true;
|
||||
};
|
||||
decky-loader = {
|
||||
enable = true;
|
||||
package = pkgs.decky-loader-prerelease;
|
||||
};
|
||||
};
|
||||
|
||||
# Enable bluetooth
|
||||
|
|
@ -83,9 +98,23 @@
|
|||
|
||||
# Enable CUPS to print documents.
|
||||
# services.printing.enable = true;
|
||||
environment.sessionVariables = {
|
||||
STEAM_FORCE_DESKTOPUI_SCALING = "2";
|
||||
};
|
||||
home-manager.sharedModules = [
|
||||
{
|
||||
programs.plasma.input.keyboard.layouts = lib.mkForce [{layout = "us";} {layout = "es";}];
|
||||
# Steam's hidpi support is bugged so it needds to be hardcoded
|
||||
# This bypasses that
|
||||
xdg.desktopEntries = {
|
||||
steam-noScaling = {
|
||||
name = "Steam (No Scaling)";
|
||||
exec = "env STEAM_FORCE_DESKTOPUI_SCALING=0 steam %U";
|
||||
icon = "steam";
|
||||
categories = ["Network" "FileTransfer" "Game"];
|
||||
comment = "Application for managing and playing games on Steam";
|
||||
};
|
||||
};
|
||||
programs.plasma.input.keyboard.layouts = lib.mkForce ["us"];
|
||||
}
|
||||
];
|
||||
|
||||
|
|
@ -129,13 +158,4 @@
|
|||
# (/run/current-system/configuration.nix). This is useful in case you
|
||||
# accidentally delete configuration.nix.
|
||||
# system.copySystemConfiguration = true;
|
||||
specialisation.bootDebug.configuration = {
|
||||
boot.kernelParams = [
|
||||
"systemd.debug-shell=1"
|
||||
"systemd.log_level=debug"
|
||||
"systemd.log_target=kmsg"
|
||||
"log_buf_len=1M"
|
||||
"printk.devkmsg=on"
|
||||
];
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -78,10 +78,7 @@ in {
|
|||
|
||||
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
||||
hardware = {
|
||||
cpu.amd = {
|
||||
updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
||||
ryzen-smu.enable = true;
|
||||
};
|
||||
cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
||||
sensor.iio.bmi260.enable = true;
|
||||
};
|
||||
}
|
||||
|
|
|
|||
49
nixpkgs-patches/0001-catppuccin-add-grub-theme.patch
Normal file
49
nixpkgs-patches/0001-catppuccin-add-grub-theme.patch
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
From 316d5e8f356d6817626bca5a37dd587418afc856 Mon Sep 17 00:00:00 2001
|
||||
From: BlankParticle <blankparticle@gmail.com>
|
||||
Date: Tue, 21 Nov 2023 18:14:15 +0530
|
||||
Subject: [PATCH 1/2] catppuccin: add grub theme
|
||||
|
||||
---
|
||||
pkgs/data/themes/catppuccin/default.nix | 14 +++++++++++++-
|
||||
1 file changed, 13 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/pkgs/data/themes/catppuccin/default.nix b/pkgs/data/themes/catppuccin/default.nix
|
||||
index 59e030eb9e0e..e8cdb0456d17 100644
|
||||
--- a/pkgs/data/themes/catppuccin/default.nix
|
||||
+++ b/pkgs/data/themes/catppuccin/default.nix
|
||||
@@ -1,5 +1,5 @@
|
||||
let
|
||||
- validThemes = [ "bat" "bottom" "btop" "hyprland" "k9s" "kvantum" "lazygit" "plymouth" "refind" "rofi" "waybar" ];
|
||||
+ validThemes = [ "bat" "bottom" "btop" "grub" "hyprland" "k9s" "kvantum" "lazygit" "plymouth" "refind" "rofi" "waybar" ];
|
||||
in
|
||||
{ fetchFromGitHub
|
||||
, lib
|
||||
@@ -40,6 +40,14 @@ let
|
||||
hash = "sha256-J3UezOQMDdxpflGax0rGBF/XMiKqdqZXuX4KMVGTxFk=";
|
||||
};
|
||||
|
||||
+ grub = fetchFromGitHub {
|
||||
+ name = "grub";
|
||||
+ owner = "catppuccin";
|
||||
+ repo = "grub";
|
||||
+ rev = "v1.0.0";
|
||||
+ hash = "sha256-/bSolCta8GCZ4lP0u5NVqYQ9Y3ZooYCNdTwORNvR7M0=";
|
||||
+ };
|
||||
+
|
||||
hyprland = fetchFromGitHub {
|
||||
name = "hyprland";
|
||||
owner = "catppuccin";
|
||||
@@ -140,6 +148,10 @@ stdenvNoCC.mkDerivation {
|
||||
mkdir -p $out/bottom
|
||||
cp "${sources.bottom}/themes/${variant}.toml" "$out/bottom/"
|
||||
|
||||
+ '' + lib.optionalString (lib.elem "grub" themeList) ''
|
||||
+ mkdir -p $out/grub
|
||||
+ cp -r ${sources.grub}/src/catppuccin-${variant}-grub-theme/* "$out/grub/"
|
||||
+
|
||||
'' + lib.optionalString (lib.elem "hyprland" themeList) ''
|
||||
mkdir -p $out/hyprland
|
||||
cp "${sources.hyprland}/themes/${variant}.conf" "$out/hyprland/"
|
||||
--
|
||||
2.42.0
|
||||
|
||||
49
nixpkgs-patches/0002-catppuccin-add-starship-theme.patch
Normal file
49
nixpkgs-patches/0002-catppuccin-add-starship-theme.patch
Normal file
|
|
@ -0,0 +1,49 @@
|
|||
From 93af02433861cd32221164ddb4fc03b19cbf776b Mon Sep 17 00:00:00 2001
|
||||
From: Toast <39011842+toast003@users.noreply.github.com>
|
||||
Date: Sat, 13 Jan 2024 18:41:51 +0100
|
||||
Subject: [PATCH 2/2] catppuccin: add starship theme
|
||||
|
||||
---
|
||||
pkgs/data/themes/catppuccin/default.nix | 14 +++++++++++++-
|
||||
1 file changed, 13 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/pkgs/data/themes/catppuccin/default.nix b/pkgs/data/themes/catppuccin/default.nix
|
||||
index e8cdb0456d17..6ac8cc541ad3 100644
|
||||
--- a/pkgs/data/themes/catppuccin/default.nix
|
||||
+++ b/pkgs/data/themes/catppuccin/default.nix
|
||||
@@ -1,5 +1,5 @@
|
||||
let
|
||||
- validThemes = [ "bat" "bottom" "btop" "grub" "hyprland" "k9s" "kvantum" "lazygit" "plymouth" "refind" "rofi" "waybar" ];
|
||||
+ validThemes = [ "bat" "bottom" "btop" "grub" "hyprland" "k9s" "kvantum" "lazygit" "plymouth" "refind" "rofi" "starship" "waybar" ];
|
||||
in
|
||||
{ fetchFromGitHub
|
||||
, lib
|
||||
@@ -104,6 +104,14 @@ let
|
||||
hash = "sha256-DNorfyl3C4RBclF2KDgwvQQwixpTwSRu7fIvihPN8JY=";
|
||||
};
|
||||
|
||||
+ starship = fetchFromGitHub {
|
||||
+ name = "starship";
|
||||
+ owner = "catppuccin";
|
||||
+ repo = "starship";
|
||||
+ rev = "5629d2356f62a9f2f8efad3ff37476c19969bd4f";
|
||||
+ hash = "sha256-nsRuxQFKbQkyEI4TXgvAjcroVdG+heKX5Pauq/4Ota0=";
|
||||
+ };
|
||||
+
|
||||
waybar = fetchFromGitHub {
|
||||
name = "waybar";
|
||||
owner = "catppuccin";
|
||||
@@ -183,6 +191,10 @@ stdenvNoCC.mkDerivation {
|
||||
cp ${sources.refind}/${variant}.conf $out/refind/
|
||||
cp -r ${sources.refind}/assets/${variant} $out/refind/assets/
|
||||
|
||||
+ '' + lib.optionalString (lib.elem "starship" themeList) ''
|
||||
+ mkdir -p $out/starship
|
||||
+ cp ${sources.starship}/palettes/${variant}.toml $out/starship/
|
||||
+
|
||||
'' + lib.optionalString (lib.elem "waybar" themeList) ''
|
||||
mkdir -p $out/waybar
|
||||
cp ${sources.waybar}/${variant}.css $out/waybar/
|
||||
--
|
||||
2.42.0
|
||||
|
||||
|
|
@ -1,61 +0,0 @@
|
|||
From ef52b16862caa43dd4abc0aedf1814796342b664 Mon Sep 17 00:00:00 2001
|
||||
From: K900 <me@0upti.me>
|
||||
Date: Tue, 16 Dec 2025 11:48:37 +0300
|
||||
Subject: [PATCH] kdePackages.plasma-vault: refresh patch
|
||||
|
||||
No idea how this happened.
|
||||
---
|
||||
.../plasma/plasma-vault/hardcode-paths.patch | 26 +++++++++----------
|
||||
1 file changed, 13 insertions(+), 13 deletions(-)
|
||||
|
||||
diff --git a/pkgs/kde/plasma/plasma-vault/hardcode-paths.patch b/pkgs/kde/plasma/plasma-vault/hardcode-paths.patch
|
||||
index d8a5f4a025de3..090df77eb15b0 100644
|
||||
--- a/pkgs/kde/plasma/plasma-vault/hardcode-paths.patch
|
||||
+++ b/pkgs/kde/plasma/plasma-vault/hardcode-paths.patch
|
||||
@@ -1,5 +1,5 @@
|
||||
diff --git a/kded/engine/backends/cryfs/cryfsbackend.cpp b/kded/engine/backends/cryfs/cryfsbackend.cpp
|
||||
-index f425eb3..5b8cd43 100644
|
||||
+index 64138b6..5d249aa 100644
|
||||
--- a/kded/engine/backends/cryfs/cryfsbackend.cpp
|
||||
+++ b/kded/engine/backends/cryfs/cryfsbackend.cpp
|
||||
@@ -207,7 +207,7 @@ QProcess *CryFsBackend::cryfs(const QStringList &arguments) const
|
||||
@@ -44,7 +44,7 @@ index b992f6f..eb828dd 100644
|
||||
|
||||
QString GocryptfsBackend::getConfigFilePath(const Device &device) const
|
||||
diff --git a/kded/engine/fusebackend_p.cpp b/kded/engine/fusebackend_p.cpp
|
||||
-index 8763304..e6860d2 100644
|
||||
+index 714b660..61d8bf5 100644
|
||||
--- a/kded/engine/fusebackend_p.cpp
|
||||
+++ b/kded/engine/fusebackend_p.cpp
|
||||
@@ -90,7 +90,7 @@ QProcess *FuseBackend::process(const QString &executable, const QStringList &arg
|
||||
@@ -57,19 +57,19 @@ index 8763304..e6860d2 100644
|
||||
|
||||
FutureResult<> FuseBackend::initialize(const QString &name, const Device &device, const MountPoint &mountPoint, const Vault::Payload &payload)
|
||||
diff --git a/kded/engine/vault.cpp b/kded/engine/vault.cpp
|
||||
-index c101079..67c8a83 100644
|
||||
+index a7a4741..773b671 100644
|
||||
--- a/kded/engine/vault.cpp
|
||||
+++ b/kded/engine/vault.cpp
|
||||
-@@ -485,7 +485,7 @@ FutureResult<> Vault::close()
|
||||
- } else {
|
||||
- // We want to check whether there is an application
|
||||
- // that is accessing the vault
|
||||
-- AsynQt::Process::getOutput(QStringLiteral("lsof"), {QStringLiteral("-t"), mountPoint().data()}) | cast<QString>() | onError([this] {
|
||||
-+ AsynQt::Process::getOutput(QStringLiteral("@lsof@"), {QStringLiteral("-t"), mountPoint().data()}) | cast<QString>() | onError([this] {
|
||||
- d->updateMessage(i18n("Unable to lock the vault because an application is using it"));
|
||||
- }) | onSuccess([this](const QString &result) {
|
||||
- // based on ksolidnotify.cpp
|
||||
-@@ -538,7 +538,7 @@ FutureResult<> Vault::forceClose()
|
||||
+@@ -490,7 +490,7 @@ FutureResult<> Vault::close()
|
||||
+ } else {
|
||||
+ // We want to check whether there is an application
|
||||
+ // that is accessing the vault
|
||||
+- AsynQt::Process::getOutput(QStringLiteral("lsof"), { QStringLiteral("-t"), mountPoint().data() })
|
||||
++ AsynQt::Process::getOutput(QStringLiteral("@lsof@"), { QStringLiteral("-t"), mountPoint().data() })
|
||||
+ | cast<QString>()
|
||||
+ | onError([this] {
|
||||
+ d->updateMessage(i18n("Unable to close the vault because an application is using it"));
|
||||
+@@ -546,7 +546,7 @@ FutureResult<> Vault::forceClose()
|
||||
using namespace AsynQt::operators;
|
||||
|
||||
AsynQt::await(
|
||||
|
|
@ -1,49 +0,0 @@
|
|||
diff --git a/pkgs/tools/graphics/mangohud/default.nix b/pkgs/tools/graphics/mangohud/default.nix
|
||||
index cf83d4254baa..992afd60d3cb 100644
|
||||
--- a/pkgs/tools/graphics/mangohud/default.nix
|
||||
+++ b/pkgs/tools/graphics/mangohud/default.nix
|
||||
@@ -24,8 +24,10 @@
|
||||
unzip,
|
||||
wayland,
|
||||
libXNVCtrl,
|
||||
+ nlohmann_json,
|
||||
spdlog,
|
||||
libxkbcommon,
|
||||
+ glew,
|
||||
glfw,
|
||||
libXrandr,
|
||||
x11Support ? true,
|
||||
@@ -93,14 +95,14 @@ let
|
||||
in
|
||||
stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "mangohud";
|
||||
- version = "0.8.2";
|
||||
+ version = "0.8.1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "flightlessmango";
|
||||
repo = "MangoHud";
|
||||
tag = "v${finalAttrs.version}";
|
||||
fetchSubmodules = true;
|
||||
- hash = "sha256-BZ3R7D2zOlg69rx4y2FzzjpXuPOv913TOz9kSvRN+Wg=";
|
||||
+ hash = "sha256-FvPhnOvcYE8vVB5R+ZRmuZxrC9U4GA338V7VAuUlHCE=";
|
||||
};
|
||||
|
||||
outputs = [
|
||||
@@ -188,6 +190,7 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
|
||||
buildInputs = [
|
||||
dbus
|
||||
+ nlohmann_json
|
||||
spdlog
|
||||
]
|
||||
++ lib.optional waylandSupport wayland
|
||||
@@ -195,6 +198,7 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
++ lib.optional nvidiaSupport libXNVCtrl
|
||||
++ lib.optional (x11Support || waylandSupport) libxkbcommon
|
||||
++ lib.optionals mangoappSupport [
|
||||
+ glew
|
||||
glfw
|
||||
libXrandr
|
||||
];
|
||||
|
||||
57
pkgs/anything-sync-daemon/default.nix
Normal file
57
pkgs/anything-sync-daemon/default.nix
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
{
|
||||
stdenv,
|
||||
lib,
|
||||
fetchFromGitHub,
|
||||
makeWrapper,
|
||||
rsync,
|
||||
gawk,
|
||||
pv,
|
||||
gnutar,
|
||||
zstd,
|
||||
util-linux,
|
||||
coreutils,
|
||||
gnugrep,
|
||||
findutils,
|
||||
}:
|
||||
stdenv.mkDerivation rec {
|
||||
pname = "anything-sync-daemon";
|
||||
version = "6.0.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "graysky2";
|
||||
repo = pname;
|
||||
rev = "v${version}";
|
||||
hash = "sha256-6nfaAMH5YgK6gimuZ8j1zWLTDOi11KIwW7Bf0Iwh7+I=";
|
||||
};
|
||||
|
||||
patches = [./disableDaemonStopTargets.patch];
|
||||
|
||||
nativeBuildInputs = [makeWrapper];
|
||||
|
||||
postPatch = ''
|
||||
substituteInPlace init/asd* \
|
||||
--replace /usr/bin/anything-sync-daemon $out/bin/anything-sync-daemon
|
||||
'';
|
||||
|
||||
enableParallelBuilding = true;
|
||||
|
||||
makeFlags = [
|
||||
"DESTDIR=${placeholder "out"}"
|
||||
"PREFIX="
|
||||
"INITDIR_SYSTEMD=/lib/systemd/system"
|
||||
];
|
||||
|
||||
installTargets = ["install-systemd-all"];
|
||||
|
||||
postInstall = ''
|
||||
wrapProgram $out/bin/anything-sync-daemon \
|
||||
--suffix PATH : ${lib.makeBinPath [rsync gawk pv gnutar zstd util-linux coreutils gnugrep findutils]}
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
description = "Symlinks and syncs user specified dirs to RAM";
|
||||
homepage = "https://github.com/graysky2/anything-sync-daemon/";
|
||||
license = lib.licenses.mit;
|
||||
platforms = platforms.linux;
|
||||
};
|
||||
}
|
||||
23
pkgs/anything-sync-daemon/disableDaemonStopTargets.patch
Normal file
23
pkgs/anything-sync-daemon/disableDaemonStopTargets.patch
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
diff --git a/Makefile b/Makefile
|
||||
index ddf2d73..827ea8f 100644
|
||||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -31,17 +31,7 @@ common/$(PN): Makefile common/$(PN).in
|
||||
|
||||
help: install
|
||||
|
||||
-stop-asd:
|
||||
-ifneq ($(PREFIX), /usr)
|
||||
- sudo -E asd unsync
|
||||
-endif
|
||||
-
|
||||
-disable-systemd:
|
||||
-ifeq ($(PREFIX), /usr)
|
||||
- systemctl stop asd asd-resync || /bin/true
|
||||
-endif
|
||||
-
|
||||
-install-bin: stop-asd disable-systemd common/$(PN)
|
||||
+install-bin: common/$(PN)
|
||||
$(Q)echo -e '\033[1;32mInstalling main script...\033[0m'
|
||||
$(INSTALL_DIR) "$(DESTDIR)$(BINDIR)"
|
||||
$(INSTALL_PROGRAM) common/$(PN) "$(DESTDIR)$(BINDIR)/$(PN)"
|
||||
17
pkgs/discord-krisp-fixer
Normal file
17
pkgs/discord-krisp-fixer
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
{ writeShellApplication
|
||||
, rizin
|
||||
, discord
|
||||
}:
|
||||
|
||||
writeShellApplication rec {
|
||||
name = "discord-krisp-fixer";
|
||||
|
||||
runtimeInputs = [ rizin ];
|
||||
|
||||
text = ''
|
||||
discord_version="${discord.version}"
|
||||
file="$HOME/.config/discord/$discord_version/modules/discord_krisp/discord_krisp.node"
|
||||
addr=$(rz-find -x '4881ec00010000' "$file" | head -n1)
|
||||
rizin -q -w -c "s $addr + 0x30 ; wao nop" "$file"
|
||||
'';
|
||||
}
|
||||
|
|
@ -1,59 +0,0 @@
|
|||
{
|
||||
lib,
|
||||
stdenv,
|
||||
fetchFromGitLab,
|
||||
qt6,
|
||||
portaudio,
|
||||
kame-tools,
|
||||
vgmstream,
|
||||
rstmcpp,
|
||||
}:
|
||||
stdenv.mkDerivation rec {
|
||||
name = "kame-editor";
|
||||
version = "1.4.1";
|
||||
|
||||
src = fetchFromGitLab {
|
||||
owner = "beelzy";
|
||||
repo = name;
|
||||
# tag = version;
|
||||
rev = "82c9c445644b133b6d0ce3529e65b1a3df83c804";
|
||||
hash = "sha256-V2nMvVIjFRM8++XQ9tkE2OiZzCvdrg0jK69HM+ZIVyA=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
substituteInPlace kame-editor.pro \
|
||||
--replace-fail "/usr/local/bin/" "$out/bin"
|
||||
'';
|
||||
|
||||
buildInputs = [
|
||||
qt6.qtbase
|
||||
portaudio
|
||||
];
|
||||
|
||||
qtWrapperArgs = [
|
||||
"--prefix PATH : ${
|
||||
lib.makeBinPath [
|
||||
kame-tools
|
||||
vgmstream
|
||||
rstmcpp
|
||||
]
|
||||
}"
|
||||
];
|
||||
|
||||
nativeBuildInputs = [
|
||||
qt6.qmake
|
||||
qt6.wrapQtAppsHook
|
||||
];
|
||||
|
||||
postBuild = ''
|
||||
bash ./buildicons.sh
|
||||
'';
|
||||
|
||||
postInstall = ''
|
||||
mkdir -p $out/share/icons/hicolor
|
||||
mkdir -p $out/share/applications
|
||||
|
||||
cp kame-editor.desktop $out/share/applications
|
||||
cp -r icons/. $out/share/icons/hicolor
|
||||
'';
|
||||
}
|
||||
|
|
@ -1,29 +0,0 @@
|
|||
{
|
||||
stdenv,
|
||||
fetchFromGitLab,
|
||||
zip,
|
||||
}:
|
||||
stdenv.mkDerivation rec {
|
||||
name = "kame-tools";
|
||||
version = "a1fe47cc";
|
||||
|
||||
src = fetchFromGitLab {
|
||||
owner = "beelzy";
|
||||
repo = name;
|
||||
rev = version;
|
||||
fetchSubmodules = true;
|
||||
hash = "sha256-ETl5f8M4OJPFB7NEq2mVuMm4RhBtAbMzlrvGHD14zXw=";
|
||||
};
|
||||
|
||||
postPatch = ''
|
||||
substituteInPlace buildtools/make_base \
|
||||
--replace-fail "/usr/local/bin" "$out/bin"
|
||||
'';
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/bin
|
||||
cp output/linux-x86_64/* $out/bin/
|
||||
'';
|
||||
|
||||
nativeBuildInputs = [zip];
|
||||
}
|
||||
|
|
@ -1,18 +0,0 @@
|
|||
{
|
||||
stdenvNoCC,
|
||||
fetchzip,
|
||||
}:
|
||||
stdenvNoCC.mkDerivation {
|
||||
name = "kasane-teto-cursors";
|
||||
|
||||
src = fetchzip {
|
||||
url = "http://dl.everest.tailscale/Kasane%20Teto%20Cursor%20-%20by%20wobb.zip";
|
||||
hash = "sha256-4neZqApkK6hwufLTilUtPmgzyBih7onSdSZ9lezQbIU=";
|
||||
};
|
||||
|
||||
dontBuild = true;
|
||||
installPhase = ''
|
||||
mkdir -p $out/share/icons
|
||||
cp -dr --no-preserve='ownership' $src/Linux/Kasane\ Teto $out/share/icons
|
||||
'';
|
||||
}
|
||||
|
|
@ -1,21 +0,0 @@
|
|||
{
|
||||
stdenv,
|
||||
fetchFromGitLab,
|
||||
}:
|
||||
stdenv.mkDerivation rec {
|
||||
name = "rstmcpp";
|
||||
version = "fe8bee01";
|
||||
|
||||
src = fetchFromGitLab {
|
||||
owner = "beelzy";
|
||||
repo = name;
|
||||
rev = version;
|
||||
fetchSubmodules = true;
|
||||
hash = "sha256-T9mxTBj/eykvbBkbmEKTUFldtBp3cJgWAbeu44SwxiM=";
|
||||
};
|
||||
|
||||
installPhase = ''
|
||||
mkdir -p $out/bin
|
||||
cp rstmcpp $out/bin
|
||||
'';
|
||||
}
|
||||
|
|
@ -5,6 +5,7 @@
|
|||
flakeSelf,
|
||||
...
|
||||
}: {
|
||||
imports = [flakeSelf.inputs.nur.nixosModules.nur];
|
||||
environment = {
|
||||
# As of the 1st of May 2023, the default packages are nano, perl, rsync and strace
|
||||
# I don't need any of them, so I just empty the list
|
||||
|
|
@ -18,8 +19,6 @@
|
|||
cleanOnBoot = !config.boot.tmp.useTmpfs;
|
||||
};
|
||||
|
||||
environment.localBinInPath = lib.mkDefault true;
|
||||
|
||||
# Set up zram
|
||||
zramSwap = {
|
||||
enable = true;
|
||||
|
|
@ -46,23 +45,6 @@
|
|||
|
||||
boot.supportedFilesystems = ["nfs"];
|
||||
|
||||
security.pki.certificates = [
|
||||
# Caddy
|
||||
''
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIBqTCCAU+gAwIBAgIQceh0ZUBNrOmqLVsDr+2HBjAKBggqhkjOPQQDAjAzMTEw
|
||||
LwYDVQQDEyhDYWRkeSAoRXZlcmVzdCkgbG9jYWwgQ0EgLSAyMDI0IEVDQyBSb290
|
||||
MB4XDTI0MDcxODAwMDEwM1oXDTM0MDUyNzAwMDEwM1owMzExMC8GA1UEAxMoQ2Fk
|
||||
ZHkgKEV2ZXJlc3QpIGxvY2FsIENBIC0gMjAyNCBFQ0MgUm9vdDBZMBMGByqGSM49
|
||||
AgEGCCqGSM49AwEHA0IABJjrY8x6iDXncxG8exwLyaEq8N0XnCIbga8PVYiz3VLS
|
||||
07++i0Dey9k68ag6KUZICfc8dX1uZ6/ozUZb4YO3xCSjRTBDMA4GA1UdDwEB/wQE
|
||||
AwIBBjASBgNVHRMBAf8ECDAGAQH/AgEBMB0GA1UdDgQWBBTQAqZS9KeiAr9mSPV9
|
||||
RIJbSvRsTzAKBggqhkjOPQQDAgNIADBFAiBIgHrD2cUfNEctVx0WzHb0cLAsrK4Q
|
||||
3QbyxPLyenR+dAIhAMOIAyxlKKKvAJMOzAg0r+csSVRdP1YHsHiE7U1GeHWx
|
||||
-----END CERTIFICATE-----
|
||||
''
|
||||
];
|
||||
|
||||
# Set up localisation
|
||||
i18n = {
|
||||
defaultLocale = "en_US.UTF-8";
|
||||
|
|
@ -84,26 +66,19 @@
|
|||
};
|
||||
};
|
||||
|
||||
services = {
|
||||
fstrim.enable = true;
|
||||
fwupd.enable = true;
|
||||
};
|
||||
services.fwupd.enable = true;
|
||||
|
||||
# Set up my user
|
||||
users.mutableUsers = false;
|
||||
users.users.toast = {
|
||||
isNormalUser = true;
|
||||
description = "Toast";
|
||||
extraGroups = ["wheel"];
|
||||
hashedPasswordFile = config.sops.secrets.toast.path;
|
||||
};
|
||||
|
||||
# Set up time zone.
|
||||
time.timeZone = lib.mkDefault "Europe/Madrid";
|
||||
services.automatic-timezoned.enable = true;
|
||||
time.timeZone = "Europe/Madrid";
|
||||
|
||||
nixpkgs.overlays = [
|
||||
flakeSelf.outputs.overlays.default
|
||||
(
|
||||
final: prev: {
|
||||
catppuccin = prev.catppuccin.override {
|
||||
|
|
@ -120,29 +95,16 @@
|
|||
)
|
||||
];
|
||||
|
||||
catppuccin = {
|
||||
flavor = "mocha";
|
||||
accent = "mauve";
|
||||
};
|
||||
|
||||
programs.iotop.enable = true;
|
||||
catppuccin.flavour = "mocha";
|
||||
|
||||
home-manager = {
|
||||
backupFileExtension = "hm-backup";
|
||||
useGlobalPkgs = true;
|
||||
verbose = true;
|
||||
sharedModules = with flakeSelf; [
|
||||
inputs.catppuccin.homeModules.catppuccin
|
||||
inputs.sops-nix.homeManagerModules.sops
|
||||
];
|
||||
sharedModules = [flakeSelf.inputs.catppuccin.homeManagerModules.catppuccin];
|
||||
users.toast = {osConfig, ...}: {
|
||||
catppuccin.flavor = osConfig.catppuccin.flavor;
|
||||
catppuccin.accent = osConfig.catppuccin.accent;
|
||||
home.stateVersion = "25.05";
|
||||
manual = {
|
||||
manpages.enable = true;
|
||||
html.enable = true;
|
||||
};
|
||||
catppuccin.flavour = osConfig.catppuccin.flavour;
|
||||
home.stateVersion = "23.11";
|
||||
xdg = {
|
||||
enable = true;
|
||||
userDirs = {
|
||||
|
|
@ -151,7 +113,6 @@
|
|||
publicShare = null; # Disable the public folder
|
||||
};
|
||||
};
|
||||
systemd.user.startServices = true;
|
||||
};
|
||||
};
|
||||
|
||||
|
|
@ -161,16 +122,8 @@
|
|||
"/persist/id_host"
|
||||
];
|
||||
};
|
||||
sops = {
|
||||
age.sshKeyPaths = ["/persist/id_host"];
|
||||
defaultSopsFile = "${flakeSelf.inputs.secrets}/${config.networking.hostName}.yaml";
|
||||
secrets.toast = {
|
||||
sopsFile = "${flakeSelf.inputs.secrets}/passwd.yaml";
|
||||
neededForUsers = true;
|
||||
};
|
||||
};
|
||||
|
||||
catppuccin.grub.enable = true;
|
||||
boot.loader.grub.catppuccin.enable = true;
|
||||
|
||||
/*
|
||||
I used to keep the host keys in the repo as a secret, but since I use the
|
||||
|
|
@ -181,12 +134,9 @@
|
|||
*/
|
||||
|
||||
system = {
|
||||
stateVersion = "25.05";
|
||||
stateVersion = "23.11";
|
||||
# Nix on nixos 23.05 does not have dirtyRev
|
||||
configurationRevision = flakeSelf.sourceInfo.rev or flakeSelf.sourceInfo.dirtyRev or "dirty";
|
||||
nixos.variant_id = lib.mkDefault (lib.strings.toLower config.networking.hostName);
|
||||
};
|
||||
image.modules.iso = {
|
||||
system.nixos.variant_id = "${lib.strings.toLower config.networking.hostName}-iso";
|
||||
nixos.variant_id = lib.strings.toLower config.networking.hostName;
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,20 +1,14 @@
|
|||
{...}: {
|
||||
home-manager.users.toast = {
|
||||
catppuccin.atuin.enable = true;
|
||||
programs.atuin = {
|
||||
enable = true;
|
||||
settings = {
|
||||
enter_accept = true;
|
||||
workspaces = true;
|
||||
filter_mode = "workspace";
|
||||
style = "auto";
|
||||
inline_height = 0;
|
||||
stats = {
|
||||
common_prefix = [
|
||||
"sudo"
|
||||
","
|
||||
];
|
||||
};
|
||||
home-manager.users.toast.programs.atuin = {
|
||||
enable = true;
|
||||
settings = {
|
||||
enter_accept = false;
|
||||
workspaces = true;
|
||||
stats = {
|
||||
common_prefix = [
|
||||
"sudo"
|
||||
","
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
{...}: {
|
||||
home-manager = {
|
||||
users.toast = {
|
||||
programs.bat.enable = true;
|
||||
catppuccin.bat.enable = true;
|
||||
users.toast.programs.bat = {
|
||||
enable = true;
|
||||
catppuccin.enable = true;
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,8 +1,10 @@
|
|||
{...}: {
|
||||
home-manager = {
|
||||
users.toast = {
|
||||
catppuccin.btop.enable = true;
|
||||
programs.btop.enable = true;
|
||||
programs.btop = {
|
||||
enable = true;
|
||||
catppuccin.enable = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
imports = [
|
||||
./htop.nix
|
||||
./nix.nix
|
||||
./micro.nix
|
||||
./nix-index.nix
|
||||
./command-not-found.nix
|
||||
./comma.nix
|
||||
|
|
@ -13,8 +14,6 @@
|
|||
./helix.nix
|
||||
./direnv.nix
|
||||
./atuin.nix
|
||||
./fish.nix
|
||||
./eza.nix
|
||||
];
|
||||
# Some programs dont have a programs.*.enable option, so I install their package here
|
||||
environment.systemPackages = with pkgs; [
|
||||
|
|
|
|||
|
|
@ -1,10 +1,8 @@
|
|||
{...}: {
|
||||
home-manager.users.toast = {
|
||||
programs.direnv = {
|
||||
programs.direnv = {
|
||||
enable = true;
|
||||
nix-direnv = {
|
||||
enable = true;
|
||||
nix-direnv = {
|
||||
enable = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,20 +0,0 @@
|
|||
{
|
||||
flakeSelf,
|
||||
config,
|
||||
...
|
||||
}: {
|
||||
home-manager = {
|
||||
users.toast = {
|
||||
programs.eza = {
|
||||
enable = true;
|
||||
enableBashIntegration = true;
|
||||
git = true;
|
||||
icons = "auto";
|
||||
extraOptions = [
|
||||
"--group"
|
||||
];
|
||||
};
|
||||
xdg.configFile."eza/theme.yml".source = "${flakeSelf.inputs.eza-themes}/themes/catppuccin.yml";
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
@ -1,10 +0,0 @@
|
|||
{...}: {
|
||||
programs.fish = {
|
||||
enable = true;
|
||||
};
|
||||
|
||||
home-manager.users.toast = {
|
||||
catppuccin.fish.enable = true;
|
||||
programs.fish.enable = true;
|
||||
};
|
||||
}
|
||||
|
|
@ -1,25 +1,23 @@
|
|||
{...}: {
|
||||
programs.ssh.knownHosts = {
|
||||
"[git.toast003.xyz]:4222".publicKey = ''
|
||||
"[git.everest.sable-pancake.ts.net]:4222".publicKey = ''
|
||||
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKoUcWx56NZ3kqydN3d0gLNz6SlBm1ArkHhqR9Fwd8qs
|
||||
'';
|
||||
};
|
||||
home-manager.users.toast = {
|
||||
programs.git = {
|
||||
enable = true;
|
||||
settings = {
|
||||
user.name = "toast";
|
||||
user.email = "toast003@tutamail.com";
|
||||
userName = "Toast";
|
||||
userEmail = "toast003@tutamail.com";
|
||||
delta = {
|
||||
enable = true;
|
||||
catppuccin.enable = true;
|
||||
};
|
||||
extraConfig = {
|
||||
init.defaultBranch = "main";
|
||||
diff.colorMoved = "default";
|
||||
commit.verbose = "true";
|
||||
};
|
||||
};
|
||||
|
||||
programs.delta = {
|
||||
enable = true;
|
||||
enableGitIntegration = true;
|
||||
};
|
||||
catppuccin.delta.enable = true;
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,20 +3,18 @@
|
|||
config,
|
||||
...
|
||||
}: {
|
||||
programs.nano.enable = false;
|
||||
home-manager.users.toast = {
|
||||
catppuccin.helix = {
|
||||
enable = true;
|
||||
useItalics = true;
|
||||
};
|
||||
programs.helix = {
|
||||
enable = true;
|
||||
defaultEditor = true;
|
||||
extraPackages = with pkgs; [
|
||||
nixpkgs-fmt
|
||||
nil
|
||||
taplo
|
||||
];
|
||||
catppuccin = {
|
||||
enable = true;
|
||||
useItalics = true;
|
||||
};
|
||||
settings = {
|
||||
editor = {
|
||||
mouse = true;
|
||||
|
|
@ -29,8 +27,6 @@
|
|||
select = "Select";
|
||||
};
|
||||
indent-guides.render = true;
|
||||
end-of-line-diagnostics = "hint";
|
||||
inline-diagnostics.cursor-line = "warning";
|
||||
};
|
||||
};
|
||||
languages = {
|
||||
|
|
|
|||
14
roles/common/programs/micro.nix
Normal file
14
roles/common/programs/micro.nix
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
{...}: {
|
||||
home-manager = {
|
||||
users.toast = {...}: {
|
||||
programs.micro = {
|
||||
enable = true;
|
||||
settings = {
|
||||
clipboard = "internal";
|
||||
indentchar = "|";
|
||||
softwrap = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
@ -1,4 +1,5 @@
|
|||
{
|
||||
systemPkgs,
|
||||
config,
|
||||
lib,
|
||||
flakeSelf,
|
||||
|
|
@ -19,8 +20,6 @@
|
|||
'';
|
||||
};
|
||||
|
||||
system.tools.nixos-option.enable = false;
|
||||
|
||||
nix = {
|
||||
settings = {
|
||||
auto-optimise-store = true;
|
||||
|
|
@ -57,6 +56,11 @@
|
|||
type = "github";
|
||||
};
|
||||
};
|
||||
# Write the system's nixpkgs into the registry to avoid mixing nixpkgs versions
|
||||
# https://dataswamp.org/~solene/2022-07-20-nixos-flakes-command-sync-with-system.html
|
||||
system.flake = systemPkgs;
|
||||
};
|
||||
# I removed this in the past since I thought that I didn't need it, but turns out comma does :)
|
||||
nixPath = ["nixpkgs=${systemPkgs}"];
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,31 +1,61 @@
|
|||
{...}: {
|
||||
{
|
||||
pkgs,
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
with lib;
|
||||
with builtins; let
|
||||
catppuccinFlavour = "mocha";
|
||||
catppuccinStarship = pkgs.catppuccin + /starship/${catppuccinFlavour}.toml;
|
||||
|
||||
presets = {
|
||||
nerdFontSymbols = pkgs.fetchurl {
|
||||
url = "https://starship.rs/presets/toml/nerd-font-symbols.toml";
|
||||
hash = "sha256-JKX+DKY4IPQwNj3znkhMUReNqbKBxdJyBZW+WCdKwuU=";
|
||||
};
|
||||
};
|
||||
# -------------------------------- F U N C T I O N S --------------------------------
|
||||
|
||||
/*
|
||||
Gonna be honest, I have no idea how this works, although it seems to work
|
||||
Stolen from https://gist.github.com/pdalpra/daf339f59288201a6c8ba7dc84e9060e
|
||||
*/
|
||||
# Takes a list of attrSets and merges them
|
||||
mergeAllAttrSets = attrsSets:
|
||||
foldl' recursiveUpdate {} attrsSets;
|
||||
|
||||
# Reads a TOML file and parses it
|
||||
readTomlPreset = file: (fromTOML (readFile file));
|
||||
in {
|
||||
programs.starship = {
|
||||
enable = true;
|
||||
presets = [
|
||||
"nerd-font-symbols"
|
||||
settings = mergeAllAttrSets [
|
||||
(readTomlPreset presets.nerdFontSymbols)
|
||||
(readTomlPreset catppuccinStarship)
|
||||
{
|
||||
nix_shell = {
|
||||
disabled = false;
|
||||
heuristic = true;
|
||||
};
|
||||
os = {
|
||||
disabled = false;
|
||||
};
|
||||
directory = {
|
||||
disabled = false;
|
||||
truncation_length = 6;
|
||||
truncation_symbol = ".../";
|
||||
};
|
||||
palette = "catppuccin_${catppuccinFlavour}";
|
||||
}
|
||||
];
|
||||
settings = {
|
||||
nix_shell = {
|
||||
disabled = false;
|
||||
heuristic = true;
|
||||
};
|
||||
os = {
|
||||
disabled = false;
|
||||
};
|
||||
directory = {
|
||||
disabled = false;
|
||||
truncation_length = 6;
|
||||
truncation_symbol = ".../";
|
||||
};
|
||||
};
|
||||
};
|
||||
# The catppuccin module only works for home-manager, so this
|
||||
# sets up starship with home-manager using the system config
|
||||
# home-manager.users.toast = {osConfig, ...}: {
|
||||
# programs.starship = {
|
||||
# enable = false;
|
||||
# catppuccin.enable = true;
|
||||
# settings = osConfig.programs.starship.settings;
|
||||
# };
|
||||
# };
|
||||
home-manager.users.toast = {osConfig, ...}: {
|
||||
programs.starship = {
|
||||
enable = true;
|
||||
catppuccin.enable = true;
|
||||
settings = osConfig.programs.starship.settings;
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,23 @@
|
|||
{config, ...}: {
|
||||
services.avahi = {
|
||||
enable = true;
|
||||
{config, ...}: let
|
||||
old = {
|
||||
nssmdns = true;
|
||||
};
|
||||
new = {
|
||||
nssmdns4 = true;
|
||||
};
|
||||
in {
|
||||
/*
|
||||
NixOS 24.05 changed the option for mnds to be able to turn on/off IPv6
|
||||
23.11 doesn't support this, so I need to use the conditional to be able to
|
||||
use the same config for both
|
||||
*/
|
||||
services.avahi =
|
||||
{
|
||||
enable = true;
|
||||
}
|
||||
// (
|
||||
if config.system.nixos.release == "23.11"
|
||||
then old
|
||||
else new
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,6 +3,5 @@
|
|||
./avahi.nix
|
||||
./tailscale.nix
|
||||
./syncthing.nix
|
||||
./kmscon.nix
|
||||
];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,29 +0,0 @@
|
|||
{pkgs, ...}: {
|
||||
services.kmscon = {
|
||||
enable = true;
|
||||
useXkbConfig = true;
|
||||
fonts = [
|
||||
{
|
||||
name = "JetBrains Mono Nerd Font";
|
||||
package = pkgs.nerd-fonts.jetbrains-mono;
|
||||
}
|
||||
];
|
||||
extraConfig = ''
|
||||
term=xterm-256color
|
||||
font-size=10
|
||||
'';
|
||||
package = pkgs.kmscon.overrideAttrs (old: {
|
||||
patches =
|
||||
old.patches
|
||||
++ [
|
||||
# https://github.com/kmscon/kmscon/issues/133
|
||||
(
|
||||
pkgs.fetchpatch {
|
||||
url = "https://github.com/Aetf/kmscon/pull/135.patch";
|
||||
hash = "sha256-hJrKkONdQmz9gGMXbk11+4MF8Vn4guE3Bl1Ni6SGDw4=";
|
||||
}
|
||||
)
|
||||
];
|
||||
});
|
||||
};
|
||||
}
|
||||
|
|
@ -1,6 +1,5 @@
|
|||
{
|
||||
config,
|
||||
lib,
|
||||
flakeSelf,
|
||||
...
|
||||
}: let
|
||||
|
|
@ -23,7 +22,32 @@ in {
|
|||
urAccepted = 3;
|
||||
};
|
||||
# Set up devices and folders common to every device
|
||||
devices = lib.toast.syncthing.devices;
|
||||
devices = {
|
||||
"phone" = {
|
||||
name = "Xiaomi Redmi Note 10 Pro";
|
||||
id = "K7KNZ5V-XREUADL-CROQXPV-6AA4H65-2VUD34Z-VQWKJ6S-LWWW4EE-XPNEZQ6";
|
||||
};
|
||||
"pc" = {
|
||||
name = "Archie";
|
||||
id = "NJPX754-64AQNP3-7GZFIRZ-W2EDRJQ-27ORWYM-X5YXEXQ-ERRTRTQ-BSYD4AY";
|
||||
};
|
||||
"steamdeck" = {
|
||||
name = "Steam Deck";
|
||||
id = "DNFEGEA-PDEVW5A-O5VBVQK-IUXI7J5-MAHCQAG-2JLEFFM-DSXB6AS-TX6ZHAN";
|
||||
};
|
||||
"server" = {
|
||||
name = "Everest";
|
||||
id = "2GXFZJZ-CF56ER2-SISBGOF-VNXJIG5-GQC6ECA-NHCHAPX-677RSJT-RI5POAZ";
|
||||
};
|
||||
"surface" = {
|
||||
name = "Surface Go";
|
||||
id = "HTVSF3O-AHY3TNH-BLVSEGK-HRRSMHC-H5LJWVF-NDKGM6O-ATWZALC-YXNV2Q4";
|
||||
};
|
||||
"winmax2" = {
|
||||
name = "Win Max 2";
|
||||
id = "X2NILRM-ADRBQ23-AFREAZA-62GVFDF-UVMPR4L-KGHMUNY-BJ2C3CQ-RBT43QS";
|
||||
};
|
||||
};
|
||||
folders = {
|
||||
"passwords" = {
|
||||
label = "KeePassXC Passwords";
|
||||
|
|
@ -33,8 +57,4 @@ in {
|
|||
};
|
||||
};
|
||||
};
|
||||
networking.firewall = {
|
||||
allowedTCPPorts = [22000];
|
||||
allowedUDPPorts = [22000 21027];
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,28 +8,10 @@
|
|||
|
||||
services.xserver.enable = true;
|
||||
|
||||
nix = {
|
||||
daemonIOSchedClass = "idle";
|
||||
daemonCPUSchedPolicy = "idle";
|
||||
};
|
||||
|
||||
# Set up fonts
|
||||
fonts.packages = with pkgs.nerd-fonts; [
|
||||
hack
|
||||
jetbrains-mono
|
||||
|
||||
# Japanese fonts
|
||||
pkgs.noto-fonts-cjk-sans
|
||||
pkgs.noto-fonts-cjk-serif
|
||||
fonts.packages = [
|
||||
(pkgs.nerdfonts.override {fonts = ["Hack" "JetBrainsMono"];})
|
||||
];
|
||||
|
||||
# Already use electron apps (discord) so this only adds 20 mb more
|
||||
environment.systemPackages = [pkgs.tetrio-desktop];
|
||||
|
||||
hardware.keyboard.qmk.enable = true;
|
||||
home-manager.users.toast.home.packages = [pkgs.qmk];
|
||||
|
||||
home-manager.users.toast.xdg.autostart.enable = true;
|
||||
|
||||
boot.plymouth.enable = true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,14 +2,12 @@
|
|||
imports = [
|
||||
./discord.nix
|
||||
./firefox.nix
|
||||
./micro.nix
|
||||
./keepassxc.nix
|
||||
./jamesdsp.nix
|
||||
./vscode.nix
|
||||
./git.nix
|
||||
./ssh.nix
|
||||
./appimage.nix
|
||||
./mpv.nix
|
||||
./sysdvr-qt.nix
|
||||
./spotify.nix
|
||||
./distrobox.nix
|
||||
];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,59 +1,44 @@
|
|||
{pkgs, ...}: let
|
||||
{
|
||||
pkgs,
|
||||
lib,
|
||||
...
|
||||
}: let
|
||||
discordOverlay = _self: super: {
|
||||
discord = super.discord.override {
|
||||
withOpenASAR = true;
|
||||
withVencord = true;
|
||||
};
|
||||
# Update some stuff while I wait for nixpkgs
|
||||
/*
|
||||
vencord = super.vencord.overrideAttrs rec {
|
||||
version = "522fdcd";
|
||||
src = pkgs.fetchFromGitHub {
|
||||
owner = "Vendicated";
|
||||
repo = "Vencord";
|
||||
rev = "522fdcd";
|
||||
#rev = "v${version}";
|
||||
hash = "sha256-9G7FNL4pHaaLachzJmeAol0WpNUj533K2FNa7DH0eBM=";
|
||||
};
|
||||
};
|
||||
*/
|
||||
};
|
||||
in {
|
||||
nixpkgs.overlays = [discordOverlay];
|
||||
home-manager.users.toast = {
|
||||
catppuccin.vesktop.enable = true;
|
||||
programs.vesktop = {
|
||||
enable = true;
|
||||
settings = {
|
||||
arRPC = true;
|
||||
minimizeToTray = true;
|
||||
discordBranch = "stable";
|
||||
customTitleBar = true;
|
||||
spellCheckLanguages = ["en-US" "en" "es"];
|
||||
enableMenu = false;
|
||||
};
|
||||
vencord = {
|
||||
settings = {
|
||||
plugins = {
|
||||
BetterGifPicker.enabled = true;
|
||||
BetterSettings.enabled = true;
|
||||
CallTimer.enabled = true;
|
||||
ClearURLs.enabled = true;
|
||||
FakeNitro.enabled = true;
|
||||
FixSpotifyEmbeds.enabled = true;
|
||||
FixYoutubeEmbeds.enabled = true;
|
||||
FriendsSince.enabled = true;
|
||||
iLoveSpam.enabled = true;
|
||||
LoadingQuotes = {
|
||||
enabled = true;
|
||||
enableDiscordPresetQuotes = true;
|
||||
};
|
||||
MessageClickActions.enabled = true;
|
||||
MessageLinkEmbeds.enabled = true;
|
||||
MessageLogger.enabled = true;
|
||||
Moyai = {
|
||||
enabled = true;
|
||||
volume = 1;
|
||||
quality = "HD";
|
||||
};
|
||||
OpenInApp.enabled = true;
|
||||
petpet.enabled = true;
|
||||
PlatformIndicators.enabled = true;
|
||||
ShowHiddenChannels.enabled = true;
|
||||
ShowHiddenThings.enabled = true;
|
||||
SpotifyControls.enabled = true;
|
||||
Translate.enabled = true;
|
||||
YoutubeAdblock.enabled = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
stock-discord = _self: super: {
|
||||
discord = super.discord.override {
|
||||
withOpenASAR = false;
|
||||
withVencord = false;
|
||||
};
|
||||
};
|
||||
in {
|
||||
# Sometimes discord breaks after updates, and launching it stock once fixes it
|
||||
specialisation.stockDiscord.configuration = {
|
||||
nixpkgs.overlays = lib.mkAfter [stock-discord];
|
||||
};
|
||||
|
||||
nixpkgs.overlays = [discordOverlay];
|
||||
home-manager.users.toast = {
|
||||
home.packages = with pkgs; [
|
||||
discord
|
||||
vesktop
|
||||
];
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,28 +0,0 @@
|
|||
{...}: {
|
||||
virtualisation.podman = {
|
||||
# Due to limitations with home-manager, podman has to be available system wide
|
||||
enable = true;
|
||||
};
|
||||
home-manager.users.toast = {
|
||||
programs.distrobox = {
|
||||
enable = true;
|
||||
containers = {
|
||||
uav = {
|
||||
image = "quay.io/toolbx/ubuntu-toolbox:24.04";
|
||||
# additional_packages = "lsb-release dmidecode git";
|
||||
additional_packages = "git";
|
||||
init_hooks = [
|
||||
"git clone https://github.com/PX4/PX4-Autopilot.git --recursive /tmp/px4"
|
||||
"cd /tmp/px4/Tools/setup/"
|
||||
# The install scripts wants to add things to .bashrc, so it errors out
|
||||
# This removes the line that does that
|
||||
"sed -i '181d' ubuntu.sh"
|
||||
"bash ubuntu.sh"
|
||||
"rm -rf /tmp/px4 --one-file-system"
|
||||
];
|
||||
entry = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
@ -1,147 +1,55 @@
|
|||
{lib, ...}: {
|
||||
home-manager.sharedModules = [
|
||||
{
|
||||
# System wide firefox settings
|
||||
programs.firefox = {
|
||||
enable = true;
|
||||
policies = {
|
||||
DisableTelemetry = true;
|
||||
GenerativeAI = {
|
||||
Chatbot = false;
|
||||
LinkPreviews = false;
|
||||
TabGroups = false;
|
||||
Locked = true;
|
||||
};
|
||||
# You need these for Spotify
|
||||
EncryptedMediaExtensions.Enabled = true;
|
||||
ExtensionSettings = {
|
||||
# TODO: Install extensions the NUR instead of from AMO
|
||||
"uBlock0@raymondhill.net" = {
|
||||
installation_mode = "force_installed";
|
||||
install_url = "https://addons.mozilla.org/firefox/downloads/latest/ublock-origin/latest.xpi";
|
||||
};
|
||||
# Decentraleyes
|
||||
"jid1-BoFifL9Vbdl2zQ@jetpack" = {
|
||||
installation_mode = "normal_installed";
|
||||
install_url = "https://addons.mozilla.org/firefox/downloads/latest/decentraleyes/latest.xpi";
|
||||
};
|
||||
"jid1-MnnxcxisBPnSXQ@jetpack" = {
|
||||
installation_mode = "normal_installed";
|
||||
install_url = "https://addons.mozilla.org/firefox/downloads/latest/privacy-badger17/latest.xpi";
|
||||
};
|
||||
# Uninstall undeclared extensions
|
||||
"*" = {
|
||||
installation_mode = "blocked";
|
||||
blocked_install_message = "Extensions are managed by home-manager";
|
||||
};
|
||||
};
|
||||
Preferences = {
|
||||
# Enable video hardware acceleration
|
||||
"media.ffmpeg.vaapi.enabled" = {
|
||||
Value = true;
|
||||
Status = "default";
|
||||
};
|
||||
"dom.security.https_only_mode" = {
|
||||
Value = true;
|
||||
Status = "locked";
|
||||
};
|
||||
"browser.ml.chat.page" = {
|
||||
Value = false;
|
||||
Status = "Locked";
|
||||
};
|
||||
};
|
||||
PromptForDownloadLocation = true;
|
||||
# I use an external password manager, so the built in one just bothers me
|
||||
PasswordManagerEnabled = false;
|
||||
Permissions = {
|
||||
Autoplay = {
|
||||
Allow = [
|
||||
"https://www.youtube.com"
|
||||
"https://sync-tube.de"
|
||||
];
|
||||
Default = "block-audio-video";
|
||||
};
|
||||
};
|
||||
FirefoxHome.SponsoredTopSites = false;
|
||||
# System wide firefox settings
|
||||
programs.firefox = {
|
||||
enable = true;
|
||||
policies = {
|
||||
"DisablePocket" = true;
|
||||
"DisableTelemetry" = true;
|
||||
# You need these for Spotify
|
||||
"EncryptedMediaExtensions" = {"Enabled" = true;};
|
||||
"ExtensionSettings" = {
|
||||
# TODO: Install extensions the NUR instead of from AMO
|
||||
"uBlock0@raymondhill.net" = {
|
||||
"installation_mode" = "force_installed";
|
||||
"install_url" = "https://addons.mozilla.org/firefox/downloads/latest/ublock-origin/latest.xpi";
|
||||
};
|
||||
# Decentraleyes
|
||||
"jid1-BoFifL9Vbdl2zQ@jetpack" = {
|
||||
"installation_mode" = "normal_installed";
|
||||
"install_url" = "https://addons.mozilla.org/firefox/downloads/latest/decentraleyes/latest.xpi";
|
||||
};
|
||||
"jid1-MnnxcxisBPnSXQ@jetpack" = {
|
||||
"installation_mode" = "normal_installed";
|
||||
"install_url" = "https://addons.mozilla.org/firefox/downloads/latest/privacy-badger17/latest.xpi";
|
||||
};
|
||||
# Uninstall the kde plasma integration extension if KDE is not installed
|
||||
"plasma-browser-integration@kde.org"."installation_mode" = lib.mkDefault "blocked";
|
||||
};
|
||||
}
|
||||
];
|
||||
# Per-user settings
|
||||
home-manager.users.toast = {
|
||||
programs.firefox.policies = {
|
||||
DisablePocket = true;
|
||||
ExtensionSettings = {
|
||||
"sponsorBlocker@ajay.app" = {
|
||||
installation_mode = "normal_installed";
|
||||
install_url = "https://addons.mozilla.org/firefox/downloads/latest/sponsorblock/latest.xpi";
|
||||
"Preferences" = {
|
||||
# Enable video hardware acceleration
|
||||
"media.ffmpeg.vaapi.enabled" = {
|
||||
"Value" = true;
|
||||
"Status" = "default";
|
||||
};
|
||||
"@testpilot-containers" = {
|
||||
installation_mode = "normal_installed";
|
||||
install_url = "https://addons.mozilla.org/firefox/downloads/latest/multi-account-containers/latest.xpi";
|
||||
"dom.security.https_only_mode" = {
|
||||
"Value" = true;
|
||||
"Status" = "locked";
|
||||
};
|
||||
"{5cce4ab5-3d47-41b9-af5e-8203eea05245}" = {
|
||||
installation_mode = "normal_installed";
|
||||
install_url = "https://addons.mozilla.org/firefox/downloads/latest/control-panel-for-twitter/latest.xpi";
|
||||
};
|
||||
};
|
||||
Preferences = {
|
||||
"general.smoothScroll.msdPhysics.enabled" = {
|
||||
Value = true;
|
||||
Status = "default";
|
||||
};
|
||||
"browser.ctrlTab.sortByRecentlyUsed" = {
|
||||
Value = true;
|
||||
Status = "default";
|
||||
};
|
||||
# This should be set automatically, but it isn't for some reason
|
||||
"extensions.webextensions.ExtensionStorageIDB.enabled" = {
|
||||
Value = false;
|
||||
Status = "locked";
|
||||
"Value" = true;
|
||||
"Status" = "default";
|
||||
};
|
||||
};
|
||||
};
|
||||
programs.firefox.profiles = {
|
||||
personal = {
|
||||
name = "Personal";
|
||||
id = 0;
|
||||
isDefault = true;
|
||||
containersForce = true;
|
||||
containers = {
|
||||
work = {
|
||||
name = "Work";
|
||||
id = 1;
|
||||
icon = "briefcase";
|
||||
color = "green";
|
||||
};
|
||||
};
|
||||
extensions.force = true;
|
||||
extensions.settings = {
|
||||
"@testpilot-containers".settings = {
|
||||
onboarding-stage = 8;
|
||||
"siteContainerMap@@_teams.microsoft.com" = {
|
||||
userContextId = "1";
|
||||
neverAsk = false;
|
||||
identityMacAddonUUID = "b50e5b1e-6f3b-4245-8eac-5654d889156e";
|
||||
};
|
||||
"siteContainerMap@@_outlook.office.com" = {
|
||||
userContextId = "1";
|
||||
neverAsk = false;
|
||||
identityMacAddonUUID = "b50e5b1e-6f3b-4245-8eac-5654d889156e";
|
||||
};
|
||||
};
|
||||
# Control panel for twitter
|
||||
"{5cce4ab5-3d47-41b9-af5e-8203eea05245}".settings = {
|
||||
hideForYouTimeline = false;
|
||||
alwaysUseLatestTweets = false;
|
||||
retweets = "ignore";
|
||||
restoreOtherInteractionLinks = true;
|
||||
navBaseFontSize = false;
|
||||
followButtonStyle = "themed";
|
||||
hideSidebarContent = true;
|
||||
};
|
||||
"PromptForDownloadLocation" = true;
|
||||
# I use an external password manager, so the built in one just bothers me
|
||||
"PasswordManagerEnabled" = false;
|
||||
"Permissions" = {
|
||||
"Autoplay" = {
|
||||
"Allow" = ["https://www.youtube.com"];
|
||||
"Default" = "block-audio-video";
|
||||
};
|
||||
};
|
||||
"FirefoxHome" = {"SponsoredTopSites" = false;};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,18 @@
|
|||
{pkgs, ...}: {
|
||||
{
|
||||
pkgs,
|
||||
lib,
|
||||
...
|
||||
}: {
|
||||
home-manager.users.toast = {
|
||||
programs.git = {
|
||||
package = pkgs.gitFull;
|
||||
extraConfig = {
|
||||
cola = {
|
||||
icontheme = lib.mkDefault "dark";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
home.packages = [pkgs.git-cola];
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,3 @@
|
|||
{pkgs, ...}: {
|
||||
home-manager.users.toast = {
|
||||
home.packages = with pkgs; [
|
||||
jamesdsp
|
||||
];
|
||||
};
|
||||
users.users.toast.packages = [pkgs.jamesdsp];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,32 +1,61 @@
|
|||
{pkgs, ...}: {
|
||||
{lib, ...}: let
|
||||
kpxcSettings = lib.generators.toINI {} {
|
||||
General = {
|
||||
# Not sure what changing this does, I'll leave it alone
|
||||
ConfigVersion = 2;
|
||||
MinimizeAfterUnlock = true;
|
||||
AutoSaveAfterEveryChange = false;
|
||||
};
|
||||
GUI = {
|
||||
ApplicationTheme = "classic";
|
||||
MinimizeOnStartup = false;
|
||||
MinimizeOnClose = true;
|
||||
MinimizeToTray = true;
|
||||
ShowTrayIcon = true;
|
||||
# 0 is icons, 1 is text, 2 is text next to icons, 3 is text under icons, and 4 is follow style
|
||||
ToolButtonStyle = 0; # Would choose 4 but it's too big for a small window
|
||||
# monochrome-light, monochrome-dark or colorful
|
||||
TrayIconAppearance = "monochrome-light";
|
||||
};
|
||||
Security = {
|
||||
HideNotes = true;
|
||||
IconDownloadFallback = true;
|
||||
};
|
||||
SSHAgent.Enabled = true;
|
||||
};
|
||||
in {
|
||||
home-manager = {
|
||||
extraSpecialArgs = {kpxcSettings = kpxcSettings;};
|
||||
users.toast = {
|
||||
programs.keepassxc = {
|
||||
enable = true;
|
||||
autostart = true;
|
||||
settings = {
|
||||
General = {
|
||||
# Not sure what changing this does, I'll leave it alone
|
||||
ConfigVersion = 2;
|
||||
MinimizeAfterUnlock = true;
|
||||
AutoSaveAfterEveryChange = false;
|
||||
};
|
||||
GUI = {
|
||||
ApplicationTheme = "classic";
|
||||
MinimizeOnStartup = false;
|
||||
MinimizeOnClose = true;
|
||||
MinimizeToTray = true;
|
||||
ShowTrayIcon = true;
|
||||
# 0 is icons, 1 is text, 2 is text next to icons, 3 is text under icons, and 4 is follow style
|
||||
ToolButtonStyle = 0; # Would choose 4 but it's too big for a small window
|
||||
# monochrome-light, monochrome-dark or colorful
|
||||
TrayIconAppearance = "monochrome-light";
|
||||
};
|
||||
Security = {
|
||||
HideNotes = true;
|
||||
IconDownloadFallback = true;
|
||||
};
|
||||
SSHAgent.Enabled = true;
|
||||
pkgs,
|
||||
kpxcSettings,
|
||||
...
|
||||
}: {
|
||||
# No module for KeePassXC config :(
|
||||
home = {
|
||||
packages = [pkgs.keepassxc];
|
||||
file = {
|
||||
".config/keepassxc/keepassxc.ini".text = kpxcSettings;
|
||||
# For some reason the autostart .desktop is not the same as the regular one
|
||||
".config/autostart/org.keepassxc.KeePassXC.desktop".text = ''
|
||||
[Desktop Entry]
|
||||
Name=KeePassXC
|
||||
GenericName=Password Manager
|
||||
Exec=keepassxc
|
||||
TryExec=keepassxc
|
||||
Icon=keepassxc
|
||||
StartupWMClass=keepassxc
|
||||
StartupNotify=true
|
||||
Terminal=false
|
||||
Type=Application
|
||||
Version=1.0
|
||||
Categories=Utility;Security;Qt;
|
||||
MimeType=application/x-keepass2;
|
||||
X-GNOME-Autostart-enabled=true
|
||||
X-GNOME-Autostart-Delay=2
|
||||
X-KDE-autostart-after=panel
|
||||
X-LXQt-Need-Tray=true
|
||||
'';
|
||||
};
|
||||
};
|
||||
};
|
||||
|
|
|
|||
18
roles/desktop/programs/micro.nix
Normal file
18
roles/desktop/programs/micro.nix
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
{lib, ...}: {
|
||||
home-manager = {
|
||||
users.toast = {pkgs, ...}: {
|
||||
programs.micro = {
|
||||
enable = true;
|
||||
settings = {
|
||||
# Use xclip/wl-clipboard for copying and pasting
|
||||
clipboard = lib.mkForce "external";
|
||||
};
|
||||
};
|
||||
/*
|
||||
On a kde wayland session micro uses xsel or xclip instead of wl-clipboard
|
||||
which doesn't work, so I only install wl-clipboard here to make micro use it
|
||||
*/
|
||||
home.packages = with pkgs; [wl-clipboard];
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
@ -1,24 +0,0 @@
|
|||
{pkgs, ...}: {
|
||||
nixpkgs.overlays = [
|
||||
(
|
||||
final: prev: {
|
||||
mpv-unwrapped = prev.mpv-unwrapped.override {
|
||||
cddaSupport = true;
|
||||
};
|
||||
}
|
||||
)
|
||||
];
|
||||
home-manager.users.toast = {
|
||||
programs.mpv = {
|
||||
enable = true;
|
||||
scripts = with pkgs.mpvScripts; [
|
||||
mpris
|
||||
];
|
||||
config = {
|
||||
hwdec = "auto";
|
||||
cache = true;
|
||||
cdda-speed = "8";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
@ -1,5 +0,0 @@
|
|||
{pkgs, ...}: {
|
||||
home-manager.users.toast = {
|
||||
home.packages = [pkgs.spotify];
|
||||
};
|
||||
}
|
||||
|
|
@ -2,7 +2,7 @@
|
|||
programs.ssh.knownHosts = {
|
||||
everest = {
|
||||
hostNames = [
|
||||
"everest.tailscale"
|
||||
"everest.sable-pancake.ts.net"
|
||||
"toast003.xyz"
|
||||
];
|
||||
publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAqfABZKnF5YYGZTOKuT7m+sOnUqBQSvLke9c3JDsF5s";
|
||||
|
|
@ -12,18 +12,10 @@
|
|||
home-manager.users.toast = {
|
||||
programs.ssh = {
|
||||
enable = true;
|
||||
enableDefaultConfig = false;
|
||||
matchBlocks = {
|
||||
"everest" = {
|
||||
host = "toast003.xyz";
|
||||
hostname = "toast003.xyz";
|
||||
forwardAgent = true;
|
||||
sendEnv = ["COLORTERM"];
|
||||
port = 69;
|
||||
};
|
||||
"everest-tailscale" = {
|
||||
host = "everest";
|
||||
hostname = "everest.tailscale";
|
||||
hostname = "everest.sable-pancake.ts.net";
|
||||
forwardAgent = true;
|
||||
sendEnv = ["COLORTERM"];
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,8 +0,0 @@
|
|||
{...}: {
|
||||
services.udev.extraRules = ''
|
||||
SUBSYSTEM=="usb", ATTRS{idVendor}=="18d1", ATTRS{idProduct}=="4ee0", MODE="0666"
|
||||
'';
|
||||
home-manager.users.toast.services.flatpak = {
|
||||
packages = ["io.github.parnassius.SysDVR-Qt"];
|
||||
};
|
||||
}
|
||||
44
roles/desktop/programs/vscode.nix
Normal file
44
roles/desktop/programs/vscode.nix
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
{
|
||||
pkgs,
|
||||
flakeSelf,
|
||||
...
|
||||
}: let
|
||||
inputs = flakeSelf.inputs;
|
||||
in {
|
||||
nixpkgs.overlays = [inputs.catppuccin-vsc.overlays.default];
|
||||
home-manager.users.toast = {
|
||||
home.packages = with pkgs; [
|
||||
nixpkgs-fmt
|
||||
];
|
||||
programs.vscode = {
|
||||
enable = true;
|
||||
package = pkgs.vscodium;
|
||||
mutableExtensionsDir = false;
|
||||
extensions = with inputs.vscode-extensions.extensions.x86_64-linux.open-vsx; [
|
||||
jnoortheen.nix-ide
|
||||
(pkgs.catppuccin-vsc.override {
|
||||
workbenchMode = "flat";
|
||||
extraBordersEnabled = true;
|
||||
})
|
||||
catppuccin.catppuccin-vsc-icons
|
||||
waderyan.gitblame
|
||||
];
|
||||
userSettings = {
|
||||
# VSCode doesn't like nested settings
|
||||
# https://stackoverflow.com/questions/74134436/is-it-possible-to-express-settings-in-vs-codes-settings-json-where-each-dot-sep
|
||||
# TODO: write a function that unnests settings
|
||||
"workbench.colorTheme" = "Catppuccin Mocha";
|
||||
"workbench.iconTheme" = "catppuccin-mocha";
|
||||
"editor.fontFamily" = "JetBrainsMono Nerd Font";
|
||||
"editor.semanticHighlighting.enabled" = true;
|
||||
"nix.enableLanguageServer" = true;
|
||||
"nix.serverPath" = "${pkgs.nil}/bin/nil";
|
||||
"nix.serverSettings" = {
|
||||
"nil"."formatting"."command" = ["nixpkgs-fmt"];
|
||||
};
|
||||
"terminal.integrated.minimumContrastRatio" = 1;
|
||||
"window.titleBarStyle" = "custom";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
@ -6,6 +6,5 @@
|
|||
./pipewire.nix
|
||||
./printing.nix
|
||||
./networkmanager.nix
|
||||
./tailscale.nix
|
||||
];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,51 +1,54 @@
|
|||
{
|
||||
config,
|
||||
lib,
|
||||
flakeSelf,
|
||||
...
|
||||
}: let
|
||||
tailscaleName = config.services.tailscale.interfaceName;
|
||||
in {
|
||||
sops.secrets.wifiPasswords = {
|
||||
sopsFile = "${flakeSelf.inputs.secrets}/wifi-passwords.env";
|
||||
format = "dotenv";
|
||||
age.secrets = {
|
||||
wifiPasswords.file = "${flakeSelf.inputs.secrets}/wifi-passwords.age";
|
||||
};
|
||||
networking.networkmanager = {
|
||||
enable = true;
|
||||
unmanaged = [
|
||||
"interface-name:${tailscaleName}"
|
||||
];
|
||||
wifi.macAddress = "random";
|
||||
ensureProfiles = {
|
||||
environmentFiles = [config.sops.secrets.wifiPasswords.path];
|
||||
profiles = with lib.toast.networkManager; {
|
||||
"4g-modem" = mkWifiProfile {
|
||||
id = "4G Modem";
|
||||
priority = 5;
|
||||
ssid = "TP-Link_CCB4";
|
||||
environmentFiles = [config.age.secrets.wifiPasswords.path];
|
||||
profiles = {
|
||||
"4g-modem" = {
|
||||
connection = {
|
||||
id = "4G Modem";
|
||||
type = "wifi";
|
||||
};
|
||||
ipv4.method = "auto";
|
||||
wifi = {
|
||||
mode = "infrastructure";
|
||||
ssid = "TP-Link_CCB4";
|
||||
};
|
||||
wifi-security = {
|
||||
auth-alg = "open";
|
||||
key-mgmt = "wpa-psk";
|
||||
psk = "$MODEM";
|
||||
};
|
||||
};
|
||||
phone = mkWifiProfile {
|
||||
id = "Phone";
|
||||
priority = 5;
|
||||
ssid = "Redmi Note 10 Pro_5197";
|
||||
phone = {
|
||||
connection = {
|
||||
id = "Phone";
|
||||
type = "wifi";
|
||||
};
|
||||
ipv4.method = "auto";
|
||||
wifi = {
|
||||
mode = "infrastructure";
|
||||
ssid = "Redmi Note 10 Pro_5197";
|
||||
};
|
||||
wifi-security = {
|
||||
auth-alg = "open";
|
||||
key-mgmt = "sae";
|
||||
psk = "$PHONE";
|
||||
};
|
||||
};
|
||||
home = mkWifiProfile {
|
||||
id = "Home";
|
||||
ssid = "MOVISTAR-WIFI6-DC98";
|
||||
wifi-security = {
|
||||
key-mgmt = "sae";
|
||||
psk = "$HOME";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
|
|
|||
|
|
@ -1,57 +1,23 @@
|
|||
{config, ...}: {
|
||||
services.syncthing = {
|
||||
# enable = true;
|
||||
# user = "toast";
|
||||
# group = "users";
|
||||
# dataDir = config.users.users.toast.home;
|
||||
enable = true;
|
||||
user = "toast";
|
||||
group = "users";
|
||||
dataDir = config.users.users.toast.home;
|
||||
settings.folders."passwords".path = "~/Documents/Passwords";
|
||||
};
|
||||
age.secrets = {
|
||||
syncthingCert = {
|
||||
owner = "toast";
|
||||
group = "users";
|
||||
};
|
||||
syncthingKey = {
|
||||
owner = "toast";
|
||||
group = "users";
|
||||
};
|
||||
};
|
||||
home-manager.users.toast = {
|
||||
osConfig,
|
||||
lib,
|
||||
...
|
||||
}: let
|
||||
systemConfig = osConfig.services.syncthing;
|
||||
missingOptions = [
|
||||
"all_proxy"
|
||||
"configDir"
|
||||
"dataDir"
|
||||
"databaseDir"
|
||||
"declarative"
|
||||
"devices"
|
||||
"folders"
|
||||
"extraFlags"
|
||||
"user"
|
||||
"group"
|
||||
"systemService"
|
||||
"openDefaultPorts"
|
||||
"options"
|
||||
"relay"
|
||||
"useInotify"
|
||||
"guiPasswordFile"
|
||||
];
|
||||
removeMissingOptions = rawOptions: (
|
||||
# lib.attrsets.filterAttrs (n: v: n == "all_proxy") rawOptions
|
||||
builtins.removeAttrs rawOptions missingOptions
|
||||
);
|
||||
in {
|
||||
services.syncthing =
|
||||
removeMissingOptions systemConfig
|
||||
// {
|
||||
enable = true;
|
||||
# Renamed options
|
||||
allProxy = systemConfig.all_proxy;
|
||||
extraOptions = systemConfig.extraFlags;
|
||||
};
|
||||
};
|
||||
# Allow regular users to stop syncthing
|
||||
# https://stackoverflow.com/questions/61480914/using-policykit-to-allow-non-root-users-to-start-and-stop-a-service
|
||||
security.polkit.extraConfig = ''
|
||||
polkit.addRule(function(action, subject) {
|
||||
if (
|
||||
action.id == "org.freedesktop.systemd1.manage-units" &&
|
||||
action.lookup("unit") == "syncthing.service" &&
|
||||
subject.user == "${config.services.syncthing.user}"
|
||||
)
|
||||
{
|
||||
return polkit.Result.YES;
|
||||
}
|
||||
})
|
||||
'';
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,16 +0,0 @@
|
|||
{pkgs, ...}: {
|
||||
home-manager.users.toast = {
|
||||
services.tailscale-systray = {
|
||||
enable = true;
|
||||
package = pkgs.tailscale.overrideAttrs {
|
||||
postPatch = ''
|
||||
substituteInPlace client/systray/logo.go --replace-fail \
|
||||
"color.NRGBA{0, 0, 0, 255}" "color.NRGBA{0, 0, 0, 0}"
|
||||
'';
|
||||
# Only use this for the tray, so no testing is needed
|
||||
# Makes the build last a lot less too
|
||||
doCheck = false;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
@ -1,16 +1,6 @@
|
|||
{pkgs, ...}: {
|
||||
{...}: {
|
||||
imports = [
|
||||
./programs
|
||||
./services
|
||||
];
|
||||
system.replaceDependencies.replacements = [
|
||||
{
|
||||
oldDependency = pkgs.sdl3;
|
||||
newDependency = pkgs.sdl3.overrideAttrs {
|
||||
patches = [
|
||||
./sdl-keychron-blacklist.patch
|
||||
];
|
||||
};
|
||||
}
|
||||
];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,18 +0,0 @@
|
|||
{pkgs, ...}: {
|
||||
# nixpkgs.overlays = [
|
||||
# (
|
||||
# final: prev: {
|
||||
# azahar = prev.azahar.overrideAttrs (old: {
|
||||
# version = "2120.3";
|
||||
# src = final.fetchzip {
|
||||
# url = "https://github.com/azahar-emu/azahar/releases/download/2120.3/azahar-unified-source-20250414-00e3bbb.tar.xz";
|
||||
# hash = "sha256-3QKicmpmWDM7x9GDJ8sxm2Xu+0Yfho4LkSWMp+ixzRk=";
|
||||
# };
|
||||
# });
|
||||
# }
|
||||
# )
|
||||
# ];
|
||||
home-manager.users.toast = {
|
||||
home.packages = [pkgs.azahar];
|
||||
};
|
||||
}
|
||||
|
|
@ -1,7 +0,0 @@
|
|||
{pkgs, ...}: {
|
||||
home-manager.users.toast = {
|
||||
home = {
|
||||
packages = [pkgs.cemu];
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
@ -5,8 +5,6 @@
|
|||
./rpcs3.nix
|
||||
./retroarch.nix
|
||||
./pcsx2.nix
|
||||
./cemu.nix
|
||||
./azahar.nix
|
||||
];
|
||||
environment.systemPackages = with pkgs; [
|
||||
heroic
|
||||
|
|
|
|||
|
|
@ -3,113 +3,100 @@
|
|||
lib,
|
||||
...
|
||||
}: let
|
||||
ps2-isos = pkgs.symlinkJoin {
|
||||
name = "ps2-isos";
|
||||
paths = [
|
||||
(pkgs.fetchzip {
|
||||
url = "https://myrient.erista.me/files/Redump/Sony%20-%20PlayStation%202/007%20-%20Nightfire%20%28USA%29.zip";
|
||||
hash = "sha256-66Ey0SqC3Tk02Af+xR6rpxYSkO0n83NWYPCt4M3CUWo=";
|
||||
})
|
||||
];
|
||||
};
|
||||
|
||||
compressed-ps2-isos = pkgs.runCommand "compressed-ps2-isos" {} ''
|
||||
mkdir $out
|
||||
cd ${ps2-isos}
|
||||
for file in ./*
|
||||
do
|
||||
${pkgs.mame-tools}/bin/chdman createdvd -i "$file" -o "$out/''${file%.iso}.chd"
|
||||
done
|
||||
'';
|
||||
|
||||
pcsx2-bios = pkgs.fetchzip {
|
||||
url = "https://myrient.erista.me/files/Redump/Sony%20-%20PlayStation%202%20-%20BIOS%20Images%20%28DoM%20Version%29/ps2-0200a-20040614.zip";
|
||||
url = "https://myrient.erista.me/files/Redump/Sony%20-%20PlayStation%202%20-%20BIOS%20Images/ps2-0200a-20040614.zip";
|
||||
hash = "sha256-wMvswgmsKl+cJl49VlVW84tvU5Jzd+2dl07SOiUDtwA=";
|
||||
};
|
||||
toPcsx2INI = lib.generators.toINI {listsAsDuplicateKeys = true;};
|
||||
in {
|
||||
home-manager.users.toast = {
|
||||
home.packages = with pkgs; [
|
||||
pcsx2
|
||||
];
|
||||
home = {
|
||||
packages = with pkgs; [
|
||||
pcsx2
|
||||
];
|
||||
file."Games/Isos/PS2".source = compressed-ps2-isos;
|
||||
};
|
||||
xdg.configFile = {
|
||||
#PCSX2 silently overwrites the symlink so I need to force it's creation
|
||||
"PCSX2/inis/PCSX2.ini".force = true;
|
||||
"PCSX2/inis/PCSX2.ini".text = toPcsx2INI {
|
||||
UI = {
|
||||
SettingsVersion = 1;
|
||||
# Use the system theme
|
||||
Theme = "";
|
||||
HideMouseCursor = true;
|
||||
};
|
||||
Folders = {
|
||||
Bios = "/home/toast/.local/share/PCSX2/bios";
|
||||
};
|
||||
GameList.RecursivePaths = [
|
||||
"/home/toast/Games/PS2/"
|
||||
];
|
||||
"EmuCore/GS" = {
|
||||
dithering_ps2 = 1;
|
||||
upscale_multiplier = 2;
|
||||
};
|
||||
EmuCore = {
|
||||
EnableDiscordPresence = true;
|
||||
EnableFastBoot = true;
|
||||
McdFolderAutoManage = false;
|
||||
};
|
||||
"PCSX2/inis/PCSX2.ini".text =
|
||||
lib.generators.toINI {
|
||||
listsAsDuplicateKeys = true;
|
||||
} {
|
||||
UI = {
|
||||
SettingsVersion = 1;
|
||||
# Use the system theme
|
||||
Theme = "";
|
||||
HideMouseCursor = true;
|
||||
};
|
||||
Folders = {
|
||||
Bios = "/home/toast/.local/share/PCSX2/bios";
|
||||
};
|
||||
GameList.RecursivePaths = [
|
||||
"/home/toast/Games/Isos/PS2/"
|
||||
];
|
||||
"EmuCore/GS".dithering_ps2 = 1;
|
||||
EmuCore = {
|
||||
EnableDiscordPresence = true;
|
||||
EnableFastBoot = true;
|
||||
McdFolderAutoManage = false;
|
||||
};
|
||||
|
||||
MemoryCards.Slot1_Filename = "MemoryCard1.ps2";
|
||||
MemoryCards.Slot1_Filename = "MemoryCard1.ps2";
|
||||
|
||||
# Controller settings
|
||||
Pad1 = {
|
||||
Up = "SDL-0/DPadUp";
|
||||
Right = "SDL-0/DPadRight";
|
||||
Down = "SDL-0/DPadDown";
|
||||
Left = "SDL-0/DPadLeft";
|
||||
Triangle = "SDL-0/Y";
|
||||
Circle = "SDL-0/B";
|
||||
Cross = "SDL-0/A";
|
||||
Square = "SDL-0/X";
|
||||
Select = "SDL-0/Back";
|
||||
Start = "SDL-0/Start";
|
||||
L1 = "SDL-0/LeftShoulder";
|
||||
L2 = "SDL-0/+LeftTrigger";
|
||||
R1 = "SDL-0/RightShoulder";
|
||||
R2 = "SDL-0/+RightTrigger";
|
||||
L3 = "SDL-0/LeftStick";
|
||||
R3 = "SDL-0/RightStick";
|
||||
Analog = "SDL-0/Guide";
|
||||
LUp = "SDL-0/-LeftY";
|
||||
LRight = "SDL-0/+LeftX";
|
||||
LDown = "SDL-0/+LeftY";
|
||||
LLeft = "SDL-0/-LeftX";
|
||||
RUp = "SDL-0/-RightY";
|
||||
RRight = "SDL-0/+RightX";
|
||||
RDown = "SDL-0/+RightY";
|
||||
RLeft = "SDL-0/-RightX";
|
||||
LargeMotor = "SDL-0/LargeMotor";
|
||||
SmallMotor = "SDL-0/SmallMotor";
|
||||
# Controller settings
|
||||
Pad1 = {
|
||||
Up = "SDL-0/DPadUp";
|
||||
Right = "SDL-0/DPadRight";
|
||||
Down = "SDL-0/DPadDown";
|
||||
Left = "SDL-0/DPadLeft";
|
||||
Triangle = "SDL-0/Y";
|
||||
Circle = "SDL-0/B";
|
||||
Cross = "SDL-0/A";
|
||||
Square = "SDL-0/X";
|
||||
Select = "SDL-0/Back";
|
||||
Start = "SDL-0/Start";
|
||||
L1 = "SDL-0/LeftShoulder";
|
||||
L2 = "SDL-0/+LeftTrigger";
|
||||
R1 = "SDL-0/RightShoulder";
|
||||
R2 = "SDL-0/+RightTrigger";
|
||||
L3 = "SDL-0/LeftStick";
|
||||
R3 = "SDL-0/RightStick";
|
||||
Analog = "SDL-0/Guide";
|
||||
LUp = "SDL-0/-LeftY";
|
||||
LRight = "SDL-0/+LeftX";
|
||||
LDown = "SDL-0/+LeftY";
|
||||
LLeft = "SDL-0/-LeftX";
|
||||
RUp = "SDL-0/-RightY";
|
||||
RRight = "SDL-0/+RightX";
|
||||
RDown = "SDL-0/+RightY";
|
||||
RLeft = "SDL-0/-RightX";
|
||||
LargeMotor = "SDL-0/LargeMotor";
|
||||
SmallMotor = "SDL-0/SmallMotor";
|
||||
};
|
||||
};
|
||||
# Default hotkeys
|
||||
Hotkeys = {
|
||||
ToggleFullscreen = "Keyboard/Alt & Keyboard/Return";
|
||||
CycleAspectRatio = "Keyboard/F6";
|
||||
CycleInterlaceMode = "Keyboard/F5";
|
||||
CycleMipmapMode = "Keyboard/Insert";
|
||||
GSDumpMultiFrame = "Keyboard/Control & Keyboard/Shift & Keyboard/F8";
|
||||
Screenshot = "Keyboard/F8";
|
||||
GSDumpSingleFrame = "Keyboard/Shift & Keyboard/F8";
|
||||
ToggleSoftwareRendering = "Keyboard/F9";
|
||||
ZoomIn = "Keyboard/Control & Keyboard/Plus";
|
||||
ZoomOut = "Keyboard/Control & Keyboard/Minus";
|
||||
InputRecToggleMode = "Keyboard/Shift & Keyboard/R";
|
||||
LoadStateFromSlot = "Keyboard/F3";
|
||||
SaveStateToSlot = "Keyboard/F1";
|
||||
NextSaveStateSlot = "Keyboard/F2";
|
||||
PreviousSaveStateSlot = "Keyboard/Shift & Keyboard/F2";
|
||||
OpenPauseMenu = "Keyboard/Escape";
|
||||
ToggleFrameLimit = "Keyboard/F4";
|
||||
TogglePause = "Keyboard/Space";
|
||||
ToggleSlowMotion = "Keyboard/Shift & Keyboard/Backtab";
|
||||
ToggleTurbo = "Keyboard/Tab";
|
||||
HoldTurbo = "Keyboard/Period";
|
||||
};
|
||||
};
|
||||
# 007 nightfire
|
||||
"PCSX2/gamesettings/SLUS-20579_5B86BB62.ini".text = toPcsx2INI {
|
||||
"PCSX2/gamesettings/SLUS-20579_5B86BB62.ini".text = lib.generators.toINI {} {
|
||||
"EmuCore/GS".AspectRatio = "16:9";
|
||||
};
|
||||
"PCSX2/gamesettings/SLUS-21050_BEBF8793.ini".text = toPcsx2INI {
|
||||
"EmuCore/GS".AspectRatio = "16:9";
|
||||
Patches.Enable = [
|
||||
"60 FPS for Crashes"
|
||||
"60 FPS for Menus"
|
||||
"Progressive Scan"
|
||||
"MPH to KPH"
|
||||
"Extra Particles While Driving"
|
||||
];
|
||||
};
|
||||
};
|
||||
xdg.dataFile = {
|
||||
# I would prefer to use symlinkJoin like I do for the ISOs, but
|
||||
|
|
@ -119,23 +106,4 @@ in {
|
|||
'';
|
||||
};
|
||||
};
|
||||
|
||||
# Syncthing
|
||||
services.syncthing.settings.folders."pcsx2" = {
|
||||
label = "PCSX2";
|
||||
id = "qcdsp-qaaej";
|
||||
devices = ["steamdeck" "server" "pc" "winmax2"];
|
||||
path = "~/.config/PCSX2";
|
||||
};
|
||||
home-manager.users.toast.xdg.configFile = {
|
||||
"PCSX2/.stignore".text = ''
|
||||
cache
|
||||
bios
|
||||
gamesettings
|
||||
inis/PCSX2.ini*
|
||||
inis/debuggersettings
|
||||
inputprofiles
|
||||
logs
|
||||
'';
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,9 +1,27 @@
|
|||
{pkgs, ...}: {
|
||||
{pkgs, ...}: let
|
||||
snes-roms = [
|
||||
# ActRaiser
|
||||
(pkgs.fetchzip {
|
||||
url = "https://myrient.erista.me/files/No-Intro/Nintendo%20-%20Super%20Nintendo%20Entertainment%20System/ActRaiser%20%28USA%29.zip";
|
||||
hash = "sha256-yxIL5Pqlp8xsx7wvNO1MlB8ffDjS0xpE+yrEfMj61As=";
|
||||
})
|
||||
# Kirby Super Star
|
||||
(pkgs.fetchzip {
|
||||
url = "https://myrient.erista.me/files/No-Intro/Nintendo%20-%20Super%20Nintendo%20Entertainment%20System/Kirby%20Super%20Star%20%28USA%29.zip";
|
||||
hash = "sha256-NX5OjCthf4ZiAhamclRBRk8GiMjZX3JLeShm8sQdDfc=";
|
||||
})
|
||||
# Super Mario Kart
|
||||
(pkgs.fetchzip {
|
||||
url = "https://myrient.erista.me/files/No-Intro/Nintendo%20-%20Super%20Nintendo%20Entertainment%20System/Super%20Mario%20Kart%20%28USA%29.zip";
|
||||
hash = "sha256-RLBxPBmBrXCuPdnWE07KamBNgGJ5IntQVUPeij+2HUI=";
|
||||
})
|
||||
];
|
||||
in {
|
||||
home-manager.users.toast = {
|
||||
home = {
|
||||
packages = [
|
||||
(
|
||||
pkgs.wrapRetroArch {
|
||||
pkgs.retroarch.override {
|
||||
cores = with pkgs.libretro; [
|
||||
snes9x
|
||||
];
|
||||
|
|
@ -44,6 +62,15 @@
|
|||
}
|
||||
)
|
||||
];
|
||||
file."Games/Roms/SNES/" = {
|
||||
onChange = ''
|
||||
${pkgs.retroarch}/bin/retroarch --scan "/home/toast/Games/Roms/SNES"
|
||||
'';
|
||||
source = pkgs.symlinkJoin {
|
||||
name = "snes-roms";
|
||||
paths = [snes-roms];
|
||||
};
|
||||
};
|
||||
};
|
||||
# Retroarch is dumb since it doesn't generate some folders (but it does for others)
|
||||
systemd.user.tmpfiles.rules = [
|
||||
|
|
@ -51,28 +78,6 @@
|
|||
"d /%h/.local/share/retroarch/saves"
|
||||
"d /%h/.local/share/retroarch/states"
|
||||
];
|
||||
systemd.user.paths = {
|
||||
snes-roms = {
|
||||
Unit.Description = "Monitor SNES rom path for changes";
|
||||
Path = {
|
||||
PathChanged = "/%h/Games/SNES";
|
||||
Unit = "update-retroarch-library.service";
|
||||
};
|
||||
Install.WantedBy = ["default.target"];
|
||||
};
|
||||
};
|
||||
systemd.user.services.update-retroarch-library = {
|
||||
Service = {
|
||||
Type = "oneshot";
|
||||
ExecStart = pkgs.writeShellScript "scan-snes-games" ''
|
||||
${pkgs.libnotify}/bin/notify-send -a RetroArch \
|
||||
-i retroarch \
|
||||
"SNES games changed!" \
|
||||
"Scanning $TRIGGER_PATH..."
|
||||
${pkgs.retroarch}/bin/retroarch --scan "/home/toast/Games/SNES"
|
||||
'';
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
# Sync saves and some other stuff
|
||||
|
|
|
|||
|
|
@ -1,7 +1,12 @@
|
|||
{pkgs, ...}: {
|
||||
environment.systemPackages = with pkgs; [
|
||||
rpcs3
|
||||
{config, ...}: {
|
||||
environment.systemPackages = with config; [
|
||||
nur.repos.ataraxiasjel.rpcs3
|
||||
];
|
||||
# Compiling RPCS3 takes quite a while
|
||||
nix.settings = {
|
||||
substituters = ["https://ataraxiadev-foss.cachix.org"];
|
||||
trusted-public-keys = ["ataraxiadev-foss.cachix.org-1:ws/jmPRUF5R8TkirnV1b525lP9F/uTBsz2KraV61058="];
|
||||
};
|
||||
|
||||
# Increase the memory lock limit
|
||||
security.pam.loginLimits = [
|
||||
|
|
|
|||
|
|
@ -5,7 +5,6 @@
|
|||
}: {
|
||||
programs.steam = {
|
||||
enable = true;
|
||||
localNetworkGameTransfers.openFirewall = true;
|
||||
# Doubt that I'll use it, but I'll enable it anyways
|
||||
remotePlay.openFirewall = true;
|
||||
|
||||
|
|
@ -20,15 +19,14 @@
|
|||
then true
|
||||
else false;
|
||||
|
||||
# Celeste mod manager
|
||||
home-manager.users.toast = {
|
||||
systemd.user.tmpfiles.rules = [
|
||||
"r '/%h/.local/share/applications/Steam Linux Runtime *.desktop'"
|
||||
"r '/%h/.local/share/applications/Proton *.desktop'"
|
||||
];
|
||||
services.flatpak.packages = [
|
||||
# Celeste mod manager
|
||||
"io.github.everestapi.Olympus"
|
||||
];
|
||||
home.packages = [pkgs.sgdboop];
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,13 +0,0 @@
|
|||
diff --git a/src/joystick/SDL_joystick.c b/src/joystick/SDL_joystick.c
|
||||
index 5ce36de86..37bf5ca85 100644
|
||||
--- a/src/joystick/SDL_joystick.c
|
||||
+++ b/src/joystick/SDL_joystick.c
|
||||
@@ -281,6 +281,8 @@ static Uint32 initial_blacklist_devices[] = {
|
||||
MAKE_VIDPID(0x3297, 0x1969), // Moonlander MK1 Keyboard
|
||||
MAKE_VIDPID(0x3434, 0x0211), // Keychron K1 Pro System Control
|
||||
MAKE_VIDPID(0x04f2, 0xa13c), // HP Deluxe Webcam KQ246AA
|
||||
+ MAKE_VIDPID(0x3434, 0x0353), // Keychron V5 System Control
|
||||
+ MAKE_VIDPID(0x3434, 0xd030), // Keychron Link
|
||||
};
|
||||
static SDL_vidpid_list blacklist_devices = {
|
||||
SDL_HINT_JOYSTICK_BLACKLIST_DEVICES, 0, 0, NULL,
|
||||
|
|
@ -8,27 +8,9 @@
|
|||
"steam-201810" = {
|
||||
label = "Wolfenstein The New Order Saves";
|
||||
id = "laxxf-t2wmy";
|
||||
devices = ["steamdeck" "server" "pc" "winmax2"];
|
||||
devices = ["steamdeck" "server" "pc"];
|
||||
path = "~/.local/share/Steam/steamapps/compatdata/201810/pfx/drive_c/users/steamuser/Saved Games/MachineGames/Wolfenstein The New Order/";
|
||||
};
|
||||
"project-diva-mods" = {
|
||||
label = "Project Diva Mods";
|
||||
id = "7pscj-6egww";
|
||||
devices = ["steamdeck" "server" "pc" "winmax2"];
|
||||
path = "~/.local/share/Steam/steamapps/common/Hatsune Miku Project DIVA Mega Mix Plus/mods/";
|
||||
};
|
||||
"project-eden-saves" = {
|
||||
label = "Project Eden saves";
|
||||
id = "xa3qx-3ax5k";
|
||||
devices = ["server" "pc" "winmax2" "steamdeck"];
|
||||
path = "~/.local/share/Steam/steamapps/compatdata/1761390/pfx/drive_c/users/steamuser/AppData/Roaming/EDEN/";
|
||||
};
|
||||
"games" = {
|
||||
label = "Games";
|
||||
id = "mwzph-gf2df";
|
||||
devices = ["server" "pc" "winmax2" "steamdeck"];
|
||||
path = "~/Games";
|
||||
};
|
||||
};
|
||||
home-manager.users.toast.home.file."steam-201810-ignore" = {
|
||||
target = ".local/share/Steam/steamapps/compatdata/201810/pfx/drive_c/users/steamuser/Saved Games/MachineGames/Wolfenstein The New Order/.stignore";
|
||||
|
|
|
|||
|
|
@ -3,6 +3,5 @@
|
|||
./plasma.nix
|
||||
./sddm.nix
|
||||
./programs
|
||||
./patches
|
||||
];
|
||||
}
|
||||
|
|
|
|||
191
roles/kde/patches/BreezeTint.patch
Normal file
191
roles/kde/patches/BreezeTint.patch
Normal file
|
|
@ -0,0 +1,191 @@
|
|||
diff --git a/share/color-schemes/BreezeClassic.colors b/share/color-schemes/BreezeClassicTint.colors
|
||||
similarity index 70%
|
||||
rename from share/color-schemes/BreezeClassic.colors
|
||||
rename to share/color-schemes/BreezeClassicTint.colors
|
||||
index 8dbc299..d64e300 100644
|
||||
--- a/share/color-schemes/BreezeClassic.colors
|
||||
+++ b/share/color-schemes/BreezeClassicTint.colors
|
||||
@@ -103,48 +103,12 @@ ForegroundPositive=46,204,113
|
||||
ForegroundVisited=61,174,230
|
||||
|
||||
[General]
|
||||
-ColorScheme=BreezeClassic
|
||||
-Name=Breeze Classic
|
||||
-Name[ar]=نسيم التقليدي
|
||||
-Name[az]=Breeze klassik
|
||||
-Name[bg]=Breeze Класически
|
||||
-Name[ca]=Brisa clàssica
|
||||
-Name[ca@valencia]=Brisa clàssica
|
||||
-Name[cs]=Breeze Classic
|
||||
-Name[da]=Breeze Classic
|
||||
-Name[de]=Breeze Klassisch
|
||||
-Name[el]=Breeze κλασικό
|
||||
-Name[en_GB]=Breeze Classic
|
||||
-Name[es]=Brisa clásico
|
||||
-Name[eu]=Breeze klasikoa
|
||||
-Name[fi]=Perinteinen Breeze
|
||||
-Name[fr]=Breeze classique
|
||||
-Name[gl]=Brisa clásica
|
||||
-Name[hi]=ब्रीज़ क्लासिक
|
||||
-Name[hu]=Breeze Classic
|
||||
-Name[ia]=Brisa Classic
|
||||
-Name[id]=Breeze Klasik
|
||||
-Name[it]=Brezza classico
|
||||
-Name[ja]=Breeze クラシック
|
||||
-Name[ka]=Breeze კლასიკური
|
||||
-Name[ko]=Breeze 고전
|
||||
-Name[nl]=Breeze Classic
|
||||
-Name[nn]=Breeze klassisk
|
||||
-Name[pl]=Klasyczna Bryza
|
||||
-Name[pt]=Brisa Clássica
|
||||
-Name[pt_BR]=Breeze Classic
|
||||
-Name[ro]=Briză, clasic
|
||||
-Name[ru]=Breeze, классический вариант
|
||||
-Name[sk]=Klasický vánok
|
||||
-Name[sl]=Sapica, klasična
|
||||
-Name[sv]=Breeze klassisk
|
||||
-Name[tr]=Esinti Klasik
|
||||
-Name[uk]=Класична Breeze
|
||||
-Name[x-test]=xxBreeze Classicxx
|
||||
-Name[zh_CN]=Breeze 微风经典
|
||||
-Name[zh_TW]=Breeze Classic
|
||||
+ColorScheme=BreezeClassicTint
|
||||
+Name=Breeze Classic (Tint)
|
||||
accentActiveTitlebar=true
|
||||
accentInactiveTitlebar=false
|
||||
+TintFactor=0.2
|
||||
+TitlebarIsAccentColored=true
|
||||
shadeSortColumn=true
|
||||
|
||||
[KDE]
|
||||
diff --git a/share/color-schemes/BreezeDark.colors b/share/color-schemes/BreezeDarkTint.colors
|
||||
similarity index 71%
|
||||
rename from share/color-schemes/BreezeDark.colors
|
||||
rename to share/color-schemes/BreezeDarkTint.colors
|
||||
index fc1fcb0..a97a552 100644
|
||||
--- a/share/color-schemes/BreezeDark.colors
|
||||
+++ b/share/color-schemes/BreezeDarkTint.colors
|
||||
@@ -131,57 +131,10 @@ ForegroundPositive=39,174,96
|
||||
ForegroundVisited=155,89,182
|
||||
|
||||
[General]
|
||||
-ColorScheme=BreezeDark
|
||||
-Name=Breeze Dark
|
||||
-Name[ar]=نسيم داكن
|
||||
-Name[az]=Breeze - Tünd
|
||||
-Name[bg]=Breeze Тъмен
|
||||
-Name[bs]=Breeze tamna
|
||||
-Name[ca]=Brisa fosca
|
||||
-Name[ca@valencia]=Brisa fosca
|
||||
-Name[cs]=Breeze Tmavé
|
||||
-Name[da]=Breeze Dark
|
||||
-Name[de]=Breeze Dunkel
|
||||
-Name[el]=Breeze σκούρο
|
||||
-Name[en_GB]=Breeze Dark
|
||||
-Name[es]=Brisa oscuro
|
||||
-Name[et]=Breeze tume
|
||||
-Name[eu]=Breeze iluna
|
||||
-Name[fi]=Tumma Breeze
|
||||
-Name[fr]=Brise sombre
|
||||
-Name[gl]=Brisa escura
|
||||
-Name[he]=Breeze Dark
|
||||
-Name[hi]=ब्रीज़ गहरा
|
||||
-Name[hu]=Breeze Dark
|
||||
-Name[ia]=Brisa obscure
|
||||
-Name[id]=Breeze Gelap
|
||||
-Name[it]=Brezza scuro
|
||||
-Name[ja]=Breeze ダーク
|
||||
-Name[ka]=Breeze მუქი
|
||||
-Name[ko]=어두운 Breeze
|
||||
-Name[lt]=Breeze tamsus
|
||||
-Name[nb]=Breeze mørk
|
||||
-Name[nl]=Breeze Dark
|
||||
-Name[nn]=Breeze mørk
|
||||
-Name[pa]=ਬਰੀਜ਼ ਗੂੜ੍ਹਾ
|
||||
-Name[pl]=Ciemna Bryza
|
||||
-Name[pt]=Brisa Escura
|
||||
-Name[pt_BR]=Breeze Dark
|
||||
-Name[ro]=Briză, întunecat
|
||||
-Name[ru]=Breeze, тёмный вариант
|
||||
-Name[sk]=Tmavý vánok
|
||||
-Name[sl]=Sapica, temna
|
||||
-Name[sr]=Поветарац тамни
|
||||
-Name[sr@ijekavian]=Поветарац тамни
|
||||
-Name[sr@ijekavianlatin]=Povetarac tamni
|
||||
-Name[sr@latin]=Povetarac tamni
|
||||
-Name[sv]=Breeze mörk
|
||||
-Name[tg]=Насими торик
|
||||
-Name[tr]=Esinti Koyu
|
||||
-Name[uk]=Темна Breeze
|
||||
-Name[x-test]=xxBreeze Darkxx
|
||||
-Name[zh_CN]=Breeze 微风深色
|
||||
-Name[zh_TW]=Breeze Dark
|
||||
+ColorScheme=BreezeDarkTint
|
||||
+Name=Breeze Dark (Tint)
|
||||
+TintFactor=0.2
|
||||
+TitlebarIsAccentColored=true
|
||||
shadeSortColumn=true
|
||||
|
||||
[KDE]
|
||||
diff --git a/share/color-schemes/BreezeLight.colors b/share/color-schemes/BreezeLightTint.colors
|
||||
similarity index 75%
|
||||
rename from share/color-schemes/BreezeLight.colors
|
||||
rename to share/color-schemes/BreezeLightTint.colors
|
||||
index 5bfdc22..223509c 100644
|
||||
--- a/share/color-schemes/BreezeLight.colors
|
||||
+++ b/share/color-schemes/BreezeLightTint.colors
|
||||
@@ -131,50 +131,10 @@ ForegroundPositive=39,174,96
|
||||
ForegroundVisited=155,89,182
|
||||
|
||||
[General]
|
||||
-ColorScheme=BreezeLight
|
||||
-Name=Breeze Light
|
||||
-Name[ar]=نسيم فاتح
|
||||
-Name[az]=Breeze - İşıqlı
|
||||
-Name[bg]=Breeze Светъл
|
||||
-Name[ca]=Brisa clara
|
||||
-Name[ca@valencia]=Brisa clara
|
||||
-Name[cs]=Breeze Světlé
|
||||
-Name[da]=Breeze Light
|
||||
-Name[de]=Breeze Hell
|
||||
-Name[el]=Breeze φωτεινό
|
||||
-Name[en_GB]=Breeze Light
|
||||
-Name[es]=Brisa claro
|
||||
-Name[et]=Breeze hele
|
||||
-Name[eu]=Breeze argia
|
||||
-Name[fi]=Vaalea Breeze
|
||||
-Name[fr]=Brise clair
|
||||
-Name[gl]=Brisa clara
|
||||
-Name[hi]=ब्रीज़ हलका
|
||||
-Name[hu]=Breeze Light
|
||||
-Name[ia]=Brisa Ligier
|
||||
-Name[id]=Breeze Terang
|
||||
-Name[it]=Brezza chiaro
|
||||
-Name[ja]=Breeze ライト
|
||||
-Name[ka]=Breeze ღია
|
||||
-Name[ko]=밝은 Breeze
|
||||
-Name[lt]=Breeze šviesus
|
||||
-Name[nl]=Breeze Light
|
||||
-Name[nn]=Breeze lys
|
||||
-Name[pa]=ਬਰੀਜ਼ ਹਲਕਾ
|
||||
-Name[pl]=Jasna Bryza
|
||||
-Name[pt]=Brisa Clara
|
||||
-Name[pt_BR]=Breeze Light
|
||||
-Name[ro]=Briză, luminos
|
||||
-Name[ru]=Breeze, светлый вариант
|
||||
-Name[sk]=Svetlý vánok
|
||||
-Name[sl]=Sapica, svetla
|
||||
-Name[sv]=Breeze ljus
|
||||
-Name[tg]=Насими сабук
|
||||
-Name[tr]=Esinti Açık
|
||||
-Name[uk]=Світла Breeze
|
||||
-Name[x-test]=xxBreeze Lightxx
|
||||
-Name[zh_CN]=Breeze 微风浅色
|
||||
-Name[zh_TW]=Breeze Light
|
||||
+ColorScheme=BreezeLightTint
|
||||
+Name=Breeze Light (Tint)
|
||||
+TintFactor=0.2
|
||||
+TitlebarIsAccentColored=true
|
||||
shadeSortColumn=true
|
||||
|
||||
[KDE]
|
||||
|
|
@ -1,29 +0,0 @@
|
|||
{lib, ...}: let
|
||||
rootDirs = builtins.readDir ./.;
|
||||
removeFiles = lib.attrsets.filterAttrs (n: v: v == "directory") rootDirs;
|
||||
programsToPatch = builtins.attrNames removeFiles;
|
||||
|
||||
bigOverlay = final: prev:
|
||||
lib.attrsets.mergeAttrsList (
|
||||
lib.lists.forEach programsToPatch (
|
||||
program: let
|
||||
unpatchedProgram = prev."${program}";
|
||||
newPatches = lib.toast.patches.patchesInPath (lib.path.append ./. program);
|
||||
in {
|
||||
"${program}" = unpatchedProgram.overrideAttrs {
|
||||
version = "${unpatchedProgram.version}-patched";
|
||||
__intentionallyOverridingVersion = true;
|
||||
patches = unpatchedProgram.patches ++ newPatches;
|
||||
};
|
||||
}
|
||||
)
|
||||
);
|
||||
in {
|
||||
nixpkgs.overlays = [
|
||||
(
|
||||
final: prev: {
|
||||
kdePackages = prev.kdePackages.overrideScope bigOverlay;
|
||||
}
|
||||
)
|
||||
];
|
||||
}
|
||||
|
|
@ -1,6 +0,0 @@
|
|||
Plasma 6.6.0:
|
||||
|
||||
Pr 3256 https://invent.kde.org/plasma/plasma-desktop/-/merge_requests/3256
|
||||
Pr 3259 https://invent.kde.org/plasma/plasma-desktop/-/merge_requests/3259
|
||||
Pr 3269 https://invent.kde.org/plasma/plasma-desktop/-/merge_requests/3269
|
||||
Pr 3356 https://invent.kde.org/plasma/plasma-desktop/-/merge_requests/3356
|
||||
|
|
@ -1,94 +0,0 @@
|
|||
From 79d010f4bcdb19d5a19d222dd3c3cb581fde891d Mon Sep 17 00:00:00 2001
|
||||
From: David Redondo <kde@david-redondo.de>
|
||||
Date: Fri, 17 Oct 2025 15:15:51 +0200
|
||||
Subject: [PATCH] applets/taskmanager: Allow changing a tasks volume by
|
||||
scrolling
|
||||
|
||||
FEATURE:510668
|
||||
FIXED-IN:6.6
|
||||
---
|
||||
.../package/contents/config/main.xml | 1 +
|
||||
.../package/contents/ui/ConfigBehavior.qml | 3 ++-
|
||||
.../package/contents/ui/MouseHandler.qml | 20 +++++++++++++++++++
|
||||
3 files changed, 23 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/applets/taskmanager/package/contents/config/main.xml b/applets/taskmanager/package/contents/config/main.xml
|
||||
index f71a7a8457..8c3b68785b 100644
|
||||
--- a/applets/taskmanager/package/contents/config/main.xml
|
||||
+++ b/applets/taskmanager/package/contents/config/main.xml
|
||||
@@ -90,6 +90,7 @@
|
||||
<choice name="None"/>
|
||||
<choice name="AllTask"/>
|
||||
<choice name="TaskOnly"/>
|
||||
+ <choice name="AdjustVolume"/>
|
||||
</choices>
|
||||
<default>0</default>
|
||||
</entry>
|
||||
diff --git a/applets/taskmanager/package/contents/ui/ConfigBehavior.qml b/applets/taskmanager/package/contents/ui/ConfigBehavior.qml
|
||||
index 2c0dc19154..73357e9dcd 100644
|
||||
--- a/applets/taskmanager/package/contents/ui/ConfigBehavior.qml
|
||||
+++ b/applets/taskmanager/package/contents/ui/ConfigBehavior.qml
|
||||
@@ -202,13 +202,14 @@ KCMUtils.SimpleKCM {
|
||||
|
||||
QQC2.ComboBox {
|
||||
id: wheelEnabled
|
||||
- Kirigami.FormData.label: i18nc("@label:listbox Part of a sentence: 'Scrolling behavior does nothing/cycles through tasks/cycles through the selected task's windows'", "Scrolling behavior:")
|
||||
+ Kirigami.FormData.label: i18nc("@label:listbox Part of a sentence: 'Scrolling behavior does nothing/cycles through tasks/cycles through the selected task's windows/adjusts the hovered task’s volume''", "Scrolling behavior:")
|
||||
Layout.fillWidth: true
|
||||
Layout.minimumWidth: Kirigami.Units.gridUnit * 14
|
||||
model: [
|
||||
i18nc("@item:inlistbox Part of a sentence: 'Scrolling behavior does nothing'", "Does nothing"),
|
||||
i18nc("@item:inlistbox Part of a sentence: 'Scrolling behavior cycles through all tasks'", "Cycles through all tasks"),
|
||||
i18nc("@item:inlistbox Part of a sentence: 'Scrolling behavior cycles through the hovered task's windows'", "Cycles through the hovered task’s windows"),
|
||||
+ i18nc("@item:inlistbox Part of a sentence: 'Scrolling behavior adjusts the hovered task’s volume'", "Adjusts the hovered task’s volume"),
|
||||
]
|
||||
}
|
||||
|
||||
diff --git a/applets/taskmanager/package/contents/ui/MouseHandler.qml b/applets/taskmanager/package/contents/ui/MouseHandler.qml
|
||||
index cf2362835a..3f8d703d73 100644
|
||||
--- a/applets/taskmanager/package/contents/ui/MouseHandler.qml
|
||||
+++ b/applets/taskmanager/package/contents/ui/MouseHandler.qml
|
||||
@@ -8,6 +8,7 @@ import QtQuick
|
||||
|
||||
import org.kde.taskmanager as TaskManager
|
||||
import org.kde.plasma.plasmoid
|
||||
+import org.kde.plasma.private.volume as PlasmaPa
|
||||
|
||||
import "code/tools.js" as TaskTools
|
||||
|
||||
@@ -157,6 +158,10 @@ DropArea {
|
||||
}
|
||||
}
|
||||
|
||||
+ PlasmaPa.GlobalConfig {
|
||||
+ id: plasmaPaConfig
|
||||
+ }
|
||||
+
|
||||
WheelHandler {
|
||||
id: wheelHandler
|
||||
|
||||
@@ -179,6 +184,21 @@ DropArea {
|
||||
increment--;
|
||||
}
|
||||
const anchor = dropArea.target.childAt(event.x, event.y);
|
||||
+ if (Plasmoid.configuration.wheelEnabled === 3) {
|
||||
+ const loudest = anchor?.audioStreams?.reduce((loudest, stream) => Math.max(loudest, stream.volume), 0)
|
||||
+ const step = (pulseAudio.item.normalVolume - pulseAudio.item.minimalVolume) * plasmaPaConfig.volumeStep / 100;
|
||||
+ anchor?.audioStreams?.forEach((stream) => {
|
||||
+ let delta = step * increment;
|
||||
+ if (loudest > 0) {
|
||||
+ delta *= stream.volume / loudest;
|
||||
+ }
|
||||
+ const volume = stream.volume + delta;
|
||||
+ console.log(volume, Math.max(pulseAudio.item.minimalVolume, Math.min(volume, pulseAudio.item.normalVolume)));
|
||||
+ stream.model.Volume = Math.max(pulseAudio.item.minimalVolume, Math.min(volume, pulseAudio.item.normalVolume));
|
||||
+ stream.model.Muted = volume === 0
|
||||
+ })
|
||||
+ return;
|
||||
+ }
|
||||
while (increment !== 0) {
|
||||
TaskTools.activateNextPrevTask(anchor, increment < 0, Plasmoid.configuration.wheelSkipMinimized, Plasmoid.configuration.wheelEnabled, tasks);
|
||||
increment += (increment < 0) ? 1 : -1;
|
||||
--
|
||||
GitLab
|
||||
|
||||
|
|
@ -1,78 +0,0 @@
|
|||
From 57885ba4ec524bdc1c1326228f27c1c3a3561bba Mon Sep 17 00:00:00 2001
|
||||
From: Nate Graham <nate@kde.org>
|
||||
Date: Tue, 21 Oct 2025 13:39:40 -0600
|
||||
Subject: [PATCH] applets/kickoff: add spacing between non-switch-on-hover
|
||||
category items
|
||||
|
||||
Otherwise, their highlight effects touch, and it looks bad.
|
||||
|
||||
To avoid blowing up the layout as a result of this change, slightly
|
||||
decrease the height of these category list items too, which also reduces
|
||||
some code complexity.
|
||||
|
||||
BUG: 508985
|
||||
FIXED-IN: 6.6.0
|
||||
---
|
||||
applets/kickoff/ApplicationsPage.qml | 1 +
|
||||
applets/kickoff/KickoffListDelegate.qml | 9 ---------
|
||||
applets/kickoff/KickoffListView.qml | 5 +++++
|
||||
3 files changed, 6 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/applets/kickoff/ApplicationsPage.qml b/applets/kickoff/ApplicationsPage.qml
|
||||
index c2baa75b52..fe8d6eaafb 100644
|
||||
--- a/applets/kickoff/ApplicationsPage.qml
|
||||
+++ b/applets/kickoff/ApplicationsPage.qml
|
||||
@@ -20,6 +20,7 @@ BasePage {
|
||||
id: sideBar
|
||||
focus: true // needed for Loaders
|
||||
model: kickoff.rootModel
|
||||
+ showingCategories: true
|
||||
// needed otherwise app displayed at top-level will show a first character as group.
|
||||
section.property: ""
|
||||
delegate: KickoffListDelegate {
|
||||
diff --git a/applets/kickoff/KickoffListDelegate.qml b/applets/kickoff/KickoffListDelegate.qml
|
||||
index b1f8afb3ce..02bfcfcacd 100644
|
||||
--- a/applets/kickoff/KickoffListDelegate.qml
|
||||
+++ b/applets/kickoff/KickoffListDelegate.qml
|
||||
@@ -72,15 +72,6 @@ AbstractKickoffItemDelegate {
|
||||
id: label
|
||||
Layout.fillWidth: !descriptionLabel.visible
|
||||
Layout.maximumWidth: root.width - root.leftPadding - root.rightPadding - icon.width - row.spacing
|
||||
- Layout.preferredHeight: {
|
||||
- if (root.isCategoryListItem) {
|
||||
- return root.compact ? implicitHeight : Math.round(implicitHeight * 1.5);
|
||||
- }
|
||||
- if (!root.compact && !descriptionLabel.visible) {
|
||||
- return implicitHeight + descriptionLabel.implicitHeight
|
||||
- }
|
||||
- return implicitHeight;
|
||||
- }
|
||||
text: root.text
|
||||
textFormat: root.isMultilineText ? Text.StyledText : Text.PlainText
|
||||
elide: Text.ElideRight
|
||||
diff --git a/applets/kickoff/KickoffListView.qml b/applets/kickoff/KickoffListView.qml
|
||||
index c7787493e0..382d146428 100644
|
||||
--- a/applets/kickoff/KickoffListView.qml
|
||||
+++ b/applets/kickoff/KickoffListView.qml
|
||||
@@ -33,6 +33,7 @@ EmptyPage {
|
||||
property alias section: view.section
|
||||
property alias highlight: view.highlight
|
||||
property alias view: view
|
||||
+ property bool showingCategories: false
|
||||
|
||||
property bool mainContentView: false
|
||||
property bool hasSectionView: false
|
||||
@@ -144,6 +145,10 @@ EmptyPage {
|
||||
width: view.availableWidth
|
||||
}
|
||||
|
||||
+ // Without switch-on-hover, it's possible for the selected category and the hovered category to be adjacent.
|
||||
+ // When this happens, their highlights tuoch and look ungly without some artificial spacing added.
|
||||
+ spacing: root.showingCategories && !Plasmoid.configuration.switchCategoryOnHover ? Kirigami.Units.smallSpacing : 0
|
||||
+
|
||||
section {
|
||||
property: "group"
|
||||
criteria: ViewSection.FullString
|
||||
--
|
||||
GitLab
|
||||
|
||||
|
|
@ -1,66 +0,0 @@
|
|||
From a63fce38f285b59407c24f44639023d41b5d3ca9 Mon Sep 17 00:00:00 2001
|
||||
From: Nate Graham <nate@kde.org>
|
||||
Date: Thu, 30 Oct 2025 20:01:32 -0600
|
||||
Subject: [PATCH] applets/kickoff: add separation between Places page list
|
||||
items too
|
||||
|
||||
Missed in 57885ba4ec524bdc1c1326228f27c1c3a3561bba
|
||||
|
||||
BUG: 508985
|
||||
FIXED-IN: 6.6.0
|
||||
---
|
||||
applets/kickoff/ApplicationsPage.qml | 2 +-
|
||||
applets/kickoff/KickoffListView.qml | 4 ++--
|
||||
applets/kickoff/PlacesPage.qml | 1 +
|
||||
3 files changed, 4 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/applets/kickoff/ApplicationsPage.qml b/applets/kickoff/ApplicationsPage.qml
|
||||
index fe8d6eaafb..206ddd958d 100644
|
||||
--- a/applets/kickoff/ApplicationsPage.qml
|
||||
+++ b/applets/kickoff/ApplicationsPage.qml
|
||||
@@ -20,7 +20,7 @@ BasePage {
|
||||
id: sideBar
|
||||
focus: true // needed for Loaders
|
||||
model: kickoff.rootModel
|
||||
- showingCategories: true
|
||||
+ isSidebar: true
|
||||
// needed otherwise app displayed at top-level will show a first character as group.
|
||||
section.property: ""
|
||||
delegate: KickoffListDelegate {
|
||||
diff --git a/applets/kickoff/KickoffListView.qml b/applets/kickoff/KickoffListView.qml
|
||||
index 382d146428..2d67bd59b7 100644
|
||||
--- a/applets/kickoff/KickoffListView.qml
|
||||
+++ b/applets/kickoff/KickoffListView.qml
|
||||
@@ -33,7 +33,7 @@ EmptyPage {
|
||||
property alias section: view.section
|
||||
property alias highlight: view.highlight
|
||||
property alias view: view
|
||||
- property bool showingCategories: false
|
||||
+ property bool isSidebar: false
|
||||
|
||||
property bool mainContentView: false
|
||||
property bool hasSectionView: false
|
||||
@@ -147,7 +147,7 @@ EmptyPage {
|
||||
|
||||
// Without switch-on-hover, it's possible for the selected category and the hovered category to be adjacent.
|
||||
// When this happens, their highlights tuoch and look ungly without some artificial spacing added.
|
||||
- spacing: root.showingCategories && !Plasmoid.configuration.switchCategoryOnHover ? Kirigami.Units.smallSpacing : 0
|
||||
+ spacing: root.isSidebar && !Plasmoid.configuration.switchCategoryOnHover ? Kirigami.Units.smallSpacing : 0
|
||||
|
||||
section {
|
||||
property: "group"
|
||||
diff --git a/applets/kickoff/PlacesPage.qml b/applets/kickoff/PlacesPage.qml
|
||||
index ff92f535e4..7f81096834 100644
|
||||
--- a/applets/kickoff/PlacesPage.qml
|
||||
+++ b/applets/kickoff/PlacesPage.qml
|
||||
@@ -19,6 +19,7 @@ BasePage {
|
||||
id: sideBar
|
||||
focus: true // needed for Loaders
|
||||
model: placesCategoryModel
|
||||
+ isSidebar: true
|
||||
delegate: KickoffListDelegate {
|
||||
url: ""
|
||||
description: ""
|
||||
--
|
||||
GitLab
|
||||
|
||||
|
|
@ -1,37 +0,0 @@
|
|||
From 04c747a41d8c01248c7baeec5c852c2298f76fc3 Mon Sep 17 00:00:00 2001
|
||||
From: Christoph Wolk <cwo.kde@posteo.net>
|
||||
Date: Mon, 1 Dec 2025 14:36:09 +0100
|
||||
Subject: [PATCH] applets/kickoff: also close when triggering from footer menu
|
||||
|
||||
Kickoff already closes when one of the power/session buttons from the
|
||||
menu is pressed, but the same does not happen if the same action is
|
||||
shown in the overflow menu.
|
||||
|
||||
Instead, also close kickoff in that case.
|
||||
|
||||
CCBUG: 508725
|
||||
---
|
||||
applets/kickoff/LeaveButtons.qml | 7 ++++++-
|
||||
1 file changed, 6 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/applets/kickoff/LeaveButtons.qml b/applets/kickoff/LeaveButtons.qml
|
||||
index c9a14dc3254..acf83639341 100644
|
||||
--- a/applets/kickoff/LeaveButtons.qml
|
||||
+++ b/applets/kickoff/LeaveButtons.qml
|
||||
@@ -214,7 +214,12 @@ RowLayout {
|
||||
|
||||
text: model.display
|
||||
icon: model.decoration
|
||||
- onClicked: filteredMenuItemsModel.trigger(index)
|
||||
+ onClicked: {
|
||||
+ filteredMenuItemsModel.trigger(index)
|
||||
+ if (kickoff.hideOnWindowDeactivate) {
|
||||
+ kickoff.expanded = false;
|
||||
+ }
|
||||
+ }
|
||||
}
|
||||
onObjectAdded: (index, object) => contextMenu.addMenuItem(object)
|
||||
onObjectRemoved: (index, object) => contextMenu.removeMenuItem(object)
|
||||
--
|
||||
GitLab
|
||||
|
||||
|
|
@ -1,5 +0,0 @@
|
|||
Pr 462 https://invent.kde.org/plasma/spectacle/-/merge_requests/462
|
||||
Pr 487 https://invent.kde.org/plasma/spectacle/-/merge_requests/487
|
||||
|
||||
Plasma 6.6.0:
|
||||
Pr 493 https://invent.kde.org/plasma/spectacle/-/merge_requests/493
|
||||
File diff suppressed because it is too large
Load diff
|
|
@ -1,704 +0,0 @@
|
|||
From d72a6fcb76053139ea709d7b1a4f45aa430a066d Mon Sep 17 00:00:00 2001
|
||||
From: Jhair Paris <dev@jhairparis.com>
|
||||
Date: Sat, 8 Nov 2025 17:32:20 -0500
|
||||
Subject: [PATCH 1/4] Enhance OCR language settings management and
|
||||
synchronization
|
||||
|
||||
- Improved signal handling in OcrLanguageSelector to prevent unnecessary updates.
|
||||
- Added config sync suspension functionality in OcrManager to manage settings changes.
|
||||
- Adjusted SettingsDialog to ensure proper synchronization of OCR configurations.
|
||||
---
|
||||
src/Gui/SettingsDialog/GeneralOptionsPage.cpp | 7 +-
|
||||
src/Gui/SettingsDialog/GeneralOptionsPage.h | 4 +-
|
||||
.../SettingsDialog/OcrLanguageSelector.cpp | 132 ++++++++----------
|
||||
src/Gui/SettingsDialog/OcrLanguageSelector.h | 7 +-
|
||||
src/Gui/SettingsDialog/SettingsDialog.cpp | 25 +++-
|
||||
src/Gui/SettingsDialog/SettingsDialog.h | 1 +
|
||||
src/OcrManager.cpp | 25 ++++
|
||||
src/OcrManager.h | 3 +
|
||||
8 files changed, 117 insertions(+), 87 deletions(-)
|
||||
|
||||
diff --git a/src/Gui/SettingsDialog/GeneralOptionsPage.cpp b/src/Gui/SettingsDialog/GeneralOptionsPage.cpp
|
||||
index f6be13d56..ae0a997c3 100644
|
||||
--- a/src/Gui/SettingsDialog/GeneralOptionsPage.cpp
|
||||
+++ b/src/Gui/SettingsDialog/GeneralOptionsPage.cpp
|
||||
@@ -10,7 +10,6 @@
|
||||
|
||||
#include "OcrLanguageSelector.h"
|
||||
#include "OcrManager.h"
|
||||
-#include "settings.h"
|
||||
#include "ui_GeneralOptions.h"
|
||||
|
||||
#include <KLocalizedString>
|
||||
@@ -49,7 +48,7 @@ GeneralOptionsPage::GeneralOptionsPage(QWidget *parent)
|
||||
|
||||
GeneralOptionsPage::~GeneralOptionsPage() = default;
|
||||
|
||||
-void GeneralOptionsPage::refreshOcrLanguageSettings()
|
||||
+void GeneralOptionsPage::refreshOcrLanguageSettings(bool rebuildSelector)
|
||||
{
|
||||
OcrManager *ocrManager = OcrManager::instance();
|
||||
|
||||
@@ -62,7 +61,9 @@ void GeneralOptionsPage::refreshOcrLanguageSettings()
|
||||
m_ui->ocrLanguageScrollArea->setVisible(true);
|
||||
m_ui->ocrUnavailableWidget->setVisible(false);
|
||||
|
||||
- m_ocrLanguageSelector->refresh();
|
||||
+ if (rebuildSelector) {
|
||||
+ m_ocrLanguageSelector->refresh();
|
||||
+ }
|
||||
}
|
||||
}
|
||||
|
||||
diff --git a/src/Gui/SettingsDialog/GeneralOptionsPage.h b/src/Gui/SettingsDialog/GeneralOptionsPage.h
|
||||
index a3a5cb17d..bbb6d79a8 100644
|
||||
--- a/src/Gui/SettingsDialog/GeneralOptionsPage.h
|
||||
+++ b/src/Gui/SettingsDialog/GeneralOptionsPage.h
|
||||
@@ -20,8 +20,8 @@ class GeneralOptionsPage : public QWidget
|
||||
public:
|
||||
explicit GeneralOptionsPage(QWidget *parent = nullptr);
|
||||
~GeneralOptionsPage() override;
|
||||
-
|
||||
- void refreshOcrLanguageSettings();
|
||||
+
|
||||
+ void refreshOcrLanguageSettings(bool rebuildSelector = true);
|
||||
|
||||
/**
|
||||
* @brief Get direct access to the OCR language selector widget
|
||||
diff --git a/src/Gui/SettingsDialog/OcrLanguageSelector.cpp b/src/Gui/SettingsDialog/OcrLanguageSelector.cpp
|
||||
index d1d809323..815b4c707 100644
|
||||
--- a/src/Gui/SettingsDialog/OcrLanguageSelector.cpp
|
||||
+++ b/src/Gui/SettingsDialog/OcrLanguageSelector.cpp
|
||||
@@ -12,6 +12,7 @@
|
||||
#include <KLocalizedString>
|
||||
|
||||
#include <QCheckBox>
|
||||
+#include <QSignalBlocker>
|
||||
#include <QVBoxLayout>
|
||||
|
||||
using namespace Qt::Literals::StringLiterals;
|
||||
@@ -19,7 +20,6 @@ using namespace Qt::Literals::StringLiterals;
|
||||
OcrLanguageSelector::OcrLanguageSelector(QWidget *parent)
|
||||
: QWidget(parent)
|
||||
, m_layout(new QVBoxLayout(this))
|
||||
- , m_blockSignals(false)
|
||||
, m_ocrManager(OcrManager::instance())
|
||||
{
|
||||
m_layout->setContentsMargins(0, 0, 0, 0);
|
||||
@@ -46,15 +46,14 @@ QStringList OcrLanguageSelector::selectedLanguages() const
|
||||
|
||||
void OcrLanguageSelector::setSelectedLanguages(const QStringList &languages)
|
||||
{
|
||||
- m_blockSignals = true;
|
||||
+ QSignalBlocker blocker(this);
|
||||
|
||||
for (QCheckBox *checkbox : m_languageCheckboxes) {
|
||||
const QString langCode = checkbox->property("languageCode").toString();
|
||||
+ QSignalBlocker checkboxBlocker(checkbox);
|
||||
checkbox->setChecked(languages.contains(langCode));
|
||||
}
|
||||
|
||||
- m_blockSignals = false;
|
||||
-
|
||||
enforceSelectionLimits();
|
||||
}
|
||||
|
||||
@@ -67,18 +66,11 @@ bool OcrLanguageSelector::isDefault() const
|
||||
return false;
|
||||
}
|
||||
|
||||
- // Check if it's English (preferred default)
|
||||
- for (const QCheckBox *checkbox : m_languageCheckboxes) {
|
||||
- if (checkbox->property("languageCode").toString() == u"eng"_s) {
|
||||
- // English is available, so default is English
|
||||
- return current.contains(u"eng"_s);
|
||||
- }
|
||||
- }
|
||||
+ QCheckBox *defaultCheckbox = findDefaultCheckbox();
|
||||
|
||||
- // English not available, default is the first available language
|
||||
- if (!m_languageCheckboxes.isEmpty()) {
|
||||
- QString firstLangCode = m_languageCheckboxes.first()->property("languageCode").toString();
|
||||
- return current.contains(firstLangCode);
|
||||
+ if (defaultCheckbox) {
|
||||
+ QString defaultLangCode = defaultCheckbox->property("languageCode").toString();
|
||||
+ return current.contains(defaultLangCode);
|
||||
}
|
||||
|
||||
return false;
|
||||
@@ -91,36 +83,28 @@ bool OcrLanguageSelector::hasChanges() const
|
||||
|
||||
void OcrLanguageSelector::applyDefaults()
|
||||
{
|
||||
- if (!m_languageCheckboxes.isEmpty()) {
|
||||
- m_blockSignals = true;
|
||||
-
|
||||
- for (QCheckBox *checkbox : m_languageCheckboxes) {
|
||||
- checkbox->setChecked(false);
|
||||
- }
|
||||
+ if (m_languageCheckboxes.isEmpty()) {
|
||||
+ return;
|
||||
+ }
|
||||
|
||||
- // Try to select English first
|
||||
- bool foundDefault = false;
|
||||
- for (QCheckBox *checkbox : m_languageCheckboxes) {
|
||||
- if (checkbox->property("languageCode").toString() == u"eng"_s) {
|
||||
- checkbox->setChecked(true);
|
||||
- foundDefault = true;
|
||||
- break;
|
||||
- }
|
||||
- }
|
||||
+ QSignalBlocker blocker(this);
|
||||
|
||||
- // If English not available, select first language
|
||||
- if (!foundDefault) {
|
||||
- m_languageCheckboxes.first()->setChecked(true);
|
||||
- }
|
||||
+ QCheckBox *defaultCheckbox = findDefaultCheckbox();
|
||||
|
||||
- m_blockSignals = false;
|
||||
+ for (QCheckBox *checkbox : m_languageCheckboxes) {
|
||||
+ QSignalBlocker checkboxBlocker(checkbox);
|
||||
+ checkbox->setChecked(checkbox == defaultCheckbox);
|
||||
+ }
|
||||
|
||||
- const QStringList selected = selectedLanguages();
|
||||
- Settings::setOcrLanguages(selected);
|
||||
+ const int selectedCount = defaultCheckbox ? 1 : 0;
|
||||
+ updateCheckboxEnabledStates(selectedCount);
|
||||
|
||||
- // Emit signal to notify changes
|
||||
- Q_EMIT selectedLanguagesChanged(selected);
|
||||
+ QStringList selected;
|
||||
+ if (defaultCheckbox) {
|
||||
+ selected.append(defaultCheckbox->property("languageCode").toString());
|
||||
}
|
||||
+
|
||||
+ Q_EMIT selectedLanguagesChanged(selected);
|
||||
}
|
||||
|
||||
void OcrLanguageSelector::refresh()
|
||||
@@ -142,13 +126,17 @@ void OcrLanguageSelector::updateWidgets()
|
||||
|
||||
void OcrLanguageSelector::onLanguageCheckboxChanged()
|
||||
{
|
||||
- if (m_blockSignals) {
|
||||
- return;
|
||||
- }
|
||||
-
|
||||
enforceSelectionLimits();
|
||||
|
||||
- const QStringList selected = selectedLanguages();
|
||||
+ QStringList selected;
|
||||
+ selected.reserve(OcrManager::MAX_OCR_LANGUAGES);
|
||||
+
|
||||
+ for (QCheckBox *checkbox : m_languageCheckboxes) {
|
||||
+ if (checkbox->isChecked()) {
|
||||
+ selected.append(checkbox->property("languageCode").toString());
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
Q_EMIT selectedLanguagesChanged(selected);
|
||||
}
|
||||
|
||||
@@ -167,21 +155,20 @@ void OcrLanguageSelector::setupLanguageCheckboxes()
|
||||
}
|
||||
|
||||
m_languageCheckboxes.clear();
|
||||
- m_availableLanguages.clear();
|
||||
|
||||
if (!m_ocrManager || !m_ocrManager->isAvailable()) {
|
||||
qCWarning(SPECTACLE_LOG) << "OCR is not available; language selector will remain empty.";
|
||||
return;
|
||||
}
|
||||
|
||||
- m_availableLanguages = m_ocrManager->availableLanguagesWithNames();
|
||||
+ const QMap<QString, QString> availableLanguages = m_ocrManager->availableLanguagesWithNames();
|
||||
|
||||
- if (m_availableLanguages.isEmpty()) {
|
||||
+ if (availableLanguages.isEmpty()) {
|
||||
qCWarning(SPECTACLE_LOG) << "No OCR language data available.";
|
||||
return;
|
||||
}
|
||||
|
||||
- for (auto it = m_availableLanguages.cbegin(); it != m_availableLanguages.cend(); ++it) {
|
||||
+ for (auto it = availableLanguages.cbegin(); it != availableLanguages.cend(); ++it) {
|
||||
const QString &langCode = it.key();
|
||||
if (langCode == u"osd"_s) {
|
||||
continue;
|
||||
@@ -208,64 +195,57 @@ void OcrLanguageSelector::setupLanguageCheckboxes()
|
||||
|
||||
void OcrLanguageSelector::enforceSelectionLimits()
|
||||
{
|
||||
- const QStringList selected = selectedLanguages();
|
||||
- const int count = selected.size();
|
||||
+ int selectedCount = 0;
|
||||
+
|
||||
+ for (QCheckBox *checkbox : m_languageCheckboxes) {
|
||||
+ if (checkbox->isChecked()) {
|
||||
+ ++selectedCount;
|
||||
+ }
|
||||
+ }
|
||||
|
||||
- if (count > OcrManager::MAX_OCR_LANGUAGES) { // Max languages for performance
|
||||
+ if (selectedCount > OcrManager::MAX_OCR_LANGUAGES) {
|
||||
for (int i = m_languageCheckboxes.size() - 1; i >= 0; --i) {
|
||||
QCheckBox *checkbox = m_languageCheckboxes[i];
|
||||
if (checkbox->isChecked()) {
|
||||
- blockSignalsAndSetChecked(checkbox, false);
|
||||
+ QSignalBlocker blocker(checkbox);
|
||||
+ checkbox->setChecked(false);
|
||||
+ --selectedCount;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
- updateCheckboxEnabledStates();
|
||||
+ updateCheckboxEnabledStates(selectedCount);
|
||||
|
||||
- if (selectedLanguages().size() == 0 && !m_languageCheckboxes.isEmpty()) {
|
||||
+ if (selectedCount == 0 && !m_languageCheckboxes.isEmpty()) {
|
||||
applyDefaults();
|
||||
}
|
||||
}
|
||||
|
||||
-QString OcrLanguageSelector::getDefaultLanguageCode() const
|
||||
+QCheckBox *OcrLanguageSelector::findDefaultCheckbox() const
|
||||
{
|
||||
if (m_languageCheckboxes.isEmpty()) {
|
||||
- return QString();
|
||||
+ return nullptr;
|
||||
}
|
||||
|
||||
// Try English first
|
||||
- for (const QCheckBox *checkbox : m_languageCheckboxes) {
|
||||
+ for (QCheckBox *checkbox : m_languageCheckboxes) {
|
||||
if (checkbox->property("languageCode").toString() == u"eng"_s) {
|
||||
- return u"eng"_s;
|
||||
+ return checkbox;
|
||||
}
|
||||
}
|
||||
|
||||
// Fallback to first available
|
||||
- return m_languageCheckboxes.first()->property("languageCode").toString();
|
||||
+ return m_languageCheckboxes.first();
|
||||
}
|
||||
|
||||
-void OcrLanguageSelector::updateCheckboxEnabledStates()
|
||||
+void OcrLanguageSelector::updateCheckboxEnabledStates(int selectedCount)
|
||||
{
|
||||
- const QStringList selected = selectedLanguages();
|
||||
- const int count = selected.size();
|
||||
+ const bool enableUnchecked = selectedCount < OcrManager::MAX_OCR_LANGUAGES;
|
||||
|
||||
- // If we have max languages selected, disable all unchecked checkboxes
|
||||
- // If we have less than max, enable all checkboxes
|
||||
for (QCheckBox *checkbox : m_languageCheckboxes) {
|
||||
- if (checkbox->isChecked()) {
|
||||
- checkbox->setEnabled(true);
|
||||
- } else {
|
||||
- checkbox->setEnabled(count < OcrManager::MAX_OCR_LANGUAGES);
|
||||
- }
|
||||
+ checkbox->setEnabled(checkbox->isChecked() || enableUnchecked);
|
||||
}
|
||||
}
|
||||
|
||||
-void OcrLanguageSelector::blockSignalsAndSetChecked(QCheckBox *checkbox, bool checked)
|
||||
-{
|
||||
- m_blockSignals = true;
|
||||
- checkbox->setChecked(checked);
|
||||
- m_blockSignals = false;
|
||||
-}
|
||||
-
|
||||
#include "moc_OcrLanguageSelector.cpp"
|
||||
\ No newline at end of file
|
||||
diff --git a/src/Gui/SettingsDialog/OcrLanguageSelector.h b/src/Gui/SettingsDialog/OcrLanguageSelector.h
|
||||
index 59b1a3d42..e938e06fa 100644
|
||||
--- a/src/Gui/SettingsDialog/OcrLanguageSelector.h
|
||||
+++ b/src/Gui/SettingsDialog/OcrLanguageSelector.h
|
||||
@@ -96,14 +96,11 @@ private Q_SLOTS:
|
||||
private:
|
||||
void setupLanguageCheckboxes();
|
||||
void enforceSelectionLimits();
|
||||
- void updateCheckboxEnabledStates();
|
||||
- QString getDefaultLanguageCode() const;
|
||||
- void blockSignalsAndSetChecked(QCheckBox *checkbox, bool checked);
|
||||
+ void updateCheckboxEnabledStates(int selectedCount);
|
||||
+ QCheckBox *findDefaultCheckbox() const;
|
||||
|
||||
QVBoxLayout *m_layout;
|
||||
QList<QCheckBox *> m_languageCheckboxes;
|
||||
- QMap<QString, QString> m_availableLanguages; // code -> display name
|
||||
- bool m_blockSignals;
|
||||
|
||||
OcrManager *m_ocrManager;
|
||||
};
|
||||
diff --git a/src/Gui/SettingsDialog/SettingsDialog.cpp b/src/Gui/SettingsDialog/SettingsDialog.cpp
|
||||
index 532bfd3c3..696636685 100644
|
||||
--- a/src/Gui/SettingsDialog/SettingsDialog.cpp
|
||||
+++ b/src/Gui/SettingsDialog/SettingsDialog.cpp
|
||||
@@ -11,6 +11,7 @@
|
||||
#include "GeneralOptionsPage.h"
|
||||
#include "ImageSaveOptionsPage.h"
|
||||
#include "OcrLanguageSelector.h"
|
||||
+#include "OcrManager.h"
|
||||
#include "ShortcutsOptionsPage.h"
|
||||
#include "VideoSaveOptionsPage.h"
|
||||
#include "settings.h"
|
||||
@@ -46,6 +47,16 @@ SettingsDialog::SettingsDialog(QWidget *parent)
|
||||
connect(this, &KConfigDialog::currentPageChanged, this, &SettingsDialog::updateButtons);
|
||||
}
|
||||
|
||||
+SettingsDialog::~SettingsDialog()
|
||||
+{
|
||||
+ // Ensure OCR config sync is resumed
|
||||
+ if (OcrManager *ocrManager = OcrManager::instance()) {
|
||||
+ if (ocrManager->isConfigSyncSuspended()) {
|
||||
+ ocrManager->setConfigSyncSuspended(false);
|
||||
+ }
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
QSize SettingsDialog::sizeHint() const
|
||||
{
|
||||
// Avoid having pages that need to be scrolled,
|
||||
@@ -91,6 +102,10 @@ void SettingsDialog::updateSettings()
|
||||
m_shortcutsPage->saveChanges();
|
||||
|
||||
m_generalPage->ocrLanguageSelector()->saveSettings();
|
||||
+
|
||||
+ if (OcrManager *ocrManager = OcrManager::instance()) {
|
||||
+ ocrManager->setConfigSyncSuspended(false);
|
||||
+ }
|
||||
}
|
||||
|
||||
void SettingsDialog::updateWidgets()
|
||||
@@ -100,15 +115,23 @@ void SettingsDialog::updateWidgets()
|
||||
|
||||
m_generalPage->ocrLanguageSelector()->updateWidgets();
|
||||
m_generalPage->refreshOcrLanguageSettings();
|
||||
+
|
||||
+ if (OcrManager *ocrManager = OcrManager::instance()) {
|
||||
+ ocrManager->setConfigSyncSuspended(false);
|
||||
+ }
|
||||
}
|
||||
|
||||
void SettingsDialog::updateWidgetsDefault()
|
||||
{
|
||||
+ if (OcrManager *ocrManager = OcrManager::instance()) {
|
||||
+ ocrManager->setConfigSyncSuspended(true);
|
||||
+ }
|
||||
+
|
||||
KConfigDialog::updateWidgetsDefault();
|
||||
m_shortcutsPage->defaults();
|
||||
|
||||
m_generalPage->ocrLanguageSelector()->applyDefaults();
|
||||
- m_generalPage->refreshOcrLanguageSettings();
|
||||
+ m_generalPage->refreshOcrLanguageSettings(false);
|
||||
}
|
||||
|
||||
#include "moc_SettingsDialog.cpp"
|
||||
diff --git a/src/Gui/SettingsDialog/SettingsDialog.h b/src/Gui/SettingsDialog/SettingsDialog.h
|
||||
index 50f6d85bf..64281dd09 100644
|
||||
--- a/src/Gui/SettingsDialog/SettingsDialog.h
|
||||
+++ b/src/Gui/SettingsDialog/SettingsDialog.h
|
||||
@@ -20,6 +20,7 @@ class SettingsDialog : public KConfigDialog
|
||||
|
||||
public:
|
||||
explicit SettingsDialog(QWidget *parent = nullptr);
|
||||
+ ~SettingsDialog() override;
|
||||
|
||||
protected:
|
||||
QSize sizeHint() const override;
|
||||
diff --git a/src/OcrManager.cpp b/src/OcrManager.cpp
|
||||
index 1d09db8ef..56d467993 100644
|
||||
--- a/src/OcrManager.cpp
|
||||
+++ b/src/OcrManager.cpp
|
||||
@@ -56,6 +56,9 @@ OcrManager::OcrManager(QObject *parent)
|
||||
m_workerThread->start();
|
||||
|
||||
connect(Settings::self(), &Settings::ocrLanguagesChanged, this, [this]() {
|
||||
+ if (m_configSyncSuspended) {
|
||||
+ return;
|
||||
+ }
|
||||
const QStringList newLanguages = Settings::ocrLanguages();
|
||||
const QString combinedLanguages = newLanguages.join(u"+"_s);
|
||||
if (combinedLanguages != m_currentLanguageCode) {
|
||||
@@ -150,6 +153,28 @@ QString OcrManager::currentLanguageCode() const
|
||||
return m_currentLanguageCode;
|
||||
}
|
||||
|
||||
+void OcrManager::setConfigSyncSuspended(bool suspended)
|
||||
+{
|
||||
+ if (m_configSyncSuspended == suspended) {
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ m_configSyncSuspended = suspended;
|
||||
+
|
||||
+ // On resume, apply any changes made to Settings
|
||||
+ if (!m_configSyncSuspended) {
|
||||
+ const QStringList settingsLanguages = Settings::ocrLanguages();
|
||||
+ if (settingsLanguages != m_configuredLanguages) {
|
||||
+ setLanguagesByCode(settingsLanguages);
|
||||
+ }
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+bool OcrManager::isConfigSyncSuspended() const
|
||||
+{
|
||||
+ return m_configSyncSuspended;
|
||||
+}
|
||||
+
|
||||
void OcrManager::recognizeText(const QImage &image)
|
||||
{
|
||||
#ifdef HAVE_TESSERACT_OCR
|
||||
diff --git a/src/OcrManager.h b/src/OcrManager.h
|
||||
index c71505b3e..37f490600 100644
|
||||
--- a/src/OcrManager.h
|
||||
+++ b/src/OcrManager.h
|
||||
@@ -98,6 +98,8 @@ public:
|
||||
* @return Current language code (e.g., "eng", "spa")
|
||||
*/
|
||||
QString currentLanguageCode() const;
|
||||
+ void setConfigSyncSuspended(bool suspended);
|
||||
+ bool isConfigSyncSuspended() const;
|
||||
|
||||
public Q_SLOTS:
|
||||
/**
|
||||
@@ -169,6 +171,7 @@ private:
|
||||
bool m_shouldRestoreToConfigured;
|
||||
QStringList m_availableLanguages;
|
||||
QMap<QString, QString> m_languageNames;
|
||||
+ bool m_configSyncSuspended = false;
|
||||
bool m_initialized;
|
||||
|
||||
private:
|
||||
--
|
||||
GitLab
|
||||
|
||||
|
||||
From 642600410714c783515f2416a9be08ef3406b0d9 Mon Sep 17 00:00:00 2001
|
||||
From: Jhair Paris <dev@jhairparis.com>
|
||||
Date: Sat, 8 Nov 2025 21:30:41 -0500
|
||||
Subject: [PATCH 2/4] Fix flickering in settings dialog during OCR
|
||||
initialization
|
||||
|
||||
---
|
||||
src/Gui/SettingsDialog/GeneralOptionsPage.cpp | 13 +++++++------
|
||||
1 file changed, 7 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/src/Gui/SettingsDialog/GeneralOptionsPage.cpp b/src/Gui/SettingsDialog/GeneralOptionsPage.cpp
|
||||
index ae0a997c3..adfc045e6 100644
|
||||
--- a/src/Gui/SettingsDialog/GeneralOptionsPage.cpp
|
||||
+++ b/src/Gui/SettingsDialog/GeneralOptionsPage.cpp
|
||||
@@ -38,7 +38,7 @@ GeneralOptionsPage::GeneralOptionsPage(QWidget *parent)
|
||||
|
||||
connect(m_ocrLanguageSelector, &OcrLanguageSelector::selectedLanguagesChanged, this, &GeneralOptionsPage::ocrLanguageChanged);
|
||||
|
||||
- refreshOcrLanguageSettings();
|
||||
+ refreshOcrLanguageSettings(false);
|
||||
|
||||
//On Wayland we can't programmatically raise and focus the window so we have to hide the option
|
||||
if (KWindowSystem::isPlatformWayland() || qstrcmp(qgetenv("XDG_SESSION_TYPE").constData(), "wayland") == 0) {
|
||||
@@ -51,8 +51,9 @@ GeneralOptionsPage::~GeneralOptionsPage() = default;
|
||||
void GeneralOptionsPage::refreshOcrLanguageSettings(bool rebuildSelector)
|
||||
{
|
||||
OcrManager *ocrManager = OcrManager::instance();
|
||||
-
|
||||
- if (!ocrManager->isAvailable()) {
|
||||
+ const bool ocrAvailable = ocrManager->isAvailable();
|
||||
+
|
||||
+ if (!ocrAvailable) {
|
||||
m_ui->ocrLanguageLabel->setVisible(false);
|
||||
m_ui->ocrLanguageScrollArea->setVisible(false);
|
||||
m_ui->ocrUnavailableWidget->setVisible(true);
|
||||
@@ -60,10 +61,10 @@ void GeneralOptionsPage::refreshOcrLanguageSettings(bool rebuildSelector)
|
||||
m_ui->ocrLanguageLabel->setVisible(true);
|
||||
m_ui->ocrLanguageScrollArea->setVisible(true);
|
||||
m_ui->ocrUnavailableWidget->setVisible(false);
|
||||
+ }
|
||||
|
||||
- if (rebuildSelector) {
|
||||
- m_ocrLanguageSelector->refresh();
|
||||
- }
|
||||
+ if (ocrAvailable && rebuildSelector) {
|
||||
+ m_ocrLanguageSelector->refresh();
|
||||
}
|
||||
}
|
||||
|
||||
--
|
||||
GitLab
|
||||
|
||||
|
||||
From 6c6d95f3fd87ff70f8c1d25786a5a7f047e9d74f Mon Sep 17 00:00:00 2001
|
||||
From: Jhair Paris <dev@jhairparis.com>
|
||||
Date: Sat, 8 Nov 2025 21:51:05 -0500
|
||||
Subject: [PATCH 3/4] Improve OCR language handling in settings dialog
|
||||
|
||||
---
|
||||
src/Gui/SettingsDialog/SettingsDialog.cpp | 24 ++++++++++++++++++-----
|
||||
1 file changed, 19 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/src/Gui/SettingsDialog/SettingsDialog.cpp b/src/Gui/SettingsDialog/SettingsDialog.cpp
|
||||
index 696636685..0bfab8bb9 100644
|
||||
--- a/src/Gui/SettingsDialog/SettingsDialog.cpp
|
||||
+++ b/src/Gui/SettingsDialog/SettingsDialog.cpp
|
||||
@@ -88,12 +88,20 @@ void SettingsDialog::showEvent(QShowEvent *event)
|
||||
|
||||
bool SettingsDialog::hasChanged()
|
||||
{
|
||||
- return m_shortcutsPage->isModified() || m_generalPage->ocrLanguageSelector()->hasChanges() || KConfigDialog::hasChanged();
|
||||
+ bool ocrHasChanges = false;
|
||||
+ if (OcrManager::instance()->isAvailable()) {
|
||||
+ ocrHasChanges = m_generalPage->ocrLanguageSelector()->hasChanges();
|
||||
+ }
|
||||
+ return m_shortcutsPage->isModified() || ocrHasChanges || KConfigDialog::hasChanged();
|
||||
}
|
||||
|
||||
bool SettingsDialog::isDefault()
|
||||
{
|
||||
- return currentPage()->name() != i18n("Shortcuts") && m_generalPage->ocrLanguageSelector()->isDefault() && KConfigDialog::isDefault();
|
||||
+ bool ocrIsDefault = true;
|
||||
+ if (OcrManager::instance()->isAvailable()) {
|
||||
+ ocrIsDefault = m_generalPage->ocrLanguageSelector()->isDefault();
|
||||
+ }
|
||||
+ return currentPage()->name() != i18n("Shortcuts") && ocrIsDefault && KConfigDialog::isDefault();
|
||||
}
|
||||
|
||||
void SettingsDialog::updateSettings()
|
||||
@@ -101,7 +109,9 @@ void SettingsDialog::updateSettings()
|
||||
KConfigDialog::updateSettings();
|
||||
m_shortcutsPage->saveChanges();
|
||||
|
||||
- m_generalPage->ocrLanguageSelector()->saveSettings();
|
||||
+ if (OcrManager::instance()->isAvailable()) {
|
||||
+ m_generalPage->ocrLanguageSelector()->saveSettings();
|
||||
+ }
|
||||
|
||||
if (OcrManager *ocrManager = OcrManager::instance()) {
|
||||
ocrManager->setConfigSyncSuspended(false);
|
||||
@@ -113,7 +123,9 @@ void SettingsDialog::updateWidgets()
|
||||
KConfigDialog::updateWidgets();
|
||||
m_shortcutsPage->resetChanges();
|
||||
|
||||
- m_generalPage->ocrLanguageSelector()->updateWidgets();
|
||||
+ if (OcrManager::instance()->isAvailable()) {
|
||||
+ m_generalPage->ocrLanguageSelector()->updateWidgets();
|
||||
+ }
|
||||
m_generalPage->refreshOcrLanguageSettings();
|
||||
|
||||
if (OcrManager *ocrManager = OcrManager::instance()) {
|
||||
@@ -130,7 +142,9 @@ void SettingsDialog::updateWidgetsDefault()
|
||||
KConfigDialog::updateWidgetsDefault();
|
||||
m_shortcutsPage->defaults();
|
||||
|
||||
- m_generalPage->ocrLanguageSelector()->applyDefaults();
|
||||
+ if (OcrManager::instance()->isAvailable()) {
|
||||
+ m_generalPage->ocrLanguageSelector()->applyDefaults();
|
||||
+ }
|
||||
m_generalPage->refreshOcrLanguageSettings(false);
|
||||
}
|
||||
|
||||
--
|
||||
GitLab
|
||||
|
||||
|
||||
From 174b4a4a10e2c42fa28eb361cd4b6a833af60dc7 Mon Sep 17 00:00:00 2001
|
||||
From: Jhair Paris <dev@jhairparis.com>
|
||||
Date: Mon, 10 Nov 2025 22:10:51 -0500
|
||||
Subject: [PATCH 4/4] Remove Tesseract language pack validation test and
|
||||
simplify OCR support check
|
||||
|
||||
---
|
||||
CMakeLists.txt | 24 ++----------------------
|
||||
cmake/tesseract_test.cpp | 40 ----------------------------------------
|
||||
2 files changed, 2 insertions(+), 62 deletions(-)
|
||||
delete mode 100644 cmake/tesseract_test.cpp
|
||||
|
||||
diff --git a/CMakeLists.txt b/CMakeLists.txt
|
||||
index ea44e71d4..2adf8a9ac 100644
|
||||
--- a/CMakeLists.txt
|
||||
+++ b/CMakeLists.txt
|
||||
@@ -96,28 +96,8 @@ if(PkgConfig_FOUND)
|
||||
pkg_check_modules(TESSERACT tesseract)
|
||||
|
||||
if(TESSERACT_FOUND)
|
||||
- # Test if Tesseract has usable language packs
|
||||
- try_run(
|
||||
- TESSERACT_TEST_RUN_RESULT
|
||||
- TESSERACT_TEST_COMPILE_RESULT
|
||||
- ${CMAKE_CURRENT_BINARY_DIR}
|
||||
- ${CMAKE_CURRENT_SOURCE_DIR}/cmake/tesseract_test.cpp
|
||||
- LINK_LIBRARIES ${TESSERACT_LIBRARIES}
|
||||
- CMAKE_FLAGS "-DINCLUDE_DIRECTORIES=${TESSERACT_INCLUDE_DIRS}"
|
||||
- COMPILE_OUTPUT_VARIABLE TESSERACT_COMPILE_OUTPUT
|
||||
- RUN_OUTPUT_VARIABLE TESSERACT_RUN_OUTPUT
|
||||
- )
|
||||
-
|
||||
- if(TESSERACT_TEST_COMPILE_RESULT AND TESSERACT_TEST_RUN_RESULT EQUAL 0)
|
||||
- message(STATUS "Tesseract OCR support enabled")
|
||||
- message(STATUS "${TESSERACT_RUN_OUTPUT}")
|
||||
- set(HAVE_TESSERACT_OCR TRUE)
|
||||
- else()
|
||||
- message(WARNING "Tesseract library found but no usable language packs detected")
|
||||
- message(WARNING "${TESSERACT_RUN_OUTPUT}")
|
||||
- message(WARNING "OCR functionality will be disabled. Install language data packages (e.g., tesseract-ocr-eng)")
|
||||
- set(HAVE_TESSERACT_OCR FALSE)
|
||||
- endif()
|
||||
+ message(STATUS "Tesseract OCR support enabled")
|
||||
+ set(HAVE_TESSERACT_OCR TRUE)
|
||||
else()
|
||||
message(STATUS "Tesseract not found - OCR functionality disabled")
|
||||
set(HAVE_TESSERACT_OCR FALSE)
|
||||
diff --git a/cmake/tesseract_test.cpp b/cmake/tesseract_test.cpp
|
||||
deleted file mode 100644
|
||||
index 4ebae9779..000000000
|
||||
--- a/cmake/tesseract_test.cpp
|
||||
+++ /dev/null
|
||||
@@ -1,40 +0,0 @@
|
||||
-#include <iostream>
|
||||
-#include <string>
|
||||
-#include <tesseract/baseapi.h>
|
||||
-#include <vector>
|
||||
-
|
||||
-int main()
|
||||
-{
|
||||
- tesseract::TessBaseAPI api;
|
||||
-
|
||||
- if (api.Init(nullptr, nullptr) != 0) {
|
||||
- std::cerr << "Failed to initialize Tesseract" << std::endl;
|
||||
- return 1;
|
||||
- }
|
||||
-
|
||||
- std::vector<std::string> languages;
|
||||
- api.GetAvailableLanguagesAsVector(&languages);
|
||||
-
|
||||
- // Filter out 'osd' as it's not a usable language for OCR
|
||||
- std::vector<std::string> usableLanguages;
|
||||
- for (const auto &lang : languages) {
|
||||
- if (lang != "osd") {
|
||||
- usableLanguages.push_back(lang);
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- if (usableLanguages.empty()) {
|
||||
- std::cerr << "No usable Tesseract language packs found. Install language data files (e.g., tesseract-ocr-eng)" << std::endl;
|
||||
- return 1;
|
||||
- }
|
||||
-
|
||||
- std::cout << "Found " << usableLanguages.size() << " Tesseract language pack(s): ";
|
||||
- for (size_t i = 0; i < usableLanguages.size(); ++i) {
|
||||
- std::cout << usableLanguages[i];
|
||||
- if (i < usableLanguages.size() - 1)
|
||||
- std::cout << ", ";
|
||||
- }
|
||||
- std::cout << std::endl;
|
||||
-
|
||||
- return 0;
|
||||
-}
|
||||
--
|
||||
GitLab
|
||||
|
||||
|
|
@ -1,129 +0,0 @@
|
|||
From 49c615c1989d9fcfce7ed1be805538a9dca6a8a8 Mon Sep 17 00:00:00 2001
|
||||
From: Taras Oleksyn <taras.oleksyn@gmail.com>
|
||||
Date: Sat, 29 Nov 2025 10:17:28 +0200
|
||||
Subject: [PATCH] Add cancel button to capture window to improve touchscreen
|
||||
usability
|
||||
|
||||
BUG: 490980
|
||||
---
|
||||
src/CMakeLists.txt | 1 +
|
||||
src/Gui/CancelAction.qml | 11 +++++++++++
|
||||
src/Gui/CaptureOverlay.qml | 14 ++++++++++++++
|
||||
src/Gui/CaptureWindow.cpp | 5 +++++
|
||||
src/Gui/CaptureWindow.h | 1 +
|
||||
src/PlasmaVersion.h | 2 +-
|
||||
6 files changed, 33 insertions(+), 1 deletion(-)
|
||||
create mode 100644 src/Gui/CancelAction.qml
|
||||
|
||||
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
|
||||
index 23fc4f483..f4957bda7 100644
|
||||
--- a/src/CMakeLists.txt
|
||||
+++ b/src/CMakeLists.txt
|
||||
@@ -158,6 +158,7 @@ qt_target_qml_sources(spectacle
|
||||
Gui/AnnotationOptionsToolBarContents.qml
|
||||
Gui/AnnotationsToolBarContents.qml
|
||||
Gui/ButtonGrid.qml
|
||||
+ Gui/CancelAction.qml
|
||||
Gui/CaptureModeButtonsColumn.qml
|
||||
Gui/CaptureOptions.qml
|
||||
Gui/CaptureOverlay.qml
|
||||
diff --git a/src/Gui/CancelAction.qml b/src/Gui/CancelAction.qml
|
||||
new file mode 100644
|
||||
index 000000000..74bf54816
|
||||
--- /dev/null
|
||||
+++ b/src/Gui/CancelAction.qml
|
||||
@@ -0,0 +1,11 @@
|
||||
+/* SPDX-FileCopyrightText: 2025 Noah Davis <noahadvs@gmail.com>
|
||||
+ * SPDX-License-Identifier: LGPL-2.0-or-later
|
||||
+ */
|
||||
+
|
||||
+import QtQuick.Templates as T
|
||||
+
|
||||
+T.Action {
|
||||
+ icon.name: "dialog-cancel"
|
||||
+ text: i18nc("@action cancel selection", "Cancel")
|
||||
+ onTriggered: contextWindow.cancel()
|
||||
+}
|
||||
diff --git a/src/Gui/CaptureOverlay.qml b/src/Gui/CaptureOverlay.qml
|
||||
index e5089934d..5c15d9939 100644
|
||||
--- a/src/Gui/CaptureOverlay.qml
|
||||
+++ b/src/Gui/CaptureOverlay.qml
|
||||
@@ -491,6 +491,11 @@ MouseArea {
|
||||
visible: action.enabled
|
||||
action: AcceptAction {}
|
||||
}
|
||||
+ ToolButton {
|
||||
+ display: TtToolButton.TextBesideIcon
|
||||
+ visible: action.enabled
|
||||
+ action: CancelAction {}
|
||||
+ }
|
||||
ToolButton {
|
||||
display: TtToolButton.IconOnly
|
||||
visible: action.enabled
|
||||
@@ -527,6 +532,10 @@ MouseArea {
|
||||
visible: action.enabled
|
||||
action: AcceptAction {}
|
||||
}
|
||||
+ ToolButton {
|
||||
+ visible: action.enabled
|
||||
+ action: CancelAction {}
|
||||
+ }
|
||||
ToolButton {
|
||||
visible: action.enabled
|
||||
action: SaveAction {}
|
||||
@@ -560,6 +569,11 @@ MouseArea {
|
||||
visible: action.enabled
|
||||
action: RecordAction {}
|
||||
}
|
||||
+ ToolButton {
|
||||
+ display: TtToolButton.TextBesideIcon
|
||||
+ visible: action.enabled
|
||||
+ action: CancelAction {}
|
||||
+ }
|
||||
}
|
||||
}
|
||||
|
||||
diff --git a/src/Gui/CaptureWindow.cpp b/src/Gui/CaptureWindow.cpp
|
||||
index cb8ce97ab..c263d1b45 100644
|
||||
--- a/src/Gui/CaptureWindow.cpp
|
||||
+++ b/src/Gui/CaptureWindow.cpp
|
||||
@@ -129,6 +129,11 @@ bool CaptureWindow::accept()
|
||||
return SelectionEditor::instance()->acceptSelection();
|
||||
}
|
||||
|
||||
+void CaptureWindow::cancel()
|
||||
+{
|
||||
+ SpectacleCore::instance()->cancelScreenshot();
|
||||
+}
|
||||
+
|
||||
void CaptureWindow::save()
|
||||
{
|
||||
SelectionEditor::instance()->acceptSelection(ExportManager::Save | ExportManager::UserAction);
|
||||
diff --git a/src/Gui/CaptureWindow.h b/src/Gui/CaptureWindow.h
|
||||
index b5e87a834..0d50aac90 100644
|
||||
--- a/src/Gui/CaptureWindow.h
|
||||
+++ b/src/Gui/CaptureWindow.h
|
||||
@@ -34,6 +34,7 @@ public:
|
||||
|
||||
public Q_SLOTS:
|
||||
bool accept();
|
||||
+ void cancel();
|
||||
void save() override;
|
||||
void saveAs() override;
|
||||
void copyImage() override;
|
||||
diff --git a/src/PlasmaVersion.h b/src/PlasmaVersion.h
|
||||
index 08502c895..9518da62b 100644
|
||||
--- a/src/PlasmaVersion.h
|
||||
+++ b/src/PlasmaVersion.h
|
||||
@@ -15,7 +15,7 @@ public:
|
||||
static quint32 get();
|
||||
|
||||
/**
|
||||
- * Use this for plasama versions the same way you'd use QT_VERSION_CHECK()
|
||||
+ * Use this for plasma versions the same way you'd use QT_VERSION_CHECK()
|
||||
*/
|
||||
static quint32 check(quint8 major, quint8 minor, quint8 patch);
|
||||
|
||||
--
|
||||
GitLab
|
||||
|
||||
|
|
@ -43,19 +43,40 @@ in {
|
|||
programs.dconf.enable = true;
|
||||
|
||||
# Install the plasma default configs
|
||||
environment.systemPackages = with pkgs.kdePackages; [
|
||||
plasmaDefaults
|
||||
plasma-thunderbolt
|
||||
plasma-vault
|
||||
];
|
||||
|
||||
# Allows controlling brightness on external monitors
|
||||
hardware.i2c.enable = true;
|
||||
environment.systemPackages = [plasmaDefaults];
|
||||
|
||||
# Plasma configs should be on all users
|
||||
home-manager.sharedModules = [
|
||||
(
|
||||
{config, ...}: let
|
||||
gtk2rc = "${config.xdg.configHome}/gtk-2.0/gtkrc";
|
||||
in {
|
||||
gtk.gtk2.configLocation = gtk2rc;
|
||||
# Kde has an annoying habit of overwriting the gtk2 config file
|
||||
home.file."${gtk2rc}".force = true;
|
||||
}
|
||||
)
|
||||
{
|
||||
imports = [flakeSelf.inputs.plasma-manager.homeModules.plasma-manager];
|
||||
imports = [flakeSelf.inputs.plasma-manager.homeManagerModules.plasma-manager];
|
||||
gtk = {
|
||||
enable = true;
|
||||
# Most apps are dark, so a white cursor is easier to spot
|
||||
cursorTheme = {
|
||||
package = pkgs.kdePackages.breeze;
|
||||
name = "Breeze_Light";
|
||||
};
|
||||
iconTheme = {
|
||||
package = pkgs.kdePackages.breeze-icons;
|
||||
name = "breeze-dark";
|
||||
};
|
||||
theme = {
|
||||
package = pkgs.kdePackages.breeze-gtk;
|
||||
name = "Breeze";
|
||||
};
|
||||
# Gtk2 doesn't have a dark mode, so I just tell gtk 3 and 4 to use the dark variant
|
||||
gtk3.extraConfig.gtk-application-prefer-dark-theme = true;
|
||||
gtk4.extraConfig.gtk-application-prefer-dark-theme = true;
|
||||
};
|
||||
home.packages = [
|
||||
(
|
||||
pkgs.catppuccin-kde.override {
|
||||
|
|
@ -69,68 +90,60 @@ in {
|
|||
enable = true;
|
||||
workspace = {
|
||||
clickItemTo = "select";
|
||||
cursor.theme = "Breeze_Light";
|
||||
cursorTheme = "Breeze_Light";
|
||||
iconTheme = "breeze-dark";
|
||||
lookAndFeel = "Catppuccin-Mocha-Mauve";
|
||||
theme = "default";
|
||||
colorScheme = "CatppuccinMochaMauve";
|
||||
};
|
||||
kwin = {
|
||||
titlebarButtons = {
|
||||
left = ["on-all-desktops" "keep-above-windows"];
|
||||
right = ["minimize" "maximize" "close"];
|
||||
};
|
||||
virtualDesktops = {
|
||||
rows = 1;
|
||||
number = 2;
|
||||
};
|
||||
};
|
||||
input = {
|
||||
keyboard = {
|
||||
layouts = [{layout = "es";}];
|
||||
layouts = ["es"];
|
||||
numlockOnStartup = "off";
|
||||
};
|
||||
mice = let
|
||||
settings = {
|
||||
enable = true;
|
||||
accelerationProfile = "none";
|
||||
};
|
||||
mice = [
|
||||
{
|
||||
productId = "d030";
|
||||
vendorId = "3434";
|
||||
name = "Keychron Keychron Link ";
|
||||
}
|
||||
{
|
||||
productId = "d03f";
|
||||
vendorId = "3434";
|
||||
name = "Keychron Keychron M6 ";
|
||||
}
|
||||
{
|
||||
productId = "d03f";
|
||||
vendorId = "3434";
|
||||
name = "Keychron M6 Mouse";
|
||||
}
|
||||
];
|
||||
in
|
||||
lib.lists.forEach mice (miceInfo: miceInfo // settings);
|
||||
};
|
||||
panels = [
|
||||
{
|
||||
location = "bottom";
|
||||
height = 44;
|
||||
floating = true;
|
||||
widgets = [
|
||||
{
|
||||
kickoff = {
|
||||
icon = "nix-snowflake-white";
|
||||
settings.General.switchCategoryOnHover = true;
|
||||
};
|
||||
name = "org.kde.plasma.kickoff";
|
||||
config.General.icon = "nix-snowflake-white";
|
||||
}
|
||||
"org.kde.plasma.pager"
|
||||
"org.kde.plasma.icontasks"
|
||||
"org.kde.plasma.marginsseparator"
|
||||
"org.kde.plasma.systemtray"
|
||||
{
|
||||
digitalClock = {
|
||||
time.showSeconds = "always";
|
||||
};
|
||||
name = "org.kde.plasma.digitalclock";
|
||||
config.Appearance.showSeconds = "true";
|
||||
}
|
||||
"org.kde.plasma.showdesktop"
|
||||
];
|
||||
}
|
||||
];
|
||||
shortcuts = {
|
||||
"kwin" = {
|
||||
"Switch One Desktop to the Left" = ["Meta+Ctrl+Left"];
|
||||
"Switch One Desktop to the Right" = ["Meta+Ctrl+Right"];
|
||||
};
|
||||
};
|
||||
configFile = {
|
||||
"kwinrc" = {
|
||||
"org.kde.kdecoration2"."BorderSize".value = "None";
|
||||
"TabBox"."LayoutName".value = "thumbnail_grid";
|
||||
};
|
||||
"kdeglobals"."General"."AccentColor".value = null;
|
||||
"auroraerc"."CatppuccinMocha-Classic"."ButtonSize".value = 0;
|
||||
"plasmanotifyrc"."Notifications"."NormalAlwaysOnTop".value = true;
|
||||
|
|
|
|||
|
|
@ -1,16 +0,0 @@
|
|||
{lib, ...}: {
|
||||
home-manager.users.toast = {
|
||||
programs.plasma.configFile = {
|
||||
"baloofilerc"."General" = {
|
||||
"exclude folders".shellExpand = true;
|
||||
"exclude folders".value = with lib.strings;
|
||||
concatStrings (
|
||||
intersperse "," [
|
||||
"$HOME/Documents/Repos"
|
||||
"$HOME/Documents/Android"
|
||||
]
|
||||
);
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
@ -1,17 +1,13 @@
|
|||
{pkgs, ...}: {
|
||||
{...}: {
|
||||
imports = [
|
||||
./kate.nix
|
||||
./firefox.nix
|
||||
./skanpage.nix
|
||||
# Neochat depends on olm which is unsafe now
|
||||
# ./neochat.nix
|
||||
./neochat.nix
|
||||
./konsole.nix
|
||||
./kwin.nix
|
||||
./baloo.nix
|
||||
./spectacle.nix
|
||||
./git.nix
|
||||
];
|
||||
|
||||
# Enable the kde partition manager
|
||||
programs.partition-manager.enable = true;
|
||||
programs.steam.extraPackages = [pkgs.kdePackages.breeze];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,35 +1,30 @@
|
|||
{pkgs, ...}: {
|
||||
home-manager.sharedModules = [
|
||||
{
|
||||
# KDE specific firefox settings
|
||||
programs.firefox = {
|
||||
nativeMessagingHosts = [pkgs.kdePackages.plasma-browser-integration];
|
||||
policies = {
|
||||
ExtensionSettings = {
|
||||
# TODO: Install extensions the NUR instead of from AMO
|
||||
"plasma-browser-integration@kde.org" = {
|
||||
installation_mode = "normal_installed";
|
||||
install_url = "https://addons.mozilla.org/firefox/downloads/latest/plasma-integration/latest.xpi";
|
||||
};
|
||||
};
|
||||
Preferences = {
|
||||
# Make firefox use the kde file picker
|
||||
"widget.use-xdg-desktop-portal.file-picker" = {
|
||||
Value = 1;
|
||||
Status = "default";
|
||||
};
|
||||
/*
|
||||
https://wiki.archlinux.org/title/Firefox#KDE_integration tells me to enable this,
|
||||
but strangely enough doing so makes firefox ask to be set as the default browser
|
||||
every time you start it up, so I'll disable it
|
||||
*/
|
||||
"widget.use-xdg-desktop-portal.mime-handler" = {
|
||||
Value = 0;
|
||||
Status = "default";
|
||||
};
|
||||
};
|
||||
{...}: {
|
||||
# KDE specific firefox settings
|
||||
programs.firefox = {
|
||||
policies = {
|
||||
"ExtensionSettings" = {
|
||||
# TODO: Install extensions the NUR instead of from AMO
|
||||
"plasma-browser-integration@kde.org" = {
|
||||
"installation_mode" = "normal_installed";
|
||||
"install_url" = "https://addons.mozilla.org/firefox/downloads/latest/plasma-integration/latest.xpi";
|
||||
};
|
||||
};
|
||||
}
|
||||
];
|
||||
"Preferences" = {
|
||||
# Make firefox use the kde file picker
|
||||
"widget.use-xdg-desktop-portal.file-picker" = {
|
||||
"Value" = 1;
|
||||
"Status" = "default";
|
||||
};
|
||||
/*
|
||||
https://wiki.archlinux.org/title/Firefox#KDE_integration tells me to enable this,
|
||||
but strangely enough doing so makes firefox ask to be set as the default browser
|
||||
every time you start it up, so I'll disable it
|
||||
*/
|
||||
"widget.use-xdg-desktop-portal.mime-handler" = {
|
||||
"Value" = 0;
|
||||
"Status" = "default";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
|
|||
11
roles/kde/programs/git.nix
Normal file
11
roles/kde/programs/git.nix
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
{...}: {
|
||||
home-manager.users.toast = {
|
||||
programs.git = {
|
||||
extraConfig = {
|
||||
cola = {
|
||||
terminal = "konsole";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
{pkgs, ...}: {
|
||||
environment.systemPackages = [pkgs.kdePackages.kate];
|
||||
environment.systemPackages = [pkgs.kate];
|
||||
|
||||
# Use kwrite to open text files, and kate if I'm developing stuff
|
||||
xdg.mime.defaultApplications = {
|
||||
|
|
|
|||
|
|
@ -1,5 +1,13 @@
|
|||
{flakeSelf, ...}: let
|
||||
catppuccinKonsole = "${flakeSelf.inputs.catppuccin-konsole}/themes/catppuccin-mocha.colorscheme";
|
||||
{pkgs, ...}: let
|
||||
catppuccinKonsole =
|
||||
pkgs.fetchFromGitHub {
|
||||
owner = "catppuccin";
|
||||
repo = "konsole";
|
||||
# Latest commit is 7d86b8a1e56e58f6b5649cdaac543a573ac194ca
|
||||
rev = "main";
|
||||
hash = "sha256-EwSJMTxnaj2UlNJm1t6znnatfzgm1awIQQUF3VPfCTM=";
|
||||
}
|
||||
+ /Catppuccin-Mocha.colorscheme;
|
||||
in {
|
||||
home-manager.users.toast = {
|
||||
xdg.dataFile = {
|
||||
|
|
|
|||
|
|
@ -1,33 +0,0 @@
|
|||
{pkgs, ...}: {
|
||||
environment.plasma6.excludePackages = [pkgs.kdePackages.kwin-x11];
|
||||
environment.variables = {
|
||||
KWIN_WAYLAND_SUPPORT_XX_PIP_V1 = 1;
|
||||
KWIN_USE_OVERLAYS = 1;
|
||||
};
|
||||
home-manager.users.toast = {
|
||||
programs.plasma = {
|
||||
kwin = {
|
||||
titlebarButtons = {
|
||||
left = ["on-all-desktops" "keep-above-windows"];
|
||||
right = ["minimize" "maximize" "close"];
|
||||
};
|
||||
virtualDesktops = {
|
||||
rows = 1;
|
||||
number = 2;
|
||||
};
|
||||
};
|
||||
configFile = {
|
||||
"kwinrc" = {
|
||||
"org.kde.kdecoration2"."BorderSize".value = "None";
|
||||
"TabBox"."LayoutName".value = "thumbnail_grid";
|
||||
};
|
||||
};
|
||||
shortcuts = {
|
||||
"kwin" = {
|
||||
"Switch One Desktop to the Left" = ["Meta+Ctrl+Left"];
|
||||
"Switch One Desktop to the Right" = ["Meta+Ctrl+Right"];
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
@ -6,7 +6,7 @@
|
|||
}: {
|
||||
# Only install skanpage if scanning is set up
|
||||
config = lib.mkIf config.hardware.sane.enable {
|
||||
environment.systemPackages = [pkgs.kdePackages.skanpage];
|
||||
environment.systemPackages = [pkgs.skanpage];
|
||||
};
|
||||
# environment.systemPackages = if config.hardware.sane.enable == true then [ pkgs.skanpage ] else [];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,24 +0,0 @@
|
|||
{...}: {
|
||||
nixpkgs.overlays = [
|
||||
(
|
||||
final: prev: {
|
||||
kdePackages = prev.kdePackages.overrideScope (
|
||||
kFinal: kPrev: {
|
||||
# Needed for OCR
|
||||
spectacle = kPrev.spectacle.overrideAttrs (old: {
|
||||
nativeBuildInputs = old.nativeBuildInputs ++ [final.pkg-config];
|
||||
buildInputs = with final;
|
||||
old.buildInputs
|
||||
++ [
|
||||
tesseract
|
||||
leptonica
|
||||
libarchive
|
||||
curl
|
||||
];
|
||||
});
|
||||
}
|
||||
);
|
||||
}
|
||||
)
|
||||
];
|
||||
}
|
||||
|
|
@ -1,8 +1,10 @@
|
|||
{
|
||||
lib,
|
||||
config,
|
||||
pkgs,
|
||||
...
|
||||
}: let
|
||||
currentTheme = config.services.displayManager.sddm.theme;
|
||||
|
||||
sddm-sugar-candy = pkgs.stdenv.mkDerivation {
|
||||
pname = "sddm-sugar-candy";
|
||||
version = "master";
|
||||
|
|
@ -28,18 +30,13 @@
|
|||
customcfg = pkgs.stdenv.mkDerivation {
|
||||
name = "sddm-theme-customizer";
|
||||
dontUnpack = true;
|
||||
installPhase = let
|
||||
config = lib.generators.toINI {} {
|
||||
# Add the custom config here
|
||||
General = {
|
||||
background = "${pkgs.kdePackages.breeze}/share/wallpapers/Next/contents/images_dark/5120x2880.png";
|
||||
};
|
||||
};
|
||||
in ''
|
||||
# TODO: generate theme.conf.user outside of installPhase
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
mkdir -p $out/share/sddm/themes/breeze/
|
||||
echo "${config}" >> $out/share/sddm/themes/breeze/theme.conf.user
|
||||
mkdir -p $out/share/sddm/themes/${currentTheme}/
|
||||
echo "[General]
|
||||
background = ${pkgs.plasma-workspace-wallpapers}/share/wallpapers/MilkyWay/contents/images/5120x2880.png" >> $out/share/sddm/themes/${currentTheme}/theme.conf.user
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
|
|
@ -48,15 +45,12 @@ in {
|
|||
# Enable SDDM.
|
||||
services.displayManager.sddm = {
|
||||
enable = true;
|
||||
wayland.enable = true;
|
||||
# theme = "sugar-candy";
|
||||
settings = {
|
||||
General = {Numlock = "off";};
|
||||
Theme = {CursorTheme = "Breeze_Light";};
|
||||
Theme = {CursorTheme = "Breeze_Snow";};
|
||||
};
|
||||
};
|
||||
|
||||
# Sugar candy doesn't seem to work on qt6 :(
|
||||
# environment.systemPackages = [sddm-sugar-candy customcfg];
|
||||
environment.systemPackages = [customcfg];
|
||||
}
|
||||
|
|
|
|||
6
roles/school/default.nix
Normal file
6
roles/school/default.nix
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
{...}: {
|
||||
imports = [
|
||||
./services
|
||||
./programs
|
||||
];
|
||||
}
|
||||
13
roles/school/programs/default.nix
Normal file
13
roles/school/programs/default.nix
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
{pkgs, ...}: {
|
||||
imports = [
|
||||
./virtualbox.nix
|
||||
./jetbrains.nix
|
||||
./vscode.nix
|
||||
./helix.nix
|
||||
./unity.nix
|
||||
];
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
dia
|
||||
];
|
||||
}
|
||||
10
roles/school/programs/helix.nix
Normal file
10
roles/school/programs/helix.nix
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
{pkgs, ...}: {
|
||||
home-manager.users.toast = {
|
||||
programs.helix = {
|
||||
extraPackages = with pkgs; [
|
||||
nodePackages.typescript-language-server
|
||||
omnisharp-roslyn
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
19
roles/school/programs/jetbrains.nix
Normal file
19
roles/school/programs/jetbrains.nix
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
{pkgs, ...}:
|
||||
with pkgs; {
|
||||
environment.systemPackages = with jetbrains; [
|
||||
idea-ultimate
|
||||
scenebuilder
|
||||
datagrip
|
||||
];
|
||||
|
||||
home-manager.users.toast = {
|
||||
/*
|
||||
If you use programs.java.enable intellij picks up the jdk package directly, which is not ideal
|
||||
This adds the jdks I want to use to a directory intellij expects jdks to be
|
||||
*/
|
||||
home.file.".jdks/jdk8".source = "${pkgs.jdk8}/lib/openjdk";
|
||||
home.file.".jdks/jdk17".source = let
|
||||
jdk17 = pkgs.jdk17.override {enableJavaFX = true;};
|
||||
in "${jdk17}/lib/openjdk";
|
||||
};
|
||||
}
|
||||
8
roles/school/programs/unity.nix
Normal file
8
roles/school/programs/unity.nix
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
{pkgs, ...}: {
|
||||
home-manager.users.toast = {
|
||||
home.packages = with pkgs; [
|
||||
unityhub
|
||||
jetbrains.rider
|
||||
];
|
||||
};
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue