Compare commits

...
Sign in to create a new pull request.

319 commits

Author SHA1 Message Date
924e9b7ab4 Syncthing: move device info to separate file 2025-12-20 01:00:31 +01:00
beb9705d2f Flake: update secrets 2025-12-19 13:21:31 +01:00
b5a8a9a545 Common; disable mutable users 2025-12-19 12:20:35 +01:00
6365f7b4f3 Common: set toast password 2025-12-19 12:14:24 +01:00
27babd819c Flake: update lock file 2025-12-19 00:52:35 +01:00
0d0d6ebb56 Machines/Archie: mount hard drive 2025-12-19 00:52:35 +01:00
fa8efef26a Programs/distrobox: add container 2025-12-19 00:52:35 +01:00
e8af512370 Desktop/distrobox: enable 2025-12-19 00:52:35 +01:00
15149a7968 Server/syncthing: remove school things folder 2025-12-15 09:53:02 +01:00
9f53c984f4 Server/borg: allow connections from localhost 2025-12-14 21:33:40 +01:00
4828dc5a21 Server: add borg repos 2025-12-14 02:18:31 +01:00
2d801ae06a Server/ssh: only allow toast user 2025-12-14 02:16:23 +01:00
d8f2812003 Server/caddy: wait for tailscale ip before starting 2025-12-14 01:07:51 +01:00
e863aea052 Run formatter 2025-12-14 01:07:21 +01:00
04163b2c79 Common/kmscon: enable 2025-12-13 16:31:56 +01:00
3f0333b4a0 Kde/patches: add more patches 2025-12-13 16:31:56 +01:00
d7c245ed8e Desktop: install tetrio 2025-12-13 16:31:56 +01:00
83831f6a75 Common: append -iso to the variant id if building an iso 2025-12-13 16:31:56 +01:00
9be3caddbc Common: set up a default time zone 2025-12-13 16:31:56 +01:00
76ecdba67e Machines/Everest: wait for DNS to be available 2025-12-13 00:37:31 +01:00
03f0570342 Machines/WinMax2: remove jovian
I basically didn't use it, and it just caused more issues than anything
2025-12-09 19:28:15 +01:00
4e9a1dae72 Server/ssh: write ssh keys to correct locations 2025-12-09 19:17:41 +01:00
b668212daf Server: migrate secrets to sops 2025-12-08 17:51:55 +01:00
859a4b20a5 Common: set up default sops file 2025-12-08 01:39:48 +01:00
72c8a0e7e2 Server/syncthing: fix id of games folder 2025-12-07 23:19:54 +01:00
351bd99fdf Flake: add nixpkgs patch 2025-12-06 18:31:24 +00:00
1ea530a2a6 Desktop/networkManager: add home wifi 2025-12-06 04:41:12 +01:00
7277135a5b Desktop/networkManager: refactor 2025-12-06 04:16:48 +01:00
8c6fdd5b51 Desktop/NetworkManager: migrate secrets to sops-nix 2025-12-06 03:37:06 +01:00
1d1b76b329 Flake: add sops-nix 2025-12-06 03:31:56 +01:00
9ca56553f7 Justfile: update secrets repo url 2025-12-06 02:33:40 +01:00
4361d6e0a9 Flake: remove stable catppuccin 2025-12-06 00:09:31 +01:00
e6bdf0f984 Common/git: update git and delta settings 2025-12-06 00:09:31 +01:00
8331e8c875 Flake: update lock file, switch stable to 25.11 2025-12-06 00:09:31 +01:00
ed8a6297b7 Gaming/pcsx2: refactor, add game config for burnout 3 2025-12-06 00:05:39 +01:00
eb5ebb056c Gaming: patch sdl to ignore keychron things 2025-12-05 23:59:26 +01:00
8b86b1ccc0 Flake: update lock file 2025-11-19 12:01:11 +01:00
ce5be49975 Kde/patches: add spectacle patches 2025-11-16 01:41:14 +01:00
85b1605ea9 Pkgs/kame-editor: add required programs to wrapper path 2025-11-15 18:56:36 +01:00
0bfe20a736 Packages: add kame-editor and dependencies 2025-11-11 17:12:37 +01:00
5ddac8b95b Roles/common: use flake overlay 2025-11-11 17:12:37 +01:00
b1e5e83744 Flake: get packages from overlay 2025-11-11 17:12:37 +01:00
c42c6cd83a Flake: remove unused packages 2025-11-11 17:12:37 +01:00
afab4c4d0a Server: remove school.nix
Haven't used this in months
2025-11-07 02:16:55 +01:00
284bd502f0 Server/forgejo: use unix socket 2025-11-07 01:05:05 +01:00
9f7cf822ed Roles: delete gnome
Only used it on the iMac
2025-11-06 22:41:38 +01:00
b8264643e6 Machines: remove iMac 2025-11-06 22:40:29 +01:00
8b9eae079e Desktop/firefox: add control panel for twitter 2025-11-05 10:28:33 +00:00
c00ef6ab7c Kde/patches: get patches with lib.toast.patches.patchesInPath 2025-11-02 13:44:37 +01:00
16f79d8a7d Kde/patches: remove plasma-workspace patch
Lots of packages depend on plasma workspace, so it's not worth building
all of them just for a small patch
2025-11-02 13:43:34 +01:00
c914256c97 Kde/patches: add plasma-desktop patches 2025-11-02 13:43:13 +01:00
2240c4e256 Add custom lib 2025-11-02 09:59:40 +01:00
8f97bc80e3 Common/nix: remove now redundant system nixpkgs flake registry 2025-11-02 00:57:49 +01:00
392df35a1c Flake: update lock file 2025-11-01 21:09:14 +01:00
d916c8f36a Revert "Flake: add nixpkgs patch to fix rtkit"
This reverts commit 13c1d5864d.
2025-11-01 18:44:01 +01:00
03b73e7090 Revert "Roles/gaming: fix emulator build issues"
This reverts commit 65eb518651.
2025-11-01 18:43:19 +01:00
d3a3617e29 Deskop/discord: enable translate plugin 2025-10-28 19:13:07 +01:00
4da3beb168 Desktop: add tailscale system tray 2025-10-28 19:03:26 +01:00
74175100c7 Gaming/steam: open firewall for local network game transfers 2025-10-26 19:41:18 +01:00
c8d487d374 Gaming/steam: install sgdboop, move comment to place 2025-10-26 19:38:06 +01:00
13c1d5864d Flake: add nixpkgs patch to fix rtkit 2025-10-26 12:47:08 +01:00
91d0d875ea Desktop/firefox: disable AI features 2025-10-25 00:26:05 +02:00
1b620d556b Kde/kwin: enable overlays 2025-10-25 00:14:37 +02:00
65eb518651 Roles/gaming: fix emulator build issues 2025-10-24 01:12:22 +02:00
e15a9c0c01 Kde/patches: remove patches that are in plasma 6.5 2025-10-24 01:07:37 +02:00
2c49a7318b Flake: update lock file 2025-10-24 00:41:26 +02:00
93944f1391 Kde/kwin: enable wayland pip support 2025-10-23 23:54:16 +02:00
c777f0e5f1 Common/nix: disable nixos-options 2025-10-18 11:43:11 +02:00
0af0720268 Flake: update lock file 2025-10-18 01:12:59 +02:00
3d91ef0932 Desktop/syncthing: add another missing option 2025-10-18 01:08:11 +02:00
f445891c25 Kde/patches: delete merged patches 2025-10-18 01:08:11 +02:00
cf08bc61b2 Flake: use stable catppuccin nix for Everest 2025-10-04 17:28:08 +02:00
3fedba90c4 Server/beets: enable mbsync and random plugins 2025-10-04 00:17:24 +02:00
fc803fd67e Kde/patches: add more patches 2025-09-30 21:08:38 +02:00
a4f27b49af Kde/patches: override packages instead of replacing at runtime
This causes A LOT more rebuilds, but it's less hacky
2025-09-30 21:08:38 +02:00
68218ec187 Kde/patches: delete merged patches 2025-09-30 21:08:38 +02:00
641ebc7ad9 Flake: update lock file 2025-09-30 21:08:38 +02:00
8597f372c0 Flake: remove unneeded patches 2025-09-30 21:08:38 +02:00
2fc9fe9e1a Server/beets: make music library accesible with copyparty 2025-09-29 14:21:47 +02:00
75312f7622 Server/copyparty: set up db directory, enable rproxy 2025-09-29 14:21:47 +02:00
86fe2646d1 KDE/Patches: don't garbage collect the <package>-patched packages 2025-09-26 18:43:27 +02:00
57125b4bf8 Flake: add nixpkgs patches 2025-09-26 00:01:11 +02:00
8fdeb93bc5 Server: add minecraft 2025-09-22 17:41:39 +02:00
ccebf381b0 Server/beets: configure permissions plugin 2025-09-21 19:18:43 +02:00
09d0847ea4 Desktop/kde: add patches 2025-09-19 18:00:15 +02:00
b6119bd2cc Server/beets: enable chroma plugin 2025-09-19 15:09:32 +02:00
3e29186990 Server: add navidrome 2025-09-19 15:09:32 +02:00
e1c1ff801d Server/copyparty: add to rust_motd 2025-09-19 15:09:32 +02:00
eb2a4ea67a Server: add beets 2025-09-19 15:09:32 +02:00
ae0393ae37 Flake: update lock file 2025-09-18 21:33:20 +02:00
cd876e3a17 Machines/Archie: fix headphones not being detected sometimes 2025-09-18 21:33:10 +02:00
69c5e8d9be Server/syncthing: add to rust-motd 2025-09-11 01:44:26 +02:00
fb317980e2 Machines/Everest: set static time zone 2025-09-11 01:32:50 +02:00
2615b290a1 Server/forgejo: use lts 2025-09-11 01:27:25 +02:00
e43910155c Desktop/ssh: remove default config 2025-09-09 11:54:40 +02:00
38df2ff9d6 Kde/plasma: update plasma-manager home manager module name 2025-09-07 01:12:22 +02:00
0a00c2b25a Desktop/mpv: set cd speed to 8 2025-09-07 01:08:31 +02:00
eecbb372cb Kde/patches: remove unneeded dolphin patches 2025-09-05 18:46:01 +02:00
28245e92f5 Flake: update lock file 2025-09-05 18:45:52 +02:00
970da745ad Desktop/keepassxc: update configs 2025-08-26 14:58:06 +09:00
338714285e Flake: update lock file 2025-08-26 14:57:55 +09:00
f934ff1092 Desktop/mpv: enable cdda support 2025-08-19 12:12:11 +09:00
164d665324 Common: set up timezone automatically 2025-08-15 11:24:49 +09:00
190010e31f Desktop/networkmanager: disable wifi mac address randomisation 2025-08-15 04:17:56 +02:00
2b42883523 Machines/WinMax2: use stock mesa and radv 2025-08-04 15:35:48 +02:00
cd58dde5fd Flake: update lock file 2025-08-04 10:45:47 +02:00
3af90c044f Flake: switch to upstream copyparty 2025-08-04 10:45:32 +02:00
91e57025b7 Machines/WinMax2: enable secure boot 2025-08-02 15:27:29 +02:00
48993bb1e6 Machines/WinMax2: disable inputplumber 2025-08-02 15:27:29 +02:00
64d2ca9c23 Machines/WinMax2: reduce limine timeout 2025-08-02 15:27:29 +02:00
2df0370ce0 Machines/WinMax2: switch to limine 2025-08-02 15:27:29 +02:00
2fea832484 Revert "Desktop/NetworkManager: change dhcp implementation"
This reverts commit f29d5d4207.
2025-08-02 15:27:29 +02:00
90028fb7fe Roles/server: add copyparty 2025-07-30 03:27:36 +02:00
fb41beb270 Common/eza: set group option 2025-07-30 02:53:52 +02:00
5fc8c72a51 Flake: add copyparty flake 2025-07-30 00:18:55 +02:00
283ef9c680 Flake: update lock file 2025-07-21 15:25:12 +02:00
d824d6269c Roles/kde: get rid of kwin-x11 2025-07-21 15:25:12 +02:00
25cad55c78 Gaming/pcsx2: update ps2 bios link 2025-07-21 15:25:12 +02:00
820e082f49 Kde/plasma: enable i2c 2025-07-21 15:25:12 +02:00
264942168d Machines/Everest: update eno1 prefixLength
Forgot to update this when I switched to the isp router. Whoops!
2025-07-21 13:18:21 +02:00
fe93e06d34 Flake: update lock file 2025-07-09 15:15:41 +02:00
a82ddf87df Kde/patches: remove unneeded kwin patches 2025-07-09 13:59:32 +02:00
19493e8ef6 Kde/patches: update patches 2025-07-09 13:56:20 +02:00
a959fb46be Common/atuin: set default filter mode to workspace 2025-07-06 13:15:00 +02:00
7c242b437d Desktop/discord: use catppuccin vencord module 2025-07-05 19:24:24 +02:00
98f9b3a8fc Add kde patches
The nixpkgs patch is to clear out a conflict with a patch that's applied
to plasma-workspace by nixpkgs
2025-07-05 14:52:58 +02:00
fd0f27145a Flake: update lock file 2025-07-04 18:01:12 +02:00
d05764d3dd Roles/kde: remove all patches 2025-07-04 18:00:51 +02:00
d87450b305 Roles/desktop: add japanese fonts 2025-07-04 17:06:07 +02:00
2c6009b5b8 Flake: update secrets url 2025-06-24 13:24:31 +02:00
a741b9b559 Server/forgejo: expose to the internet 2025-06-06 18:54:14 +02:00
bb801f4e4c Common: update stateVersion 2025-06-03 21:19:02 +02:00
c37d347ba1 Flake: switch stable nixpkgs and home-manager to 25.05 2025-06-03 20:44:05 +02:00
0bfc27e90f Flake: update lock file 2025-06-03 18:19:41 +02:00
53df838182 Server: remove changedetection.io 2025-05-31 11:40:50 +02:00
f29d5d4207 Desktop/NetworkManager: change dhcp implementation 2025-05-26 16:19:52 +02:00
9aea5cd1f6 Flake: remove uneeded nixpkgs patches 2025-05-15 19:29:57 +02:00
9666439eeb Flake: update lock file 2025-05-15 19:29:17 +02:00
50e6fac406 Gaming/azahar: use nixpkgs version 2025-05-15 18:40:27 +02:00
ce69f89492 Desktop: remove git cola 2025-05-06 13:33:13 +02:00
c2d28ac798 Desktop/discord: get mauve catpuccin theme 2025-04-30 17:48:42 +02:00
22896ea923 Common/atuin: use catppuccin theme 2025-04-27 19:25:24 +02:00
203ffb3738 Common/atuin: bring back pre 18.4 behaviour 2025-04-27 19:01:34 +02:00
d2d28a968f Desktop/discord: configure vencord 2025-04-27 18:43:04 +02:00
f7e9fd9cad Desktop/discord: use vesktop module 2025-04-27 02:53:25 +02:00
6e5a9ca208 Desktop/keepassxc: move to new module 2025-04-27 02:32:00 +02:00
85c3c570dd Flake: add nixpkgs patches
Update and fix rpcs3 package
2025-04-27 00:23:28 +02:00
db6366a491 Flake: update lock file 2025-04-27 00:21:53 +02:00
f8140164d1 Desktop/jamesdsp: remove old build fix
Patch that fixes the build is already upstreamed, so this is entirely
  unneeded. Not even sure how it still compiled with the fix twize tbh
2025-04-25 10:57:31 +02:00
1a927b60be Keep nixpkgs-patches folder 2025-04-24 11:19:19 +02:00
f06d9b0e01 Machines/WinMax2: don't disable direct scanout 2025-04-19 19:03:30 +02:00
83977d50ae Gaming: install azahar 2025-04-18 00:38:38 +02:00
6292a84a01 Flake: remove school role 2025-04-15 17:26:54 +02:00
28c64bd454 Kde/kwin: add patches 2025-04-15 16:39:04 +02:00
a377ad8176 Server/samba: overhaul config 2025-04-12 01:00:05 +02:00
dafbcb9f8d Server: remove school things 2025-04-03 20:05:47 +02:00
513dab012d Flake: update lock file 2025-04-03 19:34:28 +02:00
630e634cd2 Flake: remove unneeded patches 2025-04-03 19:34:28 +02:00
f7a528a94f Firefox: install and configure containers extension 2025-04-03 19:34:28 +02:00
35f9aaca7d Desktop/firefox: change tab switcher order for toast 2025-04-03 19:34:28 +02:00
989f5407ec Desktop/firefox: install sponsorblock for toast 2025-04-03 19:34:28 +02:00
cb1230214a Desktop/firefox: uninstall undeclared extensions 2025-04-03 19:34:28 +02:00
bc9098525b Desktop/firefox: set up per user settings 2025-04-03 19:34:28 +02:00
0bd973fb25 Kde/firefox: manage with home-manager 2025-04-03 19:34:28 +02:00
90b1e43b99 Desktop/firefox: manage firefox with home-manager 2025-04-03 19:34:28 +02:00
7fce74c605 Desktop: install spotify 2025-04-03 19:34:28 +02:00
1815e8e3f6 Desktop/firefox: enable autoplay on synctube 2025-04-03 19:34:28 +02:00
a47d0a090d Kde/patches: use replaceDependencies to avoid mass rebuilds 2025-04-03 19:34:28 +02:00
5832fcb26b Flake: add nixpkgs patches 2025-04-03 19:34:28 +02:00
00cbe6876e Kde/patches: refactor overlay function 2025-04-03 19:34:28 +02:00
b8a2c3c10d Server/tailscale: wait more time for ip to be up 2025-03-25 22:31:06 +01:00
421a389bdb Server/ddclient: change ip provider 2025-03-25 22:30:49 +01:00
c925026183 Revert "Machines/WinMax2: temporarely change to default kernel"
This reverts commit b123ab87df.
2025-03-15 17:29:27 +01:00
5d77bb0959 Desktop/jamesdsp: install using home-manager, fix build 2025-03-15 17:08:45 +01:00
71a1bad913 Flake: drop nur 2025-03-15 17:07:47 +01:00
8385b2d6e6 Gaming/rpcs3: use package from nixpkgs 2025-03-15 17:07:09 +01:00
0c64697063 Flake: update lock file 2025-03-15 17:05:23 +01:00
a0fadd7a1b Revert "Kde: fix qt wayland"
This reverts commit f3ee33177f.
2025-03-15 09:39:23 +01:00
c366ce1cbe Common: add .local/bin to path 2025-03-14 19:42:22 +01:00
ba96c9b687 Revert "Desktop/discord: revert vesktop to electron 33"
This reverts commit 922c492412.
2025-03-12 12:55:00 +01:00
790b5ec4e7 Machines/everest: change eno1 ip 2025-03-10 14:18:51 +01:00
6be10e325a Server/adguard: get host ip dinamically 2025-03-10 14:18:29 +01:00
965a5eef13 Server/ssh: remove log 2025-03-09 11:55:52 +01:00
0617934f31 Flake: make nur follow nixpkgs unstable 2025-03-07 02:59:58 +01:00
23d426f0ea Kde/plasma: reenable kickoff's switch on hover 2025-03-05 13:06:41 +01:00
a7545faa45 Kde: add spectacle patch 2025-03-05 02:20:39 +01:00
92a6c20c18 Kde: add kinfocenter patches 2025-03-05 02:20:39 +01:00
f3ee33177f Kde: fix qt wayland 2025-03-05 02:20:39 +01:00
da57debd66 Kde: load patches automatically 2025-03-05 02:20:39 +01:00
a483112a32 Server/transmission: upgrade to transmission 4 2025-03-03 18:11:30 +01:00
68ea0f03f2 Flake: remove unneeded patch 2025-03-03 18:08:06 +01:00
cbbef2a3a6 Flake: update lock file 2025-03-03 18:07:55 +01:00
8279721102 Kde/skanpage: use qt6 package 2025-03-03 17:14:09 +01:00
922c492412 Desktop/discord: revert vesktop to electron 33 2025-02-20 17:29:53 +01:00
36d0ee851e Flake: Add patch to fix nixpkgs-unstable grup install script 2025-02-19 17:29:26 +01:00
d0a38fbfa3 Server/forgejo: enable catppuccin theme 2025-02-19 17:25:45 +01:00
40d2622862 Flake: update lock file 2025-02-19 16:08:28 +01:00
5640408d9f Roles/kde: remove patches
All of this patches are in 6.3, so they're not needed anymore
2025-02-19 15:23:04 +01:00
789157e3bf Flake: update shows-api input 2025-02-07 23:31:25 +01:00
1c7d4a513d Server/headscale: never stop trying to restart 2025-02-07 20:13:08 +01:00
c46418c783 Gaming/PCSX2: fix games location 2025-02-04 09:52:20 +01:00
3dd73e0b24 Desktop/keepassxc: replace manual autostart config with home-manager module 2025-01-31 11:11:43 +01:00
bdff3d97e9 Desktop: enable xdg autostart 2025-01-31 11:11:23 +01:00
8bfd76f23c Flake: update lock file 2025-01-31 10:48:46 +01:00
b123ab87df Machines/WinMax2: temporarely change to default kernel 2025-01-31 10:48:21 +01:00
6adbd2d38c Flake: remove unneeded patch 2025-01-31 10:48:05 +01:00
ac36661d4e Server/school: add dns record and caddy reverse proxy 2025-01-27 13:29:31 +01:00
8a700174b1 Flake: add shows-api input 2025-01-27 11:17:09 +01:00
786e3967e3 Server: add school container
This container is for hosting things that I need for school
I don't trust my code to be secure yet, so that's why it's in a
container
2025-01-27 10:59:00 +01:00
f8bf8ed7a4 Flake: update lock file 2025-01-27 10:55:28 +01:00
bcff4d2cbe Server/immich: add too rust-motd service status 2025-01-25 15:37:45 +01:00
251f88df02 Server: add immich 2025-01-23 23:12:42 +01:00
5847ecfe1b Machines/everest: change boot partition location 2025-01-23 19:28:32 +01:00
573fbdd240 School/helix: set up prettier as js/ts/tsx formatter 2025-01-21 19:28:42 +01:00
65b7cf4ab6 School: configure helix with typecript lsp 2025-01-19 20:45:57 +01:00
a59b356e9d Flake: add the school role to archie 2025-01-19 12:37:01 +01:00
dec75b3f7e Common/helix: change diagnostics options 2025-01-18 16:54:37 +01:00
83f7d01824 Flake: backport nixpkgs pr to stable nixpkgs 2025-01-18 13:14:06 +01:00
91da240751 Server/adguard: change local IP address 2025-01-18 12:30:26 +01:00
02fcfb5008 Flake: update lock file 2025-01-18 00:28:22 +01:00
2f970835b2 Flake: remove unneeded nixpkgs patch 2025-01-18 00:27:52 +01:00
77edacc9d4 Roles/kde: add kwin and plasma-workspace patches 2025-01-17 22:21:12 +01:00
b6bd1ec321 Flake: update nixpkgs patch 2025-01-17 16:36:11 +01:00
a60ca21925 Machines/Everest: change ip address and default gateway 2025-01-15 11:06:26 +01:00
d713ba1f15 Flake: add nixpkgs patch 2025-01-14 10:51:13 +01:00
904bb98f36 Flake: fully remove nix-minecraft references 2025-01-13 12:44:37 +01:00
36ac10c6dd Server/grafana: change security settings 2025-01-13 12:42:25 +01:00
24f4f270c1 Server/grafana: set root url 2025-01-13 12:42:25 +01:00
d93a2a7993 Flake: remove nix-minecraft 2025-01-10 18:41:48 +01:00
67989ca1a8 Server/endlessh: open firewal
I got confused and closed the firewall
thinking it was for the prometheus metrics
2025-01-10 11:26:57 +01:00
d65b4380e7 Server/grafana: provision prometheus datasource 2025-01-10 10:45:40 +01:00
3d4deae65a Server/grafana: disable telemetry 2025-01-10 10:10:47 +01:00
daf1e39df3 Justfile: remove update-input recipe 2025-01-09 11:17:28 +01:00
c154d91613 Server/grafana: configure default username and password 2025-01-09 11:17:28 +01:00
5631236aff Flake: udate secrets 2025-01-09 11:17:28 +01:00
8933b405d4 Server/endlessh: disable stderr logging, enable geoip 2025-01-09 11:17:28 +01:00
c66d7c21da Flake: add nixpkgs pr 2025-01-09 11:17:28 +01:00
bd0d7e5495 Server/endlessh: don't open firewall, add prometheus integration 2025-01-09 11:17:28 +01:00
88235bb32e Server: add grafana 2025-01-09 11:17:28 +01:00
a2bce9715d Server: add prometheus with node exporter 2025-01-09 11:17:28 +01:00
710e431dad Machines/WinMax2: add boot debugging specialisation 2025-01-09 09:43:01 +01:00
fb7b164a6c Common/atuin: change options 2025-01-09 09:31:58 +01:00
335205338f Server/forgejo: upgrade to non lts version 2025-01-04 02:55:24 +01:00
ebbbc8da58 Server/caddy: precompress the NixOS manual 2025-01-04 02:55:24 +01:00
dca3d05aec Server/forgejo: enable repo indexer 2025-01-04 02:55:24 +01:00
f83298f632 Flake: update lock file 2025-01-04 02:52:16 +01:00
a1d47a2744 Common: update catppuccin options 2025-01-04 02:32:18 +01:00
c396ca7400 Common/helix: disable nano 2025-01-04 01:57:25 +01:00
a275c8d43e Common/syncthing: open firewall ports 2025-01-02 22:59:37 +01:00
74ed35e5f4 Server/caddy: adjust systemd restart parameters 2025-01-02 22:51:52 +01:00
21c8f8c7e4 Machines/Everest: remove unneeded firewall options 2025-01-02 21:24:50 +01:00
98ebbcfbd3 Server/minecraft: remove 2025-01-02 20:37:09 +01:00
7eeff4c125 Server/syncthing: add games folder 2024-12-29 16:13:33 +01:00
16d3391714 Gaming/retroarch: update retroarch library automatically 2024-12-29 16:10:02 +01:00
fcba25620b Gaming/syncthing: sync games with syncthing 2024-12-29 16:09:15 +01:00
68994153d0 Gaming/pcsx2: fix typos in syncthing ignore file 2024-12-29 16:08:08 +01:00
62cf076375 Gaming: don't add games to the store 2024-12-29 16:05:51 +01:00
135cd0642b Gaming/syncthing: sync project eden save files 2024-12-24 14:46:51 +01:00
3733eb8b3a Server: add changedetection-io 2024-12-19 11:58:38 +01:00
2d4374899c Kde/plasma: add plasma_desktop pr 2661 2024-12-19 00:47:48 +01:00
ba2d6eb02a Kde/kwin: add kwin pr 6844 2024-12-19 00:47:20 +01:00
0c754f1930 Kde/kwin: app pr 6878 2024-12-18 16:19:39 +01:00
577aa1cc33 Kde/konsole: remove now-upstreamed patch 2024-12-18 15:49:04 +01:00
fe9678388d Flake: update lock file and remove unneeded nixpkgs patches 2024-12-18 15:47:03 +01:00
49130f062d Gaming/syncthing: sync project diva mods 2024-12-16 10:32:41 +01:00
0b3613086c Kde/plasma: add entry for mouse over bluetooth 2024-12-15 19:40:48 +01:00
ce51dd5dd3 Gitignore: ignore nix repl result files 2024-12-15 19:31:15 +01:00
d130ffb20d Common/nix: remove unneeded nixpath workaround, update comment 2024-12-15 16:25:48 +01:00
99056c9f32 Run formatter 2024-12-15 15:43:36 +01:00
5895f4beb1 Kde/plasma: add mouse settings 2024-12-15 15:42:25 +01:00
a2eacddd44 Kde/konsole: replace fetchFromGitHub with flake input 2024-12-15 03:07:23 +01:00
3eaabeacd9 Machines/Archie: remove btrfs compression 2024-12-15 02:30:44 +01:00
4bb34105f1 Machines/Archie: replace usb_storage module with nvme 2024-12-15 02:28:56 +01:00
efc4b199a4 Common: update state version 2024-12-10 17:34:22 +01:00
049a95e7b0 Server/forgejo: chage root url to https 2024-12-10 17:13:18 +01:00
10f09226eb Update changed options 2024-12-10 11:23:35 +01:00
75e75a571e Kde/kwin: update patch 2024-12-10 11:23:16 +01:00
9aabffc52a Flake: remove uneeded nixpkgs patches 2024-12-10 11:13:29 +01:00
5eab2e1ccc Flake: update lock file 2024-12-10 11:10:33 +01:00
49e920ac97 Flake: update nur 2024-12-10 11:08:59 +01:00
16d61d8d73 Machines/WinMax2: remove now uneeded steam HiDPI workaround 2024-12-10 00:35:17 +01:00
45daaddfb6 Revert "Machines/WinMax2: enable bluetooth wake from sleep"
This reverts commit aee3b50212.
Turns out this makes it so that I get instant wakeup after sleep
2024-12-10 00:28:17 +01:00
818bb17a3f Flake: update hhd nixpkgs pr 2024-12-10 00:27:27 +01:00
cf66663534 Flake: add nixpkgs pr 2024-12-10 00:27:15 +01:00
22dc0e1915 Flake: fix giving patched nixpkgs the wrong arguments 2024-12-09 18:34:24 +01:00
d7f7561cbb Kde/kate: install qt6 version 2024-12-05 12:49:31 +01:00
a6a4f594cf Server/ddclient: update options 2024-12-05 09:16:25 +01:00
581f281950 Server/ssh: remove trace 2024-12-05 09:16:25 +01:00
aee3b50212 Machines/WinMax2: enable bluetooth wake from sleep 2024-12-03 10:24:34 +01:00
30e89ac9d3 Flake: add pr 361364 2024-12-03 09:29:27 +01:00
ff4ceecd67 Server/samba: update options 2024-12-02 12:15:01 +01:00
7c98655a99 Common/eza: remove workaround for 24.05 2024-12-02 12:14:35 +01:00
fc51305ad6 Revert "Flake: backport headscale changes to stable nixpkgs"
This reverts commit fdad5d88bb.
2024-12-02 12:14:09 +01:00
5c8044283a Flake: upgrade stable nixpkgs and home-manager 2024-12-02 12:11:26 +01:00
dc4f025318 Server/caddy: double restartSec duration 2024-11-28 10:53:33 +01:00
565e5f8224 Flake: update lock file 2024-11-28 10:52:44 +01:00
bdc9c97289 Flake: remove unneeded patch 2024-11-28 10:45:52 +01:00
4a4284bce2 Flake: add pr 359282 2024-11-27 10:15:11 +01:00
bcb20eb1ca School/programs: install mongodb compass 2024-11-26 12:12:56 +01:00
74d858d5c5 Kde: configure baloo 2024-11-26 09:57:22 +01:00
dd07992751 Flake: update lock file and change nixpkgs patches 2024-11-24 22:26:22 +01:00
e4f9e94269 Desktop/syncthing: run as a user service managed by home-manager 2024-11-24 04:18:50 +01:00
69c9bfca26 Common: start services managed bu home-manager 2024-11-23 21:02:35 +01:00
ed5cbe1a05 Desktop: get rid of vscode 2024-11-19 00:45:03 +01:00
147be34498 Revert "Common: temporarely downgrade adw-gtk3"
This reverts commit 39fcb86f6e.
2024-11-15 12:47:02 +01:00
221e4878b4 Flake: add nixpkgs patch 2024-11-15 11:38:41 +01:00
0f6f51975d Flake: update nixpkgs patches 2024-11-15 10:56:31 +01:00
e952cfa34f Flake: update lock file 2024-11-12 11:01:00 +01:00
84f5b7537b Kde: add plasma-workspace patch 2024-11-12 10:50:23 +01:00
9cbd262e14 Kde/kwin: fix patch path 2024-11-12 09:58:25 +01:00
Toast
159dbbfe90 Merge pull request 'Refactor plasma role' (#12) from plasma-refactor into main
Reviewed-on: https://git.everest.tailscale/Toast/nix-stuff/pulls/12
2024-11-12 09:43:02 +01:00
183ebd78d1 Kde: move kwin configs and patches into separate file 2024-11-12 09:43:02 +01:00
147c52ee20 Kde: rework patch paths 2024-11-12 09:43:02 +01:00
4159ee98cc Kde: move konsole patches into konsole.nix 2024-11-12 09:43:02 +01:00
25db001181 Server/headscale: start before tailscale 2024-11-12 00:07:38 +01:00
3c72a10ec0 Server/ssh: send a message to discord on login 2024-11-10 18:58:52 +01:00
aa17ed51c8 Flake: make devshell without compiler 2024-11-10 02:49:43 +01:00
8bace4cb22 Kde: add breeze cursor to steam 2024-11-09 14:24:44 +01:00
99e5c29a3b Server/headscale: update ip prefixes setting 2024-11-07 12:39:23 +01:00
122 changed files with 5828 additions and 4663 deletions

1
.gitignore vendored
View file

@ -2,6 +2,7 @@
# Ignore build outputs from performing a nix-build or `nix build` command
result
result-*
repl-result*
# ---> Kate
# Ignore kate's swap files

View file

@ -14,14 +14,10 @@ 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.everest.tailscale:4222/Toast/nix-secrets.git /tmp/secrets
sed -i 's\git+ssh://forgejo@git.everest.tailscale:4222/Toast/nix-secrets\/tmp/secrets\g' flake.nix
just -q update-input 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
echo "{{bold}}All done!"
echo "{{normal}}Remember to restore flake.nix"
echo ""

371
flake.lock generated
View file

@ -10,11 +10,11 @@
"systems": "systems"
},
"locked": {
"lastModified": 1723293904,
"narHash": "sha256-b+uqzj+Wa6xgMS9aNbX4I+sXeb5biPDi39VgvSFqFvU=",
"lastModified": 1762618334,
"narHash": "sha256-wyT7Pl6tMFbFrs8Lk/TlEs81N6L+VSybPfiIgzU8lbQ=",
"owner": "ryantm",
"repo": "agenix",
"rev": "f6291c5935fdc4e0bef208cfc0dcab7e3f7a1c41",
"rev": "fcdea223397448d35d9b31f798479227e80183f6",
"type": "github"
},
"original": {
@ -24,12 +24,15 @@
}
},
"catppuccin": {
"inputs": {
"nixpkgs": "nixpkgs"
},
"locked": {
"lastModified": 1730036420,
"narHash": "sha256-rv2bz7J6Wo7AenPiu4+ptCB1AFyaMcS77y89zbRAtI8=",
"lastModified": 1765990358,
"narHash": "sha256-l8x0gU8mnYaGMl+gWrsSHKBJlZWD8KXJfHTkRlFiPI0=",
"owner": "catppuccin",
"repo": "nix",
"rev": "0b7bf04628414a402d255924f65e9a0d1a53d92b",
"rev": "de1b60ca45a578f59f7d84c8d338b346017b2161",
"type": "github"
},
"original": {
@ -38,32 +41,51 @@
"type": "github"
}
},
"catppuccin-vsc": {
"inputs": {
"nixpkgs": "nixpkgs"
},
"catppuccin-konsole": {
"flake": false,
"locked": {
"lastModified": 1725822842,
"narHash": "sha256-fOR805OwfINbMFzqSmE8piFAFHM9fE+BDdQQUahqDaQ=",
"lastModified": 1720277724,
"narHash": "sha256-d5+ygDrNl2qBxZ5Cn4U7d836+ZHz77m6/yxTIANd9BU=",
"owner": "catppuccin",
"repo": "vscode",
"rev": "54316f9afc31c3b5070a242cd3ca47d66ab0e9ac",
"repo": "konsole",
"rev": "3b64040e3f4ae5afb2347e7be8a38bc3cd8c73a8",
"type": "github"
},
"original": {
"owner": "catppuccin",
"repo": "vscode",
"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": 1730050654,
"narHash": "sha256-Gs21+A/to2AqjQsqMlWeOuSowYPOuSZ3fK6LRdBPUmI=",
"lastModified": 1765813820,
"narHash": "sha256-WcwzKm2mi/tyA+zZCpyvTdrOrZ1R1ENA3t622SGzFas=",
"owner": "eza-community",
"repo": "eza-themes",
"rev": "74be26bbd2ce76b29c37250a2fb7cb5d6644c964",
"rev": "1239cb1dd23fa8b70865550db77701b164a53cde",
"type": "github"
},
"original": {
@ -72,48 +94,13 @@
"type": "github"
}
},
"flake-compat": {
"flake": false,
"locked": {
"lastModified": 1673956053,
"narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9",
"type": "github"
},
"original": {
"owner": "edolstra",
"repo": "flake-compat",
"type": "github"
}
},
"flake-compat_2": {
"flake": false,
"locked": {
"lastModified": 1696426674,
"narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
"type": "github"
},
"original": {
"owner": "edolstra",
"repo": "flake-compat",
"type": "github"
}
},
"flake-utils": {
"inputs": {
"systems": "systems_2"
},
"locked": {
"lastModified": 1726560853,
"narHash": "sha256-X6rJYSESBVr3hBoH0WbKE5KvhPU5bloyZ2L4K60/fPQ=",
"lastModified": 1678901627,
"narHash": "sha256-U02riOqrKKzwjsxc/400XnElV+UtPUQWpANPlyazjH0=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "c1dfcf08411b08f6b8615f7d8971a2bfa81d5e8a",
"rev": "93a2b84fc4b70d9e089d029deacc3583435c2ed6",
"type": "github"
},
"original": {
@ -124,14 +111,14 @@
},
"flake-utils_2": {
"inputs": {
"systems": "systems_3"
"systems": "systems_2"
},
"locked": {
"lastModified": 1726560853,
"narHash": "sha256-X6rJYSESBVr3hBoH0WbKE5KvhPU5bloyZ2L4K60/fPQ=",
"lastModified": 1731533236,
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "c1dfcf08411b08f6b8615f7d8971a2bfa81d5e8a",
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
"type": "github"
},
"original": {
@ -142,32 +129,14 @@
},
"flake-utils_3": {
"inputs": {
"systems": "systems_4"
"systems": "systems_3"
},
"locked": {
"lastModified": 1681202837,
"narHash": "sha256-H+Rh19JDwRtpVPAWp64F+rlEtxUWBAQW28eAi3SRSzg=",
"lastModified": 1731533236,
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "cfacdce06f30d2b68473a46042957675eebb3401",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"flake-utils_4": {
"inputs": {
"systems": "systems_5"
},
"locked": {
"lastModified": 1710146030,
"narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a",
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
"type": "github"
},
"original": {
@ -214,11 +183,11 @@
]
},
"locked": {
"lastModified": 1703113217,
"narHash": "sha256-7ulcXOk63TIT2lVDSExj7XzFx09LpdSAPtvgtM7yQPE=",
"lastModified": 1745494811,
"narHash": "sha256-YZCh2o9Ua1n9uCvrvi5pRxtuVNml8X2a03qIFfRKpFs=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "3bfaacf46133c037bb356193bd2f1765d9dc82c1",
"rev": "abfad3d2958c9e6300a883bd443512c55dfeb1be",
"type": "github"
},
"original": {
@ -234,11 +203,11 @@
]
},
"locked": {
"lastModified": 1730450782,
"narHash": "sha256-0AfApF8aexgB6o34qqLW2cCX4LaWJajBVdU6ddiWZBM=",
"lastModified": 1765980955,
"narHash": "sha256-rB45jv4uwC90vM9UZ70plfvY/2Kdygs+zlQ07dGQFk4=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "8ca921e5a806b5b6171add542defe7bdac79d189",
"rev": "89c9508bbe9b40d36b3dc206c2483ef176f15173",
"type": "github"
},
"original": {
@ -254,16 +223,16 @@
]
},
"locked": {
"lastModified": 1726989464,
"narHash": "sha256-Vl+WVTJwutXkimwGprnEtXc/s/s8sMuXzqXaspIGlwM=",
"lastModified": 1765979862,
"narHash": "sha256-/r9/1KamvbHJx6I40H4HsSXnEcBAkj46ZwibhBx9kg0=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "2f23fa308a7c067e52dfcc30a0758f47043ec176",
"rev": "d3135ab747fd9dac250ffb90b4a7e80634eacbe9",
"type": "github"
},
"original": {
"owner": "nix-community",
"ref": "release-24.05",
"ref": "release-25.11",
"repo": "home-manager",
"type": "github"
}
@ -276,11 +245,11 @@
]
},
"locked": {
"lastModified": 1730441026,
"narHash": "sha256-xmZQFGeIm2TzXv4jGaQ3nfBoUbt4gKbIv/SHVWw93ag=",
"lastModified": 1766067735,
"narHash": "sha256-cRC/rOYRtZNzc5y9nTccozyo/mkI4/1eFE33Aqgs+SQ=",
"owner": "Jovian-Experiments",
"repo": "Jovian-NixOS",
"rev": "bd1da5657b8903b293a0ff51eb896a91a544ebed",
"rev": "34a16089be30f77ac9444907ec97c02b4b711896",
"type": "github"
},
"original": {
@ -292,11 +261,11 @@
"lix": {
"flake": false,
"locked": {
"lastModified": 1730610940,
"narHash": "sha256-ZsTpii4kZcioRF3bu3/pS374R9GYQVyrMpBNr2ZUnVg=",
"rev": "b1a0e3c0029c2dd5fb7c8dd2db4f9e0b309c9f54",
"lastModified": 1765883751,
"narHash": "sha256-clrWX/t2swPGBVs50Yegq2HK3q5bbwOt3kWMsL7JIZM=",
"rev": "fc0073f54095f15ee272621d4746eb9f40946385",
"type": "tarball",
"url": "https://git.lix.systems/api/v1/repos/lix-project/lix/archive/b1a0e3c0029c2dd5fb7c8dd2db4f9e0b309c9f54.tar.gz?rev=b1a0e3c0029c2dd5fb7c8dd2db4f9e0b309c9f54"
"url": "https://git.lix.systems/api/v1/repos/lix-project/lix/archive/fc0073f54095f15ee272621d4746eb9f40946385.tar.gz?rev=fc0073f54095f15ee272621d4746eb9f40946385"
},
"original": {
"type": "tarball",
@ -305,7 +274,7 @@
},
"lix-module": {
"inputs": {
"flake-utils": "flake-utils",
"flake-utils": "flake-utils_2",
"flakey-profile": "flakey-profile",
"lix": [
"lix"
@ -315,11 +284,11 @@
]
},
"locked": {
"lastModified": 1727752861,
"narHash": "sha256-jowmo2aEzrEpPSM96IWtajuogdJm7DjAWxFTEb7Ct0s=",
"rev": "fd186f535a4ac7ae35d98c1dd5d79f0a81b7976d",
"lastModified": 1764519849,
"narHash": "sha256-XnNABKfIYKSimQVvKc9FnlC2H0LurOhd9MS6l0Z67lE=",
"rev": "6c95c0b6f73f831226453fc6905c216ab634c30f",
"type": "tarball",
"url": "https://git.lix.systems/api/v1/repos/lix-project/nixos-module/archive/fd186f535a4ac7ae35d98c1dd5d79f0a81b7976d.tar.gz?rev=fd186f535a4ac7ae35d98c1dd5d79f0a81b7976d"
"url": "https://git.lix.systems/api/v1/repos/lix-project/nixos-module/archive/6c95c0b6f73f831226453fc6905c216ab634c30f.tar.gz?rev=6c95c0b6f73f831226453fc6905c216ab634c30f"
},
"original": {
"type": "tarball",
@ -328,7 +297,7 @@
},
"lix-module-unstable": {
"inputs": {
"flake-utils": "flake-utils_2",
"flake-utils": "flake-utils_3",
"flakey-profile": "flakey-profile_2",
"lix": [
"lix"
@ -338,11 +307,11 @@
]
},
"locked": {
"lastModified": 1727752861,
"narHash": "sha256-jowmo2aEzrEpPSM96IWtajuogdJm7DjAWxFTEb7Ct0s=",
"rev": "fd186f535a4ac7ae35d98c1dd5d79f0a81b7976d",
"lastModified": 1764519849,
"narHash": "sha256-XnNABKfIYKSimQVvKc9FnlC2H0LurOhd9MS6l0Z67lE=",
"rev": "6c95c0b6f73f831226453fc6905c216ab634c30f",
"type": "tarball",
"url": "https://git.lix.systems/api/v1/repos/lix-project/nixos-module/archive/fd186f535a4ac7ae35d98c1dd5d79f0a81b7976d.tar.gz?rev=fd186f535a4ac7ae35d98c1dd5d79f0a81b7976d"
"url": "https://git.lix.systems/api/v1/repos/lix-project/nixos-module/archive/6c95c0b6f73f831226453fc6905c216ab634c30f.tar.gz?rev=6c95c0b6f73f831226453fc6905c216ab634c30f"
},
"original": {
"type": "tarball",
@ -351,11 +320,11 @@
},
"nix-flatpak": {
"locked": {
"lastModified": 1730108712,
"narHash": "sha256-vIvmXmjAQIY39hACGFe/cdBK2r3ZprpHLwX2HIy7Mj8=",
"lastModified": 1754777568,
"narHash": "sha256-0bBqT+3XncgF8F03RFAamw9vdf0VmaDoIJLTGkjfQZs=",
"owner": "gmodena",
"repo": "nix-flatpak",
"rev": "1cba177bb0a948c919af7596e40bef307543d40a",
"rev": "62f636b87ef6050760a8cb325cadb90674d1e23e",
"type": "github"
},
"original": {
@ -389,11 +358,11 @@
},
"nix-impermanence": {
"locked": {
"lastModified": 1730403150,
"narHash": "sha256-W1FH5aJ/GpRCOA7DXT/sJHFpa5r8sq2qAUncWwRZ3Gg=",
"lastModified": 1737831083,
"narHash": "sha256-LJggUHbpyeDvNagTUrdhe/pRVp4pnS6wVKALS782gRI=",
"owner": "nix-community",
"repo": "impermanence",
"rev": "0d09341beeaa2367bac5d718df1404bf2ce45e6f",
"rev": "4b3e914cdf97a5b536a889e939fb2fd2b043a170",
"type": "github"
},
"original": {
@ -409,11 +378,11 @@
]
},
"locked": {
"lastModified": 1729999765,
"narHash": "sha256-LYsavZXitFjjyETZoij8usXjTa7fa9AIF3Sk3MJSX+Y=",
"lastModified": 1765267181,
"narHash": "sha256-d3NBA9zEtBu2JFMnTBqWj7Tmi7R5OikoU2ycrdhQEws=",
"owner": "Mic92",
"repo": "nix-index-database",
"rev": "0e3a8778c2ee218eff8de6aacf3d2fa6c33b2d4f",
"rev": "82befcf7dc77c909b0f2a09f5da910ec95c5b78f",
"type": "github"
},
"original": {
@ -429,11 +398,11 @@
]
},
"locked": {
"lastModified": 1729999765,
"narHash": "sha256-LYsavZXitFjjyETZoij8usXjTa7fa9AIF3Sk3MJSX+Y=",
"lastModified": 1765267181,
"narHash": "sha256-d3NBA9zEtBu2JFMnTBqWj7Tmi7R5OikoU2ycrdhQEws=",
"owner": "Mic92",
"repo": "nix-index-database",
"rev": "0e3a8778c2ee218eff8de6aacf3d2fa6c33b2d4f",
"rev": "82befcf7dc77c909b0f2a09f5da910ec95c5b78f",
"type": "github"
},
"original": {
@ -442,35 +411,13 @@
"type": "github"
}
},
"nix-minecraft": {
"inputs": {
"flake-compat": "flake-compat",
"flake-utils": "flake-utils_3",
"nixpkgs": [
"nixpkgs-raw"
]
},
"locked": {
"lastModified": 1730426071,
"narHash": "sha256-2BkSiHqyWikpz9HSgTBk5kikaQ5m0Rs60C9KA2kf53o=",
"owner": "Infinidoge",
"repo": "nix-minecraft",
"rev": "4b371c3d119493051d081ff5b6cff689a97ad1a1",
"type": "github"
},
"original": {
"owner": "Infinidoge",
"repo": "nix-minecraft",
"type": "github"
}
},
"nixos-hardware": {
"locked": {
"lastModified": 1730368399,
"narHash": "sha256-F8vJtG389i9fp3k2/UDYHMed3PLCJYfxCqwiVP7b9ig=",
"lastModified": 1764440730,
"narHash": "sha256-ZlJTNLUKQRANlLDomuRWLBCH5792x+6XUJ4YdFRjtO4=",
"owner": "NixOS",
"repo": "nixos-hardware",
"rev": "da14839ac5f38ee6adbdb4e6db09b5eef6d6ccdc",
"rev": "9154f4569b6cdfd3c595851a6ba51bfaa472d9f3",
"type": "github"
},
"original": {
@ -482,11 +429,11 @@
},
"nixpkgs": {
"locked": {
"lastModified": 1712963716,
"narHash": "sha256-WKm9CvgCldeIVvRz87iOMi8CFVB1apJlkUT4GGvA0iM=",
"lastModified": 1763966396,
"narHash": "sha256-6eeL1YPcY1MV3DDStIDIdy/zZCDKgHdkCmsrLJFiZf0=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "cfd6b5fc90b15709b780a5a1619695a88505a176",
"rev": "5ae3b07d8d6527c42f17c876e404993199144b6a",
"type": "github"
},
"original": {
@ -498,26 +445,26 @@
},
"nixpkgs-raw": {
"locked": {
"lastModified": 1730327045,
"narHash": "sha256-xKel5kd1AbExymxoIfQ7pgcX6hjw9jCgbiBjiUfSVJ8=",
"lastModified": 1765838191,
"narHash": "sha256-m5KWt1nOm76ILk/JSCxBM4MfK3rYY7Wq9/TZIIeGnT8=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "080166c15633801df010977d9d7474b4a6c549d7",
"rev": "c6f52ebd45e5925c188d1a20119978aa4ffd5ef6",
"type": "github"
},
"original": {
"id": "nixpkgs",
"ref": "nixos-24.05",
"ref": "nixos-25.11",
"type": "indirect"
}
},
"nixpkgs-unstable-raw": {
"locked": {
"lastModified": 1730200266,
"narHash": "sha256-l253w0XMT8nWHGXuXqyiIC/bMvh1VRszGXgdpQlfhvU=",
"lastModified": 1765779637,
"narHash": "sha256-KJ2wa/BLSrTqDjbfyNx70ov/HdgNBCBBSQP3BIzKnv4=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "807e9154dcb16384b1b765ebe9cd2bba2ac287fd",
"rev": "1306659b587dc277866c7b69eb97e5f07864d8c4",
"type": "github"
},
"original": {
@ -526,21 +473,6 @@
"type": "indirect"
}
},
"nur": {
"locked": {
"lastModified": 1730455118,
"narHash": "sha256-E5yWeAUKohUot11JBfH7apOyPjqs3z2/fAtUc2LNfHw=",
"owner": "nix-community",
"repo": "NUR",
"rev": "5bf603459b923edbee4955e9fc94b94662add85c",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "NUR",
"type": "github"
}
},
"plasma-manager": {
"inputs": {
"home-manager": [
@ -551,11 +483,11 @@
]
},
"locked": {
"lastModified": 1730366788,
"narHash": "sha256-0Ezvv4KkyFdLAblPBFDgZbiMLlJZtpHruT2i4KC2wIY=",
"lastModified": 1763909441,
"narHash": "sha256-56LwV51TX/FhgX+5LCG6akQ5KrOWuKgcJa+eUsRMxsc=",
"owner": "nix-community",
"repo": "plasma-manager",
"rev": "f634d5f6ee9be365b2ca08b2d00e0e3b0c240b9e",
"rev": "b24ed4b272256dfc1cc2291f89a9821d5f9e14b4",
"type": "github"
},
"original": {
@ -568,7 +500,8 @@
"inputs": {
"agenix": "agenix",
"catppuccin": "catppuccin",
"catppuccin-vsc": "catppuccin-vsc",
"catppuccin-konsole": "catppuccin-konsole",
"copyparty": "copyparty",
"eza-themes": "eza-themes",
"home-manager": "home-manager_2",
"home-manager-unstable": "home-manager-unstable",
@ -580,30 +513,48 @@
"nix-impermanence": "nix-impermanence",
"nix-index-db": "nix-index-db",
"nix-index-db-unstable": "nix-index-db-unstable",
"nix-minecraft": "nix-minecraft",
"nixos-hardware": "nixos-hardware",
"nixpkgs-raw": "nixpkgs-raw",
"nixpkgs-unstable-raw": "nixpkgs-unstable-raw",
"nur": "nur",
"plasma-manager": "plasma-manager",
"secrets": "secrets",
"vscode-extensions": "vscode-extensions"
"sops-nix": "sops-nix"
}
},
"secrets": {
"flake": false,
"locked": {
"lastModified": 1726137390,
"narHash": "sha256-RaTOgscAl0pnAT/1DwyitTfFNwFDPZaqN/vTaqAoCTM=",
"lastModified": 1766143747,
"narHash": "sha256-bG4QoCZLUDrubYFuRvxiXhycBD3R+UjrzXrNZ+qRnio=",
"ref": "refs/heads/main",
"rev": "994526ba9affd6e6d617b1743126a36846530c93",
"revCount": 24,
"rev": "8921f23861a82f0f8d706c276bc738ca72c053b1",
"revCount": 41,
"type": "git",
"url": "ssh://forgejo@git.everest.tailscale:4222/Toast/nix-secrets"
"url": "ssh://forgejo@git.toast003.xyz:4222/Toast/nix-secrets"
},
"original": {
"type": "git",
"url": "ssh://forgejo@git.everest.tailscale:4222/Toast/nix-secrets"
"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"
}
},
"systems": {
@ -650,58 +601,6 @@
"repo": "default",
"type": "github"
}
},
"systems_4": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"systems_5": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"vscode-extensions": {
"inputs": {
"flake-compat": "flake-compat_2",
"flake-utils": "flake-utils_4",
"nixpkgs": [
"nixpkgs-unstable-raw"
]
},
"locked": {
"lastModified": 1730426202,
"narHash": "sha256-swwKpE3lrdvcSh6Hjyf/eSe/zPnsZgeVlSl+B4yBpeo=",
"owner": "nix-community",
"repo": "nix-vscode-extensions",
"rev": "96dcbddd24edc60ad47f41bb2a73e06099eba4af",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "nix-vscode-extensions",
"type": "github"
}
}
},
"root": "root",

View file

@ -3,10 +3,10 @@
inputs = {
secrets = {
url = "git+ssh://forgejo@git.everest.tailscale:4222/Toast/nix-secrets";
url = "git+ssh://forgejo@git.toast003.xyz:4222/Toast/nix-secrets";
flake = false;
};
nixpkgs-raw.url = "nixpkgs/nixos-24.05";
nixpkgs-raw.url = "nixpkgs/nixos-25.11";
nixpkgs-unstable-raw.url = "nixpkgs/nixos-unstable";
agenix = {
@ -16,9 +16,13 @@
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-24.05";
url = "github:nix-community/home-manager/release-25.11";
inputs.nixpkgs.follows = "nixpkgs-raw";
};
@ -36,6 +40,9 @@
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
@ -56,16 +63,8 @@
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 = {
@ -79,11 +78,6 @@
inputs.lix.follows = "lix";
};
nix-minecraft = {
url = "github:Infinidoge/nix-minecraft";
inputs.nixpkgs.follows = "nixpkgs-raw";
};
# Non flake inputs / random things
lix = {
url = "https://git.lix.systems/lix-project/lix/archive/main.tar.gz";
@ -94,6 +88,11 @@
url = "github:eza-community/eza-themes";
flake = false;
};
catppuccin-konsole = {
url = "github:catppuccin/konsole";
flake = false;
};
};
outputs = {...} @ inputs:
@ -105,22 +104,22 @@
name = "patched-nixpkgs-unstable";
src = nixpkgs-unstable-raw;
patches = [
./nixpkgs-patches/handheld-daemon-ui-init.patch
./nixpkgs-patches/pr471291.patch
./nixpkgs-patches/revert-mangohud-update.patch
];
};
nixpkgs-patched = nixpkgs-raw.legacyPackages.x86_64-linux.applyPatches {
name = "patched-nixpkgs";
src = nixpkgs-raw;
patches = [
./nixpkgs-patches/backport_unstable_headscale_changes.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.self;};
nixpkgs = (import "${nixpkgs-patched}/flake.nix").outputs {self = inputs.self;};
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;};
in {
formatter.x86_64-linux = nixpkgs-unstable.legacyPackages.x86_64-linux.alejandra;
devShells.x86_64-linux.default = nixpkgs.legacyPackages.x86_64-linux.mkShell {
devShells.x86_64-linux.default = nixpkgs.legacyPackages.x86_64-linux.mkShellNoCC {
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.
@ -137,11 +136,18 @@
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";}; {
anything-sync-daemon = callPackage ./pkgs/anything-sync-daemon {};
discord-krisp-fixer = callPackage ./pkgs/discord-krisp-fixer {};
kasane-teto-cursor = callPackage ./pkgs/kasane-teto-cursor {};
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;
};
};
nixosConfigurations = let
@ -161,21 +167,20 @@
pkgs.lib.nixosSystem {
system = "x86_64-linux";
specialArgs = {
systemPkgs =
if stable
then nixpkgs-patched
else nixpkgs-unstable-patched;
flakeSelf = self;
};
lib = import ./lib {nixpkgs = pkgs;};
modules =
[
agenix.nixosModules.default
sops-nix.nixosModules.sops
(
if stable
then home-manager
else home-manager-unstable
)
.nixosModule
.nixosModules
.home-manager
(
if stable
then nix-index-db
@ -217,26 +222,18 @@
./roles/gaming
];
WinMax2.modules = [
jovian.nixosModules.default
nixos-hardware.nixosModules.gpd-win-max-2-2023
./roles/desktop
./roles/kde
./roles/gaming
./roles/school
];
Everest = {
stable = true;
modules = [
nix-minecraft.nixosModules.minecraft-servers
{nixpkgs.overlays = [nix-minecraft.overlay];}
copyparty.nixosModules.default
./roles/server
];
};
iMac.modules = [
./roles/desktop
./roles/gnome
./roles/school
];
};
};
}

10
lib/default.nix Normal file
View file

@ -0,0 +1,10 @@
{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;
};
})

23
lib/networkManager.nix Normal file
View file

@ -0,0 +1,23 @@
{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;
};
}

13
lib/patches.nix Normal file
View file

@ -0,0 +1,13 @@
{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;
}

5
lib/syncthing.nix Normal file
View file

@ -0,0 +1,5 @@
{lib}: let
data = import ./../syncthing.nix;
in {
devices = builtins.getAttr "devices" data;
}

View file

@ -14,27 +14,28 @@
# Enable support for the Xbox One wireless dongle
hardware.xone.enable = true;
boot.initrd.availableKernelModules = ["xhci_pci" "ahci" "usbhid" "usb_storage" "sd_mod"];
boot.initrd.availableKernelModules = ["xhci_pci" "ahci" "usbhid" "nvme" "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" "compress=zstd"];
options = ["subvol=@root"];
};
fileSystems."/nix" = {
device = "/dev/disk/by-uuid/5322c217-b87b-4150-8b4c-a8fa17a899bf";
fsType = "btrfs";
options = ["subvol=@nix" "compress=zstd"];
options = ["subvol=@nix"];
};
fileSystems."/boot" = {
device = "/dev/disk/by-uuid/5322c217-b87b-4150-8b4c-a8fa17a899bf";
fsType = "btrfs";
options = ["subvol=@boot" "compress=zstd"];
options = ["subvol=@boot"];
};
fileSystems."/boot/efi" = {
@ -53,6 +54,12 @@
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";
@ -62,12 +69,12 @@
"/home" = {
device = "/dev/disk/by-uuid/5322c217-b87b-4150-8b4c-a8fa17a899bf";
fsType = "btrfs";
options = ["subvol=@home" "compress=zstd"];
options = ["subvol=@home"];
};
"/persist" = {
device = "/dev/disk/by-uuid/5322c217-b87b-4150-8b4c-a8fa17a899bf";
fsType = "btrfs";
options = ["subvol=@persist" "compress=zstd"];
options = ["subvol=@persist"];
neededForBoot = true;
};
};

View file

@ -22,18 +22,22 @@
wakeOnLan.enable = true;
ipv4.addresses = [
{
address = "192.168.0.160";
address = "192.168.1.160";
prefixLength = 24;
}
];
};
# I use networkd, so I need to declare the interface for the default gateway
defaultGateway = {
address = "192.168.0.1";
address = "192.168.1.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 = {
@ -53,11 +57,4 @@
};
};
};
# 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;
}

View file

@ -51,7 +51,7 @@
};
fileSystems."/boot/efi" = {
device = "/dev/disk/by-label/Boot";
device = "/dev/disk/by-uuid/FB87-4CBC";
fsType = "vfat";
};

View file

@ -7,16 +7,19 @@
lib,
...
}: {
# Use grub boot loader
boot = {
loader = {
systemd-boot.enable = false;
grub = {
limine = {
enable = true;
device = "nodev";
efiSupport = true;
# No other OS on here :P
useOSProber = false;
enableEditor = true;
secureBoot.enable = true;
extraConfig = ''
timeout: 3
'';
style = {
graphicalTerminal.font.scale = "2x2";
};
};
efi = {
efiSysMountPoint = config.fileSystems."efi_boot_partition".mountPoint;
@ -33,12 +36,10 @@
kernelPackages = pkgs.linuxPackages_latest;
};
catppuccin.limine.enable = true;
networking.hostName = "WinMax2"; # Define your hostname.
# Direct scanout has some issues with my egpu so I just disable it
environment.sessionVariables."KWIN_DRM_NO_DIRECT_SCANOUT" = 1;
# Sleep fixes
boot.kernelParams = ["rtc_cmos.use_acpi_alarm=1" "panic=5"];
services.udev.extraRules = ''
@ -56,6 +57,8 @@
};
user = "toast";
};
# Input plumber conflicts with hhd, and it doesn't let me use mouse mode
inputplumber.enable = lib.mkForce false;
};
# Allow unfree packages
@ -69,26 +72,6 @@
xserver.xkb.layout = lib.mkForce "us";
};
jovian = {
# Steam Deck UI settings
steam = {
enable = true;
autoStart = false;
user = "toast";
desktopSession = "plasma";
};
hardware.amd.gpu.enableBacklightControl = true;
# Need patched mesa
steamos = {
enableMesaPatches = true;
enableVendorRadv = true;
};
decky-loader = {
enable = true;
package = pkgs.decky-loader-prerelease;
};
};
# Enable bluetooth
hardware.bluetooth = {
enable = true;
@ -102,18 +85,6 @@
# services.printing.enable = true;
home-manager.sharedModules = [
{
# Steam's hidpi support is bugged so it needds to be hardcoded
xdg.desktopEntries = {
steam-noScaling = {
name = "Steam (2x scale)";
exec = "env STEAM_FORCE_DESKTOPUI_SCALING=2 steam %U";
icon = "steam";
categories = ["Network" "FileTransfer" "Game"];
comment = "Application for managing and playing games on Steam";
prefersNonDefaultGPU = true;
settings.X-KDE-RunOnDiscreteGpu = "true";
};
};
programs.plasma.input.keyboard.layouts = lib.mkForce [{layout = "us";} {layout = "es";}];
}
];
@ -158,4 +129,13 @@
# (/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"
];
};
}

View file

@ -1,84 +0,0 @@
# Edit this configuration file to define what should be installed on
# your system. Help is available in the configuration.nix(5) man page, on
# https://search.nixos.org/options and in the NixOS manual (`nixos-help`).
{
config,
lib,
pkgs,
...
}: {
# Use the systemd-boot EFI boot loader.
boot.loader.systemd-boot.enable = true;
boot.loader.efi.canTouchEfiVariables = true;
nixpkgs.config.allowUnfree = true;
networking.hostName = "iMac"; # Define your hostname.
# Set your time zone.
time.timeZone = "Europe/Madrid";
# Configure network proxy if necessary
# networking.proxy.default = "http://user:password@proxy:port/";
# networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain";
# Select internationalisation properties.
# i18n.defaultLocale = "en_US.UTF-8";
# console = {
# font = "Lat2-Terminus16";
# keyMap = "us";
# useXkbConfig = true; # use xkb.options in tty.
# };
# Enable the X11 windowing system.
services.xserver.enable = true;
# Configure keymap in X11
services.xserver.xkb.layout = "es";
# services.xserver.xkb.options = "eurosign:e,caps:escape";
# Enable CUPS to print documents.
# services.printing.enable = true;
# Enable sound.
hardware.pulseaudio.enable = false;
# OR
# services.pipewire = {
# enable = true;
# pulse.enable = true;
# };
# Enable touchpad support (enabled default in most desktopManager).
# services.libinput.enable = true;
# List packages installed in system profile. To search, run:
# $ nix search wget
# environment.systemPackages = with pkgs; [
# vim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default.
# wget
# ];
# Some programs need SUID wrappers, can be configured further or are
# started in user sessions.
# programs.mtr.enable = true;
# programs.gnupg.agent = {
# enable = true;
# enableSSHSupport = true;
# };
# List services that you want to enable:
# Enable the OpenSSH daemon.
# services.openssh.enable = true;
# Open ports in the firewall.
# networking.firewall.allowedTCPPorts = [ ... ];
# networking.firewall.allowedUDPPorts = [ ... ];
# Or disable the firewall altogether.
# networking.firewall.enable = false;
# Copy the NixOS configuration file and link it from the resulting system
# (/run/current-system/configuration.nix). This is useful in case you
# accidentally delete configuration.nix.
# system.copySystemConfiguration = true;
}

View file

@ -1,6 +0,0 @@
{...}: {
imports = [
./configuration.nix
./hardware-configuration.nix
];
}

View file

@ -1,69 +0,0 @@
# Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{
config,
lib,
pkgs,
modulesPath,
...
}: {
imports = [
(modulesPath + "/installer/scan/not-detected.nix")
];
boot.initrd.availableKernelModules = ["xhci_pci" "ahci" "usb_storage" "usbhid" "sd_mod" "sdhci_pci"];
boot.initrd.kernelModules = [];
boot.initrd.systemd.enable = true;
boot.kernelModules = ["kvm-intel" "wl"];
boot.kernelParams = [
"acpi_backlight=video"
"nouveau.config=NvClkMode=15"
];
boot.extraModulePackages = [config.boot.kernelPackages.broadcom_sta];
fileSystems."/" = {
device = "/dev/disk/by-uuid/6062dfe3-6e70-4f30-aa45-e81933f116fb";
fsType = "btrfs";
options = ["subvol=@" "compress=zstd"];
};
boot.initrd.luks.devices."SSD".device = "/dev/disk/by-uuid/482cd1b5-2a22-42f3-a497-4b4d7006d2e3";
fileSystems."/nix" = {
device = "/dev/disk/by-uuid/6062dfe3-6e70-4f30-aa45-e81933f116fb";
fsType = "btrfs";
options = ["subvol=@nix" "compress=zstd"];
};
fileSystems."/home" = {
device = "/dev/disk/by-uuid/6062dfe3-6e70-4f30-aa45-e81933f116fb";
fsType = "btrfs";
options = ["subvol=@home" "compress=zstd"];
};
fileSystems."/persist" = {
device = "/dev/disk/by-uuid/6062dfe3-6e70-4f30-aa45-e81933f116fb";
fsType = "btrfs";
options = ["subvol=@persist" "compress=zstd"];
neededForBoot = true;
};
fileSystems."/boot" = {
device = "/dev/disk/by-uuid/0D30-3CEE";
fsType = "vfat";
options = ["fmask=0022" "dmask=0022"];
};
swapDevices = [];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's
# still possible to use this option, but it's recommended to use it in conjunction
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
networking.useDHCP = lib.mkDefault true;
# networking.interfaces.enp4s0f0.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
}

0
nixpkgs-patches/.gitkeep Normal file
View file

File diff suppressed because it is too large Load diff

View file

@ -1,213 +0,0 @@
From 18cd88064d152491d5ba19602db5c5d65bc2d685 Mon Sep 17 00:00:00 2001
From: Toast <39011842+toast003@users.noreply.github.com>
Date: Thu, 18 Apr 2024 11:22:24 +0200
Subject: [PATCH 1/6] handheld-daemon-ui: init at 3.1.1
---
.../by-name/ha/handheld-daemon-ui/package.nix | 39 +++++++++++++++++++
1 file changed, 39 insertions(+)
create mode 100644 pkgs/by-name/ha/handheld-daemon-ui/package.nix
diff --git a/pkgs/by-name/ha/handheld-daemon-ui/package.nix b/pkgs/by-name/ha/handheld-daemon-ui/package.nix
new file mode 100644
index 000000000000000..81d318d88b5abd3
--- /dev/null
+++ b/pkgs/by-name/ha/handheld-daemon-ui/package.nix
@@ -0,0 +1,39 @@
+{
+ lib,
+ appimageTools,
+ fetchurl,
+}:
+let
+ pname = "handheld-daemon-ui";
+ version = "3.1.1";
+
+ src = fetchurl {
+ url = "https://github.com/hhd-dev/hhd-ui/releases/download/v${version}/hhd-ui.Appimage";
+ hash = "sha256-KH01MvcCbvCqjp1UZHnwfh9G3Yh50CO9Ecjl1Y8VY9E=";
+ };
+ extractedFiles = appimageTools.extractType2 { inherit pname version src; };
+in
+appimageTools.wrapType2 {
+ inherit pname version src;
+
+ extraInstallCommands = ''
+ # Handheld-daemon expects the UI binary to be called hhd-ui
+ mv $out/bin/${pname} $out/bin/hhd-ui
+
+ mkdir -p $out/share/applications
+ substitute ${extractedFiles}/hhd-ui.desktop \
+ $out/share/applications/hhd-ui.desktop \
+ --replace-fail "Exec=AppRun" "Exec=hhd-ui"
+ cp ${extractedFiles}/usr/share/icons $out/share -r
+ '';
+
+ meta = with lib; {
+ description = "The main UI for the Handheld Daemon";
+ homepage = "https://github.com/hhd-dev/hhd-ui";
+ license = licenses.gpl3Only;
+ maintainers = with maintainers; [ toast ];
+ mainProgram = "hhd-ui";
+ platforms = [ "x86_64-linux" ];
+ sourceProvenance = with sourceTypes; [ binaryNativeCode ];
+ };
+}
From 8ebb1f0976c79c74eb0cea3975c348e36d86a7d1 Mon Sep 17 00:00:00 2001
From: Toast <39011842+toast003@users.noreply.github.com>
Date: Wed, 10 Jul 2024 12:59:01 +0200
Subject: [PATCH 2/6] handheld-daemon: add options for handheld-daemon-ui
---
.../modules/services/hardware/handheld-daemon.nix | 15 ++++++++++++++-
1 file changed, 14 insertions(+), 1 deletion(-)
diff --git a/nixos/modules/services/hardware/handheld-daemon.nix b/nixos/modules/services/hardware/handheld-daemon.nix
index 6c9d5aa3e22c86b..e8e283bca894130 100644
--- a/nixos/modules/services/hardware/handheld-daemon.nix
+++ b/nixos/modules/services/hardware/handheld-daemon.nix
@@ -11,6 +11,11 @@ in
enable = mkEnableOption "Enable Handheld Daemon";
package = mkPackageOption pkgs "handheld-daemon" { };
+ ui = {
+ enable = mkEnableOption "Handheld Daemon UI";
+ package = mkPackageOption pkgs "handheld-daemon-ui" { };
+ };
+
user = mkOption {
type = types.str;
description = ''
@@ -20,7 +25,10 @@ in
};
config = mkIf cfg.enable {
- environment.systemPackages = [ cfg.package ];
+ environment.systemPackages = [
+ cfg.package
+ (mkIf cfg.ui.enable cfg.ui.package)
+ ];
services.udev.packages = [ cfg.package ];
systemd.packages = [ cfg.package ];
@@ -31,6 +39,11 @@ in
restartIfChanged = true;
+ path = mkIf cfg.ui.enable [
+ pkgs.handheld-daemon-ui
+ pkgs.lsof
+ ];
+
serviceConfig = {
ExecStart = "${ lib.getExe cfg.package } --user ${ cfg.user }";
Nice = "-12";
From 1b034ab22605b29195dabce893282b05077d0fe7 Mon Sep 17 00:00:00 2001
From: Toast <39011842+toast003@users.noreply.github.com>
Date: Thu, 11 Jul 2024 12:11:00 +0200
Subject: [PATCH 3/6] handheld-daemon: enable ui when enabling handheld-daemon
---
nixos/modules/services/hardware/handheld-daemon.nix | 1 +
1 file changed, 1 insertion(+)
diff --git a/nixos/modules/services/hardware/handheld-daemon.nix b/nixos/modules/services/hardware/handheld-daemon.nix
index e8e283bca894130..d78bae5e9bc4833 100644
--- a/nixos/modules/services/hardware/handheld-daemon.nix
+++ b/nixos/modules/services/hardware/handheld-daemon.nix
@@ -25,6 +25,7 @@ in
};
config = mkIf cfg.enable {
+ services.handheld-daemon.ui.enable = mkDefault true;
environment.systemPackages = [
cfg.package
(mkIf cfg.ui.enable cfg.ui.package)
From 0686e34bb16f8538e28b0795a8e5957ead5abdf0 Mon Sep 17 00:00:00 2001
From: Toast <39011842+toast003@users.noreply.github.com>
Date: Tue, 8 Oct 2024 10:51:00 +0200
Subject: [PATCH 4/6] handheld-daemon-ui: 3.1.1 -> 3.2.1
---
pkgs/by-name/ha/handheld-daemon-ui/package.nix | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/pkgs/by-name/ha/handheld-daemon-ui/package.nix b/pkgs/by-name/ha/handheld-daemon-ui/package.nix
index 81d318d88b5abd3..028ceeb58f05e96 100644
--- a/pkgs/by-name/ha/handheld-daemon-ui/package.nix
+++ b/pkgs/by-name/ha/handheld-daemon-ui/package.nix
@@ -5,11 +5,11 @@
}:
let
pname = "handheld-daemon-ui";
- version = "3.1.1";
+ version = "3.2.1";
src = fetchurl {
url = "https://github.com/hhd-dev/hhd-ui/releases/download/v${version}/hhd-ui.Appimage";
- hash = "sha256-KH01MvcCbvCqjp1UZHnwfh9G3Yh50CO9Ecjl1Y8VY9E=";
+ hash = "sha256-RRXVoeWOO/pR+CAEY0J6Buf/RhA+G0PdxGQVMdAHfwA=";
};
extractedFiles = appimageTools.extractType2 { inherit pname version src; };
in
@@ -18,7 +18,7 @@ appimageTools.wrapType2 {
extraInstallCommands = ''
# Handheld-daemon expects the UI binary to be called hhd-ui
- mv $out/bin/${pname} $out/bin/hhd-ui
+ mv $out/bin/${pname}* $out/bin/hhd-ui
mkdir -p $out/share/applications
substitute ${extractedFiles}/hhd-ui.desktop \
From d602ac7ac385613c082fe5b87b8462b2a2627a3e Mon Sep 17 00:00:00 2001
From: Toast <39011842+toast003@users.noreply.github.com>
Date: Tue, 8 Oct 2024 11:14:00 +0200
Subject: [PATCH 5/6] handheld-daemon-ui: fix desktop item category
---
pkgs/by-name/ha/handheld-daemon-ui/package.nix | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/pkgs/by-name/ha/handheld-daemon-ui/package.nix b/pkgs/by-name/ha/handheld-daemon-ui/package.nix
index 028ceeb58f05e96..1aa8266ece44849 100644
--- a/pkgs/by-name/ha/handheld-daemon-ui/package.nix
+++ b/pkgs/by-name/ha/handheld-daemon-ui/package.nix
@@ -23,7 +23,8 @@ appimageTools.wrapType2 {
mkdir -p $out/share/applications
substitute ${extractedFiles}/hhd-ui.desktop \
$out/share/applications/hhd-ui.desktop \
- --replace-fail "Exec=AppRun" "Exec=hhd-ui"
+ --replace-fail "Exec=AppRun" "Exec=hhd-ui" \
+ --replace-fail "Categories=game;" "Categories=Game;"
cp ${extractedFiles}/usr/share/icons $out/share -r
'';
From 09b2e9dcb32eb3d6eaa4ba0e65cf7102b50d1d13 Mon Sep 17 00:00:00 2001
From: Toast <39011842+toast003@users.noreply.github.com>
Date: Tue, 8 Oct 2024 11:40:05 +0200
Subject: [PATCH 6/6] handheld-daemon-ui: copy icon to correct folder
---
pkgs/by-name/ha/handheld-daemon-ui/package.nix | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/pkgs/by-name/ha/handheld-daemon-ui/package.nix b/pkgs/by-name/ha/handheld-daemon-ui/package.nix
index 1aa8266ece44849..a1131ea5c23d64a 100644
--- a/pkgs/by-name/ha/handheld-daemon-ui/package.nix
+++ b/pkgs/by-name/ha/handheld-daemon-ui/package.nix
@@ -25,7 +25,9 @@ appimageTools.wrapType2 {
$out/share/applications/hhd-ui.desktop \
--replace-fail "Exec=AppRun" "Exec=hhd-ui" \
--replace-fail "Categories=game;" "Categories=Game;"
- cp ${extractedFiles}/usr/share/icons $out/share -r
+ iconDir=$out/share/icons/hicolor/512x512/apps
+ mkdir -p $iconDir
+ cp ${extractedFiles}/hhd-ui.png $iconDir
'';
meta = with lib; {

View file

@ -0,0 +1,61 @@
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(

View file

@ -0,0 +1,49 @@
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
];

View file

@ -1,57 +0,0 @@
{
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;
};
}

View file

@ -1,23 +0,0 @@
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)"

View file

@ -1,17 +0,0 @@
{ 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"
'';
}

View file

@ -0,0 +1,59 @@
{
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
'';
}

View file

@ -0,0 +1,29 @@
{
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];
}

21
pkgs/rstmcpp/default.nix Normal file
View file

@ -0,0 +1,21 @@
{
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
'';
}

View file

@ -5,7 +5,6 @@
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
@ -19,6 +18,8 @@
cleanOnBoot = !config.boot.tmp.useTmpfs;
};
environment.localBinInPath = lib.mkDefault true;
# Set up zram
zramSwap = {
enable = true;
@ -89,16 +90,20 @@
};
# 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 = "Europe/Madrid";
time.timeZone = lib.mkDefault "Europe/Madrid";
services.automatic-timezoned.enable = true;
nixpkgs.overlays = [
flakeSelf.outputs.overlays.default
(
final: prev: {
catppuccin = prev.catppuccin.override {
@ -111,15 +116,6 @@
"grub"
];
};
adw-gtk3 = prev.adw-gtk3.overrideAttrs {
version = "5.3";
src = final.fetchFromGitHub {
owner = "lassekongo83";
repo = "adw-gtk3";
rev = "v5.3";
sha256 = "sha256-DpJLX9PJX1Q8dDOx7YOXQzgNECsKp5uGiCVTX6iSlbI=";
};
};
}
)
];
@ -135,11 +131,14 @@
backupFileExtension = "hm-backup";
useGlobalPkgs = true;
verbose = true;
sharedModules = [flakeSelf.inputs.catppuccin.homeManagerModules.catppuccin];
sharedModules = with flakeSelf; [
inputs.catppuccin.homeModules.catppuccin
inputs.sops-nix.homeManagerModules.sops
];
users.toast = {osConfig, ...}: {
catppuccin.flavor = osConfig.catppuccin.flavor;
catppuccin.accent = osConfig.catppuccin.accent;
home.stateVersion = "24.05";
home.stateVersion = "25.05";
manual = {
manpages.enable = true;
html.enable = true;
@ -152,6 +151,7 @@
publicShare = null; # Disable the public folder
};
};
systemd.user.startServices = true;
};
};
@ -161,8 +161,16 @@
"/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;
};
};
boot.loader.grub.catppuccin.enable = true;
catppuccin.grub.enable = true;
/*
I used to keep the host keys in the repo as a secret, but since I use the
@ -173,9 +181,12 @@
*/
system = {
stateVersion = "24.05";
stateVersion = "25.05";
# Nix on nixos 23.05 does not have dirtyRev
configurationRevision = flakeSelf.sourceInfo.rev or flakeSelf.sourceInfo.dirtyRev or "dirty";
nixos.variant_id = lib.strings.toLower config.networking.hostName;
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";
};
}

View file

@ -1,14 +1,20 @@
{...}: {
home-manager.users.toast.programs.atuin = {
enable = true;
settings = {
enter_accept = false;
workspaces = true;
stats = {
common_prefix = [
"sudo"
","
];
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"
","
];
};
};
};
};

View file

@ -1,8 +1,8 @@
{...}: {
home-manager = {
users.toast.programs.bat = {
enable = true;
catppuccin.enable = true;
users.toast = {
programs.bat.enable = true;
catppuccin.bat.enable = true;
};
};
}

View file

@ -1,10 +1,8 @@
{...}: {
home-manager = {
users.toast = {
programs.btop = {
enable = true;
catppuccin.enable = true;
};
catppuccin.btop.enable = true;
programs.btop.enable = true;
};
};
}

View file

@ -9,10 +9,10 @@
enable = true;
enableBashIntegration = true;
git = true;
icons =
if config.system.nixos.release == "24.05"
then true
else "auto";
icons = "auto";
extraOptions = [
"--group"
];
};
xdg.configFile."eza/theme.yml".source = "${flakeSelf.inputs.eza-themes}/themes/catppuccin.yml";
};

View file

@ -4,9 +4,7 @@
};
home-manager.users.toast = {
programs.fish = {
enable = true;
catppuccin.enable = true;
};
catppuccin.fish.enable = true;
programs.fish.enable = true;
};
}

View file

@ -1,23 +1,25 @@
{...}: {
programs.ssh.knownHosts = {
"[git.everest.tailscale]:4222".publicKey = ''
"[git.toast003.xyz]:4222".publicKey = ''
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKoUcWx56NZ3kqydN3d0gLNz6SlBm1ArkHhqR9Fwd8qs
'';
};
home-manager.users.toast = {
programs.git = {
enable = true;
userName = "Toast";
userEmail = "toast003@tutamail.com";
delta = {
enable = true;
catppuccin.enable = true;
};
extraConfig = {
settings = {
user.name = "toast";
user.email = "toast003@tutamail.com";
init.defaultBranch = "main";
diff.colorMoved = "default";
commit.verbose = "true";
};
};
programs.delta = {
enable = true;
enableGitIntegration = true;
};
catppuccin.delta.enable = true;
};
}

View file

@ -3,7 +3,12 @@
config,
...
}: {
programs.nano.enable = false;
home-manager.users.toast = {
catppuccin.helix = {
enable = true;
useItalics = true;
};
programs.helix = {
enable = true;
defaultEditor = true;
@ -12,10 +17,6 @@
nil
taplo
];
catppuccin = {
enable = true;
useItalics = true;
};
settings = {
editor = {
mouse = true;
@ -28,6 +29,8 @@
select = "Select";
};
indent-guides.render = true;
end-of-line-diagnostics = "hint";
inline-diagnostics.cursor-line = "warning";
};
};
languages = {

View file

@ -1,5 +1,4 @@
{
systemPkgs,
config,
lib,
flakeSelf,
@ -20,6 +19,8 @@
'';
};
system.tools.nixos-option.enable = false;
nix = {
settings = {
auto-optimise-store = true;
@ -56,11 +57,6 @@
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}"];
};
}

View file

@ -3,5 +3,6 @@
./avahi.nix
./tailscale.nix
./syncthing.nix
./kmscon.nix
];
}

View file

@ -0,0 +1,29 @@
{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=";
}
)
];
});
};
}

View file

@ -1,5 +1,6 @@
{
config,
lib,
flakeSelf,
...
}: let
@ -22,44 +23,18 @@ in {
urAccepted = 3;
};
# Set up devices and folders common to every device
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";
};
"imac" = {
name = "iMac";
id = "KRHGSJF-64UXAE2-CNSDV6L-QAUV2HU-JTSIEIC-KSHLCBU-IFIQGDX-K5UCSQR";
compression = "always";
};
};
devices = lib.toast.syncthing.devices;
folders = {
"passwords" = {
label = "KeePassXC Passwords";
id = "rdyaq-ex659";
devices = ["phone" "pc" "steamdeck" "server" "surface" "winmax2" "imac"];
devices = ["phone" "pc" "steamdeck" "server" "surface" "winmax2"];
};
};
};
};
networking.firewall = {
allowedTCPPorts = [22000];
allowedUDPPorts = [22000 21027];
};
}

View file

@ -14,12 +14,22 @@
};
# Set up fonts
fonts.packages = [
(pkgs.nerdfonts.override {fonts = ["Hack" "JetBrainsMono"];})
fonts.packages = with pkgs.nerd-fonts; [
hack
jetbrains-mono
# Japanese fonts
pkgs.noto-fonts-cjk-sans
pkgs.noto-fonts-cjk-serif
];
# 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;
}

View file

@ -4,11 +4,12 @@
./firefox.nix
./keepassxc.nix
./jamesdsp.nix
./vscode.nix
./git.nix
./ssh.nix
./appimage.nix
./mpv.nix
./sysdvr-qt.nix
./spotify.nix
./distrobox.nix
];
}

View file

@ -8,8 +8,52 @@
in {
nixpkgs.overlays = [discordOverlay];
home-manager.users.toast = {
home.packages = with pkgs; [
vesktop
];
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;
};
};
};
};
};
}

View file

@ -0,0 +1,28 @@
{...}: {
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;
};
};
};
};
}

View file

@ -1,55 +1,147 @@
{lib, ...}: {
# 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";
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;
};
# 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";
};
"Preferences" = {
# Enable video hardware acceleration
"media.ffmpeg.vaapi.enabled" = {
"Value" = true;
"Status" = "default";
}
];
# 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";
};
"dom.security.https_only_mode" = {
"Value" = true;
"Status" = "locked";
"@testpilot-containers" = {
installation_mode = "normal_installed";
install_url = "https://addons.mozilla.org/firefox/downloads/latest/multi-account-containers/latest.xpi";
};
"{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";
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";
};
};
"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";
};
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;
};
};
};
"FirefoxHome" = {"SponsoredTopSites" = false;};
};
};
}

View file

@ -1,18 +1,7 @@
{
pkgs,
lib,
...
}: {
{pkgs, ...}: {
home-manager.users.toast = {
programs.git = {
package = pkgs.gitFull;
extraConfig = {
cola = {
icontheme = lib.mkDefault "dark";
};
};
};
home.packages = [pkgs.git-cola];
};
}

View file

@ -1,3 +1,7 @@
{pkgs, ...}: {
users.users.toast.packages = [pkgs.jamesdsp];
home-manager.users.toast = {
home.packages = with pkgs; [
jamesdsp
];
};
}

View file

@ -1,61 +1,32 @@
{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 {
{pkgs, ...}: {
home-manager = {
extraSpecialArgs = {kpxcSettings = kpxcSettings;};
users.toast = {
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
'';
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;
};
};
};

View file

@ -1,4 +1,13 @@
{pkgs, ...}: {
nixpkgs.overlays = [
(
final: prev: {
mpv-unwrapped = prev.mpv-unwrapped.override {
cddaSupport = true;
};
}
)
];
home-manager.users.toast = {
programs.mpv = {
enable = true;
@ -8,6 +17,7 @@
config = {
hwdec = "auto";
cache = true;
cdda-speed = "8";
};
};
};

View file

@ -0,0 +1,5 @@
{pkgs, ...}: {
home-manager.users.toast = {
home.packages = [pkgs.spotify];
};
}

View file

@ -12,6 +12,7 @@
home-manager.users.toast = {
programs.ssh = {
enable = true;
enableDefaultConfig = false;
matchBlocks = {
"everest" = {
host = "toast003.xyz";

View file

@ -1,44 +0,0 @@
{
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";
};
};
};
}

View file

@ -6,5 +6,6 @@
./pipewire.nix
./printing.nix
./networkmanager.nix
./tailscale.nix
];
}

View file

@ -1,56 +1,51 @@
{
config,
lib,
flakeSelf,
...
}: let
tailscaleName = config.services.tailscale.interfaceName;
in {
age.secrets = {
wifiPasswords.file = "${flakeSelf.inputs.secrets}/wifi-passwords.age";
sops.secrets.wifiPasswords = {
sopsFile = "${flakeSelf.inputs.secrets}/wifi-passwords.env";
format = "dotenv";
};
networking.networkmanager = {
enable = true;
unmanaged = [
"interface-name:${tailscaleName}"
];
wifi.macAddress = "random";
ensureProfiles = {
environmentFiles = [config.age.secrets.wifiPasswords.path];
profiles = {
"4g-modem" = {
connection = {
id = "4G Modem";
type = "wifi";
autoconnect-priority = 5;
};
ipv4.method = "auto";
wifi = {
mode = "infrastructure";
ssid = "TP-Link_CCB4";
};
environmentFiles = [config.sops.secrets.wifiPasswords.path];
profiles = with lib.toast.networkManager; {
"4g-modem" = mkWifiProfile {
id = "4G Modem";
priority = 5;
ssid = "TP-Link_CCB4";
wifi-security = {
auth-alg = "open";
key-mgmt = "wpa-psk";
psk = "$MODEM";
};
};
phone = {
connection = {
id = "Phone";
type = "wifi";
autoconnect-priority = 5;
};
ipv4.method = "auto";
wifi = {
mode = "infrastructure";
ssid = "Redmi Note 10 Pro_5197";
};
phone = mkWifiProfile {
id = "Phone";
priority = 5;
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";
};
};
};
};
};

View file

@ -1,23 +1,57 @@
{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";
};
# 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;
}
})
'';
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;
};
};
}

View file

@ -0,0 +1,16 @@
{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;
};
};
};
}

View file

@ -1,6 +1,16 @@
{...}: {
{pkgs, ...}: {
imports = [
./programs
./services
];
system.replaceDependencies.replacements = [
{
oldDependency = pkgs.sdl3;
newDependency = pkgs.sdl3.overrideAttrs {
patches = [
./sdl-keychron-blacklist.patch
];
};
}
];
}

View file

@ -0,0 +1,18 @@
{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];
};
}

View file

@ -2,20 +2,6 @@
home-manager.users.toast = {
home = {
packages = [pkgs.cemu];
file = {
"Games/Isos/Wii U/Kirby and the Rainbow Paintbrush.wux".source = (
pkgs.fetchurl {
url = "http://dl.everest.tailscale/Wii%20U/Kirby%20and%20the%20Rainbow%20Paintbrush.wux";
hash = "sha256-taPGf709N2p3GlqqT92+SbOeD7QNKFUfB9X5urWVQps=";
}
);
"Games/Isos/Wii U/Mario Kary 8.wux".source = (
pkgs.fetchurl {
url = "http://dl.everest.tailscale/Wii%20U/Mario%20Kart%208.wux";
hash = "sha256-O6lOkLUKPZi+FiEWJQQEeiEXOo+GTUecoSpGjE811k0=";
}
);
};
};
};
}

View file

@ -6,6 +6,7 @@
./retroarch.nix
./pcsx2.nix
./cemu.nix
./azahar.nix
];
environment.systemPackages = with pkgs; [
heroic

View file

@ -3,134 +3,113 @@
lib,
...
}: let
ps2-isos = pkgs.symlinkJoin {
name = "ps2-isos";
paths =
lib.lists.forEach [
(pkgs.fetchzip {
url = "https://myrient.erista.me/files/Redump/Sony%20-%20PlayStation%202/007%20-%20Nightfire%20%28USA%29.zip";
hash = "sha256-66Ey0SqC3Tk02Af+xR6rpxYSkO0n83NWYPCt4M3CUWo=";
})
(pkgs.fetchzip {
url = "https://myrient.erista.me/files/Redump/Sony%20-%20PlayStation%202/TimeSplitters%202%20%28USA%29.zip";
hash = "sha256-UPED4/MF9fjTOgiIJy+CSbuO9cJr3CsR/gEquY6GfsU=";
})
]
compress;
};
compress = iso:
pkgs.runCommand "compressed-ps2-isos" {} ''
mkdir $out
cd ${iso}
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/ps2-0200a-20040614.zip";
url = "https://myrient.erista.me/files/Redump/Sony%20-%20PlayStation%202%20-%20BIOS%20Images%20%28DoM%20Version%29/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
];
file."Games/Isos/PS2".source = ps2-isos;
};
home.packages = with pkgs; [
pcsx2
];
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 =
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;
upscale_multiplier = 2;
};
EmuCore = {
EnableDiscordPresence = true;
EnableFastBoot = true;
McdFolderAutoManage = false;
};
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";
};
# 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";
};
"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;
};
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";
};
# 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 = lib.generators.toINI {} {
"PCSX2/gamesettings/SLUS-20579_5B86BB62.ini".text = toPcsx2INI {
"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
@ -150,10 +129,10 @@ in {
};
home-manager.users.toast.xdg.configFile = {
"PCSX2/.stignore".text = ''
cahe
cache
bios
gamesettings
inis/PCSX2.int*
inis/PCSX2.ini*
inis/debuggersettings
inputprofiles
logs

View file

@ -1,27 +1,9 @@
{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 {
{pkgs, ...}: {
home-manager.users.toast = {
home = {
packages = [
(
pkgs.retroarch.override {
pkgs.wrapRetroArch {
cores = with pkgs.libretro; [
snes9x
];
@ -62,15 +44,6 @@ in {
}
)
];
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 = [
@ -78,6 +51,28 @@ in {
"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

View file

@ -1,12 +1,7 @@
{config, ...}: {
environment.systemPackages = with config; [
nur.repos.ataraxiasjel.rpcs3
{pkgs, ...}: {
environment.systemPackages = with pkgs; [
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 = [

View file

@ -5,6 +5,7 @@
}: {
programs.steam = {
enable = true;
localNetworkGameTransfers.openFirewall = true;
# Doubt that I'll use it, but I'll enable it anyways
remotePlay.openFirewall = true;
@ -19,14 +20,15 @@
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];
};
}

View file

@ -0,0 +1,13 @@
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,

View file

@ -11,6 +11,24 @@
devices = ["steamdeck" "server" "pc" "winmax2"];
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";

View file

@ -1,6 +0,0 @@
{...}: {
imports = [
./programs
./gnome.nix
];
}

View file

@ -1,72 +0,0 @@
{
pkgs,
lib,
flakeSelf,
...
}: {
services = {
xserver = {
displayManager.gdm.enable = true;
desktopManager.gnome.enable = true;
};
gnome.gnome-browser-connector.enable = true;
};
qt = {
enable = true;
platformTheme = "gnome";
style = "adwaita-dark";
};
# Manage this with home-manager
services.gnome.gnome-keyring.enable = lib.mkForce false;
home-manager.sharedModules = [
{
services.gnome-keyring.enable = true;
}
];
# Extensions
environment.systemPackages = with pkgs.gnomeExtensions; [
appindicator
dash-to-dock
panel-workspace-scroll
];
home-manager.users.toast = {
gtk = {
enable = true;
theme = {
name = "adw-gtk3-dark";
package = pkgs.adw-gtk3;
};
cursorTheme = {
name = "Kasane Teto";
package = flakeSelf.outputs.packages.x86_64-linux.kasane-teto-cursor;
};
};
services.gnome-keyring.components = ["pkcs11" "secrets"];
dconf.settings = {
"org/gnome/shell" = {
enabled-extensions = [
"appindicatorsupport@rgcjonas.gmail.com"
"dash-to-dock@micxgx.gmail.com"
"panel-workspace-scroll@polymeilex.github.io"
];
favorite-apps = ["firefox.desktop" "com.raggesilver.BlackBox.desktop" "org.gnome.Nautilus.desktop" "android-studio.desktop"];
};
"org/gnome/desktop/interface" = {
color-scheme = "prefer-dark";
};
"org/gnome/desktop/wm/preferences" = {
resize-with-right-button = true;
};
"org/gnome/mutter" = {
dynamic-workspaces = true;
edge-tiling = true;
};
};
};
}

View file

@ -1,33 +0,0 @@
{pkgs, ...}: {
programs.gnome-terminal.enable = false;
environment = with pkgs; {
gnome.excludePackages = [gnome-console];
systemPackages = [
blackbox-terminal
nautilus-open-in-blackbox
];
};
home-manager.users.toast = {
lib,
pkgs,
...
}: {
home.file.".local/share/blackbox/schemes".source =
(pkgs.fetchgit {
url = "https://github.com/catppuccin/tilix.git";
hash = "sha256-jWnxEtoqqqitHsaDErQNNYjv8DBcrJD0XeIKNopbO3c=";
})
+ /themes;
dconf.settings = with lib.hm.gvariant; {
"com/raggesilver/BlackBox" = {
# Dark mode
style-preference = mkUint32 2;
theme-dark = "Catppuccin Mocha";
# Default working directory is home folder
working-directory-mode = mkUint32 1;
custom-font = "JetBrainsMono Nerd Font Mono 12";
};
};
};
}

View file

@ -1,11 +0,0 @@
{pkgs, ...}: {
imports = [
./blackbox.nix
./firefox.nix
./nautilus.nix
];
environment.systemPackages = with pkgs; [
gnome-tweaks
dconf-editor
];
}

View file

@ -1,22 +0,0 @@
{pkgs, ...}: let
firefox-gnome-theme = pkgs.fetchFromGitHub {
owner = "rafaelmardojai";
repo = "firefox-gnome-theme";
rev = "v129";
hash = "sha256-MOE9NeU2i6Ws1GhGmppMnjOHkNLl2MQMJmGhaMzdoJM=";
};
profile-location = ".mozilla/firefox/jdnxpg97.temp";
in {
home-manager.users.toast = {
programs.firefox = {
enableGnomeExtensions = true;
};
home.file."${profile-location}/chrome".source = firefox-gnome-theme;
};
programs.firefox = {
autoConfig = ''
lockPref("toolkit.legacyUserProfileCustomizations.stylesheets",true);
lockPref("svg.context-properties.content.enabled",true);
'';
};
}

View file

@ -1,15 +0,0 @@
{pkgs, ...}: {
environment.systemPackages = with pkgs; [
nautilus-python
];
home-manager.users.toast = {
dconf.settings = {
"org/gnome/preferences" = {
date-time-format = "detailed";
show-create-link = true;
show-delete-permanently = true;
};
};
};
}

View file

@ -3,5 +3,6 @@
./plasma.nix
./sddm.nix
./programs
./patches
];
}

View file

@ -0,0 +1,29 @@
{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;
}
)
];
}

View file

@ -1,96 +0,0 @@
From fa8f6054c992f8f28781933a23bccb91b3341d6e Mon Sep 17 00:00:00 2001
From: Christian Muehlhaeuser <muesli@gmail.com>
Date: Tue, 8 Nov 2022 08:55:14 +0100
Subject: [PATCH] Add support for OSC-52 write-only clipboard access
Implements OSC-52 write-only clipboard access. Already supported by
a wide range of other terminals, including alacritty, foot, kitty,
urxvt, wezterm, xterm, and others.
I've intentionally omitted read access to the clipboard as that
comes with several security concerns, which should be discussed
first.
---
src/Vt102Emulation.cpp | 36 ++++++++++++++++++++++++++++++++++++
src/Vt102Emulation.h | 2 +-
2 files changed, 37 insertions(+), 1 deletion(-)
diff --git a/src/Vt102Emulation.cpp b/src/Vt102Emulation.cpp
index 49b23c77d4..3b1e389106 100644
--- a/src/Vt102Emulation.cpp
+++ b/src/Vt102Emulation.cpp
@@ -12,8 +12,10 @@
#include <cstdio>
// Qt
+#include <QApplication>
#include <QAudioOutput>
#include <QBuffer>
+#include <QClipboard>
#include <QEvent>
#include <QKeyEvent>
#include <QTimer>
@@ -1153,6 +1155,40 @@ void Vt102Emulation::processSessionAttributeRequest(const int tokenSize, const u
connect(action, &KNotificationAction::activated, this, [this, notification]() {
_currentScreen->currentTerminalDisplay()->notificationClicked(notification->xdgActivationToken());
});
+ }
+ if (attribute == Clipboard) {
+ // Clipboard
+ QStringList params = value.split(QLatin1Char(';'));
+ if (params.length() == 0) {
+ return;
+ }
+
+ bool clipboard = false;
+ bool selection = false;
+ if (params[0].isEmpty() || params[0].contains(QLatin1Char('c')) || params[0].contains(QLatin1Char('s'))) {
+ clipboard = true;
+ }
+ if (params[0].contains(QLatin1Char('p'))) {
+ selection = true;
+ }
+
+ if (params.length() == 2) {
+ // Copy to clipboard
+ if (clipboard) {
+ QApplication::clipboard()->setText(QString::fromUtf8(QByteArray::fromBase64(params[1].toUtf8())), QClipboard::Clipboard);
+ }
+ if (selection) {
+ QApplication::clipboard()->setText(QString::fromUtf8(QByteArray::fromBase64(params[1].toUtf8())), QClipboard::Selection);
+ }
+ } else {
+ // Clear clipboard
+ if (clipboard) {
+ QApplication::clipboard()->clear(QClipboard::Clipboard);
+ }
+ if (selection) {
+ QApplication::clipboard()->clear(QClipboard::Selection);
+ }
+ }
return;
}
diff --git a/src/Vt102Emulation.h b/src/Vt102Emulation.h
index 665e9f026d..3456e068d3 100644
--- a/src/Vt102Emulation.h
+++ b/src/Vt102Emulation.h
@@ -126,7 +126,6 @@ private:
void resetModes();
void resetTokenizer();
-#define MAX_TOKEN_LENGTH 256 // Max length of tokens (e.g. window title)
void addToCurrentToken(uint cc);
int tokenBufferPos;
@@ -183,6 +182,7 @@ private:
enum osc {
// https://invisible-island.net/xterm/ctlseqs/ctlseqs.html#h2-Operating-System-Commands
ReportColors = 4,
+ Clipboard = 52,
ResetColors = 104,
// https://gitlab.freedesktop.org/Per_Bothner/specifications/blob/master/proposals/semantic-prompts.md
SemanticPrompts = 133,
--
GitLab

File diff suppressed because it is too large Load diff

View file

@ -1,48 +0,0 @@
From 626a52ae30dcda0ca407d1de02e30fcf5c109862 Mon Sep 17 00:00:00 2001
From: Tem PQD <variable_valuables761@simplelogin.com>
Date: Sun, 27 Oct 2024 03:54:44 +0000
Subject: [PATCH] applets/taskmanager: Make group indicator icon follow accent
color
The green plus icon is pretty eye-catching, and normally green plus buttons indicate something is going to be added or created. Change this to follow the user-selected color scheme, also matching the focus/active indicator color.
---
src/desktoptheme/breeze/widgets/tasks.svg | Bin 78569 -> 78717 bytes
1 file changed, 0 insertions(+), 0 deletions(-)
diff --git a/src/desktoptheme/breeze/widgets/tasks.svg b/src/desktoptheme/breeze/widgets/tasks.svg
index b76d1a345fe59ca48cc3c52de53495202734d00f..c60707355f082749661ffc059744a0f2b0f94eee 100644
--- a/src/desktoptheme/breeze/widgets/tasks.svg
+++ b/src/desktoptheme/breeze/widgets/tasks.svg
@@ -952,25 +952,25 @@
</g>
<g id="group-expander-bottom" transform="matrix(1.2222222 0 0 1.2222222 -97 -16.777778)">
<path id="path4927" d="m211.5 89.000002a4.4999957 4.5000003 0 0 0-4.5 4.5 4.4999957 4.5000003 0 0 0 4.5 4.5 4.4999957 4.5000003 0 0 0 4.5-4.5 4.4999957 4.5000003 0 0 0-4.5-4.5z" opacity=".25"/>
- <path id="path4931" d="m211.50001 89.818184a3.6818164 3.6818182 0 0 0-3.68182 3.681818 3.6818164 3.6818182 0 0 0 3.68182 3.681818 3.6818164 3.6818182 0 0 0 3.68182-3.681818 3.6818164 3.6818182 0 0 0-3.68182-3.681818z" fill="#2ecc71"/>
+ <path id="path4931" class="ColorScheme-ButtonFocus" d="m211.50001 89.818184a3.6818164 3.6818182 0 0 0-3.68182 3.681818 3.6818164 3.6818182 0 0 0 3.68182 3.681818 3.6818164 3.6818182 0 0 0 3.68182-3.681818 3.6818164 3.6818182 0 0 0-3.68182-3.681818z" fill="currentColor"/>
<path id="path4930" d="m210.67561 91.045464.00097 1.630631-1.63462.01145.007 1.626089 1.63908.0091-.006 1.634313 1.62575-.005.007-1.631618 1.63976-.000027v-1.632877h-1.64636l.0204-1.642077z" opacity=".25"/>
<path id="path4949" d="m211.08482 91.454555.00097 1.630633-1.63474.01145.007.807899 1.6392.0091-.006 1.634319.8077-.005.007-1.631624 1.63951-.000027v-.814687h-1.64611l.0204-1.642079z" fill="#fff"/>
</g>
<g id="group-expander-left" transform="matrix(1.2222222 0 0 1.2222222 -74.999995 -16.777778)">
<path id="path4934" d="m211.5 89.000002a4.4999957 4.5000003 0 0 0-4.5 4.5 4.4999957 4.5000003 0 0 0 4.5 4.5 4.4999957 4.5000003 0 0 0 4.5-4.5 4.4999957 4.5000003 0 0 0-4.5-4.5z" opacity=".25"/>
- <path id="path4938" d="m211.50001 89.818184a3.6818164 3.6818182 0 0 0-3.68182 3.681818 3.6818164 3.6818182 0 0 0 3.68182 3.681818 3.6818164 3.6818182 0 0 0 3.68182-3.681818 3.6818164 3.6818182 0 0 0-3.68182-3.681818z" fill="#2ecc71"/>
+ <path id="path4938" class="ColorScheme-ButtonFocus" d="m211.50001 89.818184a3.6818164 3.6818182 0 0 0-3.68182 3.681818 3.6818164 3.6818182 0 0 0 3.68182 3.681818 3.6818164 3.6818182 0 0 0 3.68182-3.681818 3.6818164 3.6818182 0 0 0-3.68182-3.681818z" fill="currentColor"/>
<path id="path4940" d="m210.67561 91.045464.00097 1.630631-1.63462.01145.007 1.626089 1.63908.0091-.006 1.634313 1.62575-.005.007-1.631618 1.63976-.000027v-1.632877h-1.64636l.0204-1.642077z" opacity=".25"/>
<path id="path4942" d="m211.08482 91.454555.00097 1.630633-1.63474.01145.007.807899 1.6392.0091-.006 1.634319.8077-.005.007-1.631624 1.63951-.000027v-.814687h-1.64611l.0204-1.642079z" fill="#fff"/>
</g>
<g id="group-expander-top" transform="matrix(1.2222222 0 0 1.2222222 -97 1.222222)">
<path id="path4946" d="m211.5 89.000002a4.4999957 4.5000003 0 0 0-4.5 4.5 4.4999957 4.5000003 0 0 0 4.5 4.5 4.4999957 4.5000003 0 0 0 4.5-4.5 4.4999957 4.5000003 0 0 0-4.5-4.5z" opacity=".25"/>
- <path id="path4950" d="m211.50001 89.818184a3.6818164 3.6818182 0 0 0-3.68182 3.681818 3.6818164 3.6818182 0 0 0 3.68182 3.681818 3.6818164 3.6818182 0 0 0 3.68182-3.681818 3.6818164 3.6818182 0 0 0-3.68182-3.681818z" fill="#2ecc71"/>
+ <path id="path4950" class="ColorScheme-ButtonFocus" d="m211.50001 89.818184a3.6818164 3.6818182 0 0 0-3.68182 3.681818 3.6818164 3.6818182 0 0 0 3.68182 3.681818 3.6818164 3.6818182 0 0 0 3.68182-3.681818 3.6818164 3.6818182 0 0 0-3.68182-3.681818z" fill="currentColor"/>
<path id="path4952" d="m210.67561 91.045464.00097 1.630631-1.63462.01145.007 1.626089 1.63908.0091-.006 1.634313 1.62575-.005.007-1.631618 1.63976-.000027v-1.632877h-1.64636l.0204-1.642077z" opacity=".25"/>
<path id="path4954" d="m211.08482 91.454555.00097 1.630633-1.63474.01145.007.807899 1.6392.0091-.006 1.634319.8077-.005.007-1.631624 1.63951-.000027v-.814687h-1.64611l.0204-1.642079z" fill="#fff"/>
</g>
<g id="group-expander-right" transform="matrix(1.2222222 0 0 1.2222222 -74.999995 1.222222)">
<path id="path4958" d="m211.5 89.000002a4.4999957 4.5000003 0 0 0-4.5 4.5 4.4999957 4.5000003 0 0 0 4.5 4.5 4.4999957 4.5000003 0 0 0 4.5-4.5 4.4999957 4.5000003 0 0 0-4.5-4.5z" opacity=".25"/>
- <path id="path4962" d="m211.50001 89.818184a3.6818164 3.6818182 0 0 0-3.68182 3.681818 3.6818164 3.6818182 0 0 0 3.68182 3.681818 3.6818164 3.6818182 0 0 0 3.68182-3.681818 3.6818164 3.6818182 0 0 0-3.68182-3.681818z" fill="#2ecc71"/>
+ <path id="path4962" class="ColorScheme-ButtonFocus" d="m211.50001 89.818184a3.6818164 3.6818182 0 0 0-3.68182 3.681818 3.6818164 3.6818182 0 0 0 3.68182 3.681818 3.6818164 3.6818182 0 0 0 3.68182-3.681818 3.6818164 3.6818182 0 0 0-3.68182-3.681818z" fill="currentColor"/>
<path id="path4964" d="m210.67561 91.045464.00097 1.630631-1.63462.01145.007 1.626089 1.63908.0091-.006 1.634313 1.62575-.005.007-1.631618 1.63976-.000027v-1.632877h-1.64636l.0204-1.642077z" opacity=".25"/>
<path id="path4966" d="m211.08482 91.454555.00097 1.630633-1.63474.01145.007.807899 1.6392.0091-.006 1.634319.8077-.005.007-1.631624 1.63951-.000027v-.814687h-1.64611l.0204-1.642079z" fill="#fff"/>
</g>
--
GitLab

View file

@ -0,0 +1,6 @@
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

View file

@ -0,0 +1,94 @@
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 tasks 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 tasks windows"),
+ i18nc("@item:inlistbox Part of a sentence: 'Scrolling behavior adjusts the hovered tasks volume'", "Adjusts the hovered tasks 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

View file

@ -0,0 +1,78 @@
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

View file

@ -0,0 +1,66 @@
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

View file

@ -0,0 +1,37 @@
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

View file

@ -0,0 +1,5 @@
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

View file

@ -0,0 +1,704 @@
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

View file

@ -0,0 +1,129 @@
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

View file

@ -39,32 +39,6 @@ in {
qt.enable = true;
nixpkgs.overlays = [
(
final: prev: {
kdePackages = prev.kdePackages.overrideScope (
kFinal: kPrev: {
libplasma = kPrev.libplasma.overrideAttrs {
patches = [
../kde/patches/libplasma-pr1214.patch
];
};
kwin = kPrev.kwin.overrideAttrs {
patches = kPrev.kwin.patches ++ [
../kde/patches/kwin-pr6406.patch
];
};
konsole = kPrev.konsole.overrideAttrs {
patches = [
../kde/patches/konsole-pr767.patch
];
};
}
);
}
)
];
# GTK apps need dconf to grab the correct theme on Wayland
programs.dconf.enable = true;
@ -75,10 +49,13 @@ in {
plasma-vault
];
# Allows controlling brightness on external monitors
hardware.i2c.enable = true;
# Plasma configs should be on all users
home-manager.sharedModules = [
{
imports = [flakeSelf.inputs.plasma-manager.homeManagerModules.plasma-manager];
imports = [flakeSelf.inputs.plasma-manager.homeModules.plasma-manager];
home.packages = [
(
pkgs.catppuccin-kde.override {
@ -98,21 +75,35 @@ in {
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";}];
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 = [
{
@ -123,6 +114,7 @@ in {
{
kickoff = {
icon = "nix-snowflake-white";
settings.General.switchCategoryOnHover = true;
};
}
"org.kde.plasma.pager"
@ -138,17 +130,7 @@ in {
];
}
];
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;

View file

@ -0,0 +1,16 @@
{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"
]
);
};
};
};
}

View file

@ -1,4 +1,4 @@
{...}: {
{pkgs, ...}: {
imports = [
./kate.nix
./firefox.nix
@ -6,9 +6,12 @@
# Neochat depends on olm which is unsafe now
# ./neochat.nix
./konsole.nix
./git.nix
./kwin.nix
./baloo.nix
./spectacle.nix
];
# Enable the kde partition manager
programs.partition-manager.enable = true;
programs.steam.extraPackages = [pkgs.kdePackages.breeze];
}

View file

@ -1,30 +1,35 @@
{...}: {
# 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";
{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";
};
};
};
};
"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";
};
};
};
};
}
];
}

View file

@ -1,11 +0,0 @@
{...}: {
home-manager.users.toast = {
programs.git = {
extraConfig = {
cola = {
terminal = "konsole";
};
};
};
};
}

View file

@ -1,5 +1,5 @@
{pkgs, ...}: {
environment.systemPackages = [pkgs.kate];
environment.systemPackages = [pkgs.kdePackages.kate];
# Use kwrite to open text files, and kate if I'm developing stuff
xdg.mime.defaultApplications = {

View file

@ -1,13 +1,5 @@
{pkgs, ...}: let
catppuccinKonsole =
pkgs.fetchFromGitHub {
owner = "catppuccin";
repo = "konsole";
# Latest commit is 7d86b8a1e56e58f6b5649cdaac543a573ac194ca
rev = "main";
hash = "sha256-EwSJMTxnaj2UlNJm1t6znnatfzgm1awIQQUF3VPfCTM=";
}
+ /Catppuccin-Mocha.colorscheme;
{flakeSelf, ...}: let
catppuccinKonsole = "${flakeSelf.inputs.catppuccin-konsole}/themes/catppuccin-mocha.colorscheme";
in {
home-manager.users.toast = {
xdg.dataFile = {

View file

@ -0,0 +1,33 @@
{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"];
};
};
};
};
}

View file

@ -6,7 +6,7 @@
}: {
# Only install skanpage if scanning is set up
config = lib.mkIf config.hardware.sane.enable {
environment.systemPackages = [pkgs.skanpage];
environment.systemPackages = [pkgs.kdePackages.skanpage];
};
# environment.systemPackages = if config.hardware.sane.enable == true then [ pkgs.skanpage ] else [];
}

View file

@ -0,0 +1,24 @@
{...}: {
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
];
});
}
);
}
)
];
}

View file

@ -1,12 +0,0 @@
{pkgs, ...}: {
imports = [
./programs
./services
];
home-manager.users.toast.home.packages = with pkgs; [
jetbrains.idea-ultimate
jetbrains.webstorm
nodejs
insomnia
];
}

View file

@ -1,7 +0,0 @@
{pkgs, ...}: {
programs.adb.enable = true;
users.users.toast.extraGroups = ["adbusers"];
home-manager.users.toast.home.packages = with pkgs; [
android-studio
];
}

View file

@ -1,5 +0,0 @@
{...}: {
imports = [
./android-studio.nix
];
}

View file

@ -1,7 +0,0 @@
{...}: {
imports = [
./networkmanager.nix
./syncthing.nix
./mysql.nix
];
}

View file

@ -1,33 +0,0 @@
{
config,
pkgs,
lib,
...
}: {
services.mysql = {
enable = true;
package = pkgs.mysql84;
user = "toast";
group = "users";
};
# Don't autostart MySQL
systemd.services.mysql.wantedBy = lib.mkForce [];
security.polkit.extraConfig = ''
polkit.addRule(function(action, subject) {
if (
action.id == "org.freedesktop.systemd1.manage-units" &&
action.lookup("unit") == "mysql.service" &&
subject.user == "${config.services.mysql.user}"
)
{
return polkit.Result.YES;
}
})
'';
environment.systemPackages = with pkgs; [
# mycli
];
}

View file

@ -1,19 +0,0 @@
{...}: {
networking.networkmanager.ensureProfiles = {
profiles."school-wifi" = {
connection = {
id = "Progresa";
type = "wifi";
};
wifi = {
mode = "infrastructure";
ssid = ".Progresa Invitados";
};
wifi-security = {
auth-alg = "open";
key-mgmt = "wpa-psk";
psk = "$SCHOOL";
};
};
};
}

Some files were not shown because too many files have changed in this diff Show more