Compare commits

...

162 Commits

Author SHA1 Message Date
98c27ce238 ssh: Fix issues with trying different keys 2023-12-27 00:54:00 +01:00
86ce0ed9e6 nishimiya: Changes 2023-09-18 13:10:15 +02:00
91910ec46e Commits 2023-09-17 13:35:43 +02:00
d2426b4291 gaming: Allow gamescope to run with CAPSYSNICE 2023-09-17 13:35:25 +02:00
7c1113cd09 flake: Expose the sandboxed prismlauncher 2023-08-11 17:43:15 +02:00
4b6290c3c7 git: Use the GPG key on my Yubikey for signing commits 2023-07-23 21:06:10 +02:00
650d566f8d packages: Remove the patched Gajim 2023-07-21 20:11:38 +02:00
45e93b353c miku: Enable YubiKey 2023-07-21 20:03:01 +02:00
dd43d48900 miku: Remove some packages 2023-07-19 16:23:24 +02:00
5e17268044 lib: Add nerdfonts for nvim 2023-07-19 16:23:24 +02:00
6699d5488a yubikey: New module 2023-07-19 16:23:10 +02:00
e429bdb946 cups: Fix scanning on hplip printers 2023-07-19 14:01:58 +02:00
5d868ad1f8 l 2023-07-19 14:01:24 +02:00
0a36b0acb5 lol 2023-07-19 14:01:24 +02:00
dffafa8973 nishimiya: Changes 2023-07-19 14:01:24 +02:00
d0bd1ca8fa nvim: Configure it with everything needed for LazyVim 2023-07-18 21:46:28 +02:00
1346cb93af retroatch: Add pcsx2 2023-04-30 15:23:18 +02:00
1e24a7d6bc nishimiya: Load aesni-intel 2023-04-30 15:23:04 +02:00
b58d5eb12f miku: Disable keypad lights with gamemode 2023-04-30 15:22:52 +02:00
a193b02ce0 base: Fix renamed option 2023-04-15 19:09:57 +02:00
c252c831b5 Update gajim 2023-04-15 19:09:05 +02:00
30bb872ed9 miku: Update 2023-04-08 17:30:39 +02:00
b716c8a288 Changes 2023-04-01 00:12:40 +02:00
1de2a362d7 base: Re-enable timesyncd 2023-03-01 13:36:16 +01:00
d5262b0a7f gamemode: "Pause" fcitx while gaming 2023-02-22 13:35:28 +01:00
111b999b0a Update system 2023-02-17 15:07:55 +01:00
f5ccc92e4e miku(mpv): Also play on DP-2 2023-01-26 16:26:49 +01:00
dc03ca2b72 sandbox: Give lutris access to UPlay's directory 2023-01-19 15:18:23 +01:00
81ed9c5b20 gaming: Try to wrap gamescope 2023-01-19 15:18:01 +01:00
53ed01e019 firefox: Remove HTTPS Everywhere 2023-01-19 15:17:44 +01:00
6931e1dde0 Switch fcitx with fcitx5 2023-01-19 15:17:31 +01:00
7b463d06ff Switch SDDM to greetd 2023-01-19 15:17:15 +01:00
6f0028d75e Update flake 2022-12-31 13:01:38 +01:00
1f4af9c3ba steam: Fix issue with steam-run 2022-11-12 22:00:10 +01:00
524f2bdc9d flake: Update 2022-11-12 21:59:48 +01:00
3ad54e380d android: Set ANDROID_HOME 2022-11-12 21:59:36 +01:00
06e334c973 flake: Update 2022-11-11 19:26:03 +01:00
13576dd70e obs: Update pipewire-audio-capture 2022-10-28 16:45:14 +02:00
faa16e68bb plasma: Remove bismuth 2022-10-28 16:44:58 +02:00
d2bfda8ab2 plasma: Add ark and kcalc 2022-10-21 16:14:45 +02:00
7816818f0c flake: Update for Plasma 5.26 2022-10-16 00:41:11 +02:00
ff05ad7e21 Update flake 2022-10-15 16:25:00 +02:00
62af5ec3c5 lol 2022-10-15 12:06:07 +02:00
16dc290cfa gnome: Add gnome-console, geary, calendar and gedit 2022-09-14 17:26:04 +02:00
52b5079e30 flake: Update 2022-09-13 08:39:12 +02:00
5f2172f2a5 plasma: Attempt to use ksshaskpass 2022-08-06 14:10:47 +02:00
8a459476ac flake: Update 2022-08-06 14:10:24 +02:00
885fb6feae miku: Disable mitigations 2022-08-05 21:17:22 +02:00
5de5e206d2 miku: Fix abi.vsyscall32 2022-07-17 16:54:59 +02:00
406a144bd5 miku: Add abi.vsyscall32=0 to the kernel commandline 2022-07-16 22:03:00 +02:00
79de594c6c packages: Add a hacky apparmor-utils 2022-07-16 22:02:37 +02:00
8f646f9161 plasma: Remove kde-rounded-corners 2022-07-15 12:50:38 +02:00
d3a8d6de4c gaming: Enable gamescope 2022-07-15 12:50:15 +02:00
4f848d384c plasma: Re-add kde-rounded-corners 2022-07-13 22:20:37 +02:00
a27748f63b plasma: Add sddm-sugar-dark as a theme 2022-07-13 20:19:53 +02:00
4ffded8c0b plasma: move to desktop 2022-07-13 19:37:41 +02:00
65c9e0babc miku: Enable Plasma 2022-07-13 19:35:32 +02:00
df1043ee38 Changes 2022-07-09 18:18:15 +02:00
fe60c609e6 changes 2022-06-30 19:59:45 +02:00
5df4e2c43d lapce: Fix 2022-06-17 10:11:39 +02:00
f6ab3c0b60 plasma: Restructure 2022-06-17 10:11:31 +02:00
ea5a54e7b3 zsh: syntax-highlighting causes issues 2022-06-15 19:45:58 +02:00
d8126257f5 packages: Remove gamescope 2022-06-15 19:44:01 +02:00
eb8670c04f meta: Dump changes 2022-06-15 19:44:01 +02:00
136c3a2340 users: Add SSH key 2022-06-12 22:29:43 +02:00
695b96ecfe virtualisation: Install virt-manager 2022-06-12 22:29:43 +02:00
4c82f65024 nishimyia: Enable direnv 2022-06-12 22:29:43 +02:00
218ef66c4e alacritty: Fix deprecation 2022-06-05 13:45:01 +02:00
22cbe83779 sway: Add wdisplays 2022-05-30 14:53:22 +02:00
b0edd2e270 gaming: Use custom gamescope 2022-05-30 14:53:12 +02:00
d60892df98 packages: Add gamescope 2022-05-30 14:52:56 +02:00
1d630ebc57 logiops: Fix filename 2022-05-30 14:52:07 +02:00
0e806bab3a modules: Add the logiops module 2022-05-29 19:07:00 +02:00
a23ed5c7bb flake: Update 2022-05-29 19:06:40 +02:00
ef61d0d30b logiops: Add logiops 2022-05-29 19:06:32 +02:00
06bd99cf68 zsh: Fix nixos-rebuild-switch 2022-05-23 23:03:40 +02:00
70ec18666d zsh: Work around nix weirdness 2022-05-22 20:42:32 +02:00
32ab8d5ab2 OBS: Add obs 2022-05-22 20:42:18 +02:00
55dcc4e3dc Update flake 2022-05-13 13:37:41 +02:00
230335431c security: Initial commit 2022-05-13 12:51:12 +02:00
b8d71e5127 overlays/simple: Fix issue with League of Legends 2022-05-13 12:51:00 +02:00
0b01d1b6f7 sandbox: Give Steam and Lutris more access 2022-05-13 12:50:06 +02:00
1925169852 plasma: Add rounded corners 2022-05-13 12:49:13 +02:00
ffaf192563 input-remapper: Remove as it is upstream 2022-05-11 15:24:14 +02:00
648da7e05a meta: Various gaming fixes
- Fix Vortex Mod Manager by giving it access to /mnt/Storage (Bad, but
  well)
- Add package: razer-cli
- Tell gamemode to put my GPU in performance mode
- Tell gamemode to enable or disable keyboard backlight
- Switch the miku kernel to Zen
2022-05-03 15:05:19 +02:00
1361348bf1 cups: Add module 2022-04-27 13:10:48 +02:00
59f061711a sandbox: Fix icon 2022-04-26 17:20:56 +02:00
30e3d53918 gnome: Add mousai 2022-04-26 17:14:40 +02:00
b81e9537c0 gaming: Use wine64 and wine32 2022-04-26 17:14:40 +02:00
b63b2e0d9c lib: Improve the sandbox derivation 2022-04-26 17:14:40 +02:00
a34bf2d319 emacs: Fix config file 2022-04-26 17:14:40 +02:00
5be8612163 direnv: Init 2022-04-26 17:14:40 +02:00
4ccbed71a8 mashu: Enable gnome 2022-04-23 13:36:02 +02:00
961278b2fe mashu: Change kernel 2022-04-23 13:34:35 +02:00
ef8764f5be meta: Update flake 2022-04-23 13:22:03 +02:00
03a8ad070f packages: Bump python-nbxmpp 2022-04-23 12:13:30 +02:00
976ee57078 mpv: Fix mpv with Gnome 2022-04-07 19:54:10 +02:00
e3265f95ad mpv: Remove unpackaged plugin 2022-04-05 19:22:54 +02:00
72b7d257dc miku: Remove vlc and handbrake 2022-04-05 19:22:36 +02:00
866535045f flake: Update flakes 2022-04-05 19:22:18 +02:00
95a96882b0 meta: Allow the playback of Bluray disks 2022-03-31 16:53:42 +02:00
f981ff5bf6 plasma: Remove unused comment 2022-03-28 18:55:10 +02:00
2fc002db23 miku: kasts is lagging a lot 2022-03-28 18:54:54 +02:00
13fcaa6622 base: Add useful packages 2022-03-28 18:48:05 +02:00
64490404ed gaming: Add melonDS 2022-03-27 19:31:00 +02:00
5074740992 meta: Dump changes 2022-03-27 12:30:13 +02:00
d852bcba8e miku: Add Spotify 2022-03-23 15:12:36 +01:00
d8c7f5ff14 plasma: Small fixes 2022-03-21 15:25:03 +01:00
4552edb5f0 mashu: Enable plasma-mobile 2022-03-21 15:28:13 +01:00
c32dea4c09 flake: Update flake 2022-03-21 13:38:14 +01:00
32c395c33a Stuff 2022-03-19 15:19:11 +01:00
c5f3a6e389 Update flake 2022-03-19 15:18:03 +01:00
b881c964c1 surface: Install rnote 2022-02-25 22:21:56 +01:00
fbb525b7f6 base: Fix small things 2022-02-24 11:25:43 +01:00
dea5300fb6 surface: Add tablet-mode 2022-02-24 11:06:07 +01:00
2fc770f6ff plasma: Add kde-rounded-corners 2022-02-24 11:04:17 +01:00
50a61cad90 discord-system-electron: Bump version 2022-02-24 11:03:58 +01:00
06984c42a0 flake: Update nixos-unstable 2022-02-18 20:18:56 +01:00
b8d905ba8f discord: Bump to 0.0.17 2022-02-17 19:57:49 +01:00
fb4815a7dd miku: Do a lot of things 2022-02-14 18:34:04 +01:00
1fa05e9822 virtiofsd: Implement 2022-02-11 14:01:52 +01:00
91298bbfe5 sublime: Remove the no-test version 2022-02-02 20:35:20 +01:00
c0b061a79d input-remapper: Rename from key-mapper 2022-02-02 15:55:38 +01:00
e80232bb39 gaming: Add gaming-specific packages and settings 2022-02-02 12:08:36 +01:00
3bc1c21b4c virtualisation: Re-enable evdev-proxy 2022-02-02 12:08:03 +01:00
80d73a8aad gnome: Remove my own packages 2022-02-02 12:07:26 +01:00
4cfcb71961 sandbox: Add spotify 2022-01-17 21:39:04 +01:00
8814296c53 flake: Revert to nixos-unstable 2022-01-17 21:38:45 +01:00
ed1f4f4fc6 Add psst 2022-01-14 18:08:47 +01:00
9b8e0c4fd7 packages: Init payload-dumper 2022-01-12 20:25:18 +01:00
5f0a413b90 plasma: Add kate 2022-01-12 17:34:44 +01:00
57d3450d0d lib: Add Taihou 2022-01-12 17:34:44 +01:00
364945f5f6 lol 2022-01-12 17:35:17 +01:00
94234b39c9 flakes: Update 2022-01-11 22:59:39 +01:00
6ef4734277 waybar: Change theme (TODO: Credit) 2022-01-11 22:57:08 +01:00
1c11f29234 nishimiya: Add office software 2022-01-11 22:57:07 +01:00
fcfedb0f8b office: Add office software 2022-01-11 22:56:29 +01:00
4593f2dd95 base: Add base utilities 2022-01-06 19:04:28 +01:00
e9ecfc7879 mashu: Remove import 2022-01-06 16:50:22 +01:00
5ff899fe34 modules: Fix imports 2022-01-06 16:48:51 +01:00
01a0b56321 office: Add module 2022-01-06 16:47:30 +01:00
c69aeddb1e nishimiya: Fix up 2022-01-06 14:34:44 +01:00
8dd411e6d9 surface: Fix issues with config 2022-01-06 14:27:12 +01:00
f72a872dff host: Use nixos-hardware
- Remove iptsd. It is packaged upstream
2022-01-06 14:15:28 +01:00
9c3d6b0de4 gnome: Enable gvfs 2022-01-06 13:25:51 +01:00
a7ce2b9372 flake: Bump nixpkgs 2022-01-06 13:25:26 +01:00
a94e9bcef3 gajim: Bump 2022-01-06 13:24:59 +01:00
b03dd28e72 gnome: Add tiling-assistant 2022-01-01 22:05:16 +01:00
f1a6f68ec3 emacs: Enable Dart support 2022-01-01 22:04:44 +01:00
9b21bacf5f miku: Improve performance by using TSC 2022-01-01 22:04:29 +01:00
cbc9975aa8 packages: Add ebu-norm 2021-12-18 18:58:57 +01:00
0bef626837 alexander: Rename gitea ssh key 2021-12-08 17:51:00 +01:00
825b918c38 packages: Pin kasts-git to a commit 2021-12-08 17:51:00 +01:00
88856bfd1a plasma: Add kalendar 2021-12-08 17:51:00 +01:00
e112c9f5ee zsh: Add alias for rebuild-switch 2021-12-08 17:51:00 +01:00
e3046029df baseSystem: Remove ca-references 2021-12-08 17:51:00 +01:00
65ef35d358 mashu: Add phosh 2021-12-06 21:50:40 +01:00
9d6f1f06f3 plasma: Allow PlasmaMobile 2021-12-06 14:20:44 +01:00
276793cdcd mashu: Enable Plasma 2021-12-06 14:19:42 +01:00
d915ba331b Commit unstaged changes 2021-12-06 13:40:26 +01:00
1a8be4181d We now bleeding edge 😎 2021-12-06 13:39:45 +01:00
c176f9a740 surface: Update kernel 2021-12-06 13:39:45 +01:00
105 changed files with 4547 additions and 1411 deletions

View File

@ -2,14 +2,14 @@
"nodes": {
"agenix": {
"inputs": {
"nixpkgs": "nixpkgs_3"
"nixpkgs": "nixpkgs_4"
},
"locked": {
"lastModified": 1634404028,
"narHash": "sha256-JyP2Y6JCCYvUcVz7CXX5pXUfTGTU4GX51Yza82BgMfk=",
"lastModified": 1640802000,
"narHash": "sha256-ZiI94Zv/IgW64fqKrtVaQqfUCkn9STvAjgfFmvtqcQ8=",
"owner": "ryantm",
"repo": "agenix",
"rev": "53aa91b4170da35a96fab1577c9a34bc0da44e27",
"rev": "c5558c88b2941bf94886dfdede6926b1ba5f5629",
"type": "github"
},
"original": {
@ -19,12 +19,17 @@
}
},
"emacs": {
"inputs": {
"flake-utils": "flake-utils",
"nixpkgs": "nixpkgs",
"nixpkgs-stable": "nixpkgs-stable"
},
"locked": {
"lastModified": 1636881202,
"narHash": "sha256-XmXmV7ddohRKXcVzVDdw6LB0/53gu+rjQ+vScdakKGM=",
"lastModified": 1693879203,
"narHash": "sha256-0CGMa3MxeG3YsVetUtxg6eZumQIe8FJ+WHVfR2ko9zM=",
"owner": "nix-community",
"repo": "emacs-overlay",
"rev": "23c8464f4527a2b19f6b4776378dd03b8289aa85",
"rev": "3adaef3b1bebdc244a03ee19f705f5a3190a33d9",
"type": "github"
},
"original": {
@ -33,13 +38,37 @@
"type": "github"
}
},
"flake-utils": {
"flake-helper": {
"inputs": {
"nixpkgs": [
"ostylk-home",
"pkg-unstable"
]
},
"locked": {
"lastModified": 1634851050,
"narHash": "sha256-N83GlSGPJJdcqhUxSCS/WwW5pksYf3VP1M13cDRTSVA=",
"lastModified": 1649622552,
"narHash": "sha256-KT5CPoqkB9HZqw/pqynczRzsH/PQTImfaY5Oyyy871I=",
"ref": "refs/heads/master",
"rev": "3d7c14e55cb8374de6fcd40fcc889aa377131ac2",
"revCount": 6,
"type": "git",
"url": "https://destiny.ostylk.de/gitea/NixDistro/FlakeHelper.git"
},
"original": {
"type": "git",
"url": "https://destiny.ostylk.de/gitea/NixDistro/FlakeHelper.git"
}
},
"flake-utils": {
"inputs": {
"systems": "systems"
},
"locked": {
"lastModified": 1692799911,
"narHash": "sha256-3eihraek4qL744EvQXsK1Ha6C3CR7nnT8X2qWap4RNk=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "c91f3de5adaf1de973b797ef7485e441a65b8935",
"rev": "f9e7cf818399d17d347f847525c5a5a8032e4e44",
"type": "github"
},
"original": {
@ -49,12 +78,90 @@
}
},
"flake-utils_2": {
"inputs": {
"systems": "systems_2"
},
"locked": {
"lastModified": 1634851050,
"narHash": "sha256-N83GlSGPJJdcqhUxSCS/WwW5pksYf3VP1M13cDRTSVA=",
"lastModified": 1692799911,
"narHash": "sha256-3eihraek4qL744EvQXsK1Ha6C3CR7nnT8X2qWap4RNk=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "c91f3de5adaf1de973b797ef7485e441a65b8935",
"rev": "f9e7cf818399d17d347f847525c5a5a8032e4e44",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"flake-utils_3": {
"locked": {
"lastModified": 1638122382,
"narHash": "sha256-sQzZzAbvKEqN9s0bzWuYmRaA03v40gaJ4+iL1LXjaeI=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "74f7e4319258e287b0f9cb95426c9853b282730b",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"flake-utils_4": {
"locked": {
"lastModified": 1644229661,
"narHash": "sha256-1YdnJAsNy69bpcjuoKdOYQX0YxZBiCYZo4Twxerqv7k=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "3cecb5b042f7f209c56ffd8371b2711a290ec797",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"flake-utils_5": {
"locked": {
"lastModified": 1667395993,
"narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"flake-utils_6": {
"locked": {
"lastModified": 1659877975,
"narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "c0e246b9b83f637f4681389ecabcb2681b4f3af0",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"flake-utils_7": {
"locked": {
"lastModified": 1644229661,
"narHash": "sha256-1YdnJAsNy69bpcjuoKdOYQX0YxZBiCYZo4Twxerqv7k=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "3cecb5b042f7f209c56ffd8371b2711a290ec797",
"type": "github"
},
"original": {
@ -65,14 +172,14 @@
},
"home-manager": {
"inputs": {
"nixpkgs": "nixpkgs"
"nixpkgs": "nixpkgs_2"
},
"locked": {
"lastModified": 1636847964,
"narHash": "sha256-hH2lbDgOPwCtlWDwp0wVCcOK7x0mtLf4nrNWfvUWrA8=",
"lastModified": 1693859358,
"narHash": "sha256-r3Pak/ao3p8weTzR+Ry3qQrfRsmSOwWW5sAe73mrYKs=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "accfbdf215dbf39eac2fbae67b574dac0be83d51",
"rev": "886ea1d213efd1082f419d066e89ef37635dc970",
"type": "github"
},
"original": {
@ -90,27 +197,73 @@
]
},
"locked": {
"lastModified": 1634544068,
"narHash": "sha256-RlRQBaAHfdWqfRyHdWuDPMkplBTYwuyDQqDcNbP/Sog=",
"lastModified": 1643933536,
"narHash": "sha256-yRmsWAG4DnLxLIUtlaZsl0kH7rN5xSoyNRlf0YZrcH4=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "ff2bed9dac84fb202bbb3c49fdcfe30c29d0b12f",
"rev": "2860d7e3bb350f18f7477858f3513f9798896831",
"type": "github"
},
"original": {
"owner": "nix-community",
"ref": "release-21.05",
"ref": "release-21.11",
"repo": "home-manager",
"type": "github"
}
},
"home-stable": {
"inputs": {
"nixpkgs": [
"ostylk-home",
"pkg-stable"
],
"utils": "utils_2"
},
"locked": {
"lastModified": 1679067101,
"narHash": "sha256-tMI1inGT9u4KWQml0w30dhWqQPlth1e9K/68sfDkEQA=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "9154cd519a8942728038819682d6b3ff33f321bb",
"type": "github"
},
"original": {
"owner": "nix-community",
"ref": "release-22.11",
"repo": "home-manager",
"type": "github"
}
},
"home-unstable": {
"inputs": {
"nixpkgs": [
"ostylk-home",
"pkg-unstable"
],
"utils": "utils_3"
},
"locked": {
"lastModified": 1680597706,
"narHash": "sha256-ZqJ3T+BxzjPH9TnmeUwS4Uu9ZQPeBXAFC9sUWlharT4=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "ec06f419af79207b33d797064dfb3fc9dbe1df4a",
"type": "github"
},
"original": {
"owner": "nix-community",
"ref": "master",
"repo": "home-manager",
"type": "github"
}
},
"impermanence": {
"locked": {
"lastModified": 1635517258,
"narHash": "sha256-8iV8f9eZ/5cE0DmG7VmNSiCqpe00yL5HbOO7nZJm1Oo=",
"lastModified": 1640808801,
"narHash": "sha256-iHo8vyuYyhbk5MGfwn/7IahF8dBAwUYTZga4u0UsqPQ=",
"owner": "nix-community",
"repo": "impermanence",
"rev": "ce77ed9bd069e57a7a688d360196e576ca63a842",
"rev": "29d781b47b0ee6014abd541c132c647d18ab098e",
"type": "github"
},
"original": {
@ -119,35 +272,142 @@
"type": "github"
}
},
"impermanence_2": {
"locked": {
"lastModified": 1668668915,
"narHash": "sha256-QjY4ZZbs9shwO4LaLpvlU2bO9J1juYhO9NtV3nrbnYQ=",
"owner": "nix-community",
"repo": "impermanence",
"rev": "5df9108b346f8a42021bf99e50de89c9caa251c3",
"type": "github"
},
"original": {
"owner": "nix-community",
"ref": "master",
"repo": "impermanence",
"type": "github"
}
},
"libwacom-surface": {
"flake": false,
"locked": {
"lastModified": 1665772749,
"narHash": "sha256-UddKdTgEyz43ymr8O/CjT6aTnMtd1Q8OEHj49TGzN5k=",
"owner": "linux-surface",
"repo": "libwacom-surface",
"rev": "0f068fcaa16a6e0450a3324e50632cfdc6a4cf83",
"type": "github"
},
"original": {
"owner": "linux-surface",
"ref": "master",
"repo": "libwacom-surface",
"type": "github"
}
},
"linux-surface": {
"flake": false,
"locked": {
"lastModified": 1672934175,
"narHash": "sha256-HTIuRBZk0prhUPd2KnsXGo+ZyBsMwERN7P8WJH1RG3M=",
"owner": "linux-surface",
"repo": "linux-surface",
"rev": "487e64047ca047dde9a062909a87410e7bb86845",
"type": "github"
},
"original": {
"owner": "linux-surface",
"ref": "master",
"repo": "linux-surface",
"type": "github"
}
},
"naersk": {
"inputs": {
"nixpkgs": "nixpkgs_6"
},
"locked": {
"lastModified": 1639947939,
"narHash": "sha256-pGsM8haJadVP80GFq4xhnSpNitYNQpaXk4cnA796Cso=",
"owner": "nix-community",
"repo": "naersk",
"rev": "2fc8ce9d3c025d59fee349c1f80be9785049d653",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "naersk",
"type": "github"
}
},
"naersk_2": {
"inputs": {
"nixpkgs": [
"ostylk",
"ostylk-home",
"rnix-lsp",
"nixpkgs"
]
},
"locked": {
"lastModified": 1629707199,
"narHash": "sha256-sGxlmfp5eXL5sAMNqHSb04Zq6gPl+JeltIZ226OYN0w=",
"owner": "nmattia",
"lastModified": 1655042882,
"narHash": "sha256-9BX8Fuez5YJlN7cdPO63InoyBy7dm3VlJkkmTt6fS1A=",
"owner": "nix-community",
"repo": "naersk",
"rev": "df71f5e4babda41cd919a8684b72218e2e809fa9",
"rev": "cddffb5aa211f50c4b8750adbec0bbbdfb26bb9f",
"type": "github"
},
"original": {
"owner": "nmattia",
"owner": "nix-community",
"repo": "naersk",
"type": "github"
}
},
"nixgl": {
"inputs": {
"flake-utils": "flake-utils_6",
"nixpkgs": [
"ostylk-home",
"pkg-unstable"
]
},
"locked": {
"lastModified": 1661367362,
"narHash": "sha256-Qc8MXcV+YCPREu8kk6oggk23ZBKLqeQRAIsLbHEviPE=",
"owner": "guibou",
"repo": "nixGL",
"rev": "7165ffbccbd2cf4379b6cd6d2edd1620a427e5ae",
"type": "github"
},
"original": {
"owner": "guibou",
"ref": "main",
"repo": "nixGL",
"type": "github"
}
},
"nixos-hardware": {
"locked": {
"lastModified": 1636385773,
"narHash": "sha256-2uzAbVH/WFWBvxRfapXrTH3QF/bDgzCnBJlfCVYs02E=",
"lastModified": 1693718952,
"narHash": "sha256-+nGdJlgTk0MPN7NygopipmyylVuAVi7OItIwTlwtGnw=",
"owner": "NixOS",
"repo": "nixos-hardware",
"rev": "793de77d9f83418b428e8ba70d1e42c6507d0d35",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "master",
"repo": "nixos-hardware",
"type": "github"
}
},
"nixos-hardware_2": {
"locked": {
"lastModified": 1637957946,
"narHash": "sha256-zhAql8UR2R/88VCEjvzoVpcFi3k4gkhJayNuYNZaWMY=",
"owner": "ostylk",
"repo": "nixos-hardware",
"rev": "e660be563819c2be9410fbd20775283f3a2a8d76",
"rev": "bf27ac0017bb06c950f2f59a1213329382cb47c5",
"type": "github"
},
"original": {
@ -159,25 +419,43 @@
},
"nixpkgs": {
"locked": {
"lastModified": 1636922351,
"narHash": "sha256-x/jCHAVs4P9QGimbU/UcL7jr0OBvhr41z/L/agMTxwY=",
"lastModified": 1693663421,
"narHash": "sha256-ImMIlWE/idjcZAfxKK8sQA7A1Gi/O58u5/CJA+mxvl8=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "837604f22c3bd4819f96da7929486d9941d572b8",
"rev": "e56990880811a451abd32515698c712788be5720",
"type": "github"
},
"original": {
"id": "nixpkgs",
"type": "indirect"
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs-stable": {
"locked": {
"lastModified": 1693771906,
"narHash": "sha256-32EnPCaVjOiEERZ+o/2Ir7JH9pkfwJZJ27SKHNvt4yk=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "da5adce0ffaff10f6d0fee72a02a5ed9d01b52fc",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-23.05",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs-unstable": {
"locked": {
"lastModified": 1636267212,
"narHash": "sha256-KDS173KqmqrYUPY9N4vf750GxIo+S6E0djyq2BsQm8s=",
"lastModified": 1649408932,
"narHash": "sha256-JhTW1OtS5fACcRXLqcTTQyYO5vLkO+bceCqeRms13SY=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "c935f5e0add2cf0ae650d072c8357533e21b0c35",
"rev": "42948b300670223ca8286aaf916bc381f66a5313",
"type": "github"
},
"original": {
@ -189,11 +467,27 @@
},
"nixpkgs_2": {
"locked": {
"lastModified": 1636800699,
"narHash": "sha256-SwbyVxXffu3G2ulJIbTf0iQfqhbGbdml4Dyv5j9BiAI=",
"lastModified": 1693565476,
"narHash": "sha256-ya00zHt7YbPo3ve/wNZ/6nts61xt7wK/APa6aZAfey0=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "aa8aa7e2ea35ce655297e8322dc82bf77a31d04b",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_3": {
"locked": {
"lastModified": 1693663421,
"narHash": "sha256-ImMIlWE/idjcZAfxKK8sQA7A1Gi/O58u5/CJA+mxvl8=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "2fa862644fc15ecb525eb8cd0a60276f1c340c7c",
"rev": "e56990880811a451abd32515698c712788be5720",
"type": "github"
},
"original": {
@ -203,7 +497,7 @@
"type": "github"
}
},
"nixpkgs_3": {
"nixpkgs_4": {
"locked": {
"lastModified": 1618628710,
"narHash": "sha256-9xIoU+BrCpjs5nfWcd/GlU7XCVdnNKJPffoNTxgGfhs=",
@ -216,29 +510,90 @@
"type": "indirect"
}
},
"nixpkgs_4": {
"nixpkgs_5": {
"locked": {
"lastModified": 1636333654,
"narHash": "sha256-3wh9PtCzcaJQuZrgZ+ygKfhltkDNNqT6zOzGsRbjZEo=",
"lastModified": 1649490789,
"narHash": "sha256-YrhVxwoofZSx/wLZ4GYET//8vS+uqWX572zvdmP/Etg=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "e74894146a42ba552ebafa19ab2d1df7ccbc1738",
"rev": "c86185d20d708013caf97a6adaa8dc6d72313c75",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-21.05",
"ref": "nixos-21.11",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_6": {
"locked": {
"lastModified": 1640233012,
"narHash": "sha256-DNKMmWZ/RLoh5IVJLAa5HYOy4IW28mBBYDMgMxzzom8=",
"path": "/nix/store/gf00nqfl948lq9b8sw2xz3fpirwq5amw-source",
"rev": "611f29bedadfb2aa4c9c26c4af65f05dd35f2f3f",
"type": "path"
},
"original": {
"id": "nixpkgs",
"type": "indirect"
}
},
"nixpkgs_7": {
"locked": {
"lastModified": 1645373091,
"narHash": "sha256-eRbiakFKdxtjrqOtErp4BgOJlLN5VEBymldfxy+ZKzI=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "d0ae0897999e7ba4615e02ca1770df6065099daf",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable-small",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_8": {
"locked": {
"lastModified": 1656753965,
"narHash": "sha256-BCrB3l0qpJokOnIVc3g2lHiGhnjUi0MoXiw6t1o8H1E=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "0ea7a8f1b939d74e5df8af9a8f7342097cdf69eb",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_9": {
"locked": {
"lastModified": 1645373091,
"narHash": "sha256-eRbiakFKdxtjrqOtErp4BgOJlLN5VEBymldfxy+ZKzI=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "d0ae0897999e7ba4615e02ca1770df6065099daf",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable-small",
"repo": "nixpkgs",
"type": "github"
}
},
"nur": {
"locked": {
"lastModified": 1636920392,
"narHash": "sha256-mre/JUUA4168Y4NV1nfULPsAbDhwR1uvYI6rf0qvMV0=",
"lastModified": 1693907142,
"narHash": "sha256-U3yzshaxSUAC6Hy5xGmlX1TySHoWjH++Y2cC9ujEmZc=",
"owner": "nix-community",
"repo": "nur",
"rev": "faf37248a0b31f65353394924ffaf58da3a8445c",
"rev": "283964d2452632c9b0ccc8eff08d242a073b022f",
"type": "github"
},
"original": {
@ -250,26 +605,104 @@
"ostylk": {
"inputs": {
"agenix": "agenix",
"flake-utils": "flake-utils_2",
"flake-utils": "flake-utils_3",
"home-manager": "home-manager_2",
"impermanence": "impermanence",
"nixos-hardware": "nixos-hardware",
"nixpkgs": "nixpkgs_4",
"nixos-hardware": "nixos-hardware_2",
"nixpkgs": "nixpkgs_5",
"nixpkgs-unstable": "nixpkgs-unstable",
"rnix-lsp": "rnix-lsp"
"rnix-lsp": "rnix-lsp",
"tablet-mode": "tablet-mode"
},
"locked": {
"lastModified": 1636386099,
"narHash": "sha256-81kCDDzJfcYPl+hI/Oa2MVLrt603ipqXRvfXN4RNA3c=",
"ref": "master",
"rev": "285b4548c52b3c6454186242d6dd9362d80d1545",
"revCount": 141,
"lastModified": 1649593958,
"narHash": "sha256-bxslOpHYGXEDZ91plgMjGls5g8++YtSuuDKhIuStUA0=",
"ref": "refs/heads/master",
"rev": "04e73c894cf20c4ac1bf6116546c1dab53d6d4e9",
"revCount": 171,
"type": "git",
"url": "https://dev.ostylk.de/NixDistro/Config"
"url": "https://destiny.ostylk.de/gitea/NixDistro/Config.git"
},
"original": {
"type": "git",
"url": "https://dev.ostylk.de/NixDistro/Config"
"url": "https://destiny.ostylk.de/gitea/NixDistro/Config.git"
}
},
"ostylk-home": {
"inputs": {
"flake-helper": "flake-helper",
"flake-utils": "flake-utils_5",
"home-stable": "home-stable",
"home-unstable": "home-unstable",
"impermanence": "impermanence_2",
"libwacom-surface": "libwacom-surface",
"linux-surface": "linux-surface",
"nixgl": "nixgl",
"pkg-compile": "pkg-compile",
"pkg-stable": "pkg-stable",
"pkg-unstable": "pkg-unstable",
"rnix-lsp": "rnix-lsp_2"
},
"locked": {
"lastModified": 1683784900,
"narHash": "sha256-h+n0rS4nBFBqlMd1ktn+8UypNP3gQ91e+i/e1zHhbTg=",
"ref": "refs/heads/master",
"rev": "3a0f186fca0a88e0a2fd002eabedb418cf9a6f6a",
"revCount": 124,
"type": "git",
"url": "https://destiny.ostylk.de/gitea/NixDistro/Home.git"
},
"original": {
"type": "git",
"url": "https://destiny.ostylk.de/gitea/NixDistro/Home.git"
}
},
"pkg-compile": {
"locked": {
"lastModified": 1672791794,
"narHash": "sha256-mqGPpGmwap0Wfsf3o2b6qHJW1w2kk/I6cGCGIU+3t6o=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "9813adc7f7c0edd738c6bdd8431439688bb0cb3d",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"pkg-stable": {
"locked": {
"lastModified": 1679139072,
"narHash": "sha256-Gtw2Yj8DfETie3u7iHv1y5Wt+plGRmp6nTQ0EEfaPho=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "08ef7dc8334521605a5c8b7086cc248e74ee338b",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-22.11",
"repo": "nixpkgs",
"type": "github"
}
},
"pkg-unstable": {
"locked": {
"lastModified": 1680487167,
"narHash": "sha256-9FNIqrxDZgSliGGN2XJJSvcDYmQbgOANaZA4UWnTdg4=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "53dad94e874c9586e71decf82d972dfb640ef044",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"rnix-lsp": {
@ -282,11 +715,32 @@
"utils": "utils"
},
"locked": {
"lastModified": 1634449716,
"narHash": "sha256-JuRCU4KCIA3/pp8BjHqqF9dj1d2xtpkxKKAtSuOzTIY=",
"lastModified": 1640347520,
"narHash": "sha256-UkieGBW9ap0pQbumYoG60Ed+BpzMRGuLQ6Zb41u7Fkk=",
"owner": "nix-community",
"repo": "rnix-lsp",
"rev": "a2d06d2d2910cbe35b4f323a54ef484f51d71e20",
"rev": "d7cc2887ac9e65dd01715aac472edbf46b93ed31",
"type": "github"
},
"original": {
"owner": "nix-community",
"ref": "master",
"repo": "rnix-lsp",
"type": "github"
}
},
"rnix-lsp_2": {
"inputs": {
"naersk": "naersk_2",
"nixpkgs": "nixpkgs_8",
"utils": "utils_4"
},
"locked": {
"lastModified": 1669555118,
"narHash": "sha256-F0s0m62S5bHNVWNHLZD6SeHiLrsDx98VQbRjDyIu+qQ=",
"owner": "nix-community",
"repo": "rnix-lsp",
"rev": "95d40673fe43642e2e1144341e86d0036abd95d9",
"type": "github"
},
"original": {
@ -299,21 +753,24 @@
"root": {
"inputs": {
"emacs": "emacs",
"flake-utils": "flake-utils",
"flake-utils": "flake-utils_2",
"home-manager": "home-manager",
"nixpkgs": "nixpkgs_2",
"nixos-hardware": "nixos-hardware",
"nixpkgs": "nixpkgs_3",
"nur": "nur",
"ostylk": "ostylk",
"stable": "stable"
"ostylk-home": "ostylk-home",
"stable": "stable",
"tablet-mode": "tablet-mode_2"
}
},
"stable": {
"locked": {
"lastModified": 1636792033,
"narHash": "sha256-5RwKd3+OolhWAPUQG9SNoptr9eks8j2oukKgjAo5NQA=",
"lastModified": 1659914493,
"narHash": "sha256-lkA5X3VNMKirvA+SUzvEhfA7XquWLci+CGi505YFAIs=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "68d4f5970b69b0fd0a95c57c8d0ab4b2b68fb9aa",
"rev": "022caabb5f2265ad4006c1fa5b1ebe69fb0c3faf",
"type": "github"
},
"original": {
@ -323,6 +780,74 @@
"type": "github"
}
},
"systems": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"systems_2": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"tablet-mode": {
"inputs": {
"flake-utils": "flake-utils_4",
"nixpkgs": "nixpkgs_7"
},
"locked": {
"lastModified": 1645816436,
"narHash": "sha256-lK69qpgDWE92aQgvG502bU+pGMaHI+y7O3A/AgsUfxI=",
"ref": "master",
"rev": "eeafcf0d0cc3713727697f6a2badc5eea706c81c",
"revCount": 19,
"type": "git",
"url": "https://destiny.ostylk.de/gitea/NixDistro/tablet-mode.git"
},
"original": {
"type": "git",
"url": "https://destiny.ostylk.de/gitea/NixDistro/tablet-mode.git"
}
},
"tablet-mode_2": {
"inputs": {
"flake-utils": "flake-utils_7",
"nixpkgs": "nixpkgs_9"
},
"locked": {
"lastModified": 1645816436,
"narHash": "sha256-lK69qpgDWE92aQgvG502bU+pGMaHI+y7O3A/AgsUfxI=",
"ref": "refs/heads/master",
"rev": "eeafcf0d0cc3713727697f6a2badc5eea706c81c",
"revCount": 19,
"type": "git",
"url": "https://destiny.ostylk.de/gitea/NixDistro/tablet-mode.git"
},
"original": {
"type": "git",
"url": "https://destiny.ostylk.de/gitea/NixDistro/tablet-mode.git"
}
},
"utils": {
"locked": {
"lastModified": 1629481132,
@ -337,6 +862,51 @@
"repo": "flake-utils",
"type": "github"
}
},
"utils_2": {
"locked": {
"lastModified": 1667395993,
"narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"utils_3": {
"locked": {
"lastModified": 1678901627,
"narHash": "sha256-U02riOqrKKzwjsxc/400XnElV+UtPUQWpANPlyazjH0=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "93a2b84fc4b70d9e089d029deacc3583435c2ed6",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"utils_4": {
"locked": {
"lastModified": 1656928814,
"narHash": "sha256-RIFfgBuKz6Hp89yRr7+NR5tzIAbn52h8vT6vXkYjZoM=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "7e2a3b3dfd9af950a856d66b0a7d01e3c18aa249",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
}
},
"root": "root",

View File

@ -8,7 +8,10 @@
stable.url = "github:nixos/nixpkgs/nixos-21.05";
emacs.url = "github:nix-community/emacs-overlay";
nur.url = "github:nix-community/nur";
ostylk.url = "git+https://dev.ostylk.de/NixDistro/Config";
ostylk.url = "git+https://destiny.ostylk.de/gitea/NixDistro/Config.git";
ostylk-home.url = "git+https://destiny.ostylk.de/gitea/NixDistro/Home.git";
nixos-hardware.url = "github:NixOS/nixos-hardware/master";
tablet-mode.url = "git+https://destiny.ostylk.de/gitea/NixDistro/tablet-mode.git";
};
outputs = {
@ -16,6 +19,7 @@
, nixpkgs
, home-manager
, flake-utils
, ostylk-home
, ...
}@inputs: let
inherit (import ./lib/flake.nix {
@ -24,7 +28,7 @@
}) eachDefaultLinuxSystem;
mkSystem = import ./lib/mkSystem.nix {
inherit inputs;
inherit (inputs) nur emacs;
inherit (inputs) nur emacs tablet-mode;
inherit (nixpkgs) lib config;
};
in {
@ -49,11 +53,12 @@
overlays = [
self.overlay
(import ./overlays/sandbox.nix)
];
};
in {
# key-mapper only runs on linux
inherit (pkgs) key-mapper;
inherit (pkgs) wayqt dfl-ipc dfl-applications dfl-utils qtgreet xwaylandvideobridge obs-cli rgb_keyboard prismlauncher-wrapped anime4k;
};
});
}

View File

@ -1,6 +1,10 @@
{ config, lib, pkgs, ... }:
{ config, lib, pkgs, inputs, ... }:
{
imports = with inputs.nixos-hardware.nixosModules; [
common-cpu-intel common-pc-ssd #microsoft-surface
];
fileSystems = {
"/" = {
device = "/dev/disk/by-label/root";
@ -17,6 +21,12 @@
}
];
programs.phosh.enable = true;
environment.systemPackages = with pkgs; [
rnote
];
ptw = {
programs = {
mpv.enable = true;
@ -26,9 +36,11 @@
gnome-terminal.enable = true;
firefox.enable = true;
xournalpp.enable = true;
alacritty.enable = true;
# TODO: Nextcloud client
};
services = {
gdm.enable = true;
gnome.enable = true;
};
system = {
@ -40,14 +52,14 @@
offloading.offload.enable = true;
};
hardware = {
intel.enable = true;
mobile.enable = true;
surface.enable = true;
};
};
boot = {
kernelParams = [ "mem_sleep_default=deep" "kernel.nmi_watchdog=0" "vm.dirty_writeback_centisecs=1500" ];
kernelPackages = with pkgs; linuxPackagesFor (ostylk-home.packages.x86_64-linux.surface-kernel.override { kernel = kernel_5_16; });
extraModprobeConfig = ''
options i915 enable_fbc=1 enable_rc6=1 modeset=1
options snd_hda_intel power_save=1

View File

@ -1,6 +1,10 @@
{ config, lib, pkgs, ... }:
{ config, lib, pkgs, inputs, ... }:
{
imports = with inputs.nixos-hardware.nixosModules; [
common-cpu-amd common-gpu-amd common-pc-ssd
];
fileSystems = {
"/" = {
device = "/dev/disk/by-label/root";
@ -12,39 +16,42 @@
};
"/mnt/Storage" = {
device = "/dev/disk/by-label/storage";
fsType = "ext4";
fsType = "btrfs";
options = [
"noatime"
"nodev"
"nosuid"
];
};
};
environment.systemPackages = with pkgs; [
gajim-mainwindow
gajim
virt-manager qemu scream
replaysorcery # Custom package
#evdev-proxy # Custom package
vfio-isolate # Custom Package
steam-wrapped
discord-wrapped # Custom package
superpaper # Custom package
#replaysorcery # Custom package
#vfio-isolate # Custom Package
mumble
piper
anime-dl trackma # Custom package
piper trackma # Custom package
anime-dl # Custom package
thunderbird
multimc-wrapped # Custom package
nwg-launchers
gnome-podcasts
cantata
newsflash
anki
gimp
xwaylandvideobridge
#psst
#lapce
];
ptw = {
programs = {
#bluray.enable = true;
mpv = {
primaryScreen = "C27F398";
primaryScreen = "DP-1";
enable = true;
};
sway.enable = true;
sway.enable = false;
alacritty.enable = true;
emacs.enable = true;
#emacs.enable = true;
firefox.enable = true;
git.enable = true;
#gnome-terminal.enable = true;
@ -53,48 +60,32 @@
enable = true;
output = "DP-2";
};
xournalpp.enable = true;
neovim.enable = true;
#xournalpp.enable = true;
zsh.enable = true;
direnv.enable = true;
office.enable = true;
plasma = {
enable = true;
/*sddm = {
backgroundImage = pkgs.fetchurl {
url = "https://cdn.donmai.us/original/d3/1b/__manjuu_prinz_eugen_roon_bismarck_friedrich_der_grosse_and_3_more_azur_lane_drawn_by_zaphn__d31bf4ac564d60f8787818842c369e7f.jpg";
sha256 = "sha256-likoJuEaGzGH0RqjPsBE9o5ATwgnOo97PREh3oZBax8=";
};
};*/
};
gaming.enable = true;
obs.enable = true;
android.enable = true;
};
services = {
yubikey.enable = true;
gamemode.enable = true;
#gnome.enable = true;
kanshi = let
horizontal = "Samsung Electric Company C27F398 H4ZR101145";
vertical = "Goldstar Company Ltd IPS235 305NDPHKN600";
helpers = import ../lib/helpers/kanshi.nix;
mkProfile = helpers.mkProfile;
wallpaperScript = helpers.mkWallpaperScript {
inherit pkgs config;
};
in {
enable = true;
profiles = {
homeMultihead = mkProfile {
outputs = [
{
criteria = vertical;
status = "enable";
mode = "1920x1080";
transform = "90";
position = "-1080,0";
}
{
criteria = horizontal;
status = "enable";
mode = "1920x1080";
position = "0,0";
}
];
name = "homeMultihead";
script = wallpaperScript;
};
};
gnome.enable = false;
logiops.enable = true;
gdm = {
enable = false;
};
swaync.enable = true;
key-mapper.enable = true;
};
system = {
i18n.enable = true;
@ -105,58 +96,88 @@
};
virtualisation = {
enable = true;
gaming.enable = false;
};
};
programs = {
adb.enable = true;
gnupg.agent.pinentryFlavor = "qt";
evolution.enable = true;
};
virtualisation = {
podman = {
docker = {
enable = true;
dockerCompat = true;
storageDriver = "btrfs";
};
};
boot = {
boot = let
kernel = pkgs.linuxPackages_xanmod_latest;
in {
extraModprobeConfig = ''
options kvm_amd nested=1
options vfio-pci ids=1002:67df,1002:aaf0
options amdgpu dpm=0
'';
initrd = {
availableKernelModules = [ "xhci_pci" "ahci" "usbhid" "sd_mod" "amdgpu" ]; #"vendor-reset" ];
availableKernelModules = [
"xhci_pci"
"ahci"
"usbhid"
"sd_mod"
"amdgpu"
"vendor-reset"
"winesync"
];
kernelModules = [
"amdgpu" # GPU (duh)
"kvm-amd" "vfio_virqfd" "vfio_pci" "vfio_iommu_type1" "vfio" # Virt
"kvm-amd" /*"vfio_virqfd"*/ "vfio_pci" "vfio_iommu_type1" "vfio" # Virt
"uinput" # key-mapper
#"vendor-reset"
"vendor-reset"
"winesync"
];
};
kernelParams = [
"amd_iommu=on"
"iommu=pt"
"iommu=on"
"sysrq_always_enabled=1"
"kvm.ignore_msrs=1"
"kvm.report_ignored_msrs=N"
"fbcon=rotate:3"
"quiet"
"tsc=unstable"
"clocksource=tsc"
"tsc=reliable"
"pci=noaer"
# Disable mitigations
"mitigations=off"
"rhgb"
# Enable ZSwap
#"zswap.enabled=1"
# Enable Apparmor
"lsm=landlock,lockdown,yama,integrity,apparmor,bpf"
# Prevent sequential probing
"libahci.ignore_sss=1"
# Make the system less ready to swap
"sysctl.vm.swappiness=0"
];
kernel.sysctl = {
# League of Legends under Linux
"abi.vsyscall32" = 0;
# Fedora 39
"vm.max_map_count" = 2147483642;
};
#extraModulePackages = [ pkgs.linuxPackages_xanmod.vendor-reset ];
extraModulePackages = [ kernel.vendor-reset ];
kernelPackages = kernel;
#extraModulePackages = [ pkgs.linuxPackages.vendor-reset ];
# NOTE: A regression appears to have happend between 5.10 and 5.12
# which leads to the RX590 to have the fence fallback timer on
# sdma0 time out (whatever this means). Maybe bisect?
kernelPackages = pkgs.linuxPackages_zen;
binfmt = {
emulatedSystems = [ "aarch64-linux" ];
registrations.aarch64-linux.fixBinary = true;
};
};
services = {
ratbagd.enable = true;
flatpak.enable = true;
etesync-dav.enable = true;
#etesync-dav.enable = true;
connman.extraConfig = ''
WriteResolvConf=false
'';
@ -164,42 +185,80 @@
enable = true;
layout = "de";
libinput.enable = true;
displayManager.gdm = {
};
earlyoom.enable = lib.mkForce false;
udev.extraRules = ''
ACTION=="add", SUBSYSTEM=="usb", DRIVERS=="usb", ATTRS{idVendor}=="046d", ATTRS{idProduct}=="c52b", ATTR{power/wakeup}="disabled", ATTR{driver/1-7/power/wakeup}="disabled"
'';
hardware = {
openrgb = {
enable = true;
wayland = true;
motherboard = "amd";
};
};
system76-scheduler = {
enable = false;
useStockConfig = true;
};
};
programs = {
cdemu = {
enable = true;
gui = true;
};
};
hardware = {
opentabletdriver.enable = true;
openrazer = {
enable = true;
devicesOffOnScreensaver = true;
users = [ "alexander" ];
};
bluetooth = {
enable = true;
powerOnBoot = true;
};
};
# TODO: Move into modules
systemd.user.services = {
scream = {
description = "Audio receiver for the Scream virtual network sound card";
#wantedBy = [ "default.target" ];
serviceConfig = {
Type = "simple";
ExecStart = "${pkgs.scream}/bin/scream -i virbr0 -o pulse";
Restart = "always";
/*
systemd = {
services = {
enable-vendor-reset = {
wantedBy = [ "default.target" ];
script = ''
echo "device_specific" > /sys/bus/pci/devices/0000:01:00.0/reset_method
'';
serviceConfig = {
Type = "simple";
};
};
};
replaysorcery-kms = {
description = "An open-source, instant-replay solution for Linux; KMS service";
#wantedBy = [ "default.target" ];
serviceConfig = {
Type = "simple";
ExecStart = "${pkgs.replaysorcery}/bin/replay-sorcery kms-service";
Restart = "always";
user.services = {
replaysorcery-kms = {
description = "An open-source, instant-replay solution for Linux; KMS service";
#wantedBy = [ "default.target" ];
serviceConfig = {
Type = "simple";
ExecStart = "${pkgs.replaysorcery}/bin/replay-sorcery kms-service";
Restart = "always";
};
};
};
replaysorcery = {
description = "An open-source, instant-replay solution for Linux";
#wantedBy = [ "default.target" ];
requires = [ "replaysorcery-kms.service" ];
serviceConfig = {
Type = "simple";
ExecStart = "${pkgs.replaysorcery}/bin/replay-sorcery";
Restart = "always";
replaysorcery = {
description = "An open-source, instant-replay solution for Linux";
#wantedBy = [ "default.target" ];
requires = [ "replaysorcery-kms.service" ];
serviceConfig = {
Type = "simple";
ExecStart = "${pkgs.replaysorcery}/bin/replay-sorcery";
Restart = "always";
};
};
};
};
*/
}

View File

@ -1,6 +1,10 @@
{ config, lib, pkgs, ... }:
{ config, lib, pkgs, inputs, ... }:
{
imports = with inputs.nixos-hardware.nixosModules; [
common-cpu-intel common-pc-ssd
];
fileSystems = {
"/" = {
device = "/dev/disk/by-uuid/d06b511d-1970-421d-b006-231a7af91942";
@ -14,8 +18,12 @@
swapDevices = [ ]; # TODO
boot = {
initrd = {
availableKernelModules = [ "xhci_pci" "nvme" "usb_storage" "sd_mod" "sdhci_pci" ];
kernelModules = [ "dm-snapshot" ];
availableKernelModules = [ "xhci_pci" "nvme" "usb_storage" "sd_mod" "sdhci_pci"
"aesni-intel"
# NOTE: See https://github.com/NixOS/nixos-hardware/blob/master/common/pc/laptop/acpi_call.nix
#"acpi_call" ];
];
kernelModules = [ "dm-snapshot" "aesni-intel" ];
luks.devices = {
cryptroot = {
device = "/dev/disk/by-uuid/e1011c40-e1a9-4ce6-b89f-f14b046639c1";
@ -23,14 +31,19 @@
};
};
};
kernelPackages = pkgs.linuxPackages_xanmod;
kernelModules = [ "kvm-intel" ];
extraModulePackages = [ ];
# NOTE: See https://github.com/NixOS/nixos-hardware/blob/master/lenovo/thinkpad/e495/default.nix#L12
kernelParams = [ "acpi_backlight=native" ];
binfmt.emulatedSystems = ["aarch64-linux"];
};
ptw = {
programs = {
alacritty.enable = true;
sway.enable = true;
sway.enable = false;
emacs.enable = true;
firefox.enable = true;
tmux.enable = true;
@ -40,8 +53,14 @@
};
zsh.enable = true;
git.enable = true;
office.enable = true;
plasma.enable = true;
direnv.enable = true;
};
services = {
yubikey.enable = true;
cups.enable = true;
gnome.enable = false;
kanshi = let
horizontal = "Samsung Electric Company C27F398 H4ZR101145";
@ -97,9 +116,6 @@
primaryInterface = "wlp5s0";
};
virtualisation.enable = true;
hardware = {
intel.enable = true;
};
};
services = {
@ -107,19 +123,33 @@
enable = true;
layout = "de";
libinput.enable = true;
displayManager.gdm = {
enable = true;
wayland = true;
};
};
};
virtualisation = {
podman = {
enable = true;
dockerCompat = true;
dockerSocket.enable = true;
};
};
environment.systemPackages = with pkgs; [
ansible
gnumake
wireguard-tools
(pkgs.callPackage ./wrapper.nix {
inherit (pkgs) retroarch;
cores = with pkgs.libretro; [
mgba mupen64plus melonds desmume dolphin
];
})
];
programs = {
gnupg.agent.pinentryFlavor = "qt";
gnupg.agent = {
pinentryFlavor = "qt";
};
};
}

37
hosts/wrapper.nix Normal file
View File

@ -0,0 +1,37 @@
{ stdenv, lib, makeWrapper, retroarch, cores ? [ ] }:
stdenv.mkDerivation {
pname = "retroarch";
version = lib.getVersion retroarch;
nativeBuildInputs = [ makeWrapper ];
buildCommand = ''
mkdir -p $out/lib
for coreDir in $cores
do
ln -s $coreDir/* $out/lib/.
done
ln -s -t $out ${retroarch}/share
if [ -d ${retroarch}/Applications ]; then
ln -s -t $out ${retroarch}/Applications
fi
makeWrapper ${retroarch}/bin/retroarch $out/bin/retroarch \
--suffix-each LD_LIBRARY_PATH ':' "$cores" \
--add-flags "-L $out/lib/" \
'';
cores = map (x: x + x.libretroCore) cores;
preferLocalBuild = true;
meta = with retroarch.meta; {
inherit changelog description homepage license maintainers platforms;
longDescription =
"RetroArch is the reference frontend for the libretro API. The following cores are included: "
+ lib.concatStringsSep ", " (map (x: "${x.name}") cores)
+ ".";
};
}

View File

@ -8,14 +8,14 @@ let
in {
time.timeZone = "Europe/Berlin";
ostylk.nftables = {
enable = true;
enable = false;
tables.firewall = {
family = "inet";
chains = {
non-libvirt.extraConfig = let
deviceIPString = lib.concatStringsSep "," (with network; [
miku nishimiya tamaki mashu # ayame
miku nishimiya tamaki mashu taihou # ayame
]);
in ''
# Accept traffic from my devices
@ -33,7 +33,14 @@ in {
};
networking = {
useDHCP = false; # Done by the network manager
networkmanager.enable = true;
networkmanager = {
enable = true;
plugins = with pkgs; [
networkmanager-vpnc
networkmanager-openvpn
networkmanager-openconnect
];
};
#interfaces.*.useDHCP = false;
@ -44,6 +51,7 @@ in {
#"${network.ayame}" = [ "ayame.local" ];
"${network.tamaki}" = [ "tamaki.local" ];
"${network.mashu}" = [ "mashu.local" ];
"${network.taihou}" = [ "taihou.local" ];
};
};
@ -74,6 +82,12 @@ in {
git-crypt
gnupg
python3
unzip
file
ripgrep
# General utilities
bandwhich bottom latencytop
# RT scheduling
rtkit
@ -94,16 +108,20 @@ in {
nerdfonts
];
# For home-manager
programs.dconf.enable = true;
# We don't tolerate non-free software, except for Steam and Linux firmware
nixpkgs.config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [
"firmwareLinuxNonfree" "microcodeAmd" "microcodeIntel"
"steam" "steam-original" "steam-runtime"
"discord"
"steam" "steam-original" "steam-runtime" "steam-run"
"discord" "discord-canary"
"minecraft"
"spotify" "spotify-unwrapped"
];
services = {
# TODO: Is this correct? Maybe run once
timesyncd.enable = false;
timesyncd.enable = true;
# Everyone needs sound
pipewire = {
@ -112,6 +130,96 @@ in {
jack.enable = true;
alsa.enable = true;
alsa.support32Bit = true;
/*
config.pipewire = {
"context.modules" = [
{
name = "libpipewire-module-rtkit";
args = {};
flags = [ "ifexists" "nofail" ];
}
{ name = "libpipewire-module-protocol-native"; }
{ name = "libpipewire-module-client-node"; }
{ name = "libpipewire-module-adapter"; }
{ name = "libpipewire-module-metadata"; }
{
name = "libpipewire-module-filter-chain";
args = {
"node.name" = "effect_output.virtual-surround-7.1-hesuvi";
"node.description" = "Virtual Surround Sink";
"media.name" = "Virtual Surround Sink";
"filter.graph" = {
nodes = [
{ type = "builtin"; label = "copy"; name = "copyFL"; }
{ type = "builtin"; label = "copy"; name = "copyFR"; }
{ type = "builtin"; label = "copy"; name = "copyFC"; }
{ type = "builtin"; label = "copy"; name = "copyRL"; }
{ type = "builtin"; label = "copy"; name = "copyRR"; }
{ type = "builtin"; label = "copy"; name = "copySL"; }
{ type = "builtin"; label = "copy"; name = "copySR"; }
{ type = "builtin"; label = "copy"; name = "copyLFE"; }
{ type = "builtin"; label = "convolver"; name = "convFL_L"; config = { filename = "hrir_hesuvi/hrir.wav"; channel = 0; }; }
{ type = "builtin"; label = "convolver"; name = "convFL_R"; config = { filename = "hrir_hesuvi/hrir.wav"; channel = 1; }; }
{ type = "builtin"; label = "convolver"; name = "convSL_L"; config = { filename = "hrir_hesuvi/hrir.wav"; channel = 2; }; }
{ type = "builtin"; label = "convolver"; name = "convSL_R"; config = { filename = "hrir_hesuvi/hrir.wav"; channel = 3; }; }
{ type = "builtin"; label = "convolver"; name = "convRL_L"; config = { filename = "hrir_hesuvi/hrir.wav"; channel = 4; }; }
{ type = "builtin"; label = "convolver"; name = "convRL_R"; config = { filename = "hrir_hesuvi/hrir.wav"; channel = 5; }; }
{ type = "builtin"; label = "convolver"; name = "convFC_L"; config = { filename = "hrir_hesuvi/hrir.wav"; channel = 6; }; }
{ type = "builtin"; label = "convolver"; name = "convFR_R"; config = { filename = "hrir_hesuvi/hrir.wav"; channel = 7; }; }
{ type = "builtin"; label = "convolver"; name = "convFR_L"; config = { filename = "hrir_hesuvi/hrir.wav"; channel = 8; }; }
{ type = "builtin"; label = "convolver"; name = "convSR_R"; config = { filename = "hrir_hesuvi/hrir.wav"; channel = 9; }; }
{ type = "builtin"; label = "convolver"; name = "convSR_L"; config = { filename = "hrir_hesuvi/hrir.wav"; channel = 10; }; }
{ type = "builtin"; label = "convolver"; name = "convRR_R"; config = { filename = "hrir_hesuvi/hrir.wav"; channel = 11; }; }
{ type = "builtin"; label = "convolver"; name = "convRR_L"; config = { filename = "hrir_hesuvi/hrir.wav"; channel = 12; }; }
{ type = "builtin"; label = "convolver"; name = "convFC_R"; config = { filename = "hrir_hesuvi/hrir.wav"; channel = 13; }; }
{ type = "builtin"; label = "convolver"; name = "convLFE_L"; config = { filename = "hrir_hesuvi/hrir.wav"; channel = 6; }; }
{ type = "builtin"; label = "convolver"; name = "convLFE_R"; config = { filename = "hrir_hesuvi/hrir.wav"; channel = 13; }; }
{ type = "builtin"; label = "mixer"; name = "mixL"; }
{ type = "builtin"; label = "mixer"; name = "mixR"; }
];
links = let
linkInput = channel: [
{ output = "copy${channel}:Out"; input = "conv${channel}_L:In"; }
{ output = "copy${channel}:Out"; input = "conv${channel}_R:In"; }
];
linkOutput = channel: n: [
{ output = "conv${channel}_L:Out"; input = "mix_L:In ${builtins.toString n}"; }
{ output = "conv${channel}_R:Out"; input = "mix_R:In ${builtins.toString n}"; }
];
in (builtins.concatMap (channel: linkInput channel) [ "FL" "SL" "RL" "FC" "FR" "SR" "RR" "LFE" ])
++ [
(linkOutput "FL" 1)
(linkOutput "SL" 2)
(linkOutput "RL" 3)
(linkOutput "FC" 4)
(linkOutput "FR" 5)
(linkOutput "SR" 6)
(linkOutput "RR" 7)
(linkOutput "LFE" 8)
];
inputs = builtins.map (channel: "copy${channel}:In") [ "FL" "SL" "RL" "FC" "FR" "SR" "RR" "LFE" ];
outputs = [ "mixL:Out" "mixR:Out" ];
};
"capture.props" = {
"media.class" = "Audio/Sink";
"audio.channels" = 8;
"audio.position" = [ "FL" "FR" "FC" "LFE" "RL" "RR" "SL" "SR" ];
};
"playback.props" = {
"node.passive" = true;
"audio.channels" = 2;
"audio.positions" = [ "FL" "FR" ];
};
};
}
];
};
*/
};
# On desktop: Monitor keyboards, mice, ...
@ -119,7 +227,7 @@ in {
upower.enable = true;
# What generated entropy?
haveged.enable = true;
#haveged.enable = true;
printing.enable = lib.mkDefault false;
avahi.enable = false;
@ -136,7 +244,10 @@ in {
};
# Don't wait for a network connection
systemd.services.NetworkManager-wait-online.enable = false;
systemd = {
services.NetworkManager-wait-online.enable = false;
coredump.enable = false;
};
security.sudo.extraConfig = ''
Defaults env_keep += "NIXOS_CONFIG"
@ -163,14 +274,25 @@ in {
nix = {
package = pkgs.nixUnstable;
extraOptions = ''
experimental-features = nix-command flakes ca-references
experimental-features = nix-command flakes
'';
registry = {
nixpkgs.flake = inputs.nixpkgs;
};
settings = {
substituters = [
"https://cache.nixos.org/" # Official binary substitute
"https://nix-community.cachix.org/" # For emacsGccPgtk
];
trusted-public-keys = [
"hydra.nixos.org-1:CNHJZBh9K4tP3EKF6FkkgeVYsS3ohTl+oS0Qa8bezVs=" # Official binary substitute
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=" # nix-community
];
};
};
boot = {
tmp.cleanOnBoot = true;
loader = {
systemd-boot.enable = true;
efi.canTouchEfiVariables = true;

View File

@ -15,6 +15,7 @@ Idea: Make miku.nix, mashu.nix, ... have the following structure
{
hostConfigFile
, architecture ? "x86_64-linux"
, bluray ? false
}: let
pkgs = inputs.nixpkgs;
config = pkgs.lib;
@ -37,18 +38,27 @@ in inputs.nixpkgs.lib.nixosSystem {
# Overlays
(util.mkOverlayFromInput "stable" inputs.stable)
(util.mkOverlayFromInput "unstable" inputs.nixpkgs)
{
nixpkgs.overlays = [
nur.overlay
emacs.overlay
(import ../packages)
(import ../overlays/simple.nix)
(import ../overlays/phosh.nix)
]
++ lib.optional bluray (import ../overlays/bluray.nix)
++ [
# Always keep sandbox.nix as the last overlay
(import ../overlays/sandbox.nix)
];
}
# My module system
(import ../modules)
inputs.ostylk.nixosModules.nftables
inputs.tablet-mode.nixosModule
# Actual config
(import ./baseSystem.nix)

View File

@ -2,8 +2,9 @@ rec {
network-base = "192.168.178";
# A collection of IP addresses for various uses
miku = "${network-base}.38";
miku = "${network-base}.60";
nishimiya = "${network-base}.59";
tamaki = "${network-base}.27";
mashu = "${network-base}.54";
taihou = "${network-base}.21";
}

Binary file not shown.

196
lib/sandbox.nix Normal file
View File

@ -0,0 +1,196 @@
{
stdenv, lib
, runCommandLocal, writeShellScriptBin, makeDesktopItem
, bubblewrap, coreutils, glibc, pkgsi686Linux
}:
{
name # Name of the sandboxed package, e.g. "package-wrapped"
, launchScriptName # Name of the script that will be placed in $out/bin
, binary # The binary to execute inside the sandbox
, extraArgs ? [] # Extra arguments to add to the argv
, desktopFileAttributes ? {} # Arguments to apply to the desktop file
, preDesktopFilePhase ? "" # Code to run during the install phase before building the desktop file
, enableDesktopFile ? false # Whether to build a desktop file
, copyIntoSandbox ? {} # Source -> destination relative to $out
, unshareUser ? true
, unshareIpc ? true
, unsharePid ? true
, unshareNet ? false
, unshareUts ? true
, unshareCgroup ? true
, dieWithParent ? true # Should bubblewrap exit when the parents exits
, mountInHome ? [] # Files, directories to mount inside the sandbox
, chdirTo ? "\"$(pwd)\"" # What should be the CWD when entering the sandbox
, additionalBlacklist ? [] # Root directories that should not be mounted
, additionalMounts ? [] # Files, directories outside the home directory to mount inside the sandbox
, extraEnv ? {} # Extra environment variables to set inside the sandbox
, enableAlsa ? true # Mount ALSA files from /etc/
, enableSudo ? true # Mount sudo files from /etc/
, enableShells ? true # Mount shell related files from /etc/
, enableNix ? true # Mount nix related files from /etc/
, enableOsInfo ? true # Mount /etc/{machine-id,os-release}
}:
let
mountHome = mountInHome == [];
etcBindFlags = let
files = [
# Users, Groups, NSS
"passwd"
"group"
"shadow"
"hosts"
"resolv.conf"
"nsswitch.conf"
# User profiles
"profiles"
# Time
"localtime"
"zoneinfo"
# PAM
"pam.d"
# Fonts
"fonts"
]
++ (lib.optionals enableNix [ "static" "nix" ])
++ (lib.optionals enableShells [ "bashrc" "zshenv" "zshrc" "zinputrc" "zprofile" ])
++ (lib.optionals enableSudo [ "login.defs" "sudoers" "sudoers.d" ])
++ (lib.optionals enableAlsa [ "alsa" "asound.conf" ])
++ (lib.optionals enableOsInfo [ "machine-id" "os-release" ])
# Only add SSL stuff when we have networking enabled
++ (lib.optionals (!unshareNet) [ "ssl/certs" "pki" ]);
in builtins.concatStringsSep "\n " (map (file: "--ro-bind-try /etc/${file} /etc/${file}") files);
# Create this on the fly instead of linking from /nix
# The container might have to modify it and re-run ldconfig if there are
# issues running some binary with LD_LIBRARY_PATH
createLdConfCache = ''
cat > /etc/ld.so.conf <<EOF
/lib
/lib/x86_64-linux-gnu
/lib64
/usr/lib
/usr/lib/x86_64-linux-gnu
/usr/lib64
/lib/i386-linux-gnu
/lib32
/usr/lib/i386-linux-gnu
/usr/lib32
EOF
ldconfig &> /dev/null
'';
sandboxInitScriptName = "${name}-wrapped-init.sh";
sandboxInitScript = writeShellScriptBin sandboxInitScriptName ''
source /etc/profile
${createLdConfCache}
exec ${binary} "$@"
'';
sandboxScriptName = "${name}-wrapped.sh";
sandboxScript = let
extraEnvString = lib.foldl (acc: val: acc + val + "\n") "" (lib.mapAttrsToList (name: value: "--setenv ${name} \"${value}\"") extraEnv);
stringify = x: "\"${x}\"";
safeAdditionalMounts = map stringify additionalMounts;
safeMountInHome = map stringify mountInHome;
in writeShellScriptBin sandboxScriptName ''
blacklist=(/nix /dev /proc /etc ${lib.optionalString (!mountHome) "/home"} ${builtins.toString additionalBlacklist})
ro_mounts=()
symlinks=()
declare -a auto_mounts
# loop through all directories in the root
for dir in /*; do
# if it is a directory and it is not in the blacklist
if [[ -d "$dir" ]] && [[ ! "''${blacklist[@]}" =~ "$dir" ]]; then
# add it to the mount list
auto_mounts+=(--bind "$dir" "$dir")
fi
done
if [[ "${lib.optionalString (!mountHome) "1"}" = "1" ]]; then
for entry in ${builtins.toString safeMountInHome}; do
auto_mounts+=(--bind "/home/$USER/$entry" "/home/$USER/$entry")
done
fi
if [[ ! -z "${builtins.toString additionalMounts}" ]]; then
for entry in ${builtins.toString safeAdditionalMounts}; do
auto_mounts+=(--bind "$entry" "$entry")
done
fi
cmd=(
${bubblewrap}/bin/bwrap
--dev-bind /dev /dev
--proc /proc
--chdir ${chdirTo}
${lib.optionalString unshareUser "--unshare-user"}
${lib.optionalString unshareIpc "--unshare-ipc"}
${lib.optionalString unsharePid "--unshare-pid"}
${lib.optionalString unshareNet "--unshare-net"}
${lib.optionalString unshareUts "--unshare-uts"}
${lib.optionalString unshareCgroup "--unshare-cgroup"}
${lib.optionalString dieWithParent "--die-with-parent"}
--ro-bind /nix /nix
# Our glibc will look for the cache in its own path in `/nix/store`.
# As such, we need a cache to exist there, because pressure-vessel
# depends on the existence of an ld cache. However, adding one
# globally proved to be a bad idea (see #100655), the solution we
# settled on being mounting one via bwrap.
# Also, the cache needs to go to both 32 and 64 bit glibcs, for games
# of both architectures to work.
--tmpfs ${glibc}/etc \
--symlink /etc/ld.so.conf ${glibc}/etc/ld.so.conf \
--symlink /etc/ld.so.cache ${glibc}/etc/ld.so.cache \
--ro-bind ${glibc}/etc/rpc ${glibc}/etc/rpc \
--remount-ro ${glibc}/etc \
--tmpfs ${pkgsi686Linux.glibc}/etc \
--symlink /etc/ld.so.conf ${pkgsi686Linux.glibc}/etc/ld.so.conf \
--symlink /etc/ld.so.cache ${pkgsi686Linux.glibc}/etc/ld.so.cache \
--ro-bind ${pkgsi686Linux.glibc}/etc/rpc ${pkgsi686Linux.glibc}/etc/rpc \
--remount-ro ${pkgsi686Linux.glibc}/etc \
${etcBindFlags}
"''${ro_mounts[@]}"
"''${symlinks[@]}"
"''${auto_mounts[@]}"
${extraEnvString}
${sandboxInitScript}/bin/${sandboxInitScriptName}
)
exec "''${cmd[@]}" $@
'';
in stdenv.mkDerivation {
pname = name;
version = "1.0.0";
unpackPhase = ":";
dontBuild = true;
installPhase = let
desktopFilePhase = let
desktopFile = makeDesktopItem (desktopFileAttributes // {
exec = "${sandboxScript}/bin/${sandboxScriptName}";
});
in ''
cp -r ${desktopFile}/share/applications $out/share
'';
copyIntoSandboxPhase = let
attrs = builtins.attrNames copyIntoSandbox;
cps = map (x: "cp -Lr ${x} $out/${copyIntoSandbox."${x}"}\n") attrs;
in lib.concatStrings cps;
in ''
mkdir -p $out/bin
ln -s ${sandboxScript}/bin/${sandboxScriptName} $out/bin/${launchScriptName}
# Generate the desktop file, if enabled
${lib.optionalString enableDesktopFile "mkdir -p $out/share"}
${lib.optionalString enableDesktopFile preDesktopFilePhase}
${lib.optionalString enableDesktopFile desktopFilePhase}
# Copy extra files if they are specified
${lib.optionalString (copyIntoSandbox != {}) copyIntoSandboxPhase}
'';
}

View File

@ -1,20 +1,19 @@
{
imports = [
# Hardware modules
./hardware/amdgpu.nix
./hardware/amd.nix
./hardware/intel.nix
./hardware/mobile.nix
./hardware/surface-pro6.nix
./hardware/wifi.nix
# Programs
./programs/alacritty
./programs/emacs
./programs/firefox
./programs/gnome
./programs/gdm
./programs/sddm
./programs/gnome-terminal
./programs/mpv
./programs/neovim
./programs/git
./programs/sway
./programs/swaync
@ -22,13 +21,22 @@
./programs/waybar
./programs/zsh
./programs/xournalpp
./programs/plasma
./programs/office
./programs/gaming
./programs/bluray
./programs/direnv
./programs/obs
./programs/android
# Services
./services/kanshi
./services/key-mapper
./services/input-remapper
./services/gamemode
./services/i18n
./services/greetd
./services/cups
./services/logiops
./services/yubikey
# User
#./users/default.nix
@ -43,7 +51,14 @@
./virtualisation/default.nix
./virtualisation/gaming.nix
# Security
./security/apparmor.nix
# Pure options
./base.nix
# Desktop
./desktop/phosh.nix
./desktop/plasma.nix
];
}

29
modules/desktop/phosh.nix Normal file
View File

@ -0,0 +1,29 @@
{ config, lib, pkgs, ... }:
let
cfg = config.ptw.desktop.phosh;
in {
options.ptw.desktop.phosh = {
enable = lib.mkEnableOption "Enable Phosh";
};
config = lib.mkIf cfg.enable {
assertions = [
{
assertion = config.ptw.services.gdm.enable == false;
message = "Phosh conflicts GDM";
}
{
assertion = config.services.xserver.displayManager.sddm.enable == false;
message = "Phosh conflicts SDDM";
}
];
services.xserver.desktopManager.phosh = {
user = config.ptw.system.singleUser;
group = "users";
#package = pkgs.phosh;
enable = true;
};
};
}

158
modules/desktop/plasma.nix Normal file
View File

@ -0,0 +1,158 @@
{ config, lib, pkgs, ... }:
let
cfg = config.ptw.programs.plasma;
in {
options.ptw.programs.plasma = {
enable = lib.mkEnableOption "Enable KDE Plasma";
mobile = {
enable = lib.mkEnableOption "Enable Plasma Mobile";
};
wayland = {
enable = lib.mkOption {
default = true;
description = "Ignore NixOS 'recommendations' and use the Wayland session by default";
};
};
/*sddm = {
backgroundImage = lib.mkOption {
default = "${pkgs.sddm-sugar-dark}/usr/share/sddm/themes/sugar-dark/Background.jpg";
description = "The background image to use with sddm-sugar-dark";
};
screenWidth = lib.mkOption {
default = 1920;
description = "Width of the screen";
};
screenHeight = lib.mkOption {
default = 1080;
description = "Width of the screen";
};
};*/
};
config = lib.mkIf cfg.enable {
security.pam.services = {
login.enableKwallet = true;
greetd.enableKwallet = true;
};
services.xserver = {
desktopManager.plasma5 = {
enable = true;
runUsingSystemd = true;
mobile.enable = cfg.mobile.enable;
kdeglobals = lib.mkIf cfg.mobile.enable {
KDE = {
StartDragDist = "10";
LookAndFeelPackage = "org.kde.plasma.phone";
};
Icons = {
Theme = "breeze";
};
General = {
ColorScheme = "breeze";
Name = "breeze";
XftHintStyle = "none";
XftSubPixel = "none";
shadeSortColumn = "true";
};
};
kwinrc = lib.mkIf cfg.mobile.enable {
Plugins = {
"org.kde.phone.multitaskingEnabled" = "false";
"kwin4_effect_eyeonscreenEnabled" = "false";
"kwin4_effect_windowapertureEnabled" = "false";
blurEnabled = "false";
contrastEnabled = "false";
};
Windows = {
Placement = "Maximizing";
};
TabBox = {
TouchBorderActive = "9";
TouchBorderAlternativeActive = "9";
BorderActivate = "9";
};
"Effect-PresentWindows" = {
BorderActivateAll = "9";
};
"org.kde.kdecoration2" = {
NoPlugin = "true";
};
TouchEdges = {
Left = "None";
Right = "None";
};
Wayland = {
InputMethod = "${pkgs.maliit-keyboard}/usr/share/applications/com.github.maliit.keyboard.desktop";
};
};
};
# See https://github.com/NixOS/nixpkgs/commit/a506f9c79700255c215dddb53455d5e2bed6c1af
displayManager = {
sddm = {
enable = true;
};
defaultSession = lib.mkIf cfg.wayland.enable "plasmawayland";
#sessionPackages = lib.mkIf cfg.mobile.enable [ pkgs.libsForQt5.plasma5.plasma-mobile ];
};
};
xdg.portal = {
enable = true;
extraPortals = with pkgs; [ xdg-desktop-portal-kde xdg-desktop-portal-gtk ];
};
environment = {
systemPackages = let
plasmaMobilePackages = with pkgs.libsForQt5; with plasma5; with kdeApplications; with kdeFrameworks; [
plasma-mobile
plasma-nano
pkgs.maliit-framework
pkgs.maliit-keyboard
];
kdePackages = with pkgs.libsForQt5; [
okular
kdeconnect-kde
breeze-gtk
#bismuth
gwenview
yakuake
kdeplasma-addons
plasma-nm
] ++ lib.optionals cfg.mobile.enable plasmaMobilePackages;
packages = with pkgs; [
kde-rounded-corners
index-fm
rsibreak
kalendar
kate
okular
ark
kcalc
# Some Gnome software
gnome.totem
];
in kdePackages ++ packages;
sessionVariables = let
askPass = "${pkgs.libsForQt5.ksshaskpass}/bin/ksshaskpass";
in {
SSH_ASKPASS = askPass;
SSH_ASKPASS_REQUIRE = "prefer";
GIT_ASKPASS = askPass;
};
};
};
}

View File

@ -1,13 +0,0 @@
{ config, lib, ... }:
let
cfg = config.ptw.hardware.amdcpu;
in {
options.ptw.hardware.amdcpu = {
enable = lib.mkEnableOption "Enable support for AMD CPUs";
};
config = lib.mkIf cfg.enable {
hardware.cpu.amd.updateMicrocode = true;
};
}

View File

@ -1,19 +0,0 @@
{
config, lib, pkgs, ...
}:
let
cfg = config.ptw.hardware.amdgpu;
in {
options.ptw.hardware.amdgpu = {
enable = lib.mkEnableOption "Enable support for AMDGPU GPUs";
};
config = lib.mkIf cfg.enable {
environment.systemPackages = with pkgs; [
unstable.mesa
unstable.firmwareLinuxNonfree
];
services.xserver.videoDrivers = [ "amdgpu" ];
};
}

View File

@ -1,19 +0,0 @@
{ config, lib, pkgs, ... }:
let
cfg = config.ptw.hardware.intel;
in {
options.ptw.hardware.intel = {
enable = lib.mkEnableOption "Enable support for Intel CPUs";
};
config = lib.mkIf cfg.enable {
hardware = {
cpu.intel.updateMicrocode = true;
# NOTE: Assuming each Intel CPU has integrated graphics
opengl.extraPackages = with pkgs; [ vaapiIntel intel-media-driver ];
};
# TODO: Remove?
services.xserver.videoDrivers = [ "modesetting" "fbdev" ];
};
}

View File

@ -1,18 +1,9 @@
{ config, lib, pkgs, ... }:
let
fetchurl = pkgs.fetchurl;
commit = "821d8f0685ebad0fa2c05c7080f45eafb28ad08c";
kernelVersion = "5.14";
mkPatch = name: sha256: {
name = name;
patch = fetchurl {
inherit sha256;
url = "https://raw.githubusercontent.com/linux-surface/linux-surface/${commit}/patches/${kernelVersion}/${name}.patch";
};
};
cfg = config.ptw.hardware.surface;
fetchurl = pkgs.fetchurl;
commit = "69d1e5826e6380c8ff0cd532e244482097562c3d";
in {
options.ptw.hardware.surface = {
enable = lib.mkEnableOption "Enable support for the Microsoft Surface Pro 6";
@ -36,7 +27,7 @@ in {
};
hardware.video.hidpi.enable = true;
systemd.services.iptsd = {
systemd.services.iptsd = lib.mkForce {
description = "Userspace daemon for Intel Precise Touch & Stylus";
wantedBy = [ "multi-user.target" ];
wants = [ "dev-ipts-15.device" ];
@ -56,103 +47,32 @@ in {
sha256 = "1xj70n9agy41906jgm4yjmsx58i7pzsizpvv3rkzq78k95qjfmc9";
};
};
# from dev.ostylk.de/NixDistro/tablet-mode.git
tablet-mode.enable = true;
};
boot = {
kernelPackages = pkgs.linuxPackages_5_14;
kernelPatches = [
(mkPatch "0001-surface3-oemb" "0ji3glnbaiy10kzi2zi80278vyf0pp23s7dqx8pwirbqxi6pygnp")
(mkPatch "0002-mwifiex" "0d7jpfiyb74i5fm2gdhwa5bi9kd7ff4mb75yss0lvidga10r9hmp")
(mkPatch "0003-ath10k" "0a6iwdw5wkjd24bnz32msncr1am2db36x6qpf652rx12czia8ndj")
(mkPatch "0004-ipts" "0ib7bnh4xanz5cakr50nirshhzn3rb29x9kq4m0snp38fhyaa8dv")
(mkPatch "0005-surface-sam" "19yjxgznhv65g1v6dcv6fklahi2inmf7gllbzmh6k98r3531kzjg")
(mkPatch "0006-surface-sam-over-hid" "0np7zf8328yxy9xzbipqjw014kzy0kmm67c046fmgmvniibixvs7")
(mkPatch "0007-surface-gpe" "164hhw0jh800qxmwiahw4hdsprghm760i8c6pwq89mh440wkfxnk")
(mkPatch "0008-surface-button" "0w03azjlhwdz9isjc5swlpimj48zx7jgjws6ws8xxlb37vbg4lq6")
(mkPatch "0009-surface-typecover" "0s2i13x780zmwbksv4rk1lryrv6n6mvc49ljn3zdy4d9yy10x272")
(mkPatch "0010-cameras" "0vwz609vbrracc8qm1jzm471ls4imqlilf3hh2whsb2w2npmd0kf")
(mkPatch "0011-amd-gpio" "09xjc0fl9vccz1nks6v62359digrk92svr75qz9zcvfmpyxg18z7") # TODO: Maybe drop
{
name = "surface-config";
patch = null;
# Options from https://github.com/linux-surface/linux-surface/blob/master/configs/surface-5.13.config
extraConfig = ''
#
# Surface Aggregator Module
#
SURFACE_AGGREGATOR m
SURFACE_AGGREGATOR_ERROR_INJECTION n
SURFACE_AGGREGATOR_BUS y
SURFACE_AGGREGATOR_CDEV m
SURFACE_AGGREGATOR_REGISTRY m
SURFACE_ACPI_NOTIFY m
SURFACE_DTX m
SURFACE_PLATFORM_PROFILE m
SURFACE_HID m
SURFACE_KBD m
BATTERY_SURFACE m
CHARGER_SURFACE m
#
# Surface Hotplug
#
SURFACE_HOTPLUG m
#
# IPTS touchscreen
#
# This only enables the user interface for IPTS data.
# For the touchscreen to work, you need to install iptsd.
#
MISC_IPTS m
#
# Cameras: IPU3
#
#VIDEO_IPU3_IMGU m
VIDEO_IPU3_CIO2 m
CIO2_BRIDGE y
#INTEL_SKL_INT3472 m
#
# Cameras: Sensor drivers
#
#VIDEO_OV5693 m
VIDEO_OV8865 m
#
# ALS Sensor for Surface Book 3, Surface Laptop 3, Surface Pro 7
#
APDS9960 m
#
# Other Drivers
#
INPUT_SOC_BUTTON_ARRAY m
SURFACE_3_BUTTON m
SURFACE_3_POWER_OPREGION m
SURFACE_PRO3_BUTTON m
SURFACE_GPE m
SURFACE_BOOK1_DGPU_SWITCH m
#
# Other
#
# Prevent a non-fatal "kernel oops" at boot crashing udev
# (https://github.com/linux-surface/linux-surface/issues/61#issuecomment-579298172)
PINCTRL_INTEL y
PINCTRL_SUNRISEPOINT y
# Required for reading battery data
# (https://github.com/linux-surface/surface-aggregator-module/wiki/Testing-and-Installing)
SERIAL_DEV_BUS y
SERIAL_DEV_CTRL_TTYPORT y
MFD_INTEL_LPSS_PCI y
INTEL_IDMA64 y
'';
#
# Other
#
# Prevent a non-fatal "kernel oops" at boot crashing udev
# (https://github.com/linux-surface/linux-surface/issues/61#issuecomment-579298172)
PINCTRL_INTEL y
PINCTRL_SUNRISEPOINT y
# Required for reading battery data
# (https://github.com/linux-surface/surface-aggregator-module/wiki/Testing-and-Installing)
SERIAL_DEV_BUS y
SERIAL_DEV_CTRL_TTYPORT y
MFD_INTEL_LPSS_PCI y
INTEL_IDMA64 y
'';
}
];
};

Binary file not shown.

View File

@ -10,7 +10,7 @@ in {
config = lib.mkIf cfg.enable {
boot.binfmt.emulatedSystems = [ "i686-linux" "aarch64-linux" ]; # For remote building
environment.systemPackages = with pkgs; [ openssh ];
nix.trustedUsers = [ "builder" ];
nix.settings.trusted-users = [ "builder" ];
# TODO: Specify a firewall rule to only allow this from my other NixOS machines
users = {

View File

@ -30,6 +30,7 @@ in {
dynamic_title = true;
decorations = "full";
startup_mode = "Windowed";
#opacity = 0.7;
};
scrolling = {
@ -47,7 +48,6 @@ in {
x = 0;
y = 0;
};
use_thin_strokes = true;
};
debug = {
render_timer = false;
@ -83,7 +83,6 @@ in {
};
};
background_opacity = 0.7;
mouse_bindings = [ {
mouse = "Middle";
action = "PasteSelection";
@ -111,7 +110,6 @@ in {
live_config_reload = true;
enable_experimental_conpty_backend = false;
alt_send_esc = true;
key_bindings = [
{

View File

@ -0,0 +1,15 @@
{ pkgs, lib, config, ... }:
let
cfg = config.ptw.programs.android;
in {
options.ptw.programs.android = {
enable = lib.mkEnableOption "Enable Android development options";
};
config = lib.mkIf cfg.enable {
environment.variables = {
"ANDROID_HOME" = "/home/alexander/Development/Android/Sdk";
};
};
}

View File

@ -0,0 +1,15 @@
{ pkgs, config, lib, ... }:
let
cfg = config.ptw.programs.bluray;
in {
options.ptw.programs.bluray = {
enable = lib.mkEnableOption "Enable bluray playback and decoding. Will rebuild a lot of packages";
};
config = lib.mkIf cfg.enable {
nixpkgs.config.overlays = [
(import ../../../overlays/bluray.nix)
];
};
}

View File

@ -0,0 +1,19 @@
{ config, lib, pkgs, ... }:
let
cfg = config.ptw.programs.direnv;
in {
options.ptw.programs.direnv = {
enable = lib.mkEnableOption "Enable direnv";
};
config = lib.mkIf cfg.enable {
home-manager.users."${config.ptw.system.singleUser}".programs.direnv = {
enable = true;
enableZshIntegration = true;
nix-direnv = {
enable = true;
};
};
};
}

View File

@ -9,17 +9,19 @@ let
rev = "e89a63a62e071180c9cdd9067679fadc3f7bf796";
sha256 = "0gxlz9b7fvbjkqxsyb4l75g7jsxyms0i1vpnb6y499hl115akcaz";
};
in {
options.ptw.programs.emacs = {
enable = lib.mkEnableOption "Configure emacs";
};
config = lib.mkIf cfg.enable {
environment.systemPackages = with pkgs; [ emacsPgtkGcc ];
services.emacs.package = pkgs.emacsPgtkGcc;
environment.systemPackages = with pkgs; [ emacs28NativeComp ];
services.emacs.package = pkgs.emacs28NativeComp;
home-manager.users."${config.ptw.system.singleUser}" = {
home.file = {
#".emacs".text = builtins.replaceStrings [ "%%DARTLANG_ANALYSIS_SERVER_PATH%%" "" ] (builtins.readFile ./dotemacs);
".emacs".source = ./dotemacs;
".emacs.d/mu4e.el".source = ./mu4e.el;
".emacs.d/themes/weyland-yutani-theme.el".source = "${weyland-yutani}/weyland-yutani-theme.el";
@ -48,6 +50,8 @@ in {
json-mode
rust-mode
yaml-mode
lsp-mode lsp-treemacs flycheck company
dart-mode lsp-dart
];
};
};

View File

@ -7,8 +7,10 @@
(setq redisplay-dont-pause t)
(setq jit-lock-defer-time 0)
(setq fast-but-imprecise-scrolling t)
(setq make-backup-files nil)
(setq create-lockfiles nil)
(setq make-backup-files nil) (setq create-lockfiles nil)
; Disable the bell sounds
(setq ring-bell-function 'ignore)
;; A trick for faster startup is to just disable GC for the init phase
;;; See: https://github.com/nilcons/emacs-use-package-fast#a-trick-less-gc-during-startup
@ -90,6 +92,7 @@
(smartparens-global-mode t))
(use-package undo-tree
:config
(setq undo-tree-auto-save-history nil)
(global-undo-tree-mode))
(setq-default indent-tab-mode t)
@ -208,6 +211,18 @@
(use-package json-mode)
(use-package rust-mode)
(use-package yaml-mode)
(add-hook 'dart-mode-hook 'lsp)
(setq lsp-lens-enable t
lsp-signature-auto-activate nil
company-minimum-prefix-length 1
read-process-output-max (* 1024 1024))
(use-package lsp-mode
:init
(setq lsp-keymap-prefix "C-c l")
:hook (
(dart-mode . lsp)
)
:commands lsp)
;; Debugging
;(use-package explain-pause-mode

View File

@ -24,17 +24,18 @@ in {
home-manager.users."${config.ptw.system.singleUser}".programs.firefox = {
enable = true;
extensions = with pkgs.nur.repos.rycee.firefox-addons; [
https-everywhere
ublock-origin
umatrix
decentraleyes
privacy-redirect
];
profiles.default = {
id = 0; # NOTE: This is important
isDefault = true;
name = "Default Profile";
extensions = with pkgs.nur.repos.rycee.firefox-addons; [
#https-everywhere
ublock-origin
umatrix
decentraleyes
privacy-redirect
];
settings = {
"browser.search.suggest.enabled" = false;
"browser.tabs.drawInTitlebar" = true;

View File

@ -0,0 +1,59 @@
{ config, lib, pkgs, ... }:
let
cfg = config.ptw.programs.gaming;
in {
options.ptw.programs.gaming = {
enable = lib.mkEnableOption "Configure gaming options";
};
config = lib.mkIf cfg.enable {
environment.systemPackages = with pkgs; [
# General wine
wineWowPackages.staging winetricks
protontricks
# Lutris for League
lutris-free-wrapped
# prismlauncher-wrapped
# retroarch for retro games
(pkgs.callPackage ./wrapper.nix {
inherit (pkgs) retroarch;
cores = with pkgs.libretro; [
mgba mupen64plus melonds desmume dolphin pcsx2
];
})
#steam-wrapped # Custom package
# Gameplay clip recording
(pkgs.wrapOBS {
plugins = with pkgs.obs-studio-plugins; [
obs-vaapi obs-vkcapture obs-pipewire-audio-capture
];
})
obs-cli
# Gameplay clip editing
kdenlive
# Performance
corectrl
];
programs.gamescope = {
enable = true;
capSysNice = true;
args = ["--rt"];
};
# security.wrappers.gamescope = {
# owner = "alexander";
# group = "alexander";
# source = "${pkgs.gamescope}/bin/gamescope";
# capabilities = "CAP_SYS_NICE=eip";
# };
hardware.steam-hardware.enable = true;
};
}

View File

@ -0,0 +1,37 @@
{ stdenv, lib, makeWrapper, retroarch, cores ? [ ] }:
stdenv.mkDerivation {
pname = "retroarch";
version = lib.getVersion retroarch;
nativeBuildInputs = [ makeWrapper ];
buildCommand = ''
mkdir -p $out/lib
for coreDir in $cores
do
ln -s $coreDir/* $out/lib/.
done
ln -s -t $out ${retroarch}/share
if [ -d ${retroarch}/Applications ]; then
ln -s -t $out ${retroarch}/Applications
fi
makeWrapper ${retroarch}/bin/retroarch $out/bin/retroarch \
--suffix-each LD_LIBRARY_PATH ':' "$cores" \
--add-flags "-L $out/lib/" \
'';
cores = map (x: x + x.libretroCore) cores;
preferLocalBuild = true;
meta = with retroarch.meta; {
inherit changelog description homepage license maintainers platforms;
longDescription =
"RetroArch is the reference frontend for the libretro API. The following cores are included: "
+ lib.concatStringsSep ", " (map (x: "${x.name}") cores)
+ ".";
};
}

View File

@ -0,0 +1,22 @@
{ pkgs, config, lib, ... }:
let
cfg = config.ptw.services.gdm;
in {
options.ptw.services.gdm = {
enable = lib.mkEnableOption "Enable GDM as a display manager";
monitors = lib.mkOption {
description = "The file to use as a monitors.xml";
};
};
config = lib.mkIf cfg.enable {
services.xserver.displayManager.gdm = {
wayland = true;
enable = true;
# TODO: Use monitors.xml
# job
};
};
}

View File

@ -12,6 +12,9 @@ in {
enable = true;
userEmail = "papatutuwawa@polynom.me";
userName = "Alexander \"PapaTutuWawa\"";
# The key on my Yubikey
signing.key = "B688F70D0EC87D5A8A9D3D7A56C749835F3CE824";
extraConfig = {
init = {
defaultBranch = "master";

View File

@ -10,25 +10,41 @@ in {
config = lib.mkIf cfg.enable {
environment = {
systemPackages = with pkgs; [
# Themes
arc-theme
libsForQt5.qtstyleplugin-kvantum
# Gnome Shell Extensions
gnomeExtensions.appindicator
gnomeExtensions.caffeine
gnomeExtensions.gnome-40-ui-improvements
gnomeExtensions.notification-timeout # Custom package
gnomeExtensions.windowisready-remover # Custom package
gnomeExtensions.notification-timeout
gnomeExtensions.window-is-ready-remover
gnomeExtensions.application-volume-mixer
gnomeExtensions.tiling-assistant
gnomeExtensions.tilingnome
gnomeExtensions.tray-icons-reloaded
gnomeExtensions.gsconnect
gnomeExtensions.blur-my-shell
gnomeExtensions.forge
gnomeExtensions.dash-to-dock
gnomeExtensions.sound-output-device-chooser
# Programs
gnome.eog
gnome.nautilus
unstable.gnome.gnome-shell
gnome.evince
gnome.gnome-terminal
gnome-console
pinentry-gnome
mousai
gnome.geary
gnome.gnome-calendar
gnome.gedit
# For config
dconf # For home-manager
libsForQt5.qtstyleplugin-kvantum
];
gnome.excludePackages = pkgs.gnome.optionalPackages;
};
services = {
@ -37,7 +53,7 @@ in {
geoclue2.enable = false;
dleyna-renderer.enable = false;
dleyna-server.enable = false;
gvfs.enable = lib.mkForce false;
gvfs.enable = true;
telepathy.enable = false;
gnome = {
chrome-gnome-shell.enable = false;
@ -61,27 +77,29 @@ in {
libinput.enable = true;
desktopManager.gnome.enable = true;
displayManager.gdm = {
enable = true;
wayland = true;
};
};
};
xdg.portal = {
enable = true;
#extraPortals = [ pkgs.xdg-desktop-portal-gtk ];
gtkUsePortal = true;
#gtkUsePortal = true;
};
qt5 = {
style = "adwaita-dark";
platformTheme = "gnome";
enable = true;
};
home-manager.users."${config.ptw.system.singleUser}" = {
xdg.configFile = {
# Make QT apps use a dark theme
"Kvantum/kvantum.kvconfig".text = ''
[General]
theme=KvArcDark
'';
};
#xdg.configFile = {
# # Make QT apps use a dark theme
# "Kvantum/kvantum.kvconfig".text = ''
# [General]
# theme=KvArcDark
# '';
#};
dconf.settings = {
# The packages come in from modules/programs/gnome
@ -97,7 +115,10 @@ in {
# Extensions
"org/gnome/shell" = {
enabled-extensions = [
enabled-extensions = let
isMiku = config.ptw.system.hostName == "miku";
isNishimiya = config.ptw.system.hostName == "nishimiya";
in [
"caffeine@patapon.info"
"notification-timeout@chlumskyvaclav.gmail.com"
"gnome-ui-tune@itstime.tech"
@ -105,7 +126,9 @@ in {
"windowIsReady_Remover@nunofarruca@gmail.com"
"blur-my-shell@aunetx"
"gsconnect@andyholmes.github.io"
];
"trayIconsReloaded@selfmade.pl"
] ++ (lib.optional isMiku "tiling-assistant@leleat-on-github")
++ (lib.optional (isNishimiya || isMiku) "tilingnome@rliang.github.com");
};
"org/gnome/shell/extensions/caffeine" = {

View File

@ -1,12 +1,14 @@
{ config, lib, pkgs, ... }:
let
makeMpvProfile = { shader, additional ? {} }: {
glsl-shaders = "${pkgs.anime4k}/usr/share/shaders/${shader}";
#mkAnime4kShader = shader: "${pkgs.anime4k}/usr/share/shaders/${shader}";
mkDefaultShader = shader: "${pkgs.mpv-shader-pack}/usr/share/shaders/${shader}";
makeMpvProfile = { shader ? null, gpuContext ? "waylandvk", additional ? {} }: {
glsl-shaders = lib.mkIf (shader != null) shader;
scale = "ewa_lanczossharp";
cscale = "ewa_lanczossharp";
gpu-context = "wayland";
gpu-api = "opengl";
gpu-context = gpuContext;
gpu-api = "vulkan";
hwdec = "vaapi";
vo = "gpu";
video-sync = "display-resample";
@ -15,8 +17,7 @@ let
} // additional // (if config.ptw.programs.mpv != "" then {
# Make mpv pop up on the primary screen
screen-name = config.ptw.programs.mpv.primaryScreen;
fs-screen-name = config.ptw.programs.mpv.primaryScreen;
} else {});
fs-screen-name = config.ptw.programs.mpv.primaryScreen;} else {});
cfg = config.ptw.programs.mpv;
in {
options.ptw.programs.mpv = {
@ -40,13 +41,19 @@ in {
defaultProfiles = [ "anime" ];
profiles = {
anime = (makeMpvProfile {
shader = "Anime4K_Upscale_Denoise_CNN_x2_VL.glsl";
#shader = mkAnime4kShader "Anime4K_Upscale_Denoise_CNN_x2_VL.glsl";
additional = {
fullscreen = "";
};
});
"anime-denoise" = (makeMpvProfile {
shader = "Anime4K_Upscale_Denoise_CNN_x2_VL.glsl";
anime-denoise = (makeMpvProfile {
#shader = mkAnime4kShader "Anime4K_Upscale_Denoise_CNN_x2_VL.glsl";
});
non-anime = (makeMpvProfile {
shader = mkDefaultShader "FSRCNNX_x2_8-0-4-1.glsl";
});
non-anime-strong = (makeMpvProfile {
shader = mkDefaultShader "FSRCNNX_x2_16-0-4-1.glsl";
});
};
};

View File

@ -0,0 +1,28 @@
{ config, lib, pkgs, ... }:
let
cfg = config.ptw.programs.neovim;
in {
options.ptw.programs.neovim = {
enable = lib.mkEnableOption "Enable and configure neovim using HomeManager";
};
config = lib.mkIf cfg.enable {
home-manager.users."${config.ptw.system.singleUser}" = {
programs.neovim = {
enable = true;
extraPackages = with pkgs; [
# For telescope-nvim
fd
lazygit
fish
tree-sitter gcc
nodejs_20
# Clipboard
wl-clipboard
];
};
};
};
}

View File

@ -0,0 +1,27 @@
{ config, lib, pkgs, ... }:
let
cfg = config.ptw.programs.obs;
in {
options.ptw.programs.obs = {
enable = lib.mkEnableOption "Configure OBS Studio";
};
config = lib.mkIf cfg.enable {
home-manager.users.${config.ptw.system.singleUser}.programs.obs-studio = {
enable = true;
plugins = with pkgs.obs-studio-plugins; [
wlrobs obs-vkcapture
(obs-pipewire-audio-capture.overrideAttrs (old: {
source = pkgs.fetchFromGitHub {
owner = "dimtpap";
repo = "obs-pipewire-audio-capture";
rev = "dd0cfa9581481c862cddd725e23423cd975265d9";
sha256 = "1kwdlvpvvx6fgnbn3scx5yg8vgxqy0blrbdxnwqdizzwm2m412ls";
};
}))
];
};
};
}

View File

@ -0,0 +1,15 @@
{ config, lib, pkgs, ... }:
let
cfg = config.ptw.programs.office;
in {
options.ptw.programs.office.enable = lib.mkEnableOption "Install and configure office software";
config = lib.mkIf cfg.enable {
environment.systemPackages = with pkgs; [
/*libreoffice*/
texlive.combined.scheme-basic
thunderbird
];
};
}

View File

@ -1,30 +0,0 @@
{ config, lib, pkgs, ... }:
let
cfg = config.ptw.programs.plasma;
in {
options.ptw.programs.plasma = {
enable = lib.mkEnableOption "Enable KDE Plasma";
};
config = lib.mkIf cfg.enable {
services.xserver.desktopManager.plasma5 = {
enable = true;
runUsingSystemd = true;
supportDDC = true;
};
xdg.portal = {
enable = true;
extraPortals = [ pkgs.xdg-desktop-portal-kde ];
};
environment.systemPackages = with pkgs; [
yakuake
libsForQt5.okular
libsForQt5.kdeconnect-kde
index-fm
kasts-git
];
};
}

View File

@ -0,0 +1,26 @@
{ pkgs, config, lib, ... }:
let
cfg = config.ptw.services.sddm;
in {
options.ptw.services.sddm = {
enable = lib.mkEnableOption "Enable SDDM as a display manager";
monitors = lib.mkOption {
description = "The file to use as a monitors.xml";
};
};
config = lib.mkIf cfg.enable {
assertions = [
{
assertion = config.ptw.services.gdm.enable == false;
message = "Having two display managers is a bad idea";
}
];
services.xserver.displayManager.sddm = {
enable = true;
autoNumlock = true;
};
};
}

View File

@ -35,6 +35,10 @@ let
in {
options.ptw.programs.sway = {
enable = lib.mkEnableOption "Configure sway using HomeManager";
extraSessionCommands = lib.mkOption {
description = "Commands to be run before sway is started. See programs.sway.extraSessionCommands";
default = "";
};
};
config = lib.mkIf cfg.enable {
@ -48,7 +52,7 @@ in {
qt5.style = "adwaita-dark";
environment = {
systemPackages = with pkgs; [ adwaita-qt ];
systemPackages = with pkgs; [ adwaita-qt wdisplays ];
sessionVariables = {
# sway
#"_JAVA_AWT_NONREPARENTING" = 1;
@ -61,10 +65,14 @@ in {
};
};
programs.sway.enable = true;
programs.sway = {
enable = true;
extraSessionCommands = cfg.extraSessionCommands;
};
home-manager.users."${config.ptw.system.singleUser}" = {
wayland.windowManager.sway = {
enable = true;
extraSessionCommands = cfg.extraSessionCommands;
config = {
bars = [ ];
startup = [

View File

@ -14,15 +14,16 @@ in {
config = lib.mkIf cfg.enable {
home-manager.users."${config.ptw.system.singleUser}" = {
xdg.configFile."waybar/style.css".source = ./style.css;
xdg.configFile."waybar/style.css".source = lib.mkForce ./style.css;
programs.waybar = {
enable = true;
style = builtins.readFile ./style.css;
/*
settings = [
{
output = [ "${cfg.output}" ];
layer = "bottom";
position = "left";
position = "top";
gtk-layer-shell = true;
modules-left = [ "custom/applauncher" "sway/workspaces" "sway/mode" ];
@ -62,6 +63,7 @@ in {
};
}
];
*/
};
};
};

View File

@ -1,133 +1,151 @@
/*
Based on https://github.com/indicozy/wmtm/blob/main/configs/Flower/config/waybar/style.css
*/
@define-color background #323732;
@define-color foreground #deddda;
@define-color selection #44475a;
@define-color unfocused #6272a4;
@define-color cyan #5d7380;
@define-color green #fff6f6;
@define-color orange #d65d0e;
@define-color pink #ff5370;
@define-color purple #b16286;
@define-color red #bf6374;
@define-color yellow #d79921;
@define-color fore #d1c29d;
* {
font-size: 14px;
font-family: "Hack";
padding: 0px;
margin: 0px;
/* text-shadow:1px 1px 2px rgba(0,0,0,.6); */
border: none;
font-family: Iosevka Nerd Font, sans-serif;
font-size: 13px;
}
window#waybar {
color: @foreground;
border-radius: 0;
/* background-color: rgba(18, 21, 29, 0.98); */
background-color: #12151d;
/* background-color: rgba(0, 0, 0, 0); */
border-bottom: 3px solid #1e222a;
color: #abb2bf;
transition-property: background-color;
transition-duration: .5s;
}
window#waybar.left {
background: rgba(43, 48, 59, .85);
border-top-left-radius: 0px;
border-top-right-radius: 0px;
border-top: none;
margin: 0;
window#waybar.hidden {
opacity: 0.2;
}
window#waybar.bottom {
padding-top: 0px;
background: @green;
border-bottom-left-radius: 0px;
margin: 0;
}
.modules-left,
.modules-center,
.modules-right {
margin: 0;
padding: 0;
}
/* Base styling for modules */
#workspaces,
#mode,
#window,
#cpu,
#memory,
#temperature,
#custom-media,
#custom-fans,
#clock,
#idle_inhibitor,
#language,
#pulseaudio,
#taskbar,
#tray,
#custom-menu {
padding: 1px 0px 1px 0px;
margin: 0px;
}
#pulseaudio, #idle_inhibitor {
font-size: 30px;
margin: 0px 2px;
}
#pulseaudio {
font-size: 16px;
}
#taskbar,
#tray,
#window {
padding: 0;
margin: 0 0px 0 0px;
}
#taskbar {
margin-top: 0px;
}
#taskbar button {
color: @foreground;
border-radius: 0px;
padding: 3px 0px 3px 0px;
}
#taskbar button.active {
icon-shadow: 0px 0px 3px alpha(#111131, .9);
border-style: dashed;
border-width: 0 0 0 0;
border-color: @foreground;
border-radius: 0;
}
#backlight,
#battery,
#network,
#tray {
color: black;
icon-shadow: 0px 1px 2px alpha(#020000, .9);
padding: 2px 0px 2px 0px;
background-color: #1e222a;
padding: 0 10px;
margin: 2px 4px 5px 4px;
border: 3px solid rgba(0, 0, 0, 0);
border-radius: 90px;
background-clip: padding-box;
}
#custom-menu,
#custom-applauncher,
#custom-notifications {
font-size: 30px;
}
#clock {
font-size: 16px;
margin-left: 2px;
margin-right: 2px;
}
#workspaces {
padding: 0px 0px 0px 0px;
margin-left: 0px;
}
#workspaces button {
margin: 0;
padding: 0px 0px 0px 0px;
border-radius: 0px;
color: @foreground;
padding: 0 5px;
min-width: 20px;
color: #61afef;
}
#workspaces button:hover {
background-color: rgba(0, 0, 0, 0.2)
}
#workspaces button.focused {
color: @foreground;
background-color: @purple;
border-style: solid;
border-width: 0 0 0 0;
border-color: @foreground;
border-radius: 0;
color: #c678dd;
}
#workspaces button.urgent {
color: #e06c75;
}
#cpu {
color: #61afef;
}
#memory {
color: #c678dd;
}
#temperature {
color: #d19a66;
}
#temperature.critical {
background-color: #e06c75;
color: #1e222a;
}
#custom-media {
background-color: #c678dd;
color: #1e222a;
}
#custom-fans {
color: #98c379;
}
#clock {
color: #61afef;
}
#idle_inhibitor {
color: #abb2bf;
}
#idle_inhibitor.activated {
background-color: #abb2bf;
color: #1e222a;
}
#language {
color: #56b6c2;
}
#pulseaudio {
color: #d19a66;
}
#pulseaudio.muted {
background-color: #e06c75;
color: #1e222a;
}
#backlight {
color: #61afef;
}
#battery {
color: #98c379;
}
#battery.charging, #battery.plugged {
background-color: #98c379;
color: #1e222a;
}
@keyframes blink {
to {
background-color: #1e222a;
color: #e06c75;
}
}
#battery.critical:not(.charging) {
background-color: #e06c75;
color: #1e222a;
animation-name: blink;
animation-duration: 0.5s;
animation-timing-function: linear;
animation-iteration-count: infinite;
animation-direction: alternate;
}
#network {
color: #c678dd
}
#network.disconnected {
background-color: #e06c75;
color: #1e222a;
}

View File

@ -21,7 +21,10 @@ in {
home-manager.users."${config.ptw.system.singleUser}".programs.zsh = {
enable = true;
history.ignoreSpace = true;
shellAliases = {
shellAliases = let
home = "/home/${config.ptw.system.singleUser}/Development/Personal/nixos-config";
nixosSwitch = "nixos-rebuild --flake .#${config.ptw.system.hostName} switch --use-remote-sudo";
in {
ls = "ls --color=always";
".." = "cd ..";
"..." = "cd ../../";
@ -33,6 +36,8 @@ in {
gds = "git diff --staged";
c = "clear";
suspend = "systemctl suspend";
nixos-rebuild-switch = "pushd; cd ${home}; ${nixosSwitch}; popd";
nixos-rebuild-switch-fast = "pushd; cd ${home}; ${nixosSwitch} --fast; popd";
waifu2x = "flatpak run com.github.nihui.waifu2x-ncnn-vulkan";
};
@ -42,8 +47,14 @@ in {
bindkey "\e[3~" delete-char
'';
history.share = true;
initExtraFirst = let
enableDirenv = lib.optionalString
config.ptw.programs.direnv.enable
"eval \"$(${pkgs.direnv}/bin/direnv hook zsh)\"";
in ''
${enableDirenv}
# TODO: Maybe move this somewhere else
initExtraFirst = ''
wcurl() {
[[ -z "$1" ]] && echo "Error: No URL specified" && exit 1
@ -90,15 +101,17 @@ in {
sha256 = "1y8wkmhgkkyfz91y1f8crh6cg912n87gmcchc8xhnwji11n1mqrq";
};
}
/*
{
name = "zsh-syntax-highlighting";
src = pkgs.fetchFromGitHub {
owner = "zsh-users";
repo = "zsh-syntax-highlighting";
rev = "6e0e950154a4c6983d9e077ed052298ad9126144";
sha256 = "09bkg1a7qs6kvnq17jnw5cbcjhz9sk259mv0d5mklqaifd0hms4v";
rev = "c5ce0014677a0f69a10b676b6038ad127f40c6b1";
sha256 = "sha256-UqeK+xFcKMwdM62syL2xkV8jwkf/NWfubxOTtczWEwA=";
};
}
*/
];
};
};

View File

@ -0,0 +1,24 @@
{ config, lib, pkgs, ... }:
let
cfg = config.ptw.security.apparmor;
in {
options.ptw.security.apparmor = {
enable = lib.mkEnableOption "Enable AppArmor";
};
config = lib.mkIf cfg.enable {
environment.systemPackages = with pkgs; [
apparmor-bin-utils
];
services.dbus.apparmor = "enabled";
security.apparmor = {
enable = true;
enableCache = true;
includes = {
profiles = "${pkgs.apparmor-profiles}/etc/apparmor.d";
};
};
};
}

View File

@ -0,0 +1,27 @@
{ lib, config, pkgs, ...}:
let
cfg = config.ptw.services.cups;
in {
options.ptw.services.cups = {
enable = lib.mkEnableOption "Enable Cups";
};
config = lib.mkIf cfg.enable {
environment.systemPackages = with pkgs; [ gnome.simple-scan ];
services.printing = {
enable = true;
drivers = with pkgs; [ hplip ];
};
services.avahi = {
enable = lib.mkForce true;
nssmdns = true;
};
hardware.sane = {
enable = true;
extraBackends = with pkgs; [ sane-airscan hplip ];
};
};
}

View File

@ -1,4 +1,4 @@
{ config, lib, ... }:
{ config, lib, pkgs, ... }:
let
cfg = config.ptw.services.gamemode;
@ -7,7 +7,15 @@ in {
enable = lib.mkEnableOption "Enable and configure gamemode";
};
config = lib.mkIf cfg.enable {
config = let
keyboardBrightnessScript = pkgs.writeShellScript "keyboard-brightness.sh" ''
${pkgs.rgb_keyboard}/bin/rgb_keyboard -l ripple -b "$1"
'';
in lib.mkIf cfg.enable {
security.sudo.extraConfig = ''
${config.ptw.system.singleUser} ALL = (ALL) NOPASSWD: ${keyboardBrightnessScript}
'';
programs.gamemode = {
enable = true;
enableRenice = true;
@ -23,6 +31,35 @@ in {
ioprio = 0;
inhibit_screensaver = 1;
};
gpu = {
amd_performance_level = "high";
};
custom = let
switchScript = groupName: "${pkgs.dbus}/bin/dbus-send --print-reply --dest=org.fcitx.Fcitx5 /controller org.fcitx.Fcitx.Controller1.SwitchInputMethodGroup string:'${groupName}'";
pauseFcitx = switchScript "Group 2";
resumeFcitx = switchScript "Group 1";
# The scripts
start = pkgs.writeShellScript "gamemode-start.sh" ''
# Disable Fcitx's IME
${pauseFcitx}
# Turn on the keyboard lights
${config.security.wrapperDir}/sudo ${keyboardBrightnessScript} 1
'';
end = pkgs.writeShellScript "gamemode-end.sh" ''
# Resume Fcitx's IME
${resumeFcitx}
# Turn off the keyboard lights
${config.security.wrapperDir}/sudo ${keyboardBrightnessScript} 0
'';
in {
start = "${start}";
end = "${end}";
};
};
};
};

View File

@ -0,0 +1,53 @@
{ lib, config, pkgs, ... }:
let
cfg = config.ptw.services.greetd;
in {
options.ptw.services.greetd = {
enable = lib.mkEnableOption "Enable greetd with gtkgreet";
swayExtra = lib.mkOption {
description = "Extra options to include in the sway config";
default = "";
};
};
config = lib.mkIf cfg.enable {
users.users.greeter = {
isSystemUser = lib.mkForce false;
isNormalUser = true;
createHome = true;
uid = 992;
};
services = {
greetd = {
enable = true;
restart = true;
settings = {
default_session = let
swayConfig = pkgs.writeText "login-sway-config" ''
exec ${pkgs.greetd.gtkgreet}/bin/gtkgreet -l; ${pkgs.sway}/bin/swaymsg exit;
bindsym Mod4+shift+e exec swaynag \
-t warning \
-m 'What do you want to do?' \
-b 'Poweroff' 'systemctl poweroff' \
-b 'Reboot' 'systemctl reboot'
input "*" {
xkb_layout de
}
${cfg.swayExtra}
include /etc/sway/config.d/*
'';
in {
command = "${pkgs.sway}/bin/sway --config ${swayConfig}";
user = "greeter";
};
};
};
};
};
}

View File

@ -10,8 +10,8 @@ in {
config = lib.mkIf cfg.enable {
# TODO: mozc cannot be configured for some reason
i18n.inputMethod = {
enabled = "fcitx";
fcitx.engines = with pkgs.fcitx-engines; [ mozc ];
enabled = "fcitx5";
fcitx5.addons = with pkgs; [ fcitx5-mozc ];
};
environment.systemPackages = with pkgs; [ fcitx5-configtool fcitx5-gtk ];

View File

@ -0,0 +1,29 @@
{ config, lib, pkgs, ... }:
let
cfg = config.ptw.services.input-remapper;
in {
options.ptw.services.input-remapper = {
enable = lib.mkEnableOption "Enable the input-remapper service and install it";
postStartCommand = lib.mkOption {
default = "";
description = "Command to be executed after the input-remapper service has been started";
# type = ;
};
};
config = lib.mkIf cfg.enable {
# TODO: Assert that uinput is in kernelModules
#services.udev = {
# packages = with pkgs; [ input-remapper ];
# extraRules = ''
# KERNEL=="uinput", GROUP="input", MODE="0660"
# '';
#};
services.input-remapper = {
enable = true;
enableUdevRules = true;
serviceWantedBy = [ "default.target" ];
};
};
}

View File

@ -1,35 +0,0 @@
{ config, lib, pkgs, ... }:
let
cfg = config.ptw.services.key-mapper;
in {
options.ptw.services.key-mapper = {
enable = lib.mkEnableOption "Enable the key-mapper service and install it";
};
config = lib.mkIf cfg.enable {
# TODO: Assert that uinput is in kernelModules
services.udev = {
packages = with pkgs; [ key-mapper ];
extraRules = ''
KERNEL=="uinput", GROUP="input", MODE="0660"
'';
};
environment.systemPackages = [
pkgs.key-mapper # Custom package
];
systemd.user.services.key-mapper = {
description = "A tool to change the mapping of your input device buttons";
wantedBy = [ "default.target" ];
serviceConfig = {
Type = "simple";
ExecStart = "${pkgs.key-mapper}/bin/key-mapper-service";
Restart = "always";
# NOTE: The Tartarus may not be connected, so don't fail if we cannot set the preset
ExecPostStart = "${pkgs.key-mapper}/bin/key-mapper --command start --preset NOOP --device \"Razer Razer Tartarus V2\"; exit 0";
};
};
};
}

View File

@ -0,0 +1,48 @@
{ lib, pkgs, config, ... }:
let
cfg = config.ptw.services.logiops;
in {
options.ptw.services.logiops = {
enable = lib.mkEnableOption "Enable logiops";
renice = lib.mkOption {
description = "Set the nice value of the process";
default = true;
};
reniceValue = lib.mkOption {
description = "Set the nice value of the process";
default = -19;
};
};
config = lib.mkIf true {
systemd.services.logiops = {
description = "An unofficial userspace driver for HID++ Logitech devices";
wantedBy = [ "default.target" ];
serviceConfig = let
logiopsConfig = pkgs.writeText "logiops.cfg" ''
devices: (
{
name: "Wireless Mouse MX Master 3";
hiresscroll: {
hires: true;
target: false;
};
smartshift: {
on: true;
threshold: 30;
default_threshold: 30;
};
dpi: 800;
}
);
'';
in {
Type = "simple";
ExecStart = let
renice = lib.optionalString cfg.renice "${pkgs.coreutils-full}/bin/nice -n ${builtins.toString cfg.reniceValue}";
in "${renice} ${pkgs.logiops}/bin/logid -c ${logiopsConfig}";
};
};
};
}

View File

@ -0,0 +1,31 @@
{ lib, config, pkgs, ...}:
let
cfg = config.ptw.services.yubikey;
in {
options.ptw.services.yubikey = {
enable = lib.mkEnableOption "Enable everything for using a YubiKey";
};
config = lib.mkIf cfg.enable {
services = {
# Unprivileged access to the YubiKey
udev.packages = [ pkgs.yubikey-personalization ];
# Allow using the YubiKey as a smart card
pcscd.enable = true;
};
environment.systemPackages = with pkgs; [
# Management
yubikey-manager-qt yubikey-manager yubico-piv-tool
];
programs = {
gnupg.agent = {
enable = true;
enableSSHSupport = true;
};
};
};
}

View File

@ -4,13 +4,14 @@
config = lib.mkIf (config.ptw.system.singleUser == "alexander") {
users.users.alexander = {
isNormalUser = true;
extraGroups = [ "wheel" "audio" "video" "kvm" "input" "libvirtd" ];
hashedPassword = "$5$i4aZuQ/WXP.rFOc$lCzDqbrVsqBQt5954O.3bFPknD0jn27MmqzmE4DIAEC";
extraGroups = [ "wheel" "audio" "video" "kvm" "input" "libvirtd" "scanner" "lp" "alexander" "cdrom" ];
hashedPassword = "$y$j9T$xhnK648hF0yzDnRy0rTT/.$HbDKvNetiGeY3Xjt6/YPIzoxSmdQ0SzhXengOT1Ga01";
shell = pkgs.zsh;
useDefaultShell = false;
uid = 1000;
isSystemUser = false;
};
users.groups.alexander = {};
# Activate gpg
programs.gnupg.agent.enable = true;
@ -18,35 +19,39 @@
# No need to use users."${system.singleUser}" as we already know it
home-manager.users.alexander = {
programs.home-manager.enable = true;
home.stateVersion = "22.11";
programs.ssh = {
enable = true;
extraConfig = ''
IdentitiesOnly yes
'';
includes = [
"config.d/*"
];
matchBlocks = let
sshPort = (import ../../lib/ports.nix).sshPort;
sshPort = 1847;
in {
ayame = {
port = sshPort;
hostname = "78.46.184.48";
user = "alexander";
identityFile = "~/.ssh/polynom.me_ayame";
identitiesOnly = true;
};
"git.polynom.me" = {
port = 2222;
user = "gitea";
hostname = "git.polynom.me";
identityFile = "~/.ssh/gitea_papatutuwawa_ed";
identityFile = "~/.ssh/gitea_papatutuwawa";
};
"github.com" = {
user = "git";
hostname = "github.com";
identityFile = "~/.ssh/github_polynomdivision";
};
"minecraft" = {
port = sshPort;
user = "alexander";
hostname = "49.12.33.24";
identityFile = "~/.ssh/polynom.me";
"codeberg.org" = {
user = "git";
hostname = "codeberg.org";
identityFile = "~/.ssh/codeberg_papatutuwawa";
};
"collaborating.tuhh.de" = {
user = "git";
hostname = "collaborating.tuhh.de";
identityFile = "~/.ssh/gitlab_tuhh";
};
};
};

View File

@ -8,7 +8,7 @@ in {
};
config = lib.mkIf cfg.enable {
environment.systemPackages = with pkgs; [ virglrenderer unstable.qemu ];
environment.systemPackages = with pkgs; [ virglrenderer unstable.qemu virt-manager ];
services.spice-vdagentd.enable = true;
virtualisation.libvirtd = {
@ -23,11 +23,9 @@ in {
"/dev/random", "/dev/urandom",
"/dev/ptmx", "/dev/kvm", "/dev/kqemu",
"/dev/rtc","/dev/hpet",
"/dev/input/by-id/usb-Logitech_USB_Receiver-if02-event-mouse",
"/dev/input/by-id/usb-Razer_Razer_Tartarus_V2-event-kbd",
"/dev/input/by-id/virtual-event-EvdevProxyMouse",
"/dev/input/by-id/virtual-event-EvdevProxyTartarus",
"/dev/input/by-id/usb-Razer_Razer_BlackWidow_Ultimate-event-kbd"
"/dev/input/by-id/virtual-event-EvdevProxyKeyboard",
"/dev/input/by-id/usb-Logitech_USB_Receiver-if02-event-mouse"
]
'';
};

View File

@ -24,7 +24,7 @@ in {
USBIDClass = {vendor=0x046d, model=0xc07c, class="Mouse"}
[[device]]
[device.Simple]
name = "EvdevProxyTartarus"
name = "EvdevProxyKeyboard"
vendor = 0x1337
model = 0x1338
class = "Keyboard"
@ -32,67 +32,67 @@ in {
# the mapped version of the Tartarus evdev node.
# (Useful for qemu)
[[device.Simple.selector]]
EVDEVClass = {phys="\"key-mapper\""}
EVDEVClass = {phys="\"input-remapper\""}
[[device.Simple.selector]]
USBIDClass = {vendor=0x1532, model=0x011a, class="Keyboard"}
'';
"libvirt/hooks/qemu".source = let
vfio-isolate-state = "/tmp/vfio-isolate-state";
in pkgs.writeScript "qemu" ''
#!${pkgs.stdenv.shell}
guest=$1
action=$2
phase=$3
extra=$4
# "libvirt/hooks/qemu".source = let
# vfio-isolate-state = "/tmp/vfio-isolate-state";
# in pkgs.writeScript "qemu" ''
# #!${pkgs.stdenv.shell}
# guest=$1
# action=$2
# phase=$3
# extra=$4
if [[ "$guest" = "win10" ]]; then
case "$action" in
prepare)
# Only do this while in preparation
[[ ! "$phase" = "prepare" ]] && exit 0
# echo "called with $1 $2 $3 $4" > /dev/stderr
# if [[ "$guest" = "win10-gaming" ]]; then
# case "$action" in
# prepare)
# # Only do this while in preparation
# [[ ! "$phase" = "prepare" ]] && exit 0
sudo -u alexander systemctl --user start evdev-proxy.service
sudo -u alexander systemctl --user start scream.service
sleep 2
${pkgs.vfio-isolate}/bin/vfio-isolate \
-u ${vfio-isolate-state} \
cpu-governor performance "$GUEST_CORES" \
cpuset-create --cpus "$GUEST_CORES" /guest.slice \
cpuset-create --cpus C0,4 /host.slice \
move-tasks / /host.slice \
irq-affinity mask "$GUEST_CORES"
;;
stopped)
# Only run when the VM is fully stopped
[[ ! "$phase" = "end" ]] && exit 0
sudo -u alexander systemctl --user stop evdev-proxy.service
sudo -u alexander systemctl --user stop scream.service
${pkgs.vfio-isolate}/bin/vfio-isolate \
restore ${vfio-isolate-state}
esac
fi
'';
# GUEST_CORES="C1-3,5-7"
# ${pkgs.vfio-isolate}/bin/vfio-isolate \
# -u ${vfio-isolate-state} \
# cpu-governor performance "$GUEST_CORES" \
# cpuset-create --cpus "$GUEST_CORES" /guest.slice \
# cpuset-create --cpus C0,4 /host.slice \
# move-tasks / /host.slice \
# irq-affinity mask "$GUEST_CORES"
# ;;
# stopped)
# # Only run when the VM is fully stopped
# [[ ! "$phase" = "end" ]] && exit 0
# ${pkgs.vfio-isolate}/bin/vfio-isolate \
# restore ${vfio-isolate-state}
# esac
# fi
# '';
};
# NOTE: Workaround for libvirt's SYSCONFDIR being set to /var/lib
# (See https://github.com/NixOS/nixpkgs/issues/51152#issuecomment-899374407)
system.activationScripts.libvirt-hooks.text = ''
ln -Tfs /etc/libvirt/hooks /var/lib/libvirt/hooks
'';
ln -Tfs /etc/libvirt/hooks /var/lib/libvirt/hooks
'';
#services.udev.packages = with pkgs; [ evdev-proxy ];
services.udev.packages = with pkgs; [ evdev-proxy ];
systemd = {
services.libvirtd.path = with pkgs; [ vfio-isolate systemd bash ];
#user.services.evdev-proxy = {
# description = "Creates virtual device to proxy evdev devices events";
# #wantedBy = [ "default.target" ];
# serviceConfig = {
# Type = "simple";
# ExecStart = "${pkgs.evdev-proxy}/bin/evdev-proxy";
# Restart = "always";
# };
#};
services = {
libvirtd.path = with pkgs; [ /*vfio-isolate*/ systemd bash ];
};
user.services.evdev-proxy = {
description = "Creates virtual device to proxy evdev devices events";
wantedBy = [ "default.target" ];
serviceConfig = {
Type = "simple";
ExecStart = "${pkgs.evdev-proxy}/bin/evdev-proxy";
Restart = "always";
};
};
};
};
}

29
overlays/bluray.nix Normal file
View File

@ -0,0 +1,29 @@
final: prev:
let
overrideWithAACS = pkgName: prev."${pkgName}".overrideAttrs (old: {
buildInputs = with prev; old.buildInputs ++ [ libaacs ];
});
in {
libbluray = prev.libbluray.override {
withAACS = true;
withBDplus = true;
};
mpvUnwrapped = prev.mpvUnwrapped.overrideAttrs (old: {
buildInputs = with prev; old.buildInputs ++ [ libaacs ];
});
vlc = prev.vlc.overrideAttrs (old: {
buildInputs = with prev; old.buildInputs ++ [ libaacs ];
});
handbrake = prev.handbrake.overrideAttrs (old: {
buildInputs = with prev; old.buildInputs ++ [ libaacs ];
});
/*
mpvUnwrapped = overrideWithAACS "mpvUnwrapped";
handbrake = overrideWithAACS "handbrake";
*/
}

View File

@ -1,6 +1,7 @@
{ pkgs }:
{ pkgs, inputs }:
{
simple = import ./simple.nix;
surface = import ./surface.nix pkgs;
#surface = import ./surface.nix pkgs;
sandbox = import ./sandbox.nix;
}

46
overlays/phosh.nix Normal file
View File

@ -0,0 +1,46 @@
final: prev:
rec {
phoc = prev.phoc.overrideAttrs (old: rec {
version = "0.20.0";
src = prev.fetchFromGitLab {
domain = "gitlab.gnome.org";
group = "World";
owner = "Phosh";
repo = "phoc";
rev = "v${version}";
sha256 = "1mm47n5x7kjgrpxbvb0d0yvpxgzyg90mmmafb6fxhsqklf2dhryy";
};
buildInputs = (map
(x: if (prev.lib.getName x) == "wlroots"
then prev.wlroots_0_15
else x
) old.buildInputs);
});
phosh = prev.phosh.overrideAttrs (old: rec {
version = "0.20.0_beta2";
src = prev.fetchFromGitLab {
domain = "gitlab.gnome.org";
group = "World";
owner = "Phosh";
repo = "phosh";
rev = "v${version}";
fetchSubmodules = true; # including gvc and libcall-ui which are designated as subprojects
sha256 = "sha256-UzOv6ztxYYE4CIzCYKSRfpZzE7oSEKenVX+umkEmFRw=";
};
buildInputs = (map
(x: if (prev.lib.getName x) == "phoc"
then phoc
else x
) old.buildInputs);
postFixup = ''
mkdir -p $out/share/wayland-sessions
ln -s $out/share/applications/sm.puri.Phosh.desktop $out/share/wayland-sessions/
'';
});
}

140
overlays/sandbox.nix Normal file
View File

@ -0,0 +1,140 @@
final: prev:
let
wrapInSandbox = prev.callPackage ../lib/sandbox.nix {};
in {
discord-app-wrapped = wrapInSandbox {
name = "discord-app-wrapped";
launchScriptName = "discord-app";
binary = "${prev.discord-app}/bin/discord-app";
mountInHome = [ ".local/share/discord-app" ];
additionalBlacklist = [ "/mnt" ];
chdirTo = "/home/$USER";
preDesktopFilePhase = ''
mkdir -p $out/share/icons
cp -L ${prev.discord}/share/pixmaps/discord.png $out/share/icons/discord.png
'';
desktopFileAttributes = {
name = "discord-app-wrapped";
#exec = "discord";
icon = "discord";
desktopName = "Discord-App (wrapped)";
genericName = "Instant Messenger";
#categories = [ "Network" "InstantMessaging" ];
};
enableDesktopFile = true;
};
prismlauncher-wrapped = wrapInSandbox {
name = "prismlauncher";
binary = let
script = prev.writeShellScript "prismlauncher-zink.sh" ''
export MESA_LOADER_DRIVER_OVERRIDE=zink
${prev.prismlauncher}/bin/prismlauncher
'';
in "${prev.prismlauncher}/bin/prismlauncher";
launchScriptName = "prismlauncher-wrapped";
mountInHome = [".local/share/PrismLauncher"];
additionalMounts = [
"/etc/profile"
];
additionalBlacklist = [ "/mnt" ];
chdirTo = "/home/$USER";
};
steam-wrapped = wrapInSandbox {
name = "steam-wrapped";
binary = "${prev.steam}/bin/steam";
launchScriptName = "steam";
mountInHome = [
".steam"
".local/share/Steam"
"Downloads/Skyrim Mods"
];
additionalBlacklist = [ "/mnt" ];
additionalMounts = [ "/mnt/Storage/Games/SteamLibrary" ];
chdirTo = "/home/$USER";
preDesktopFilePhase = ''
cp -Lr ${prev.steam}/share/icons $out/share/icons
'';
desktopFileAttributes = {
name = "steam-wrapped";
icon = "steam";
desktopName = "Steam (wrapped)";
};
enableDesktopFile = true;
};
spotify-wrapped = wrapInSandbox {
name = "spotify-wrapped";
launchScriptName = "spotify";
binary = "${prev.spotify}/bin/spotify";
additionalBlacklist = [ "/mnt" ];
mountInHome = [ ".config/spotify" ];
chdirTo = "/home/$USER";
preDesktopFilePhase = ''
cp -Lr ${prev.spotify}/share/icons $out/share/icons
'';
desktopFileAttributes = {
name = "spotify-wrapped";
icon = "spotify-client";
desktopName = "Spotify (wrapped)";
};
enableDesktopFile = true;
};
lutris-free-wrapped = wrapInSandbox {
name = "lutris-free-wrapped";
launchScriptName = "lutris";
binary = "${prev.lutris-free}/bin/lutris";
additionalBlacklist = [ "/mnt" ];
additionalMounts = [
"/mnt/Storage/Games/LeagueOfLegends"
"/mnt/Storage/Games/Origin"
"/mnt/Storage/Games/SteamLibrary"
"/mnt/Storage/Games/Uplay"
"/mnt/tmp"
];
mountInHome = [ ".local/share/lutris" ".config/lutris" "Games" ];
chdirTo = "/home/$USER";
preDesktopFilePhase = ''
mkdir -p $out/share/
cp -Lr ${prev.lutris-free}/share/icons $out/share/icons/
'';
desktopFileAttributes = {
name = "lutris-wrapped";
icon = "lutris";
desktopName = "Lutris (wrapped)";
};
enableDesktopFile = true;
};
discord-wrapped = let
discordPkg = prev.discord;
in wrapInSandbox {
name = "discord-wrapped";
launchScriptName = "discord";
binary = "${discordPkg}/bin/discord";
mountInHome = [ ".config/discord" ".config/BetterDiscord" ];
additionalBlacklist = [ "/mnt" ];
chdirTo = "/home/$USER";
preDesktopFilePhase = ''
mkdir -p $out/share/icons
cp -L ${discordPkg}/share/pixmaps/discord.png $out/share/icons/discord.png
'';
desktopFileAttributes = {
name = "discord-wrapped";
#exec = "discord";
icon = "discord";
desktopName = "Discord (wrapped)";
genericName = "Instant Messenger";
#categories = [ "Network" "InstantMessaging" ];
};
enableDesktopFile = true;
};
}

View File

@ -1,34 +1,12 @@
final: prev:
let
# NOTE: For some reason --fs-screen-name and --screen-name are not in
# 0.33.1. So wait and then remove this.
mpv-git = prev.mpv-unwrapped.overrideAttrs (old: {
version = "0.34.0";
src = builtins.fetchGit {
url = "https://github.com/mpv-player/mpv.git";
ref = "master";
rev = "0b56e1c00a57fdb767674462c299a5c973a9e373";
};
patches = [];
});
in {
mpv = prev.wrapMpv mpv-git {
# Prevent the need for prefixing mpv with DRI_PRIME=1
extraMakeWrapperArgs = [
"--set" "DRI_PRIME" "1"
];
};
gajim = prev.gajim.overrideAttrs (old: {
# Enable notification sounds
propagatedBuildInputs = old.propagatedBuildInputs ++ [ prev.gsound ];
});
final: prev: {
animedl = prev.animedl.overrideAttrs (old: {
extraPkgs = pkgs: with final; [ mpv ];
});
lutris-free = prev.lutris-free.override {
extraPkgs = ps: with ps; [ openssl ];
};
retroarch = prev.retroarch.override (old: {
cores = with prev.libretro; [
desmume
@ -59,4 +37,43 @@ in {
myxer = prev.myxer.overrideAttrs (old: {
cargoPatches = [ ../patches/myxer/0000-1.2.1-set-gio-version.patch ];
});
xournalpp-git = prev.xournalpp.overrideAttrs (old: {
version = "1.1.1";
src = prev.fetchFromGitHub {
owner = "bhennion";
repo = "xournalpp";
rev = "5d1545b0c4303e45b4ddf4ef8a1565eba822a9af";
sha256 = "1d17lvydlny9pvaxa9xy53wxs7i6d563lp5r9g3r1xpgnb7zli8v";
};
});
discord = prev.discord.overrideAttrs (old: rec {
version = "0.0.18";
src = prev.fetchurl {
url = "https://dl.discordapp.net/apps/linux/${version}/discord-${version}.tar.gz";
sha256 = "sha256-BBc4n6Q3xuBE13JS3gz/6EcwdOWW57NLp2saOlwOgMI=";
};
});
tor-browser-bundle-bin = prev.tor-browser-bundle-bin.override {
useHardenedMalloc = false;
};
discord-app = prev.discord-app.override { chromium = prev.ungoogled-chromium; };
# Work around https://github.com/NixOS/nixpkgs/issues/216294
# pkgsi686Linux = prev.pkgsi686Linux.extend (pfinal: pprev: {
# directx-shader-compiler = pprev.directx-shader-compiler.override {stdenv = pfinal.gcc11Stdenv;};
# });
gajim = prev.gajim.overrideAttrs (old: {
propagatedBuildInputs = old.propagatedBuildInputs ++ [
# Make the tray icon work
prev.libappindicator-gtk3
# Play sounds
prev.gsound
];
});
}

View File

@ -1,91 +0,0 @@
{ fetchFromGitLab
, lib
, python3Packages
, gobject-introspection
, gtk3
, pango
, wrapGAppsHook
, xvfb-run
, chromecastSupport ? false
, serverSupport ? false
, keyringSupport ? true
, notifySupport ? true, libnotify
, networkSupport ? true, networkmanager
}:
python3Packages.buildPythonApplication rec {
pname = "sublime-music";
version = "0.11.16";
format = "pyproject";
src = fetchFromGitLab {
owner = "sublime-music";
repo = pname;
rev = "v${version}";
sha256 = "0n06x7l4i9nqbc74yhrjgg10zffdb75jz43mbxd03hr5057fdglz";
};
nativeBuildInputs = [
gobject-introspection
python3Packages.poetry-core
wrapGAppsHook
];
buildInputs = [
gtk3
pango
]
++ lib.optional notifySupport libnotify
++ lib.optional networkSupport networkmanager
;
propagatedBuildInputs = with python3Packages; [
bleach
dataclasses-json
deepdiff
fuzzywuzzy
mpv
peewee
pygobject3
python-Levenshtein
python-dateutil
requests
semver
]
++ lib.optional chromecastSupport PyChromecast
++ lib.optional keyringSupport keyring
++ lib.optional serverSupport bottle
;
# hook for gobject-introspection doesn't like strictDeps
# https://github.com/NixOS/nixpkgs/issues/56943
strictDeps = false;
# Use the test suite provided by the upstream project.
doCheck = false;
checkInputs = with python3Packages; [
pytest
pytest-cov
];
checkPhase = "${xvfb-run}/bin/xvfb-run pytest";
# Also run the python import check for sanity
#pythonImportsCheck = [ "sublime_music" ];
postInstall = ''
install -Dm444 sublime-music.desktop -t $out/share/applications
install -Dm444 sublime-music.metainfo.xml -t $out/share/metainfo
for size in 16 22 32 48 64 72 96 128 192 512 1024; do
install -Dm444 logo/rendered/"$size".png \
$out/share/icons/hicolor/"$size"x"$size"/apps/sublime-music.png
done
'';
meta = with lib; {
description = "GTK3 Subsonic/Airsonic client";
homepage = "https://sublimemusic.app/";
license = licenses.gpl3Plus;
maintainers = with maintainers; [ albakham sumnerevans ];
};
}

View File

@ -0,0 +1,31 @@
{
stdenv
, lib, fetchFromGitLab
, meson, ninja, pkg-config
, qtbase, wrapQtAppsHook
, wlroots_0_16, wayland, pixman
, dfl-applications, dfl-utils, dfl-ipc, wayqt
}:
stdenv.mkDerivation {
pname = "qtgreet";
version = "20230117";
src = fetchFromGitLab {
owner = "marcusbritanicus";
repo = "QtGreet";
rev = "666603c38bbc408fd56126f3c8508009edf8dc44";
sha256 = "0gigmlg4a0ddzhfnkhbrh67m23g6vhzayfv4gbvqjmkky91qnz93";
};
mesonFlags = [
"-Dnodynpath=true"
];
buildInputs = [
qtbase meson ninja pkg-config
wlroots_0_16 wayland pixman
wayqt dfl-applications dfl-ipc dfl-utils
];
nativeBuildInputs = [ wrapQtAppsHook ];
}

View File

@ -0,0 +1,30 @@
{
stdenv
, fetchFromGitHub
, gcc, gnumake
, libusb
}:
stdenv.mkDerivation rec {
pname = "rgb_keyboard";
version = "20230430";
src = fetchFromGitHub {
owner = "PapaTutuWawa";
repo = "rgb_keyboard";
rev = "5bbdafea77ef3c3eb47081494f3b58abcd5c4e27";
sha256 = "0m5hvlhqncy1qn5v6gpsz9qd2p4cvcjjnma08vb4b2ybq4kfv7qw";
};
buildInputs = [
libusb
];
buildPhase = ''
${gnumake}/bin/make build
'';
installPhase = ''
mkdir -p $out/bin/
cp rgb_keyboard $out/bin/
'';
}

View File

@ -0,0 +1,24 @@
{
stdenv
, lib, fetchFromGitLab
, cmake, extra-cmake-modules, pkg-config
, qtbase, qtx11extras, wrapQtAppsHook
, kpipewire, plasma-framework
, xorg
}:
stdenv.mkDerivation rec {
pname = "xwaylandvideobridge";
version = "5.27.3";
src = fetchFromGitLab {
owner = "davidedmundson";
repo = "xwaylandvideobridge";
rev = "b9e0c53570f55f4e8289f72ba78f3945e27e1a1a";
domain = "invent.kde.org";
sha256 = "1ypg2c26r5fy9lr8shif5vqcp06yf7mqqj2ps5g00s7s3ykryxdn";
};
buildInputs = [ qtbase qtx11extras plasma-framework xorg.xcbproto kpipewire cmake pkg-config ];
nativeBuildInputs = [ wrapQtAppsHook extra-cmake-modules ];
}

View File

@ -0,0 +1,46 @@
{
stdenv
, makeDesktopItem, writeScript, fetchurl
, chromium
}:
let
script = writeScript "run-discord-app.sh" ''
${chromium}/bin/chromium \
--class="Discord-App" \
--app="https://discord.com/channels/@me" \
--user-data-dir=$HOME/.local/share/discord-app
'';
desktopItem = makeDesktopItem {
name = "discord-app";
desktopName = "Discord App";
genericName = "All-in-one cross-platform voice and text chat for gamers";
exec = "${script}";
icon = "discord";
type = "Application";
categories = [ "Network" "InstantMessaging" ];
startupWMClass = "Discord-App";
};
iconSvg = fetchurl {
url = "https://discord.com/assets/3437c10597c1526c3dbd98c737c2bcae.svg";
sha256 = "0w18j5pvqnaimnsx9flqm8n5yb7lnkc5jsvf1c9sk5a3jplq2j61";
};
in stdenv.mkDerivation {
pname = "discord-app";
version = "1.0.0";
buildInputs = [ chromium ];
phases = "installPhase";
installPhase = ''
# Install the icon
mkdir -p $out/share/pixmaps
cp ${iconSvg} $out/share/pixmaps/discord.svg
mkdir -p $out/bin
cp ${script} $out/bin/discord-app
cp -r ${desktopItem}/share/* $out/share
'';
}

View File

@ -1,16 +1,17 @@
{
lib, stdenv, pkgs
, extraStartupArgs ? ""
, upstreamElectron ? pkgs.electron
}:
pkgs.unstable.discord.overrideAttrs (old: let
pkgs.discord.overrideAttrs (old: let
asar = pkgs.nodePackages.asar;
gtk3 = pkgs.gtk3;
binaryName = "Discord";
system-electron = "$out/opt/${binaryName}/system-electron.sh";
in rec {
version = "0.0.16";
nativeBuildInputs = with pkgs.unstable; old.nativeBuildInputs ++ [ electron asar ];
version = "0.0.17";
nativeBuildInputs = with pkgs.unstable; old.nativeBuildInputs ++ [ upstreamElectron asar ];
buildPhase = ''
${asar}/bin/asar e resources/app.asar resources/app
rm resources/app.asar

View File

@ -1,82 +0,0 @@
{ lib, fetchurl, gettext, wrapGAppsHook
# Native dependencies
, python3, gtk3, gobject-introspection, gnome
, glib-networking, gsound, nbxmpp, gtksourceview4
# Test dependencies
, xvfb-run, dbus
# Optional dependencies
, enableE2E ? true
, enableSecrets ? true, libsecret
, enableRST ? true, docutils
, enableSpelling ? true, gspell
, enableUPnP ? true, gupnp-igd
, enableOmemoPluginDependencies ? true
, enableAppIndicator ? true, libappindicator-gtk3
, extraPythonPackages ? ps: []
}:
let
commit = "2804e759eee439eb5d660368358b685a3c0b4110";
in python3.pkgs.buildPythonApplication rec {
pname = "gajim";
version = "1.4.0";
src = fetchurl {
url = "https://dev.gajim.org/gajim/gajim/-/archive/${commit}/gajim-${commit}.tar.gz";
sha256 = "sha256-G5nvLlkEU89uAQZuYlZrPa0ycR7kx67sOLmUgORhNJw=";
};
buildInputs = [
gobject-introspection gtk3 gnome.adwaita-icon-theme
glib-networking
] ++ lib.optional enableSecrets libsecret
++ lib.optional enableSpelling gspell
++ lib.optional enableUPnP gupnp-igd
++ lib.optional enableAppIndicator libappindicator-gtk3;
nativeBuildInputs = [
gettext wrapGAppsHook
];
dontWrapGApps = true;
preFixup = ''
makeWrapperArgs+=("''${gappsWrapperArgs[@]}")
'';
propagatedBuildInputs = with python3.pkgs; [
nbxmpp pygobject3 dbus-python pillow css-parser precis-i18n keyring setuptools gsound
gst-python gtksourceview4
] ++ lib.optionals enableE2E [ pycrypto python-gnupg ]
++ lib.optional enableRST docutils
++ lib.optionals enableOmemoPluginDependencies [ python-axolotl qrcode ]
++ extraPythonPackages python3.pkgs;
checkInputs = [ xvfb-run dbus.daemon ];
checkPhase = ''
# https://dev.gajim.org/gajim/gajim/-/issues/10478
rm test/lib/gajim_mocks.py test/unit/test_gui_interface.py
xvfb-run dbus-run-session \
--config-file=${dbus.daemon}/share/dbus-1/session.conf \
${python3.interpreter} setup.py test
'';
doCheck = false;
# necessary for wrapGAppsHook
strictDeps = false;
meta = {
homepage = "http://gajim.org/";
description = "Jabber client written in PyGTK";
license = lib.licenses.gpl3Plus;
maintainers = with lib.maintainers; [ raskin abbradar ];
downloadPage = "http://gajim.org/downloads.php";
updateWalker = true;
platforms = lib.platforms.linux;
};
}

View File

@ -0,0 +1,27 @@
{
lib, stdenv
, fetchFromGitHub
, wayfire, wf-config, librsvg, boost, wlroots, pango, wayland, libxkbcommon, systemd, libinput
, meson, pkg-config, cmake, ninja
}:
stdenv.mkDerivation {
pname = "firedecor";
version = "20220519";
src = fetchFromGitHub {
owner = "AhoyISki";
repo = "Firedecor";
rev = "0170c4df209f0226295a9e2aa3cae782d9861908";
sha256 = "0a8vc4l3az14l8piwzqgfqsdv16kakcvcznvw6q1dgb2sf97zdlv";
};
nativeBuildInputs = [ meson pkg-config cmake ninja ];
buildInputs = [ wayfire librsvg boost wf-config wlroots pango wayland libxkbcommon systemd libinput ];
patchPhase = ''
sed -e "s|wayfire.get_variable(pkgconfig: 'plugindir')|'$out/usr/lib/wayfire'|" --in-place src/meson.build
sed -e "s|wayfire.get_variable(pkgconfig: 'metadatadir')|'$out/usr/lib/wayfire'|" --in-place metadata/meson.build
'';
}

View File

@ -6,19 +6,59 @@ let
discord-system-electron = prev.callPackage ./applications/networking/instant-messengers/discord {
# Wayland
# NOTE: electron under Wayland has no window titlebars
upstreamElectron = prev.electron_16;
extraStartupArgs = "--enable-features=UseOzonePlatform --ozone-platform=wayland";
#extraStartupArgs = "--enable-features=UseOzonePlatform --ozone-platform=wayland --enable-features=WebRTCPipeWireCapturer";
};
wrapInSandbox = prev.callPackage ./sandbox.nix {};
wf-config_0_8 = prev.wf-config.overrideAttrs (old: {
version = "0.8-git";
src = prev.fetchFromGitHub {
owner = "wayfirewm";
repo = "wf-config";
rev = "e42a3870fb194842a505ad5a9671be1aebda0b0b";
sha256 = "0n6i3hizbqixxjh33950ya8avwqil5k94jbgff1pimcbh9ahpgrr";
};
});
wayfire-master = (prev.wayfireApplications-unwrapped.wayfire.overrideAttrs (old: {
version = "0.8.0-20220526";
src = prev.fetchgit {
url = "https://github.com/WayfireWM/wayfire.git";
rev = "5dbf0d0fd8ec46cf112f05fb63057f5b6d06b10d";
sha256 = "sha256-ZeaNSlDHoiLnRlHKk14meDbrizIz+nm3iYl90vvo2Ps=";
fetchSubmodules = true;
};
buildInputs = (map
# Override wlroots with wlroots_0_15
(x: if (prev.lib.getName x) == "wlroots"
then prev.wlroots_0_15
else x
) old.buildInputs) ++ [ prev.pango prev.libevdev prev.nlohmann_json ];
})).override {
wf-config = wf-config_0_8;
};
dfl-ipc = prev.libsForQt5.callPackage development/cpp/dfl-ipc {};
wayqt = prev.libsForQt5.callPackage development/cpp/wayqt {};
dfl-utils = prev.libsForQt5.callPackage development/cpp/dfl-utils {};
dfl-applications = prev.libsForQt5.callPackage development/cpp/dfl-app {
inherit dfl-ipc;
};
kpipewire = prev.libsForQt5.kpipewire.overrideAttrs (old: {
src = prev.fetchFromGitLab {
owner = "plasma";
repo = "kpipewire";
rev = "ed99b94be40bd8c5b7b2a2f17d0622f11b2ab7fb";
domain = "invent.kde.org";
sha256 = "sha256-KhmhlH7gaFGrvPaB3voQ57CKutnw5DlLOz7gy/3Mzms=";
};
});
in {
key-mapper = prev.callPackage ./tools/games/key-mapper {};
inherit discord-system-electron dfl-ipc dfl-applications dfl-utils wayqt;
vfio-isolate = prev.callPackage ./tools/virtualisation/vfio-isolate {};
mopidy-funkwhale = prev.callPackage ./applications/audio/mopidy/funkwhale.nix {};
# Not as clean as I hoped, but it works
gnomeExtensions = prev.gnomeExtensions // {
notification-timeout = prev.callPackage ./desktop/gnome/extensions/notification-timeout {};
windowisready-remover = prev.callPackage ./desktop/gnome/extensions/windowisready-remover {};
};
python3Packages = prev.python3Packages // {
pySmartDL = pySmartDL;
cfscrape = cfscrape;
@ -26,109 +66,59 @@ key-mapper = prev.callPackage ./tools/games/key-mapper {};
replaysorcery = prev.callPackage ./tools/games/replaysorcery {};
evdev-proxy = prev.callPackage ./tools/virtualisation/evdev-proxy {};
virtiofsd = prev.callPackage ./tools/virtualisation/virtiofsd {};
anime4k = prev.callPackage ./misc/video/anime4k {};
mpv-shader-pack = prev.callPackage ./misc/video/mpv-shader-pack {};
anime-dl = prev.callPackage ./tools/video/animedl {
pySmartDL = pySmartDL;
cfscrape = cfscrape;
};
discord-wrapped = wrapInSandbox {
name = "discord";
package = prev.discord;
#package = discord-system-electron;
binaryName = "discord";
mountInHome = [ ".config/discord" ".config/BetterDiscord" ];
additionalBlacklist = [ "/mnt" ];
chdirTo = "/home/$USER";
version = "1.0.1";
copyIntoSandbox = [ "share/pixmaps" ];
desktopFileArgs = {
name = "Discord (wrapped)";
#exec = "discord";
icon = "discord";
desktopName = "Discord (wrapped)";
genericName = "Instant Messenger";
categories = "Network;InstantMessaging;";
};
};
sddm-sugar-dark = prev.callPackage ./sddm-sugar-dark {};
animdl = prev.callPackage ./misc/video/animdl {};
iptsd = prev.callPackage ./tools/daemons/iptsd {};
surface-control = prev.callPackage ./tools/system/surface-control {};
trackma = prev.callPackage ./tools/video/trackma {};
multimc-wrapped = wrapInSandbox {
name = "multimc";
package = prev.multimc;
binaryName = "multimc";
mountInHome = [ ".local/share/multimc" ];
additionalBlacklist = [ "/mnt" ];
chdirTo = "/home/$USER";
extraEnv = {
DRI_PRIME = "1";
};
};
steam-wrapped = wrapInSandbox {
name = "steam";
package = prev.steam;
binaryName = "steam";
mountInHome = [ ".steam" ".local/share/Steam" ];
additionalBlacklist = [ "/mnt" ];
additionalMounts = [ "/mnt/Storage/Games/SteamLibrary" ];
chdirTo = "/home/$USER";
extraEnv = {
DRI_PRIME = "1";
};
copyIntoSandbox = [ "/share" ];
};
android-studio-wrapped = wrapInSandbox {
name = "android-studio";
package = prev.android-studio;
binaryName = "android-studio";
additionalBlacklist = [ "/mnt" ];
mountInHome = [ "Development/Personal/Android" ".android" ];
chdirTo = "/home/$USER";
};
xournalpp-git = prev.xournalpp.overrideAttrs (old: {
version = "1.1.1";
src = prev.fetchFromGitHub {
owner = "xournalpp";
repo = "xournalpp";
rev = "master";
sha256 = "1scwnjzlp27vx5gqx8zk3zy9swwn0xhv550ig4nmjjx609ic1j7n";
};
});
gajim-mainwindow = prev.callPackage ./applications/networking/instant-messengers/gajim {
nbxmpp = prev.python3Packages.nbxmpp.overrideAttrs (old: {
src = prev.fetchFromGitLab {
domain = "dev.gajim.org";
owner = "gajim";
repo = "python-nbxmpp";
rev = "22aaefb2b36eb46a5306092496c2be680b167f61";
sha256 = "sha256-7emxKdeDuQE6OkK+umw2p1drf94yZp+P00tdEfeI81M=";
};
});
};
swaync = prev.callPackage ./tools/desktop/swaync {};
# TODO: Remove once NixOS has version 0.11.16 in their repos
sublime-music-no-test = prev.callPackage ./applications/audio/sublime-music {};
sound-gambit = prev.callPackage tools/audio/sound-gambit {};
ebu-norm = prev.callPackage tools/audio/ebu-norm {};
# TODO: Remove once upstream has a new version tagged
kasts-git = prev.libsForQt5.kasts.overrideAttrs (old: {
src = builtins.fetchTarball {
url = "https://invent.kde.org/plasma-mobile/kasts/-/archive/master/kasts-master.tar.gz";
sha256 = "1n7j4011hgscmjj728iyjgifpbnwc1sy32b5aw834n1vgxfkq00l";
};
payload-dumper = prev.callPackage tools/system/payload-dumper {};
buildInputs = old.buildInputs ++ [ prev.taglib prev.libsForQt5.qtkeychain ];
});
psst = prev.callPackage tools/audio/psst {};
wlrootsqt = prev.libsForQt5.callPackage ./wlrootsqt.nix {};
#spice-gtk = prev.callPackage temp/spice-gtk/default.nix {};
discord-app = prev.callPackage applications/networking/instant-messengers/discord-app {
chromium = prev.ungoogled-chromium;
};
zoom-vm = prev.callPackage scripts/zoom-vm {};
razer-cli = prev.callPackage tools/hardware/razer-cli {};
wayfire-firedecor = prev.callPackage applications/wayfire/firedecor {
wayfire = wayfire-master;
};
sddm-sugar-dark = prev.callPackage themes/sddm/sugar-dark {};
custom-apparmor-utils = prev.callPackage temp/apparmor-utils.nix {};
qtgreet = prev.libsForQt5.callPackage applications/desktop/qtgreet {
inherit dfl-applications dfl-utils dfl-ipc wayqt;
};
kpipewire = prev.libsForQt5.callPackage development/cpp/libkpipewire {};
xwaylandvideobridge = prev.libsForQt5.callPackage applications/desktop/xwaylandvideobridge {
inherit kpipewire;
};
#obs-websocket = prev.libsForQt5.callPackage obs/obs-websocket {};
obs-cli = prev.callPackage obs/obs-cli {};
rgb_keyboard = prev.callPackage ./applications/desktop/rgb_keyboard/default.nix {};
}

View File

@ -1,31 +0,0 @@
{ stdenv
, lib
, fetchFromGitHub }:
stdenv.mkDerivation rec {
pname = "gnome-shell-extension-notification-timeout";
version = "unstable-2021-07-25";
src = fetchFromGitHub {
owner = "vchlum";
repo = "notification-timeout";
rev = "1f8c2a433383f974bd49869db5ae7a6d7a82d302";
sha256 = "1ndr8gn52qggq45lbdc5miz62is8im34nzmzsghcnarrm73naq59";
};
uuid = "notification-timeout@chlumskyvaclav.gmail.com";
dontBuild = true;
installPhase = ''
mkdir -p $out/share/gnome-shell/extensions/${uuid}
cp -r metadata.json extension.js prefs.js schemas/ $out/share/gnome-shell/extensions/${uuid}
'';
meta = with lib; {
description = "Gnome Shell extension for configuring notification timeout. ";
homepage = "https://github.com/vchlum/notification-timeout";
license = licenses.mit;
maintainers = [ ];
};
}

View File

@ -1,32 +0,0 @@
{ stdenv
, lib
, fetchFromGitHub }:
stdenv.mkDerivation rec {
pname = "WindowIsReady-Remover";
version = "1.12";
src = fetchFromGitHub {
owner = "nunofarruca";
repo = "WindowIsReady_Remover";
rev = version;
sha256 = "0yivd8q2mkb2c40n1pndwrsv9bi2lnm3r06wk04vhjc6f8x7qj52";
};
uuid = "windowIsReady_Remover@nunofarruca@gmail.com";
dontBuild = true;
installPhase = ''
mkdir -p $out/share/gnome-shell/extensions/${uuid}
cp -r ${uuid}/* $out/share/gnome-shell/extensions/${uuid}
'';
meta = with lib; {
description = "Removes window is ready Notification";
homepage = "https://github.com/nunofarruca/WindowIsReady_Remover";
# NOTE: Wrong
license = licenses.unlicense;
maintainers = [ ];
};
}

View File

@ -0,0 +1,22 @@
{
stdenv
, lib, fetchFromGitLab
, meson, ninja, pkg-config
, qtbase, wrapQtAppsHook
, dfl-ipc
}:
stdenv.mkDerivation {
pname = "dfl-applications";
version = "20221012";
src = fetchFromGitLab {
owner = "desktop-frameworks";
repo = "Applications";
rev = "08b6740379d596f40562b37b509705f5c8af0c42";
sha256 = "1jiymrg6236572yk6rnbl183fisl4kqr5c2zji910n93zv7lqqiv";
};
buildInputs = [ qtbase meson ninja pkg-config dfl-ipc ];
nativeBuildInputs = [ wrapQtAppsHook ];
}

View File

@ -0,0 +1,21 @@
{
stdenv
, lib, fetchFromGitLab
, meson, ninja, pkg-config
, qtbase, wrapQtAppsHook
}:
stdenv.mkDerivation {
pname = "dfl-ipc";
version = "20221012";
src = fetchFromGitLab {
owner = "desktop-frameworks";
repo = "IPC";
rev = "7370f8da2601a57d85d0989339f6e2fe700f9813";
sha256 = "1iv1kc9i75q56h0zi4fncf0hdf11wjzvjkik14n9nxgbz89w7cyh";
};
buildInputs = [ qtbase meson ninja pkg-config ];
nativeBuildInputs = [ wrapQtAppsHook ];
}

View File

@ -0,0 +1,21 @@
{
stdenv
, lib, fetchFromGitLab
, meson, ninja, pkg-config
, qtbase, wrapQtAppsHook
}:
stdenv.mkDerivation {
pname = "dfl-utils";
version = "20221026";
src = fetchFromGitLab {
owner = "desktop-frameworks";
repo = "Utils";
rev = "603f95cae18998e9ff8b205c3801699056549505";
sha256 = "0wbiaw6d2n13cpnpnk7089c9jqbwxn0dp9qz4n9cp0ic3z5w0gq4";
};
buildInputs = [ qtbase meson ninja pkg-config ];
nativeBuildInputs = [ wrapQtAppsHook ];
}

View File

@ -0,0 +1,21 @@
{
stdenv
, lib, fetchFromGitLab
, cmake, pkg-config
, qtbase, wrapQtAppsHook
, kwayland, ki18n, kcoreaddons
, pipewire, libepoxy, ffmpeg
}:
stdenv.mkDerivation rec {
pname = "xwaylandvideobridge";
version = "5.27.3";
src = builtins.fetchurl {
url = "https://download.kde.org/stable/plasma/${version}/${pname}-${version}.tar.xz";
sha256 = "sha256:0b95jjkfpkvc2ld3x6p7nw6kn6fkqba9q7x95ywvgag2b00jdb56";
};
buildInputs = [ qtbase kwayland ki18n kcoreaddons pipewire libepoxy ffmpeg cmake pkg-config ];
nativeBuildInputs = [ wrapQtAppsHook ];
}

View File

@ -0,0 +1,22 @@
{
stdenv
, lib, fetchFromGitLab
, meson, ninja, pkg-config
, qtbase, wrapQtAppsHook
, wayland, wlroots_0_16
}:
stdenv.mkDerivation {
pname = "wayqt";
version = "20230112";
src = fetchFromGitLab {
owner = "desktop-frameworks";
repo = "wayqt";
rev = "8604391059da1acd5c5b67f44742af10919bb525";
sha256 = "0smbvmgii7f6lsylwg06d7lf83nyiggz8iz7aw3dhf5b8xdhgbaw";
};
buildInputs = [ qtbase wayland wlroots_0_16 meson ninja pkg-config ];
nativeBuildInputs = [ wrapQtAppsHook ];
}

View File

@ -0,0 +1,31 @@
{
pkgs
, lib
, python3Packages
, fetchFromGitea
}:
python3Packages.buildPythonPackage rec {
pname = "keyrings.gopass";
version = "1.0.0";
src = fetchFromGitea {
domain = "git.polynom.me";
owner = "PapaTutuWawa";
repo = pname;
rev = "9c3cd59e7f5ce0a742b238ff0c4761db28344713";
sha256 = "1dg3a6zx3cm9vwsqgkmc604n3fqb760nsmnrfwyfv7y5bmh5822x";
};
nativeBuildInputs = with python3Packages; [ setuptools setuptools-scm ];
doCheck = false;
meta = with lib; {
homepage = "https://git.polynom.me/PapaTutuWawa/keyrings.gopass";
description = "A python-keyring plugin for gopass";
license = licenses.gpl3;
maintainers = [];
platforms = platforms.linux;
};
}

View File

@ -0,0 +1,19 @@
{ fetchFromGitHub, python, lib, poetry2nix }:
poetry2nix.mkPoetryApplication rec {
inherit python;
src = fetchFromGitHub {
owner = "justfoolingaround";
repo = "animdl";
rev = "9167e03ecb60c21ae1ead90d1472cd7157e1d8b7";
sha256 = "1v33kxlxc38awdpxqsb6bfdw0sc45dibg0b4c0qld0pddlppm0qh";
};
projectDir = src;
doCheck = false;
meta = with lib; {
inherit (python.meta) platforms;
};
}

View File

@ -16,10 +16,10 @@ stdenv.mkDerivation rec {
'';
meta = with lib; {
description = "A High-Quality Real Time Upscaler for Anime Video ";
homepage = "A High-Quality Real Time Upscaler for Anime Video ";
description = "A High-Quality Real Time Upscaler for Anime Video";
homepage = "https://bloc97.github.io/Anime4K/";
license = licenses.mit;
maintainers = [ ];
platforms = platforms.linux;
platforms = platforms.all;
};
}

View File

@ -0,0 +1,25 @@
{ stdenv, lib, fetchFromGitHub }:
stdenv.mkDerivation rec {
pname = "mpv-prescalers";
version = "20211110";
src = fetchFromGitHub {
owner = "bjin";
repo = "mpv-prescalers";
rev = "cc02ed95c1fe05b72bc21d41257c4c085e6e409b";
sha256 = "1gc1ka9i7xzxq58175q5svhvp8vr27hy477r4z4nkhp9q1cqj19d";
};
installPhase = ''
find . -type f -iname '*.hook' -exec install -Dm 644 {} -t $out/usr/share/shaders/ \;
'';
meta = with lib; {
description = "prescalers for mpv, as user shaders";
homepage = "https://github.com/bjin/mpv-prescalers";
license = licenses.gpl3;
maintainers = [ ];
platforms = platforms.all;
};
}

View File

@ -0,0 +1,30 @@
{ stdenv, lib, fetchFromGitHub }:
stdenv.mkDerivation rec {
pname = "mpv-shader-pack";
version = "2.0.0";
src = fetchFromGitHub {
owner = "iwalton3";
repo = "default-shader-pack";
rev = "v${version}";
sha256 = "10383h2qq35whj3v1vs34yyqiflxjf1vlv2p4l6jrmljwpjpcj4k";
};
buildPhase = ''
# Packaged by the anime4k package
rm shaders/Anime4K_*.glsl
'';
installPhase = ''
find ./shaders -type f -exec install -Dm 644 {} -t $out/usr/share/shaders/ \;
'';
meta = with lib; {
description = "Preconfigured set of MPV shaders and configurations for MPV Shim media clients.";
homepage = "https://github.com/iwalton3/default-shader-pack";
license = licenses.gpl3;
maintainers = [ ];
platforms = platforms.all;
};
}

View File

@ -0,0 +1,27 @@
{ lib
, buildGoModule
, fetchFromGitHub
}:
buildGoModule rec {
pname = "obs-cli";
version = "0.5.0";
src = fetchFromGitHub {
owner = "muesli";
repo = "obs-cli";
rev = "v${version}";
hash = "sha256-4tjS+PWyP/T0zs4IGE6VQ5c+3tuqxlBwfpPBVEcim6c=";
};
vendorHash = "sha256-RGpkqX97zalZv4aDfihJBKO1l2O8tcxn0I1SPL1WIg8=";
ldflags = [ "-s" "-w" ];
meta = with lib; {
description = "OBS-cli is a command-line remote control for OBS";
homepage = "https://github.com/muesli/obs-cli";
license = licenses.mit;
maintainers = with maintainers; [ ];
};
}

View File

@ -0,0 +1,39 @@
{ lib
, stdenv
, fetchFromGitHub
, cmake, ninja, pkg-config
, qtbase, wrapQtAppsHook
, nlohmann_json, asio, websocketpp
, obs-studio
}:
stdenv.mkDerivation rec {
pname = "obs-websocket";
version = "4.9.1-compat";
src = fetchFromGitHub {
owner = "obsproject";
repo = pname;
rev = "${version}";
sha256 = "14xhk6d7j2q5swfj0b7jdgmswjdkqjnj3q11qs5vbh93hk30jyvh";
};
nativeBuildInputs = [ cmake ninja pkg-config wrapQtAppsHook ];
buildInputs = [ obs-studio qtbase nlohmann_json asio websocketpp ];
cmakeFlags = [
"-DLIBOBS_INCLUDE_DIR=${obs-studio.src}/libobs"
"-Wno-dev"
];
preConfigure = ''
cp ${obs-studio.src}/cmake/external/ObsPluginHelpers.cmake cmake/FindLibObs.cmake
'';
meta = with lib; {
description = "Remote-control of OBS Studio through WebSocket";
homepage = "https://github.com/obsproject/obs-websocket";
license = licenses.gpl2;
platforms = [ "x86_64-linux" "i686-linux" ];
};
}

View File

@ -1,184 +0,0 @@
{
stdenv, lib
, runCommandLocal, writeShellScriptBin, makeDesktopItem
, bubblewrap, coreutils, glibc, pkgsi686Linux
}:
{
name
, package
, binaryName
, version ? "1.0.0"
, desktopFileArgs ? null
, copyIntoSandbox ? null
, unshareUser ? true
, unshareIpc ? true
, unsharePid ? true
, unshareNet ? false
, unshareUts ? true
, unshareCgroup ? true
, dieWithParent ? true
, mountInHome ? []
, chdirTo ? "\"$(pwd)\""
, additionalBlacklist ? []
, additionalMounts ? []
, extraEnv ? {}
}:
let
etcBindFlags = let
files = [
# NixOS Compatibility
"static"
"nix" # mainly for nixUnstable users, but also for access to nix/netrc
# Shells
"bashrc"
"zshenv"
"zshrc"
"zinputrc"
"zprofile"
# Users, Groups, NSS
"passwd"
"group"
"shadow"
"hosts"
"resolv.conf"
"nsswitch.conf"
# User profiles
"profiles"
# Sudo & Su
"login.defs"
"sudoers"
"sudoers.d"
# Time
"localtime"
"zoneinfo"
# Other Core Stuff
"machine-id"
"os-release"
# PAM
"pam.d"
# Fonts
"fonts"
# ALSA
"alsa"
"asound.conf"
# SSL
"ssl/certs"
"pki"
];
in builtins.concatStringsSep "\n "
(map (file: "--ro-bind-try /etc/${file} /etc/${file}") files);
# Create this on the fly instead of linking from /nix
# The container might have to modify it and re-run ldconfig if there are
# issues running some binary with LD_LIBRARY_PATH
createLdConfCache = ''
cat > /etc/ld.so.conf <<EOF
/lib
/lib/x86_64-linux-gnu
/lib64
/usr/lib
/usr/lib/x86_64-linux-gnu
/usr/lib64
/lib/i386-linux-gnu
/lib32
/usr/lib/i386-linux-gnu
/usr/lib32
EOF
ldconfig &> /dev/null
'';
init = run: writeShellScriptBin "${binaryName}-init" ''
source /etc/profile
${createLdConfCache}
exec ${run} "$@"
'';
extraEnvString = lib.foldl (acc: val: acc + val + "\n") "" (lib.mapAttrsToList (name: value: "--setenv ${name} \"${value}\"") extraEnv);
mountHome = mountInHome == [];
initStr = init "${package}/bin/${binaryName}";
bwrapCmd = { initArgs ? "" }: ''
blacklist=(/nix /dev /proc /etc ${lib.optionalString (!mountHome) "/home"} ${builtins.toString additionalBlacklist})
ro_mounts=()
symlinks=()
declare -a auto_mounts
# loop through all directories in the root
for dir in /*; do
# if it is a directory and it is not in the blacklist
if [[ -d "$dir" ]] && [[ ! "''${blacklist[@]}" =~ "$dir" ]]; then
# add it to the mount list
auto_mounts+=(--bind "$dir" "$dir")
fi
done
if [[ "${lib.optionalString (!mountHome) "1"}" = "1" ]]; then
for entry in ${builtins.toString mountInHome}; do
auto_mounts+=(--bind "/home/$USER/$entry" "/home/$USER/$entry")
done
fi
if [[ ! -z "${builtins.toString additionalMounts}" ]]; then
for entry in ${builtins.toString additionalMounts}; do
auto_mounts+=(--bind "$entry" "$entry")
done
fi
cmd=(
${bubblewrap}/bin/bwrap
--dev-bind /dev /dev
--proc /proc
--chdir ${chdirTo}
${lib.optionalString unshareUser "--unshare-user"}
${lib.optionalString unshareIpc "--unshare-ipc"}
${lib.optionalString unsharePid "--unshare-pid"}
${lib.optionalString unshareNet "--unshare-net"}
${lib.optionalString unshareUts "--unshare-uts"}
${lib.optionalString unshareCgroup "--unshare-cgroup"}
${lib.optionalString dieWithParent "--die-with-parent"}
--ro-bind /nix /nix
# Our glibc will look for the cache in its own path in `/nix/store`.
# As such, we need a cache to exist there, because pressure-vessel
# depends on the existence of an ld cache. However, adding one
# globally proved to be a bad idea (see #100655), the solution we
# settled on being mounting one via bwrap.
# Also, the cache needs to go to both 32 and 64 bit glibcs, for games
# of both architectures to work.
--tmpfs ${glibc}/etc \
--symlink /etc/ld.so.conf ${glibc}/etc/ld.so.conf \
--symlink /etc/ld.so.cache ${glibc}/etc/ld.so.cache \
--ro-bind ${glibc}/etc/rpc ${glibc}/etc/rpc \
--remount-ro ${glibc}/etc \
--tmpfs ${pkgsi686Linux.glibc}/etc \
--symlink /etc/ld.so.conf ${pkgsi686Linux.glibc}/etc/ld.so.conf \
--symlink /etc/ld.so.cache ${pkgsi686Linux.glibc}/etc/ld.so.cache \
--ro-bind ${pkgsi686Linux.glibc}/etc/rpc ${pkgsi686Linux.glibc}/etc/rpc \
--remount-ro ${pkgsi686Linux.glibc}/etc \
${etcBindFlags}
"''${ro_mounts[@]}"
"''${symlinks[@]}"
"''${auto_mounts[@]}"
${extraEnvString}
${initStr}/bin/${name}-init ${initArgs}
)
exec "''${cmd[@]}"
'';
bin = writeShellScriptBin name (bwrapCmd { initArgs = ''"$@"''; });
desktopItem = makeDesktopItem (desktopFileArgs // {
exec = "${bin}/bin/${name}";
});
copyIntoSandboxString = lib.concatStrings (map (x: "cp -Lr ${package}/${x} $out/${x}\n") copyIntoSandbox);
in stdenv.mkDerivation {
pname = "${name}-sandboxed";
version = version;
unpackPhase = ":";
dontBuild = true;
installPhase = ''
mkdir -p $out/bin
ln -s ${bin}/bin/${name} $out/bin/${name}
'' + lib.strings.optionalString (!(builtins.isNull desktopFileArgs)) ''
mkdir -p $out/share/
cp -r ${desktopItem}/share/applications $out/share
'' + lib.strings.optionalString (!(builtins.isNull copyIntoSandbox)) copyIntoSandboxString;
}

View File

@ -0,0 +1,46 @@
{
stdenv, lib
, makeDesktopItem, writeShellScriptBin
, virt-manager, libvirt, notify-desktop
}:
let
zoomVmScript = writeShellScriptBin "start-zoom-vm.sh" ''
${notify-desktop}/bin/notify-desktop "Zoom VM" "Starting VM..."
output=$(/run/wrappers/bin/pkexec virsh start zoom 2>&1)
if [[ ! "$?" = "0" ]]; then
${notify-desktop}/bin/notify-desktop -u critical "Zoom VM" "$output"
exit 1
fi
${virt-manager}/bin/virt-manager --connect qemu:///system --show-domain-console zoom
'';
zoomIcon = builtins.fetchurl {
url = "https://dl.flathub.org/repo/appstream/x86_64/icons/128x128/us.zoom.Zoom.png";
sha256 = "0d94vhjna2196s4wnq0vkga345ad5lpb7b5qp6cymwf1hnpg9lyh";
};
in stdenv.mkDerivation rec {
pname = "zoom-vm";
version = "1.0.0";
unpackPhase = ":";
dontBuild = true;
desktopItem = makeDesktopItem {
name = "zoom-vm";
desktopName = "Zoom (VM)";
exec = "start-zoom-vm";
icon = "us.zoom.Zoom";
};
installPhase = ''
# Install the script
mkdir -p $out/bin
cp ${zoomVmScript}/bin/start-zoom-vm.sh $out/bin/start-zoom-vm
# Install the desktop file
mkdir -p $out/share/icons
cp ${zoomIcon} $out/share/icons/us.zoom.Zoom.png
cp -r ${desktopItem}/share/applications $out/share
'';
}

View File

@ -0,0 +1,101 @@
{
fetchFromGitLab
, stdenv, lib
, makeWrapper, writeShellScript
, which, bash, libapparmor, apparmor-parser, libnotify, perl, gawk, python3
, coreutils, gnused, gnugrep
}:
let
apparmor-version = "3.0.4";
apparmor-sources = fetchFromGitLab {
owner = "apparmor";
repo = "apparmor";
rev = "v${apparmor-version}";
sha256 = "1a217j28rgfq4lsmpn0wv1xgmdr9ba8iysv9i6q477kj6z77zrb9";
};
apparmor-meta = component: with lib; {
homepage = "https://apparmor.net/";
description = "A mandatory access control system - ${component}";
license = licenses.gpl2;
maintainers = with maintainers; [ joachifm julm thoughtpolice ];
platforms = platforms.linux;
};
aa-teardown = writeShellScript "aa-teardown" ''
PATH="${lib.makeBinPath [coreutils gnused gnugrep]}:$PATH"
. ${apparmor-parser}/lib/apparmor/rc.apparmor.functions
remove_profiles
'';
setupPython = python3.withPackages (ps: with ps; [ setuptools ]);
prePatchCommon = ''
chmod a+x ./common/list_capabilities.sh ./common/list_af_names.sh
patchShebangs ./common/list_capabilities.sh ./common/list_af_names.sh
substituteInPlace ./common/Make.rules \
--replace "/usr/bin/pod2man" "${perl}/bin/pod2man" \
--replace "/usr/bin/pod2html" "${perl}/bin/pod2html" \
--replace "/usr/share/man" "share/man"
substituteInPlace ./utils/Makefile \
--replace "/usr/include/linux/capability.h" "${stdenv.cc.libc.linuxHeaders}/include/linux/capability.h"
sed --in-place ./utils/Makefile -e 's|''${PYTHON}|${setupPython}/bin/python|g'
cat ./utils/Makefile
'';
in stdenv.mkDerivation {
pname = "apparmor-utils";
version = apparmor-version;
src = apparmor-sources;
strictDeps = true;
nativeBuildInputs = [ makeWrapper which python3 ];
buildInputs = [
bash
perl
python3
libapparmor
libapparmor.python
];
prePatch = prePatchCommon +
# Do not build vim file
''
sed -i ./utils/Makefile -e "/\<vim\>/d"
'' + ''
for file in utils/apparmor/easyprof.py utils/apparmor/aa.py utils/logprof.conf; do
substituteInPlace $file --replace "/sbin/apparmor_parser" "${apparmor-parser}/bin/apparmor_parser"
done
'';
postPatch = "cd ./utils";
makeFlags = [ "LANGS=" ];
installFlags = [ "DESTDIR=$(out)" "BINDIR=$(out)/bin" "VIM_INSTALL_PATH=$(out)/share" "PYPREFIX=" ];
preInstall = ''
ls -l
'';
postInstall = ''
sed -i $out/bin/aa-unconfined -e "/my_env\['PATH'\]/d"
for prog in aa-audit aa-autodep aa-cleanprof aa-complain aa-disable aa-enforce aa-genprof aa-logprof aa-mergeprof aa-unconfined ; do
wrapProgram $out/bin/$prog --prefix PYTHONPATH : "$out/${python3.sitePackages}:$PYTHONPATH"
done
substituteInPlace $out/bin/aa-notify \
--replace /usr/bin/notify-send ${libnotify}/bin/notify-send \
--replace /usr/bin/perl "${perl}/bin/perl -I ${libapparmor}/${perl.libPrefix}"
substituteInPlace $out/bin/aa-remove-unknown \
--replace "/lib/apparmor/rc.apparmor.functions" "${apparmor-parser}/lib/apparmor/rc.apparmor.functions"
wrapProgram $out/bin/aa-remove-unknown \
--prefix PATH : ${lib.makeBinPath [ gawk ]}
ln -s ${aa-teardown} $out/bin/aa-teardown
'';
doCheck = false;
meta = apparmor-meta "user-land utilities";
}

View File

@ -0,0 +1,143 @@
{ lib, stdenv
, fetchurl
, acl
, cyrus_sasl
, docbook_xsl
, libepoxy
, gettext
, gobject-introspection
, gst_all_1
, gtk-doc
, gtk3
, hwdata
, json-glib
, libcacard
, libcap_ng
, libdrm
, libjpeg_turbo
, libopus
, libsoup
, libusb1
, lz4
, meson
, ninja
, openssl
, perl
, phodav
, pixman
, pkg-config
, polkit
, python3
, spice-protocol
, usbredir
, vala
, wayland-protocols
, zlib
, withPolkit ? true
}:
# If this package is built with polkit support (withPolkit=true),
# usb redirection reqires spice-client-glib-usb-acl-helper to run setuid root.
# The helper confirms via polkit that the user has an active session,
# then adds a device acl entry for that user.
# Example NixOS config to create a setuid wrapper for the helper:
# security.wrappers.spice-client-glib-usb-acl-helper.source =
# "${pkgs.spice-gtk}/bin/spice-client-glib-usb-acl-helper";
# On non-NixOS installations, make a setuid copy of the helper
# outside the store and adjust PATH to find the setuid version.
# If this package is built without polkit support (withPolkit=false),
# usb redirection requires read-write access to usb devices.
# This can be granted by adding users to a custom group like "usb"
# and using a udev rule to put all usb devices in that group.
# Example NixOS config:
# users.groups.usb = {};
# users.users.dummy.extraGroups = [ "usb" ];
# services.udev.extraRules = ''
# KERNEL=="*", SUBSYSTEMS=="usb", MODE="0664", GROUP="usb"
# '';
stdenv.mkDerivation rec {
pname = "spice-gtk";
version = "0.40";
outputs = [ "out" "dev" "devdoc" "man" ];
src = fetchurl {
url = "https://www.spice-space.org/download/gtk/${pname}-${version}.tar.xz";
sha256 = "sha256-I/X/f6gLdWR85zzaXq+LMi80Mtu7f286g5Y0YYrbztM=";
};
postPatch = ''
# get rid of absolute path to helper in store so we can use a setuid wrapper
substituteInPlace src/usb-acl-helper.c \
--replace 'ACL_HELPER_PATH"/' '"'
# don't try to setcap/suid in a nix builder
substituteInPlace src/meson.build \
--replace "meson.add_install_script('../build-aux/setcap-or-suid'," \
"# meson.add_install_script('../build-aux/setcap-or-suid',"
'';
nativeBuildInputs = [
docbook_xsl
gettext
gobject-introspection
gtk-doc
libsoup
meson
ninja
perl
pkg-config
python3
python3.pkgs.pyparsing
python3.pkgs.six
vala
];
propagatedBuildInputs = [
gst_all_1.gst-plugins-base gst_all_1.gst-plugins-good
];
buildInputs = [
cyrus_sasl
libepoxy
gtk3
json-glib
libcacard
libcap_ng
libdrm
libjpeg_turbo
libopus
libusb1
lz4
openssl
phodav
pixman
spice-protocol
usbredir
wayland-protocols
zlib
] ++ lib.optionals withPolkit [ polkit acl ] ;
PKG_CONFIG_POLKIT_GOBJECT_1_POLICYDIR = "${placeholder "out"}/share/polkit-1/actions";
mesonFlags = [
"-Dusb-acl-helper-dir=${placeholder "out"}/bin"
"-Dusb-ids-path=${hwdata}/share/hwdata/usb.ids"
];
meta = with lib; {
description = "GTK 3 SPICE widget";
longDescription = ''
spice-gtk is a GTK 3 SPICE widget. It features glib-based
objects for SPICE protocol parsing and a gtk widget for embedding
the SPICE display into other applications such as virt-manager.
Python bindings are available too.
'';
homepage = "https://www.spice-space.org/";
license = licenses.lgpl21;
maintainers = [ maintainers.xeji ];
platforms = platforms.linux;
};
}

View File

@ -0,0 +1,32 @@
{
fetchFromGitHub
, stdenv, formats
, config ? {}
}:
# This package works a bit differently as the config needs to be inside the package.
# Override with config set to the settings you want. See
# https://github.com/MarianArlt/sddm-sugar-dark/blob/master/theme.conf
let
iniFmt = formats.ini {};
configFile = iniFmt.generate "theme.conf" config;
in stdenv.mkDerivation rec {
pname = "sddm-sugar-dark";
version = "1.2";
src = fetchFromGitHub {
owner = "MarianArlt";
repo = "sddm-sugar-dark";
rev = "v${version}";
sha256 = "0gx0am7vq1ywaw2rm1p015x90b75ccqxnb1sz3wy8yjl27v82yhb";
};
dontBuild = true;
installPhase = ''
mkdir -p $out/usr/share/sddm/themes/sugar-dark
cp -r metadata.desktop Main.qml Background.jpg Components Assets $out/usr/share/sddm/themes/sugar-dark
ln -s ${configFile} $out/usr/share/sddm/themes/sugar-dark/theme.conf
'';
}

View File

@ -0,0 +1,111 @@
diff --git a/ebu-norm b/ebu-norm
index ab5fdfe..57d4ca8 100755
--- a/ebu-norm
+++ b/ebu-norm
@@ -12,21 +12,6 @@ THR=-1
# sound-gambit release time (default 10, range 1 to 1000)
REL=10
-# Check availability of dependencies
-function checkAvail()
-{
- which "$1" >/dev/null 2>&1
- ret=$?
- if [ $ret -ne 0 ]
- then
- echo "tool \"$1\" not found." >&2
- exit 1
- fi
-}
-
-for tool in {ffmpeg,bc,sound-gambit}; \
- do checkAvail "$tool"; done
-
#Check for audio files
NUMARG=0
for file in "$@"; do
diff --git a/ebu-plot b/ebu-plot
index 5fb7438..4612fff 100755
--- a/ebu-plot
+++ b/ebu-plot
@@ -23,21 +23,6 @@ then
fi
done
-# Check availability of dependencies
-function checkAvail()
-{
- which "$1" >/dev/null 2>&1
- ret=$?
- if [ $ret -ne 0 ]
- then
- echo "tool \"$1\" not found." >&2
- exit 1
- fi
-}
-
-for tool in {pwsh,ffmpeg,gnuplot}; \
- do checkAvail "$tool"; done
-
# Command usage check
if [ $# -eq 0 ]
then
@@ -82,4 +67,4 @@ echo "Done!"
echo
echo "Skipped items: $SKIPPED"
cat $SKIPFILE
-rm $SKIPFILE
\ No newline at end of file
+rm $SKIPFILE
diff --git a/ebu-scan b/ebu-scan
index 11736d6..8190223 100755
--- a/ebu-scan
+++ b/ebu-scan
@@ -4,21 +4,6 @@
# Usage: ebu-scan <input files>.
-# Check availability of dependencies
-function checkAvail()
-{
- which "$1" >/dev/null 2>&1
- ret=$?
- if [ $ret -ne 0 ]
- then
- echo "tool \"$1\" not found." >&2
- exit 1
- fi
-}
-
-for tool in ffmpeg ; \
- do checkAvail "$tool"; done
-
#Check for audio files and enumerate
NUMARG=0
for file in "$@"; do
diff --git a/tp-norm b/tp-norm
index b8e4997..894f440 100755
--- a/tp-norm
+++ b/tp-norm
@@ -6,21 +6,6 @@
# Option:
# -t Specify true peak target, e.g. -t -2
-# Check availability of dependencies
-function checkAvail()
-{
- which "$1" >/dev/null 2>&1
- ret=$?
- if [ $ret -ne 0 ]
- then
- echo "tool \"$1\" not found." >&2
- exit 1
- fi
-}
-
-for tool in {ffmpeg,bc}; \
- do checkAvail "$tool"; done
-
#Check for audio files
NUMARG=0
for file in "$@"; do

View File

@ -0,0 +1,41 @@
{ stdenv, ffmpeg, sound-gambit, gawk, bc, fetchFromGitHub }:
stdenv.mkDerivation rec {
pname = "ebu-norm";
version = "2.2";
src = fetchFromGitHub {
owner = "chrismhampson";
repo = "ebu-norm";
rev = "v${version}";
sha256 = "120rpi0k3rq0v50ia9cyailgnx5wvpgkzbp8vi74xmr3c0lf26r4";
};
patches = [ ./0000-remove-dep-check.patch ];
buildInputs = [
ffmpeg sound-gambit gawk bc
];
postPatch = ''
for file in ebu-scan ebu-plot ebu-norm tp-norm; do
sed --in-place \
-e "s|ffmpeg|${ffmpeg}/bin/ffmpeg|g" \
-e "s|bc|${bc}/bin/bc|g" \
-e "s|sound-gambit|${sound-gambit}/bin/sound-gambit|g" \
$file
done
'';
installPhase = ''
mkdir -p $out/bin
cp {ebu-scan,ebu-plot,ebu-norm,tp-norm} $out/bin/
'';
meta = with lib; {
description = "An advanced, professional batch normalizer and scanner for EBU R 128 and other target levels.";
homepage = "https://github.com/chrismhampson/ebu-norm";
license = licenses.gpl3;
maintainers = [ ];
};
}

View File

@ -0,0 +1,42 @@
{ lib
, rustPlatform
, fetchFromGitHub
, pkg-config
, cairo
, openssl
, alsa-lib
, dbus
, gtk3
}:
rustPlatform.buildRustPackage rec {
pname = "psst";
version = "1.2.1";
src = fetchFromGitHub {
owner = "jpochyla";
repo = "psst";
rev = "8f142a3232a706537c8477bff43d2e52309f6b78";
sha256 = "00pdijd70rq98lrrfgh6pzqa6w3pp49lmpzaviw7nrgfl7l6j3v0";
};
cargoSha256 = "sha256-/nbYi7n58D8V3qa9rStg7JfGh4sAhTxC2niFFW5Ta34=";
nativeBuildInputs = [ pkg-config ];
buildInputs = [ cairo openssl gtk3 alsa-lib dbus ];
postInstall = ''
# Install the desktop file
mkdir -p $out/share
cp .pkg/psst.desktop $out/share/
'';
meta = with lib; {
description = "A modern Volume Mixer for PulseAudio";
homepage = "https://github.com/Aurailus/Myxer";
license = licenses.gpl3Only;
maintainers = with maintainers; [ erin ];
platforms = platforms.linux;
};
}

View File

@ -0,0 +1,26 @@
{ stdenv, lib, libsndfile, gnumake, pkg-config, fetchFromGitHub }:
stdenv.mkDerivation rec {
pname = "sound-gambit";
version = "0.6";
src = fetchFromGitHub {
owner = "x42";
repo = "sound-gambit";
rev = "v${version}";
sha256 = "18yf7sp6r8gqlifs9zq23ddsi5d46i6sadnh6jnvll3mhgm0h8bv";
};
buildInputs = [ libsndfile pkg-config ];
makeFlags = [
"PREFIX=${placeholder "out"}"
];
meta = with lib; {
description = "Audio File Peak Limiter";
homepage = "https://github.com/x42/sound-gambit";
license = licenses.gpl3;
maintainers = [ ];
};
}

View File

@ -1,42 +0,0 @@
{
stdenv, lib
, fetchFromGitHub
, meson, cmake, ninja, pkg-config
, inih, systemd
}:
stdenv.mkDerivation rec {
pname = "iptsd";
version = "0.4";
src = fetchFromGitHub {
owner = "linux-surface";
repo = pname;
rev = "v${version}";
sha256 = "0bh7rr37yck82g41dw2xcfkmyp1ncd27n1slb8xlknp7vs9f10qa";
};
mesonFlags = [
"-Dsample_config=false"
"-Ddebug_tool=false"
];
patches = [
./meson.patch
];
postPatch = ''
sed -e "s|@UDEVRULESDIR@|$out/lib/udev/rules.d/|" --in-place meson.build
'';
nativeBuildInputs = [ meson cmake ninja pkg-config ];
buildInputs = [ inih systemd ];
meta = with lib; {
homepage = "https://github.com/linux-surface/iptsd";
description = "Userspace daemon for Intel Precise Touch & Stylus";
license = licenses.gpl2;
maintainers = [];
platforms = platforms.linux;
};
}

View File

@ -1,32 +0,0 @@
diff --git a/meson.build b/meson.build
index b74a177..ca41ba3 100644
--- a/meson.build
+++ b/meson.build
@@ -104,18 +104,19 @@ configure_file(
service_manager = get_option('service_manager')
if service_manager.contains('systemd')
systemd = dependency('systemd')
- unitdir = systemd.get_pkgconfig_variable('systemdsystemunitdir')
+ #unitdir = systemd.get_pkgconfig_variable('systemdsystemunitdir')
udev = dependency('udev')
- udevdir = udev.get_pkgconfig_variable('udevdir')
- rulesdir = join_paths(udevdir, 'rules.d')
+ #udevdir = udev.get_pkgconfig_variable('udevdir')
+ #udevdir = '@UDEVDIR@';
+ #rulesdir = join_paths('@UDEVDIR@', 'rules.d')
- install_data(
- join_paths(meson.current_build_dir(), 'iptsd.service'),
- install_dir: unitdir
- )
+########install_data(
+######## join_paths(meson.current_build_dir(), 'iptsd.service'),
+######## install_dir: unitdir
+########)
- install_data('etc/udev/50-ipts.rules', install_dir: rulesdir)
+ install_data('etc/udev/50-ipts.rules', install_dir: '@UDEVRULESDIR@')
endif
if service_manager.contains('openrc')

View File

@ -1,17 +0,0 @@
diff --git a/setup.py b/setup.py
index 99d298e..74a7948 100644
--- a/setup.py
+++ b/setup.py
@@ -107,6 +107,12 @@ setup(
('/usr/bin/', ['bin/key-mapper-control']),
('/usr/bin/', ['bin/key-mapper-helper']),
],
+ scripts=[
+ 'bin/key-mapper-gtk',
+ 'bin/key-mapper-service',
+ 'bin/key-mapper-control',
+ 'bin/key-mapper-helper'
+ ],
install_requires=[
'setuptools',
'evdev',

View File

@ -1,74 +0,0 @@
{
pkgs, lib
, python3Packages, python3
, gtk3, gobject-introspection, git, gnome
, wrapGAppsHook
, makeDesktopItem
, fetchFromGitHub
}:
python3Packages.buildPythonApplication rec {
pname = "key-mapper";
version = "1.2.1";
buildInputs = [ gobject-introspection gtk3 gnome.adwaita-icon-theme ];
nativeBuildInputs = [ wrapGAppsHook ];
propagatedBuildInputs = with python3.pkgs; [ setuptools pydbus evdev pygobject3 ];
src = fetchFromGitHub {
owner = "sezanzeb";
repo = "key-mapper";
rev = version;
sha256 = "07dgp4vays1w4chhd22vlp9bxc49lcgzkvmjqgbr00m3781yjsf7";
};
doCheck = false;
strictDeps = false;
patches = [
./add-scripts.patch
./hack-data-dir.patch
];
# Fix keymapper not finding its data files
preBuild = ''
sed -e "s|@@NIXOS_OUT_PATH@@|$out/usr/share/key-mapper|" --in-place keymapper/data.py
'';
# Required as we otherwise don't get the dbus policy installed
# correctly
preInstall = ''
# see https://github.com/pypa/setuptools/issues/130
${python3}/bin/${python3.executable} setup.py install_data --install-dir=$out --root=$out
'';
postInstall = ''
# Install the udev rules
mkdir -p $out/lib/udev/rules.d
cp data/key-mapper.rules $out/lib/udev/rules.d/key-mapper.rules
sed --in-place -e "s|/bin/key-mapper-control|$out/bin/key-mapper-control|" $out/lib/udev/rules.d/key-mapper.rules
# Install the desktop file
mkdir -p $out/share/icons/hicolor/scalable/apps/
cp -r ${desktopItem}/share/applications $out/share/
cp $out/usr/share/key-mapper/key-mapper.svg $out/share/icons/hicolor/scalable/apps/key-mapper.svg
'';
desktopItem = makeDesktopItem {
name = "key-mapper";
exec = "key-mapper-gtk";
icon = "key-mapper";
desktopName = "key-mapper";
genericName = "key-mapper";
};
meta = with lib; {
homepage = "https://github.com/sezanzeb/key-mapper";
description = "A tool to change the mapping of your input device buttons";
license = licenses.gpl3;
maintainers = [ ];
platforms = lib.platforms.linux;
};
}

View File

@ -1,12 +0,0 @@
diff --git a/keymapper/data.py b/keymapper/data.py
index 6f3e428..8eded95 100644
--- a/keymapper/data.py
+++ b/keymapper/data.py
@@ -68,6 +68,7 @@ def get_data_path(filename=""):
"/usr/share/key-mapper",
"/usr/local/share/key-mapper",
os.path.join(site.USER_BASE, "share/key-mapper"),
+ "@@NIXOS_OUT_PATH@@",
]
if data is None:

View File

@ -1,5 +1,5 @@
{ stdenv, lib,
pkgconfig, cmake, ffmpeg, libdrm, libpulseaudio, xorg, libnotify,
pkg-config, cmake, ffmpeg, libdrm, libpulseaudio, xorg, libnotify,
fetchgit }:
stdenv.mkDerivation rec {
@ -8,13 +8,13 @@ stdenv.mkDerivation rec {
src = fetchgit {
url = "https://github.com/matanui159/${pname}.git";
rev = "d8d5921988b5161004aed6209bd88251d721611d";
sha256 = "14m67mlfp0zh9s0bhz1qxppivw2aignxqb51xb5cy3v8farxmcv4";
rev = version;
sha256 = "sha256-nzilMEAOOLrdtfal+y81WJr6LwOVaQpuheIsSN5m83A=";
deepClone = true;
};
nativeBuildInputs = [
pkgconfig cmake
pkg-config cmake
];
buildInputs = [

View File

@ -0,0 +1,62 @@
{ stdenv, lib,
pkgconfig, cmake, ffmpeg, libdrm, libpulseaudio, xorg,
libcap, wayland, libopus, boost, openssl, libevdev, mesa,
fetchgit
}:
stdenv.mkDerivation rec {
pname = "sunehine";
version = "0.10.1";
src = fetchgit {
url = "https://github.com/loki-47-6F-64/sunshine.git";
rev = "v${version}";
sha256 = "1aw8bis5v7rb3ixl378gqm34rx3sja7pp5g6kjd9b0yvl1bgxai6";
deepClone = true;
};
nativeBuildInputs = [
pkgconfig cmake
];
buildInputs = [
wayland # Wayland
libdrm libcap # KMS
xorg.libxcb xorg.libX11 xorg.libXtst xorg.libXrandr xorg.libXfixes libevdev # X11
libopus libpulseaudio boost ffmpeg openssl # Common
];
propagatedBuildInputs = [ mesa ];
cmakeFlags = [
"-DSUNSHINE_ENABLE_X11=off"
"-DSUNSHINE_ENABLE_CUDA=off"
"-DCMAKE_BUILD_TYPE=Release"
];
NIX_CFLAGS_COMPILE = "-Wformat";
patches = [ ./fuck.patch ];
preConfigure = ''
# Fix hardcoded path to libevdev
sed \
-e "s|/usr/include/libevdev-1.0|${libevdev}/include/libevdev-1.0|" \
-e "s|@@SUNSHINE_ASSETS_DIR@@|$out/share/sunshine|" \
--in-place CMakeLists.txt
'';
installPhase = ''
mkdir -p $out/bin
mkdir -p $out/share/sunshine/
cp -r ../assets $out/share/sunshine/assets
mv sunshine $out/bin/sunshine
'';
meta = with lib; {
description = "Host for Moonlight Streaming Client ";
homepage = "https://github.com/loki-47-6F-64/sunshine";
license = licenses.gpl3;
maintainers = [ ];
platforms = platforms.linux;
};
}

View File

@ -0,0 +1,15 @@
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 45d4bf7..bd8c638 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -241,9 +241,7 @@ else()
list(APPEND SUNSHINE_COMPILE_OPTIONS -O3)
endif()
-if(NOT SUNSHINE_ASSETS_DIR)
- set(SUNSHINE_ASSETS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/assets")
-endif()
+set(SUNSHINE_ASSETS_DIR "@@SUNSHINE_ASSETS_DIR@@/assets")
if(NOT SUNSHINE_CONFIG_DIR)
set(SUNSHINE_CONFIG_DIR "${SUNSHINE_ASSETS_DIR}")

View File

@ -0,0 +1,22 @@
{
lib,
fetchFromGitHub,
python3, xorg
}:
python3.pkgs.buildPythonPackage rec {
pname = "razer-cli";
version = "2.1.0";
src = fetchFromGitHub {
owner = "LoLei";
repo = "razer-cli";
rev = "v${version}";
sha256 = "0vcyssswsw7gzk2xlpvcqc9fgvwxzyivsqmw5r9b391dv3wpr1y7";
};
doCheck = false;
buildInputs = [ xorg.xrdb ];
propagatedBuildInputs = with python3.pkgs; [ setuptools openrazer ];
}

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