Compare commits

..

247 commits
cosmic ... main

Author SHA1 Message Date
fdf9378e6c lock: update 2025-07-02 23:34:51 +02:00
92f75b1a15 lock: update 2025-06-29 14:42:06 +02:00
6551479401 lock: update 2025-06-24 20:56:48 +02:00
0773738cca lock: update 2025-06-19 10:49:08 +02:00
62738d411c nixos/nvidia: update 2025-06-19 10:48:58 +02:00
2715e3140d lock: update 2025-06-15 14:47:47 +02:00
80c06ca3d7 Revert "nixos/core-desktop: disable cuda for qimgv"
This reverts commit b1e0daf1e3.
2025-06-12 20:58:14 +02:00
9a81551bfe lock: update 2025-06-12 20:35:51 +02:00
07ca427669 lock: update 2025-06-06 21:29:24 +02:00
7dce41a818 lock: update 2025-06-05 22:05:38 +02:00
384bc2e88b pkgs/overlays/unstable-from-source: fix when there is no elements found in a given overlay grouping 2025-06-05 19:12:45 +02:00
a8c92f2a6a pkgs/ranger-git: update 2025-06-05 19:05:19 +02:00
6e95f125ce pkgs/overlays/unstable-from-source: fix handling of overlays
crossOverlays are just overlays applied only in the final layer
2025-06-01 20:00:17 +02:00
2d88df163a pkgs/overlays/unstable-from-source: fix infinite recursion in assert
also fix checking of callPackage argument, it was opposite
2025-06-01 19:45:20 +02:00
955083407e pkgs/overlays/unstable-from-source: allow to provide callPackage
that means that you can build package from unstable,
while using dependencies for a given unstable package from stable

needs more testing with nested packages and package sets,
but I don't see why it wouldn't work
2025-06-01 18:48:45 +02:00
a3735e02a9 lock: update 2025-05-31 08:08:28 +02:00
d5569e4321 nixos/nvidia: update 2025-05-31 08:08:28 +02:00
f54c76a6ce nixos/razer: update openrazer package to 3.10.3 2025-05-31 08:08:28 +02:00
91e4fdba56 pkgs/overlays/unstable-from-source: remove unnecesary function 2025-05-31 08:08:28 +02:00
4aa8236957 nixos/shell: make sure zoxide is evaled latest 2025-05-31 08:08:28 +02:00
a1208a79b2 lock: update 2025-05-27 22:01:39 +02:00
2389ca1a05 nixos/shell: patch kitty for copy-ansi-to-clipboard fix
https://github.com/kovidgoyal/kitty/issues/8682
2025-05-27 20:10:51 +02:00
a83809ce09 lock: update 2025-05-24 19:23:58 +02:00
0900eeb1ab pkgs/ranger-git: update 2025-05-24 14:15:07 +02:00
9239fdc7db lock: update 2025-05-24 14:14:55 +02:00
b1e0daf1e3 nixos/core-desktop: disable cuda for qimgv 2025-05-24 14:13:09 +02:00
8550725910 nixos: apply changes for 25.05 2025-05-24 09:39:22 +02:00
81518b6f0c inputs: update nixpkgs branch to 25.05 2025-05-24 08:29:31 +02:00
6712cb63e1 lock: update 2025-05-22 03:00:25 +02:00
5da5e2586d pkgs/ranger-git: update 2025-05-22 02:55:52 +02:00
595c2828b0 pkgs/den-http-get-updater: assert no path is located in nix store 2025-05-18 19:35:34 +02:00
cb05ce5b44 meta: reorganize nix-os and hosts to single directory nixos 2025-05-18 19:23:53 +02:00
be46e02c61 nixos/shell: provide prompt information when SSH_AUTH_SOCK exists 2025-05-18 16:23:53 +02:00
2f88baa90f nixos/shell: use concatStrings for staship prompt format 2025-05-18 16:23:00 +02:00
dfbecb4e13 update-list: auto generate inputs list 2025-05-17 11:23:59 +02:00
9107025328 lock: update 2025-05-16 20:45:10 +02:00
d5bf8cbd5e lock: update 2025-05-16 02:27:11 +02:00
d3baa65e23 lock: update 2025-05-14 01:38:07 +02:00
fe1fff5da5 lock: update 2025-05-13 02:16:16 +02:00
ec38201d26 nixos/nix: add nix-tree 2025-05-11 01:07:19 +02:00
df0f9ea9a3 lock: update 2025-05-11 00:00:53 +02:00
caf800cd06 lock: update 2025-05-10 01:26:30 +02:00
1bc7600f9b lock: update 2025-05-07 21:28:18 +02:00
af26d10814 pkgs/ranger-git: update patch 2025-05-07 12:59:22 +02:00
3cd52e61d0 lock: update 2025-05-07 01:04:38 +02:00
3e999878c2 lock: update 2025-05-05 22:01:19 +02:00
c432ddbff7 pkgs/den-http-get-updater: fix failure delayer 2025-05-05 21:46:17 +02:00
cc61437fc1 default: fix selfPath being provided wrongly
i applied f8a0c6a50c to the wrong if branch
2025-05-04 18:28:06 +02:00
ee05202f5d nixos/nix: add nix-diff 2025-05-04 16:39:18 +02:00
f8a0c6a50c default: properly set outPath when evaluating in store 2025-05-04 16:34:55 +02:00
09f1929960 default: provide a way to check how we've been initialized 2025-05-04 16:33:38 +02:00
3abc719c76 default: use fetchGit when in git repository 2025-05-04 16:19:06 +02:00
3c9a6ebd7d lock: update 2025-05-03 14:28:08 +02:00
87fb77ef11 inputs: don't provide name for fetchTarball 2025-05-03 14:24:44 +02:00
be208e74fb nixos/nix: add nix-output-monitor 2025-05-03 14:21:14 +02:00
b23934143f lock: update 2025-05-02 22:56:47 +02:00
ba6fc1f656 inputs: use my fork for cosmic-modules 2025-05-02 22:54:00 +02:00
30674d583c nixos/nix: update nixos-rebuild from nixpkgs-pr 389487
https://github.com/NixOS/nixpkgs/pull/389487
2025-05-01 17:24:06 +02:00
09cd559534 pkgs/ranger-git: add updater, update 2025-04-29 23:51:18 +02:00
4e9be713ee update-list: provide packages updates 2025-04-29 23:24:11 +02:00
afa94e5ee8 ranger-git: factor out to package 2025-04-29 23:03:12 +02:00
83fb160819 lock: set cosmic-modules lock to commit from my fork
that is from https://github.com/amozeo/nixos-cosmic
2025-04-27 00:02:55 +02:00
884a06bfe1 inputs: move self binding into the body of the function 2025-04-26 13:47:48 +02:00
9afdfdeeab nixpkgs/overlays/cosmic-package: use nixpkgs-unstable from inputs
instead of nixpkgs-unstable pinned in flake lock file
2025-04-26 13:46:30 +02:00
0ae2504b5d lock: update 2025-04-26 13:41:51 +02:00
202bab9d5d nixos/core: enable nix's auto-optimise-store 2025-04-23 12:08:22 +02:00
73498bc6fd nixos/nvidia: update 2025-04-23 04:10:03 +02:00
1334ea0a93 lock: update 2025-04-23 04:09:57 +02:00
6eb7a1cb19 nixos/shell: add nix-convert-hash alias 2025-04-23 04:09:52 +02:00
786529e7a4 gitignore: update
*-configuration.nix is no longer needed
I hate seeing nix outputs being found by git
2025-04-23 02:13:17 +02:00
bc563b7613 lock: update 2025-04-17 20:31:06 +02:00
f2d894d0a2 lock: update 2025-04-13 10:45:43 +02:00
d5922109ae hosts/main: enable mariadb 2025-04-12 12:43:31 +02:00
f7c217b26c hosts: set system.stateVersion to 24.11
Yes, I read all changes that it would do
using nix-diff
2025-04-12 12:32:57 +02:00
186affb97d hosts/main: add cryptocurrency module
this is one of many services
that I had hosted using docker
2025-04-11 19:39:25 +02:00
909955098d inputs: add nix-bitcoin 2025-04-10 19:59:48 +02:00
45a9ced99b lock: update 2025-04-09 12:54:27 +02:00
80cb27a618 pkgs/den-http-get-updater: try evaluate urlLocation multiple times 2025-04-09 12:54:16 +02:00
1cda1638c4 lock: update 2025-04-08 12:45:26 +02:00
0abc5cc90f outputs: expose updateList 2025-04-07 22:29:56 +02:00
837b3d1b96 outputs.nix: fix path handling 2025-04-07 22:14:57 +02:00
5bddee4588 nixos/nvidia: add updater for the driver package 2025-04-07 21:56:41 +02:00
735a41ca0f pkgs/den-http-get-updater: allow to provide unpack and name argument per prefetch 2025-04-07 21:42:19 +02:00
517ca95d8d pkgs/den-http-get-updater: support providing target hash 2025-04-07 21:38:15 +02:00
890260024f pkgs/den-http-get-updater: use sed instead of awk 2025-04-07 21:38:15 +02:00
a361d01683 pkgs/den-http-get-updater: use strict evaluation 2025-04-07 21:38:15 +02:00
1ade763161 pkgs/den-http-get-updater: add extraPackages argument
useful for contentParser argument
2025-04-07 21:38:15 +02:00
5cedeec18c pkgs/den-http-get-updater: support list to prefetch 2025-04-07 21:38:15 +02:00
b188a5239c outputs: use bultins.toString for the default value of selfPath 2025-04-07 13:31:09 +02:00
0d62f52cd5 nixos/razer: move module replacement to module-overrides.nix 2025-04-07 13:25:03 +02:00
8ceac3ce88 nixos/module-overrides: use modulesPath for luksroot override 2025-04-07 13:22:10 +02:00
27b241adff treewide: restructure modules
make every module contain config attribute
and if module doesn't use module arguments,
don't make it a function
2025-04-07 12:54:34 +02:00
4dab0aff15 treewide: standardize comments referencing nixpkgs pr 2025-04-07 12:41:16 +02:00
5b16eb9aba nixos/nix: use remote sudo by default for nixos-rebuild 2025-04-07 12:36:26 +02:00
e30a67f876 lock: update 2025-04-06 13:43:56 +02:00
fb87b9fafb lock: update 2025-04-04 08:45:52 +02:00
1e9d55517d pkgs/top-level: properly get inputs 2025-04-02 15:22:42 +02:00
00cbc505f3 hosts: define hostPlatform in defined systems
instead of getting them impurely from `builtins.currentSystem`
2025-04-02 15:21:29 +02:00
e3264f1451 pkgs/by-name-overlay: use lib from super instead of outputs.nix 2025-04-01 00:57:54 +02:00
f2407664c1 nixos/nix: use proper nixos-rebuild for its reexec 2025-03-29 13:43:24 +01:00
f3fb4bb3b3 nixos/razer: remove unnecesary comment and package 2025-03-29 13:24:59 +01:00
162c32d8fe razer: use newer version 2025-03-29 13:23:59 +01:00
bf1bc73824 nixos/nvidia: update 2025-03-29 13:23:35 +01:00
ec643a6870 lock: update 2025-03-29 13:23:22 +01:00
702a9c9759 core: add nixos-system NIX_PATH 2025-03-23 13:36:26 +01:00
6de65850fe nixos/nix: use nixos-rebuild from nixpkgs/389487 2025-03-23 13:36:26 +01:00
0b028df8a3 lock: update 2025-03-22 15:23:36 +01:00
5a0008e2d9 nixos/nix: wrap nix once 2025-03-18 18:49:10 +01:00
a3f4302bfb Revert "lock: add comments where new revisions can be found"
This reverts commit 17a8b2353c.
2025-03-18 18:19:31 +01:00
72d18c49fe outputs: add updater script 2025-03-18 18:15:14 +01:00
59d6ba8f97 update-list: create
this nix file will store all updaters availabe in my nix dotfiles
2025-03-18 18:13:17 +01:00
476cf36b57 inputs: provide updateScripts 2025-03-18 18:11:09 +01:00
ec12c3eee4 pkgs/den-http-get-updater: init 2025-03-18 18:10:01 +01:00
7ec22b6e52 pkgs/den-update-script: init 2025-03-18 18:09:26 +01:00
3fb3b7771f lock: update 2025-03-17 11:00:31 +01:00
567358418b nixos/nix: wrap nix-env with log format bar 2025-03-16 13:31:06 +01:00
0cc888cb86 nixos/gnupg: use nixos modle options 2025-03-15 13:36:25 +01:00
17a8b2353c lock: add comments where new revisions can be found 2025-03-14 08:18:18 +01:00
6b1ef18743 lock: update 2025-03-14 08:17:16 +01:00
d6e2aad2ed Revert "nixos/nvidia: update driver"
got some issuses with gpu on my main machine

This reverts commit 6344181479.
2025-03-12 23:55:01 +01:00
5d5210546c nixos/shell: add ripgrep 2025-03-12 08:46:52 +01:00
6344181479 nixos/nvidia: update driver 2025-03-12 07:17:28 +01:00
57e722a521 hosts/tablet: use logind options instead of extraConfig 2025-03-10 02:53:54 +01:00
b6f96bcbb9 lock: update 2025-03-06 11:33:21 +01:00
278987461a default: set name for selfInStore 2025-02-27 23:38:38 +01:00
a8da791356 {outputs; lib/gitignore-filer}: factor out gitignore filtering 2025-02-27 23:34:46 +01:00
285eed58c4 pkgs/SPFlashTool5: update to 5.228, use spflashtools for source 2025-02-27 22:03:12 +01:00
d874ae3c0b pkgs/SPFlashTool5: use buildInputs for libraries 2025-02-27 21:32:30 +01:00
dc0351c2c9 outputs: use lib.genAttrs for system attrset generation 2025-02-27 21:29:19 +01:00
6a1b7d27c0 lock: update 2025-02-27 21:27:53 +01:00
e4d8bfada5 nixos/nix-binary-cache: create nix cache signing key if doesn't exists 2025-02-24 13:03:44 +01:00
37801ab26f nixos/nix: properly use makeWrapper hook 2025-02-22 12:07:57 +01:00
762e4cf52a nixos: remove invalid mkDoc, mdDoc uses 2025-02-18 04:24:20 +01:00
5e16b1b0b1 pkgs/overlays/unstable-from-source: use lib.systems.equals for comparing platforms 2025-02-17 19:31:00 +01:00
ab2379f5e5 lock: update 2025-02-17 03:35:53 +01:00
f6b3bea7cb lock: update 2025-02-09 12:11:36 +01:00
bff3e5c2aa outputs: fix typo 2025-02-09 11:44:54 +01:00
7828941e12 nixos/core: remove comment and format module args 2025-02-09 09:32:01 +01:00
e176ea9483 pkgs/mk{WrappedExecutable; ScriptOverride}: remove 2025-02-09 09:30:20 +01:00
b5e40f0d64 nixos/nix: remove use of mkWrappedExecutable and buildEnv 2025-02-09 09:29:17 +01:00
5c01a58f54 nixos/{core; nix}: factor out nix overriding 2025-02-09 09:17:51 +01:00
be62805cc6 ouptuts: create packages set 2025-02-09 08:53:27 +01:00
ec91266fcd pkgs/overlays/unstable-latest: init
this reuses code that was removed in 77ef7434f2
2025-02-09 08:23:49 +01:00
5d9f3332b8 outputs: factor out mkNixosSystem
I hope this makes this file more readable
2025-02-09 03:52:25 +01:00
081c00b7bc outputs: fix typo 2025-02-09 03:24:00 +01:00
08c9fa5545 outputs: merge pipe expression
add comments too
2025-02-09 03:23:07 +01:00
37f4ff706a lock: update 2025-02-01 20:11:32 +01:00
e2a87b71db nixos/nvidia: update package 2025-02-01 20:04:04 +01:00
6659d98a61 pkgs/SPFlashTool5: init 2025-02-01 20:01:17 +01:00
bf4bdc5e41 nixos/nvidia: add patches for 6.13 kernel 2025-01-29 10:25:13 +01:00
ae74f4e097 lock: update 2025-01-29 10:24:41 +01:00
2e82021280 nixos/cosmic: remove cosmic-player 2025-01-29 10:24:34 +01:00
b715a9c200 default.nix: rework gitignore parsing 2025-01-19 18:16:04 +01:00
b73cea4b07 lock: update 2025-01-19 11:20:08 +01:00
3e37f1fbd4 default.nix: use nixpkgs lib 2025-01-13 00:46:20 +01:00
33708ea922 output: remove unnecesary store copy for hosts directory 2025-01-12 23:00:44 +01:00
bb3c272119 pkgs/overlays/version-info-fixup: support unstable-with-meta overlay 2025-01-12 22:19:00 +01:00
77ef7434f2 inputs: pin nixpkgs-unstable 2025-01-12 21:54:47 +01:00
75f5d7ee9d lock: update 2025-01-11 12:12:55 +01:00
78c9b9d297 nixos/core-desktop: use builtin decorations for mpv 2025-01-09 17:48:34 +01:00
1a30ebe4a0 nixos/core-desktop: fix mpv config warning 2025-01-09 17:45:57 +01:00
5f06131076 nixos/cosmic: set default cursor theme 2025-01-04 00:49:57 +01:00
a231968592 nixos/cosmic: update config defaults 2025-01-03 23:06:20 +01:00
04af4df022 lock: update 2025-01-03 03:52:30 +01:00
2d24ce7fd4 pkgs/overlays/cosmic-packages: use unstable-from-source overlay
code here wants to do the same thing as unstable-from-source overlay
2025-01-03 02:30:33 +01:00
0af88c8ae7 pkgs/overlays/unstable-from-source: remove darwin{Sdk; Min}Version from platform 2025-01-03 02:30:33 +01:00
492255e4e0 nixos/nvidia: update driver 2024-12-22 16:37:52 +01:00
c6abe0f8d6 lock: update 2024-12-22 12:12:45 +01:00
fffbd4a181 hosts/main: use ollama from unstable 2024-12-15 08:27:30 +01:00
4968fc8b5e hosts/main: expose ollama server in environment variable 2024-12-15 06:41:08 +01:00
de3e8a3340 hosts/main: enable ollama 2024-12-15 05:22:37 +01:00
bad4bbcb64 nixos/shell.nix: update nvim colorscheme 2024-12-07 14:24:24 +01:00
985c82fa2b lock: fix wrong revision in cosmic-modules 2024-12-07 13:16:22 +01:00
95393d3414 lock: update 2024-12-07 13:05:27 +01:00
719c2f7b02 hosts/main: disable xrdp 2024-12-07 12:57:22 +01:00
e029864fa5 nixos/core-desktop: disable device profile autoswitching
I have no idea why configuration under "bluetooth"
affect device that is connected throug usb.
genius.
2024-12-05 00:06:08 +01:00
7a5bb321ef nixos: replace pavucontrol with pwvucontrol 2024-12-03 20:45:01 +01:00
cdd5121026 nixos/core: replace x11 forwarding with waypipe
waypipe is provided through core module
because maybe I'll want to use it
on servers without desktop
who knows
2024-12-03 09:06:23 +01:00
74f18f5766 nixos/core: fix nix paths unavailable in nix 2024-12-02 06:36:46 +01:00
841e642e7f nixos/core: use 6.11 kernel 2024-12-02 05:57:58 +01:00
27c4a0ad87 nixos/nvidia: add patch for 6.12 kernel 2024-12-02 05:41:25 +01:00
934411dbcf shell.nix: use ripdrag from stable 2024-12-02 03:24:21 +01:00
1ef3c132ba lock: update cosmic-modules 2024-12-02 03:24:21 +01:00
6f479945b7 lock: update and switch nixpkgs to nixos-24.11 2024-12-02 03:24:21 +01:00
5f531791f7 nixos/module-overrides: init, override luksroot 2024-11-30 20:34:58 +01:00
b8d79d3515 nixos/core-desktop: import xdg-default-apps module 2024-11-28 22:03:25 +01:00
82880c0e2f nixos/{core-desktop; xdg-default-apps}: add qimgv and set as default for images 2024-11-23 19:52:48 +01:00
bb10e0e0c4 nixos/xdg-default-apps: set pdf to vivaldi browser 2024-11-22 22:31:14 +01:00
7f1e5ea8ab lock: update 2024-11-20 19:18:22 +01:00
fc7790bc15 hosts/main: enable i2c and openrgb for rgb control 2024-11-07 19:35:52 +01:00
209c87b0ee lock: update 2024-11-05 08:18:44 +01:00
1091dea58e nixos/nvidia: update nvidia drivers to 565.57.01 2024-11-04 00:06:39 +01:00
d33030472f nixos/generic/mpv: fix format 2024-11-03 17:13:16 +01:00
4f57f67555 nixos/core-desktop: declaratively configure mpv 2024-11-03 16:28:12 +01:00
16c1dd9c79 nixos/generic/mpv: init 2024-11-03 16:21:38 +01:00
d9a2100e69 nixos/cosmic: add screenshot keybind 2024-10-30 14:10:40 +01:00
c9c80b8941 nixos/core: enable verbose commit for git 2024-10-27 20:05:03 +01:00
da09435c32 lock: update 2024-10-27 19:55:59 +01:00
fe2aec6681 lock: update 2024-10-18 14:24:22 +02:00
735ebc6110 nixos/core: inherit meta in wrappedNix 2024-10-18 14:24:15 +02:00
bdf8713314 nixos/cosmic: add ToggleSticky shortcut 2024-10-14 02:33:30 +02:00
236bedbcb5 nixos/core-desktop: add kdeconnect 2024-10-13 18:46:09 +02:00
2686d0f8ac nixos/cosmic: lower active hint size and gaps between/around application windows 2024-10-13 01:31:30 +02:00
1740dad460 nixos/cosmic: Fix missing required dependency
current unstable cosmic desktop requires cosmic files to be present
2024-10-10 08:32:02 +02:00
2f2d616232 lock: update nixpkgs, cosmic-modules 2024-10-10 03:39:15 +02:00
8b6f8474a4 nixos/cosmic: provide configuration defaults 2024-10-10 02:31:33 +02:00
fbf078d336 nixos/nvidia: use workaround for nvidia ghost display 2024-10-04 22:48:38 +02:00
7181b2012c hosts/main: enable cudaSupport in nixpkgs 2024-10-03 19:24:45 +02:00
fd458e0151 hosts/tablet: fix typo in module location 2024-10-03 00:01:13 +02:00
aa94855506 nixos/cosmic: enable gnome-keyring 2024-10-02 23:56:34 +02:00
b2a2bdbd8a hosts: use cosmic desktop 2024-10-02 23:41:02 +02:00
47e0304b6d outputs: expose cosmicPackages overlay 2024-10-02 18:38:47 +02:00
454249c104 hosts/vm-base: expose ssh port 2024-10-02 18:34:12 +02:00
85fd323785 nixos/cosmic: add pavucontrol 2024-10-02 18:34:12 +02:00
af5cb9c7d1 nixos/polkit/disable-shutdown: allow delaying power actions 2024-10-02 18:34:12 +02:00
f90a7b4e9a lock: update cosmic-modules 2024-10-02 18:34:12 +02:00
7c9d74e561 pkgs/overlays/cosmic-packages: allow to provide own rustPlatform 2024-10-02 18:34:06 +02:00
667f7d8199 pkgs/overlays/cosmic-packages: use packages constructor from upstream 2024-10-02 18:34:06 +02:00
e4813107c3 pkgs/overlays/cosmic-packages: use unstable pinned in upstream. 2024-10-02 02:14:18 +02:00
cce35f8934 nixos/polkit/network: disallow managing wg-quick services to system accoutns 2024-09-30 12:25:35 +02:00
6209a92212 Merge remote-tracking branch 'origin/main' 2024-09-30 09:15:32 +02:00
d8ca5aec74 lock: update nixpkgs 2024-09-29 23:06:07 +02:00
a20caabad6 nixos/core-desktop: add pcmanfm configuration
I don't expect it to be fully working (pcmanfm.conf),
but I had it uncommited oops
2024-09-29 22:32:34 +02:00
95bdbc6e8c nixos/account: add telegram package 2024-09-19 10:56:06 +02:00
4db494a73c hosts/tablet: use polkit/nework module 2024-09-19 10:53:25 +02:00
72f3d20210 nixos/polkit/network: create and allow to manage wireguard client services 2024-09-16 10:45:08 +02:00
d543c41694 pkgs/overlays/unstable: remove fetching using unstableRevision options
use unstable-from-source overlay instead
2024-09-14 19:51:36 +02:00
d4e7760eb8 pkgs/overlays/unstable-from-source: remove "emulator" attribute from forwarded platform
https://github.com/NixOS/nixpkgs/pull/324071 broke the overlay
2024-09-14 19:49:32 +02:00
f7e48890cd pkgs/overlays/unstable: factor out adding unstable package set to different file 2024-09-14 19:47:41 +02:00
c188003188 nixos/gnome: set theme for gtk-3 apps 2024-09-14 01:54:51 +02:00
6c64393312 outputs: use 'outPath' instead of '__toString' for selfPath 2024-09-10 02:06:42 +02:00
eb3119d34d nixos/desktop: use pcmanfm for desktop installations 2024-09-09 20:31:54 +02:00
8d77a59389 nixos/services/nix-binary-cache: use nix-serve-ng 2024-09-09 19:47:35 +02:00
1b8cd49a57 lock: update nixpkgs 2024-09-08 22:34:57 +02:00
dabc5155c3 nixos/core: enable no-url-literals experiment 2024-09-08 20:22:19 +02:00
a4adeaa674 nixos/account: add jitsi meet desktop app 2024-08-24 00:16:37 +02:00
ac947fa322 nixos/gnome: disable menus extensions 2024-08-17 00:24:03 +02:00
8169b330ea nixos/gnome: set color for pop-shell focus indicator 2024-08-17 00:23:41 +02:00
f47db28aa2 nixos/cosmic: remove cosmic terminal and editor 2024-08-17 00:11:10 +02:00
b8aba059e6 pkgs/overlays/cosmic-packages: update staging nixpkgs pin to current unstable 2024-08-17 00:11:10 +02:00
2012c6e33b lock: update nixpkgs 2024-08-17 00:11:10 +02:00
ccb08c76c8 pkgs/mkScriptOverride: change attributes to remove to proper ones
from argument set
2024-08-17 00:10:45 +02:00
26566f97dd pkgs/mkScriptOverride: support for default name from path 2024-08-16 16:45:13 +02:00
164ceef166 lock: update cosmic-modules 2024-08-16 16:44:45 +02:00
f85b7d9211 hosts/vm-base: add core-destkop 2024-08-08 16:49:01 +02:00
7e38202a05 Merge branch 'cosmic' 2024-08-08 16:48:29 +02:00
f5f02b7e76 nixos/core-desktop: specify Meslo in nerdfonts 2024-08-08 09:22:37 +02:00
117 changed files with 2534 additions and 2854 deletions

4
.gitignore vendored
View file

@ -1,4 +1,4 @@
device-configuration.nix
hardware-configuration.nix
repl-result-*
result
result-*
*.qcow2

View file

@ -3,49 +3,45 @@
# if evaluating inside the store, import the outputs.nix file
let
contains = str: substr: let
str_length = builtins.stringLength str;
substr_length = builtins.stringLength substr;
listOfPossibleSubstrings = builtins.genList (i: builtins.substring i substr_length str) (str_length - substr_length + 1);
in if substr_length > str_length then false else builtins.any (x: x == substr) listOfPossibleSubstrings;
endsWith = str: substr: let
str_length = builtins.stringLength str;
substr_length = builtins.stringLength substr;
in if substr_length > str_length then false else builtins.substring (str_length - substr_length) str_length str == substr;
gitignore = builtins.filter (v:
# ignore comments and empty lines
if !(builtins.isString v) then false
else if !builtins.isNull(builtins.match "^#.*" v) then false
else if !builtins.isNull(builtins.match "^$" v) then false
else true
) (builtins.split "\n" (builtins.readFile ./.gitignore));
# checks if a given path matches a gitignore pattern
# string -> bool
matchesGitIgnore = path: builtins.any (pattern:
let
patternLength = builtins.stringLength pattern;
unsupportedPatternMessage = "matchesGitIgnore: Unsupported pattern: ${pattern}";
in
if pattern == "*" then true
else if pattern == ".*" then true
else if pattern == "*.*" then true
else if builtins.substring 0 2 pattern == "*." then endsWith path (builtins.substring 0 2 pattern)
else if contains pattern "*" then abort unsupportedPatternMessage
else if patternLength > 2 && builtins.substring 0 2 pattern == "./" then abort unsupportedPatternMessage
else if patternLength > 1 && builtins.substring 0 1 pattern == "/" then abort unsupportedPatternMessage
else contains path pattern
) gitignore;
# Ideally this file should be selfcontained, but I like the utilities in nixpkgs lib
lib = (import "${(import ./inputs.nix {}).nixpkgs}/lib").extend (self: super: {
proot = import ./lib/gitignore-filter.nix { lib = self; };
inherit (self.proot) parseGitignore runGitignoreFilter toGitignoreMatcher;
});
currentFilePath = (builtins.unsafeGetAttrPos "any" { any = "any"; }).file;
storePathLength = builtins.stringLength (builtins.toString builtins.storeDir);
evaluatingInStore = (builtins.substring 0 storePathLength currentFilePath) == builtins.storeDir;
selfInStore = builtins.filterSource (path: type:
type != "unknown" && builtins.baseNameOf path != ".git" && !matchesGitIgnore path
) ./.;
gitlessSelfInStore = {
outPath = builtins.path {
path = ./.;
name = "source";
filter = path: type:
let
selfPath = builtins.dirOf currentFilePath;
gitIgnoreFilters = lib.parseGitignore selfPath path;
result = type != "unknown"
&& type != "symlink"
&& builtins.baseNameOf path != ".git"
&& lib.runGitignoreFilter gitIgnoreFilters path type;
in result;
};
selfMode = "path";
};
gitfullSelfInStore = builtins.fetchGit "file://${builtins.toString ./.}" // {
selfMode = "git";
};
selfInStore' = builtins.tryEval gitfullSelfInStore;
selfInStore = if selfInStore'.success then selfInStore'.value else gitlessSelfInStore;
in
if !(evaluatingInStore) then { ... }@args: import selfInStore ({ selfPath = selfInStore; } // args )
else { ... }@args: import ./outputs.nix ({ selfPath = selfInStore; } // args)
if !(evaluatingInStore) then { ... }@args: import selfInStore ({
selfPath = selfInStore;
} // args )
else { ... }@args: import ./outputs.nix ({
selfPath = {
outPath = builtins.toString ./.;
selfMode = "store";
};
} // args)

View file

@ -1,64 +0,0 @@
{ inputs, pkgs, ... }:
{
imports = [
../../nix-os/core.nix
../../nix-os/core-desktop.nix
../../nix-os/nvidia.nix
../../nix-os/docker.nix
../../nix-os/razer.nix
../../nix-os/desktopManagers/gnome.nix
../../nix-os/displayManagers/gdm.nix
../../nix-os/shell.nix
../../nix-os/virtualization.nix
../../nix-os/polkit/disable-shutdown.nix
../../nix-os/locale.nix
../../nix-os/adb.nix
../../nix-os/account.nix
../../nix-os/xdg-default-apps.nix
../../nix-os/services/nix-binary-cache.nix
../../nix-os/udev.nix
../../nix-os/gnupg.nix
"${inputs.nixos-vscode-server}"
];
config = {
boot.loader.systemd-boot.enable = true;
boot.loader.efi.canTouchEfiVariables = true;
networking.hostName = "wroclaw-main";
services.xrdp.enable = true;
users.groups."tsusers".members = [ "wroclaw" ];
services.printing.drivers = with pkgs; [
hplip
];
# nixos-vscode-server module needs this
programs.nix-ld.enable = true;
services.vscode-server = {
enable = true;
extraRuntimeDependencies = with pkgs; [
docker
];
};
services.pipewire.wireplumber.configPackages = [(
pkgs.stdenvNoCC.mkDerivation {
name = "wireplumber-config";
src = ./wireplumber;
phases = [ "installPhase" ];
installPhase = ''
mkdir -p $out/share/wireplumber/wireplumber.conf.d
cp -r $src/* $out/share/wireplumber/wireplumber.conf.d
'';
}
)];
services.printing.startWhenNeeded = false;
system.stateVersion = "23.05";
};
}

View file

@ -1,50 +0,0 @@
{ config, lib, pkgs, ... }:
{
imports = [
../nix-os/core.nix
../nix-os/core-desktop.nix
../nix-os/account.nix
../nix-os/adb.nix
../nix-os/locale.nix
../nix-os/shell.nix
../nix-os/gnupg.nix
../nix-os/desktopManagers/gnome.nix
../nix-os/displayManagers/gdm.nix
../nix-os/udev.nix
];
config = {
boot.loader.systemd-boot.enable = true;
boot.loader.efi.canTouchEfiVariables = true;
networking.hostName = "wroclaw-hp";
networking.networkmanager.enable = true;
networking.firewall.enable = true;
hardware.sensor.iio.enable = true;
networking.firewall.allowedTCPPortRanges = [
# KDE Connect
rec { from = 1714; to = from + 50; }
];
networking.firewall.allowedUDPPortRanges = [
# KDE Connect
rec { from = 1714; to = from + 50; }
];
services.logind.extraConfig = ''
HandlePowerKey=suspend
HandlePowerKeyLongPress=poweroff
HandleSuspendKey=suspend-then-hibernate
HandleSuspendKeyLongPress=hibernate
HandleLidSwitch=lock
HandleLidSwitchDocked=ignore
HandleLidSwitchExternalPower=lock
'';
system.stateVersion = "23.11";
};
}

View file

@ -1,21 +0,0 @@
{ lib, modulesPath, ... }:
{
imports = [
"${modulesPath}/virtualisation/qemu-vm.nix"
../nix-os/account.nix
../nix-os/core.nix
../nix-os/locale.nix
../nix-os/polkit/disable-shutdown.nix
../nix-os/shell.nix
../nix-os/udev.nix
../nix-os/xdg-default-apps.nix
];
config = {
services.syncthing.enable = lib.mkForce false;
virtualisation = {
memorySize = 4096;
};
};
}

View file

@ -1,9 +0,0 @@
{ lib, ... }:
{
imports = [
./vm-base.nix
../nix-os/desktopManagers/gnome.nix
../nix-os/displayManagers/gdm.nix
];
}

View file

@ -1,24 +1,111 @@
let self = {
lock ? import ./lock.nix
, lib ? import "${(self {}).nixpkgs}/lib"
{
lock ? import lockFile,
lockFile ? ./lock.nix,
pkgs ? throw "inputs called without pkgs",
}:
{
let
self = {
inherit lock;
nixos-vscode-server = builtins.fetchTarball {
name = "nixos-vscode-server";
nixos-vscode-server = rec {
url = "https://github.com/nix-community/nixos-vscode-server/archive/${lock.nixos-vscode-server.revision}.tar.gz";
updateScript = pkgs.den-http-get-updater {
fileLocation = lockFile;
previousVersion = lock.nixos-vscode-server.revision;
versionUrl = "https://api.github.com/repos/nix-community/nixos-vscode-server/commits";
contentParser = "jq -rc '.[0].sha' <<< \"$newVersion\"";
prefetchList = [{
previousHash = lock.nixos-vscode-server.sha256;
prefetchUrlLocation = {
file = ./inputs.nix;
attrpath = "nixos-vscode-server.url";
};
}];
};
outPath = builtins.fetchTarball {
inherit url;
sha256 = "${lock.nixos-vscode-server.sha256}";
};
nixpkgs = builtins.fetchTarball {
name = "nixpkgs";
};
nixpkgs = rec {
url = "https://github.com/NixOS/nixpkgs/archive/${lock.nixpkgs.revision}.tar.gz";
updateScript = pkgs.den-http-get-updater {
fileLocation = lockFile;
previousVersion = lock.nixpkgs.revision;
versionUrl = "https://channels.nixos.org/nixos-25.05/git-revision";
prefetchList = [{
previousHash = lock.nixpkgs.sha256;
prefetchUrlLocation = {
file = ./inputs.nix;
attrpath = "nixpkgs.url";
};
}];
};
outPath = builtins.fetchTarball {
inherit url;
sha256 = "${lock.nixpkgs.sha256}";
};
cosmic-modules = builtins.fetchTarball {
name = "cosmic-modules";
};
nixpkgs-unstable = rec {
url = "https://github.com/NixOS/nixpkgs/archive/${lock.nixpkgs-unstable.revision}.tar.gz";
updateScript = pkgs.den-http-get-updater {
fileLocation = lockFile;
previousVersion = lock.nixpkgs-unstable.revision;
versionUrl = "https://channels.nixos.org/nixos-unstable/git-revision";
prefetchList = [{
previousHash = lock.nixpkgs-unstable.sha256;
prefetchUrlLocation = {
file = ./inputs.nix;
attrpath = "nixpkgs-unstable.url";
};
}];
};
outPath = builtins.fetchTarball {
inherit url;
sha256 = "${lock.nixpkgs-unstable.sha256}";
};
};
nix-bitcoin = rec {
url = "https://github.com/fort-nix/nix-bitcoin/archive/${lock.nix-bitcoin.revision}.tar.gz";
updateScript = pkgs.den-http-get-updater {
fileLocation = lockFile;
previousVersion = lock.nix-bitcoin.revision;
versionUrl = "https://api.github.com/repos/fort-nix/nix-bitcoin/commits";
contentParser = "jq -rc '.[0].sha' <<< \"$newVersion\"";
prefetchList = [{
previousHash = lock.nix-bitcoin.sha256;
prefetchUrlLocation = {
file = ./inputs.nix;
attrpath = "nix-bitcoin.url";
};
}];
};
outPath = builtins.fetchTarball {
inherit url;
sha256 = "${lock.nix-bitcoin.sha256}";
};
};
cosmic-modules = rec {
url = "https://github.com/lilyinstarlight/nixos-cosmic/archive/${lock.cosmic-modules.revision}.tar.gz";
updateScript = pkgs.den-http-get-updater {
fileLocation = lockFile;
previousVersion = lock.cosmic-modules.revision;
versionUrl = "https://api.github.com/repos/amozeo/nixos-cosmic/commits";
contentParser = "jq -rc '.[0].sha' <<< \"$newVersion\"";
prefetchList = [{
previousHash = lock.cosmic-modules.sha256;
prefetchUrlLocation = {
file = ./inputs.nix;
attrpath = "cosmic-modules.url";
};
}];
};
outPath = builtins.fetchTarball {
inherit url;
sha256 = "${lock.cosmic-modules.sha256}";
};
};
};
in self

112
lib/gitignore-filter.nix Normal file
View file

@ -0,0 +1,112 @@
{ lib }: {
# function that takes gitignore file pattern and returns filter function
# true - include file
# false - exclude file
# null - no match
# string -> string -> [(string -> string -> (bool | null))]
toGitignoreMatcher = gitignorePath: pattern: lib.pipe pattern [
(v: { pattern = v; invalid = false; })
# trim whitespaces not preceded by backslash
(v: v // { pattern = let
stringLength = builtins.stringLength v.pattern;
leftPaddingLength = builtins.stringLength (lib.trimWith { start = true; end = false; } v.pattern) - stringLength;
rightPaddingLength = builtins.stringLength (lib.trimWith { start = false; end = true; } v.pattern) - stringLength;
isLastCharBackslash = if stringLength == 0 then false
else builtins.substring (stringLength - rightPaddingLength - 1) 1 v.pattern == "\\";
trimmedString = builtins.substring leftPaddingLength (stringLength - leftPaddingLength - rightPaddingLength) v.pattern;
in if isLastCharBackslash && rightPaddingLength > 0 then trimmedString + " " else trimmedString; })
# ignore empty lines
(v: if v.pattern != "" then v else v // { invalid = true; })
# ignore comments
(v: if !v.invalid && builtins.substring 0 1 v.pattern != "#" then v else v // { invalid = true; })
# mark negated patterns
(v:
if !v.invalid && builtins.substring 0 1 v.pattern == "!"
then v // {
negated = true;
pattern = builtins.substring 1 (builtins.stringLength v) v;
}
else v // { negated = false; }
)
# ignore escapes
(v: if v.invalid then v else v // { pattern = builtins.replaceStrings ["\\"] [""] v.pattern; })
# convert parsed pattern to matchers
({ pattern, negated, invalid }: {
__functor = _: path: type: let
relative = builtins.match "^/.+[^/]$" pattern == [];
directory = builtins.match "/$" pattern == [];
regexPattern = lib.pipe pattern [
(v: if relative then "${gitignorePath}/${v}" else v)
(builtins.split "/")
(builtins.filter (v: v != []))
(builtins.map (builtins.split "(\\*\\*|\\*)"))
(builtins.concatMap (v:
# v: (string | [string])[]
if v == [ "" ] then []
# TODO: check and add support for .. <directory-up> if git supports
else if v == [ "." ] then []
else [( builtins.foldl' (acc: vp:
# vp: string | [string]
if builtins.isString vp then acc + lib.escapeRegex vp
else if vp == [ "**" ] then acc + ".*"
else if vp == [ "*" ] then acc + "[^/]*"
else throw "unreachable"
) "" v )]
))
(builtins.concatStringsSep "/" )
(v: if relative then v else ".*/${v}")
];
matches = (!directory || type == "directory")
&& (builtins.match regexPattern path == []);
in if invalid then null
else if matches then negated
else null;
# for debug purposes
inherit pattern negated;
# for filtering purposes
inherit invalid;
})
];
# TODO: optimize this so if match is found in a given gitignore,
# no further checks in gitignores in parent directories are performed
parseGitignore = gitRepositoryPath: filePath: lib.pipe filePath [
(builtins.dirOf)
(builtins.split "/" )
(builtins.filter (v: v != [] && v != ""))
# ["a" "b" "c"] -> ["/" "/a/" "/a/b/" "/a/b/c/"]
(
builtins.foldl' (acc: v: acc ++ [(
(builtins.elemAt acc (builtins.length acc - 1)) + "${v}/"
)] ) ["/"]
)
(builtins.map (v: "${v}.gitignore"))
# Filter out paths that are not part of git repository and don't exist
(builtins.filter (v: lib.hasPrefix gitRepositoryPath v && builtins.pathExists v))
(builtins.map (v: {
path = v;
# Split gitignore files into lines
contents = lib.pipe v [
builtins.readFile
(builtins.split "\n")
# builtins.split uses lists for matches
(builtins.filter (v: v != []))
];
}))
# Convert gitignore patterns to matchers
(builtins.map (v:
builtins.map (lib.toGitignoreMatcher v.path) v.contents)
)
lib.flatten
(lib.filter (v: !v.invalid))
];
runGitignoreFilter = filters: path: type: lib.pipe filters [
(builtins.map (v: v path type))
(builtins.filter (v: v != null))
# If any filter didn't match anything, include the file
(v: if v == [] then [ true ] else v)
(v: builtins.elemAt v (builtins.length v - 1))
];
}

View file

@ -1,8 +1,8 @@
{ inputs ? import ../../inputs.nix {} }:
{ revision }:
selfLib: superLib: {
trivial = superLib.trivial // {
versionSuffix = ".git.${builtins.substring 0 12 inputs.lock.nixpkgs.revision}";
revisionWithDefault = default: inputs.lock.nixpkgs.revision or default;
versionSuffix = ".git.${builtins.substring 0 12 revision}";
revisionWithDefault = default: revision;
};
}

View file

@ -1,14 +1,22 @@
{
nixos-vscode-server = {
revision = "fc900c16efc6a5ed972fb6be87df018bcf3035bc";
sha256 = "1rq8mrlmbzpcbv9ys0x88alw30ks70jlmvnfr2j8v830yy5wvw7h";
revision = "4ec4859b12129c0436b0a471ed1ea6dd8a317993";
sha256 = "sha256-Bx7DOPLhkr8Z60U9Qw4l0OidzHoqLDKQH5rDV5ef59A=";
};
nixpkgs = {
revision = "883180e6550c1723395a3a342f830bfc5c371f6b";
sha256 = "01axrf25mahbxmp6vgfgx09dflbyaavr5liynkp6rpm4lkacr27f";
revision = "b43c397f6c213918d6cfe6e3550abfe79b5d1c51";
sha256 = "sha256-1Cu92i1KSPbhPCKxoiVG5qnoRiKTgR5CcGSRyLpOd7Y=";
};
nixpkgs-unstable = {
revision = "3016b4b15d13f3089db8a41ef937b13a9e33a8df";
sha256 = "sha256-P/SQmKDu06x8yv7i0s8bvnnuJYkxVGBWLWHaU+tt4YY=";
};
nix-bitcoin = {
revision = "aec8331f261dacc116a17f034d0dd2fde8ef66eb";
sha256 = "sha256-rEppXe8E4q0GWB3uU3I/tzdeu4tDOy6O3jB6yDW7KaE=";
};
cosmic-modules = {
revision = "d8b2b9aee034c10ca67848653171f576f87434a8";
sha256 = "03i8smxgx2fdb9kkys81dihb5yja3nk9wjs1rx5h7f3b5kii1fd7";
revision = "7e3fc3ea3e05fd90632433d02674cd9afe0513c9";
sha256 = "sha256-OBmdkDj6jhkO5W76ZSSUZLfKt+TrQtxxYlcvXS+6cAs=";
};
}

View file

@ -1,45 +0,0 @@
{ config, lib, pkgs, unstablePkgs, ... }:
{
imports = [
./unstable-packages.nix
];
users.users.wroclaw = {
isNormalUser = true;
description = "Rafał";
group = "wroclaw";
extraGroups = [
"users"
"wheel"
] ++ lib.optional config.programs.adb.enable "adbusers";
linger = true;
initialPassword = "nixos";
packages = with pkgs; [
firefox
(vivaldi.override {
proprietaryCodecs = true;
commandLineArgs = [ "--ozone-platform=wayland" ];
})
vesktop
unstablePkgs.vscode
gimp
inkscape
krita
unstablePkgs.zettlr
];
};
users.groups.wroclaw.gid = 1000;
programs.steam = {
enable = true;
remotePlay.openFirewall = true;
};
services.syncthing = {
enable = true;
user = "wroclaw";
group = "wroclaw";
dataDir = "/home/wroclaw";
configDir = "/home/wroclaw/.config/syncthing";
};
}

View file

@ -1,35 +0,0 @@
{config, lib, pkgs, ... }:
{
config = {
services.printing.enable = true;
sound.enable = false;
hardware.pulseaudio.enable = false;
security.rtkit.enable = true;
services.pipewire = {
enable = true;
alsa.enable = true;
alsa.support32Bit = true;
pulse.enable = true;
# Enable audio interfaces renaming
wireplumber.enable = true;
};
environment.systemPackages = with pkgs; [
mpv
];
services.openssh.extraConfig = ''
X11Forwarding yes
'';
# Fonts
fonts.packages = with pkgs; [
corefonts
nerdfonts
roboto
];
};
}

View file

@ -1,96 +0,0 @@
# Edit this configuration file to define what should be installed on
# your system. Help is available in the configuration.nix(5) man page
# and in the NixOS manual (accessible by running 'nixos-help').
{ inputs, lib, pkgs, ... }:
let
inherit (pkgs) mkWrappedExecutable;
# bool -> nixpkgs[]
wrappedNixExecutables = inEnvironment: assert builtins.isBool inEnvironment; [
(mkWrappedExecutable {pkg = pkgs.nix; exe = "nix-build"; wrapperArgs = ["--add-flags" "\"--log-format\"" "--add-flags" "bar${lib.optionalString inEnvironment "-with-logs"}"];})
(mkWrappedExecutable {pkg = pkgs.nix; exe = "nix-shell"; wrapperArgs = ["--add-flags" "\"--log-format\"" "--add-flags" "bar"];})
];
wrappedNixosExecutables = [
(mkWrappedExecutable {pkg = pkgs.nixos-rebuild; wrapperArgs = ["--add-flags" "\"--log-format\"" "--add-flags" "bar"];})
];
wrappedNix = (pkgs.buildEnv {
name = "wrappedNix-${pkgs.nix.version}";
paths = [ pkgs.nix ] ++ wrappedNixExecutables false;
}).overrideAttrs {
version = pkgs.nix.version;
};
in
{
# kernel
boot.kernelPackages = pkgs.linuxPackages_latest;
# Enable networking
networking.networkmanager.enable = true;
# Allow unfree packages
nixpkgs.config.allowUnfree = true;
nix = {
package = wrappedNix;
channel.enable = false;
settings.nix-path = [
"nixpkgs=${pkgs.selfExpr { useConfig = false; }}"
"systemNixpkgs=${pkgs.selfExpr { useConfig = true; name = "systemNixpkgs-self"; }}"
# don't garbage collect the nixpkgs input
"inputsNixpkgs=${inputs.nixpkgs}"
];
};
# List packages installed in system profile. To search, run:
# $ nix search wget
environment.systemPackages = with pkgs; [
wget
ffmpeg
yt-dlp
htop
btop
fastfetch
smartmontools
ddrescue
] ++ wrappedNixExecutables true
++ wrappedNixosExecutables;
programs.git.enable = true;
programs.git.config = {
init.defaultBranch = "main";
merge.conflictstyle = "diff3";
rerere.enabled = true;
};
# Use nix-index for command-not-found handler
programs.command-not-found.enable = false;
programs.nix-index = {
package = pkgs.nix-index.override {
nix-index-unwrapped = pkgs.nix-index-unwrapped.overrideAttrs (oldAttrs: {
patches = oldAttrs.patches or [] ++ [
../pkgs/by-name/ni/nix-index/cnfOutput.patch
];
});
};
enable = true;
enableBashIntegration = true;
};
# Enable fail2ban because of the OpenSSH server
services.fail2ban = {
enable = true;
maxretry = 10;
bantime = "7d";
};
# Enable the OpenSSH daemon.
services.openssh = {
enable = true;
ports = [
22
8022
];
};
}

View file

@ -1,10 +0,0 @@
{ inputs, lib, pkgs, ... }:
{
imports = [
"${inputs.cosmic-modules}/nixos/cosmic/module.nix"
];
config = {
services.desktopManager.cosmic.enable = true;
};
}

View file

@ -1,39 +0,0 @@
{ lib, config, pkgs, ... }:
{
config.virtualisation.docker = {
enable = true;
enableOnBoot = true;
storageDriver = if config.fileSystems."/".fsType == "btrfs" then "btrfs" else null;
rootless.enable = true;
rootless.setSocketVariable = true;
daemon.settings = {
default-address-pools = [
{base = "10.64.0.0/10"; size = 24;}
];
bip = "10.127.0.1/16";
};
};
config.users.users.indocker = {
isSystemUser = true;
hashedPassword = "!";
uid = 900;
group = "indocker";
};
config.users.groups.indocker = {
gid = 900;
};
config.environment.systemPackages = with pkgs; [
docker-compose
];
# Docker enables firewall anyway, let's enable the firewall for it if it's disabled
# TODO: Apply only when config.networking.firewall is false
config.networking.firewall = {
enable = lib.mkOverride 90 true;
allowedTCPPorts = lib.mkOverride 90 [];
allowedUDPPorts = lib.mkOverride 90 [];
allowedTCPPortRanges = lib.mkOverride 90 [{ from = 0; to = 65535;}];
allowedUDPPortRanges = lib.mkOverride 90 [{ from = 0; to = 65535;}];
};
}

View file

@ -1,25 +0,0 @@
{ config, lib, pkgs, ...}:
{
hardware.opengl = {
enable = true;
driSupport = true;
driSupport32Bit = true;
};
services.xserver.videoDrivers = ["nvidia"];
hardware.nvidia = {
modesetting.enable = true;
powerManagement.enable = true;
open = false;
nvidiaSettings = true;
package = config.boot.kernelPackages.nvidiaPackages.mkDriver {
version = "555.58.02";
sha256_64bit = "sha256-xctt4TPRlOJ6r5S54h5W6PT6/3Zy2R4ASNFPu8TSHKM=";
sha256_aarch64 = "sha256-wb20isMrRg8PeQBU96lWJzBMkjfySAUaqt4EgZnhyF8=";
openSha256 = "sha256-8hyRiGB+m2hL3c9MDA/Pon+Xl6E788MZ50WrrAGUVuY=";
settingsSha256 = "sha256-ZpuVZybW6CFN/gz9rx+UJvQ715FZnAOYfHn5jt5Z2C8=";
persistencedSha256 = "sha256-a1D7ZZmcKFWfPjjH1REqPM5j/YLWKnbkP9qfRyIyxAw=";
};
};
nixpkgs.config.nvidia.acceptLicense = true;
}

View file

@ -1,46 +0,0 @@
{ ... }:
{
security.polkit.extraConfig = ''
polkit.addRule(function(action, subject) {
polkit.log("action=" + action);
polkit.log("subject=" + subject);
if (
action.id == "org.freedesktop.login1.halt" ||
action.id == "org.freedesktop.login1.halt-ignore-inhibit" ||
action.id == "org.freedesktop.login1.halt-multiple-sessions" ||
action.id == "org.freedesktop.login1.hibernate" ||
action.id == "org.freedesktop.login1.hibernate-ignore-inhibit" ||
action.id == "org.freedesktop.login1.hibernate-multiple-sessions" ||
action.id == "org.freedesktop.login1.inhibit-block-idle" ||
action.id == "org.freedesktop.login1.inhibit-block-shutdown" ||
action.id == "org.freedesktop.login1.inhibit-block-sleep" ||
action.id == "org.freedesktop.login1.inhibit-delay-shutdown" ||
action.id == "org.freedesktop.login1.inhibit-delay-sleep" ||
action.id == "org.freedesktop.login1.inhibit-handle-hibernate-key" ||
action.id == "org.freedesktop.login1.inhibit-handle-lid-switch" ||
action.id == "org.freedesktop.login1.inhibit-handle-power-key" ||
action.id == "org.freedesktop.login1.inhibit-handle-reboot-key" ||
action.id == "org.freedesktop.login1.inhibit-handle-suspend-key" ||
action.id == "org.freedesktop.login1.power-off" ||
action.id == "org.freedesktop.login1.power-off-ignore-inhibit" ||
action.id == "org.freedesktop.login1.power-off-multiple-sessions" ||
action.id == "org.freedesktop.login1.reboot" ||
action.id == "org.freedesktop.login1.reboot-ignore-inhibit" ||
action.id == "org.freedesktop.login1.reboot-multiple-sessions" ||
action.id == "org.freedesktop.login1.set-reboot-parameter" ||
action.id == "org.freedesktop.login1.set-reboot-to-boot-loader-entry" ||
action.id == "org.freedesktop.login1.set-reboot-to-boot-loader-menu" ||
action.id == "org.freedesktop.login1.set-reboot-to-firmware-setup" ||
action.id == "org.freedesktop.login1.set-self-linger" ||
action.id == "org.freedesktop.login1.set-user-linger" ||
action.id == "org.freedesktop.login1.set-wall-message" ||
action.id == "org.freedesktop.login1.suspend" ||
action.id == "org.freedesktop.login1.suspend-ignore-inhibit" ||
action.id == "org.freedesktop.login1.suspend-multiple-sessions"
) {
return subject.active ? polkit.Result.AUTH_ADMIN : polkit.Result.NO;
};
});
'';
}

View file

@ -1,16 +0,0 @@
{ lib, config, pkgs, ... }:
{
hardware.openrazer = {
enable = true;
users = [
"wroclaw"
];
};
# users.groups.openrazer.members = [
# "wroclaw"
# ];
environment.systemPackages = with pkgs; [
openrazer-daemon
polychromatic
];
}

View file

@ -1,8 +0,0 @@
{
config = {
services.nix-serve = {
enable = true;
secretKeyFile = "/var/cache-priv-key.pem";
};
};
}

View file

@ -1,159 +0,0 @@
{ config, pkgs, unstablePkgs, lib, ... }:
let
rangerGit = pkgs.ranger.overrideAttrs (old: {
version = "git";
src = pkgs.fetchFromGitHub {
owner = "ranger";
repo = "ranger";
rev = "c7777d558d5b69843b21f986e9af1af311c83887";
hash = "sha256-DTVoEfc4dAaBTDLFujvWIYj5KHL89YknUiinIs9Rkeg=";
};
propagatedBuildInputs = with pkgs.python3Packages; [
# required for test suite, it's being ran during package build for some reason
flake8
pylint
pytest
setuptools
] ++ old.propagatedBuildInputs;
});
aliasDrag = pkgs.writeScriptBin "drag" ''
${unstablePkgs.ripdrag}/bin/ripdrag -Axd $@
'';
in
{
imports = [
./unstable-packages.nix
];
environment.systemPackages = with pkgs; [
aliasDrag
rangerGit
kitty
zoxide
];
programs.bash.shellInit = ''
HISTCONTROL=ignoreboth
'';
programs.bash.interactiveShellInit = ''
HISTCONTROL=ignoreboth
if test -n "$KITTY_INSTALLATION_DIR"; then
export KITTY_SHELL_INTEGRATION="enabled,no-sudo"
source "$KITTY_INSTALLATION_DIR/shell-integration/bash/kitty.bash"
fi
eval "''$(zoxide init bash)"
alias bye=exit
'';
environment.etc."xdg/kitty/kitty.conf".text = ''
font_family MesloLGS Nerd Font
font_size 10.0
scrollback_lines 10000
window_border_width 0.5
window_padding_width 3
${if config.services.xserver.desktopManager.gnome.enable then "hide_window_decorations yes" else ""}
background_opacity 0.8
dynamic_background_opacity yes
map kitty_mod+alt+c copy_ansi_to_clipboard
'';
environment.etc."ranger/rc.conf".text = ''
eval import os; fm.set_option_from_string("preview_images", "true") if "KITTY_INSTALLATION_DIR" in os.environ else None;
eval import os; fm.set_option_from_string("preview_images_method", "kitty") if "KITTY_INSTALLATION_DIR" in os.environ else None;
set vcs_aware true
set show_hidden true
alias drag shell ${unstablePkgs.ripdrag}/bin/ripdrag -Axd %p &
map <C-d> drag
'';
environment.etc."ranger/plugins/zoxide.py".source = pkgs.fetchFromGitHub {
owner = "jchook";
repo = "ranger-zoxide";
rev = "281828de060299f73fe0b02fcabf4f2f2bd78ab3";
hash = "sha256-JEuyYSVa1NS3aftezEJx/k19lwwzf7XhqBCL0jH6VT4=";
} + /__init__.py;
programs.direnv.enable = true;
programs.neovim = {
enable = true;
viAlias = true;
vimAlias = true;
configure = {
customRC = ''
set number
set hlsearch
set incsearch
set tabstop=4
set softtabstop=4
set shiftwidth=4
set expandtab
set autoindent
set updatetime=500
syntax on
set encoding=utf-8
set wildmode=longest,list,full
set listchars=space:·,tab:»
set indentkeys-=0#
" rainbow-delimeters-nvim
let g:rainbow_delimiters = {
\ 'strategy': {
\ ${"''"}: rainbow_delimiters#strategy.global,
\ },
\ }
" vim-gitguter
set signcolumn=yes
highlight SignColumn ctermbg=NONE
highlight GitGutterAdd ctermfg=2
highlight GitGutterChange ctermfg=4
highlight GitGutterDelete ctermfg=1
lua require('guess-indent').setup {}
'';
packages.myVimPackage = with pkgs.vimPlugins; {
start = [
guess-indent-nvim
vim-visual-multi
autoclose-nvim
rainbow-delimiters-nvim
vimagit
vim-gitgutter
];
};
};
};
environment.variables = lib.mkIf config.programs.neovim.enable rec {
EDITOR = "/run/current-system/sw/bin/nvim";
VISUAL = EDITOR;
};
programs.starship = {
enable = true;
settings = {
format = "$all$line_break\${custom.ranger}$jobs$battery$time$status$os$container$shell$character";
directory = {
truncation_length = 5;
truncation_symbol = "/";
};
hostname = {
ssh_only = false;
};
username = {
show_always = true;
};
status.disabled = false;
custom.ranger = {
when = "test $RANGER_LEVEL";
command = "echo \"\"";
style = "bold 208";
};
};
};
}

View file

@ -1,16 +0,0 @@
{ lib, config, pkgs, ... }:
{
#virtualisation.waydroid.enable = true;
programs.virt-manager.enable = true;
virtualisation.libvirtd = {
enable = true;
qemu.ovmf = {
enable = true;
packages = [
pkgs.OVMFFull.fd
];
};
};
}

View file

@ -1,136 +0,0 @@
{ ... }:
{
xdg.mime.enable = true;
xdg.mime.defaultApplications = {
# Browser
"x-scheme-handler/http" = "vivaldi-stable.desktop";
"application/xhtml+xml" = "vivaldi-stable.desktop";
"text/html" = "vivaldi-stable.desktop";
"x-scheme-handler/https" = "vivaldi-stable.desktop";
# Audio
"audio/aiff" = "mpv.desktop";
"audio/basic" = "mpv.desktop";
"audio/it" = "mpv.desktop";
"audio/make" = "mpv.desktop";
"audio/make.my.funk" = "mpv.desktop";
"audio/mid" = "mpv.desktop";
"audio/midi" = "mpv.desktop";
"audio/mod" = "mpv.desktop";
"audio/mpeg" = "mpv.desktop";
"audio/mpeg3" = "mpv.desktop";
"audio/nspaudio" = "mpv.desktop";
"audio/s3m" = "mpv.desktop";
"audio/tsp-audio" = "mpv.desktop";
"audio/tsplayer" = "mpv.desktop";
"audio/vnd.qcelp" = "mpv.desktop";
"audio/voc" = "mpv.desktop";
"audio/voxware" = "mpv.desktop";
"audio/wav" = "mpv.desktop";
"audio/x-adpcm" = "mpv.desktop";
"audio/x-aiff" = "mpv.desktop";
"audio/x-au" = "mpv.desktop";
"audio/x-gsm" = "mpv.desktop";
"audio/x-jam" = "mpv.desktop";
"audio/x-liveaudio" = "mpv.desktop";
"audio/x-mid" = "mpv.desktop";
"audio/x-midi" = "mpv.desktop";
"audio/x-mod" = "mpv.desktop";
"audio/x-mpeg" = "mpv.desktop";
"audio/x-mpeg-3" = "mpv.desktop";
"audio/x-mpequrl" = "mpv.desktop";
"audio/x-nspaudio" = "mpv.desktop";
"audio/x-pn-realaudio" = "mpv.desktop";
"audio/x-pn-realaudio-plugin" = "mpv.desktop";
"audio/x-psid" = "mpv.desktop";
"audio/x-realaudio" = "mpv.desktop";
"audio/x-twinvq" = "mpv.desktop";
"audio/x-twinvq-plugin" = "mpv.desktop";
"audio/x-vnd.audioexplosion.mjuicemediafile" = "mpv.desktop";
"audio/x-voc" = "mpv.desktop";
"audio/x-wav" = "mpv.desktop";
"audio/xm" = "mpv.desktop";
# Video
"video/animaflex" = "mpv.desktop";
"video/avi" = "mpv.desktop";
"video/avs-video" = "mpv.desktop";
"video/dl" = "mpv.desktop";
"video/fli" = "mpv.desktop";
"video/gl" = "mpv.desktop";
"video/mpeg" = "mpv.desktop";
"video/msvideo" = "mpv.desktop";
"video/quicktime" = "mpv.desktop";
"video/vdo" = "mpv.desktop";
"video/vivo" = "mpv.desktop";
"video/vnd.rn-realvideo" = "mpv.desktop";
"video/vnd.vivo" = "mpv.desktop";
"video/vosaic" = "mpv.desktop";
"video/x-amt-demorun" = "mpv.desktop";
"video/x-amt-showrun" = "mpv.desktop";
"video/x-atomic3d-feature" = "mpv.desktop";
"video/x-dl" = "mpv.desktop";
"video/x-dv" = "mpv.desktop";
"video/x-fli" = "mpv.desktop";
"video/x-gl" = "mpv.desktop";
"video/x-isvideo" = "mpv.desktop";
"video/x-motion-jpeg" = "mpv.desktop";
"video/x-mpeg" = "mpv.desktop";
"video/x-mpeq2a" = "mpv.desktop";
"video/x-ms-asf" = "mpv.desktop";
"video/x-ms-asf-plugin" = "mpv.desktop";
"video/x-msvideo" = "mpv.desktop";
"video/x-qtc" = "mpv.desktop";
"video/x-scm" = "mpv.desktop";
"video/x-sgi-movie" = "mpv.desktop";
# Image
"image/bmp" = "org.gnome.Loupe.desktop";
"image/cmu-raster" = "org.gnome.Loupe.desktop";
"image/fif" = "org.gnome.Loupe.desktop";
"image/florian" = "org.gnome.Loupe.desktop";
"image/g3fax" = "org.gnome.Loupe.desktop";
"image/gif" = "org.gnome.Loupe.desktop";
"image/ief" = "org.gnome.Loupe.desktop";
"image/jpeg" = "org.gnome.Loupe.desktop";
"image/jutvision" = "org.gnome.Loupe.desktop";
"image/naplps" = "org.gnome.Loupe.desktop";
"image/pict" = "org.gnome.Loupe.desktop";
"image/pjpeg" = "org.gnome.Loupe.desktop";
"image/png" = "org.gnome.Loupe.desktop";
"image/tiff" = "org.gnome.Loupe.desktop";
"image/vasa" = "org.gnome.Loupe.desktop";
"image/vnd.dwg" = "org.gnome.Loupe.desktop";
"image/vnd.fpx" = "org.gnome.Loupe.desktop";
"image/vnd.net-fpx" = "org.gnome.Loupe.desktop";
"image/vnd.rn-realflash" = "org.gnome.Loupe.desktop";
"image/vnd.rn-realpix" = "org.gnome.Loupe.desktop";
"image/vnd.wap.wbmp" = "org.gnome.Loupe.desktop";
"image/vnd.xiff" = "org.gnome.Loupe.desktop";
"image/x-cmu-raster" = "org.gnome.Loupe.desktop";
"image/x-dwg" = "org.gnome.Loupe.desktop";
"image/x-icon" = "org.gnome.Loupe.desktop";
"image/x-jg" = "org.gnome.Loupe.desktop";
"image/x-jps" = "org.gnome.Loupe.desktop";
"image/x-niff" = "org.gnome.Loupe.desktop";
"image/x-pcx" = "org.gnome.Loupe.desktop";
"image/x-pict" = "org.gnome.Loupe.desktop";
"image/x-portable-anymap" = "org.gnome.Loupe.desktop";
"image/x-portable-bitmap" = "org.gnome.Loupe.desktop";
"image/x-portable-graymap" = "org.gnome.Loupe.desktop";
"image/x-portable-greymap" = "org.gnome.Loupe.desktop";
"image/x-portable-pixmap" = "org.gnome.Loupe.desktop";
"image/x-quicktime" = "org.gnome.Loupe.desktop";
"image/x-rgb" = "org.gnome.Loupe.desktop";
"image/x-tiff" = "org.gnome.Loupe.desktop";
"image/x-windows-bmp" = "org.gnome.Loupe.desktop";
"image/x-xbitmap" = "org.gnome.Loupe.desktop";
"image/x-xbm" = "org.gnome.Loupe.desktop";
"image/x-xpixmap" = "org.gnome.Loupe.desktop";
"image/x-xwd" = "org.gnome.Loupe.desktop";
"image/x-xwindowdump" = "org.gnome.Loupe.desktop";
"image/xbm" = "org.gnome.Loupe.desktop";
"image/xpm" = "org.gnome.Loupe.desktop";
};
}

View file

@ -0,0 +1,57 @@
{
inputs,
...
}:
{
imports = [
"${inputs.nix-bitcoin}/modules/modules.nix"
];
config = {
services.bitcoind = {
enable = true;
listen = true;
txindex = true;
disablewallet = true;
extraConfig = ''
coinstatsindex=1
maxmempool=2048
persistmempool=1
'';
tor.proxy = true;
rpc.address = "0.0.0.0";
rpc.allowip = [
"10.0.0.0/8"
"172.16.0.0/12"
"192.168.0.0/16"
];
};
services.electrs = {
enable = true;
};
services.monero = {
enable = true;
extraConfig = ''
proxy=127.0.0.1:9050
igd=disabled
'';
};
services.tor.client.enable = true;
nix-bitcoin = {
onionServices = {
bitcoind = {
public = true;
};
};
generateSecrets = true;
secretsDir = "/var/nix-bitcoin";
configVersion = "0.0.121";
};
};
}

View file

@ -0,0 +1,98 @@
{
inputs,
config,
pkgs,
self,
...
}:
{
imports = [
../../modules/core.nix
../../modules/core-desktop.nix
../../modules/nvidia.nix
../../modules/docker.nix
../../modules/razer.nix
../../modules/desktopManagers/cosmic.nix
../../modules/displayManagers/cosmic-greeter.nix
../../modules/shell.nix
../../modules/virtualization.nix
../../modules/polkit/disable-shutdown.nix
../../modules/locale.nix
../../modules/adb.nix
../../modules/account.nix
../../modules/services/nix-binary-cache.nix
../../modules/udev.nix
../../modules/gnupg.nix
"${inputs.nixos-vscode-server}"
./cryptocurrency.nix
];
config = {
boot.loader.systemd-boot.enable = true;
boot.loader.efi.canTouchEfiVariables = true;
networking.hostName = "wroclaw-main";
services.printing.drivers = with pkgs; [
hplip
];
nixpkgs.overlays = [
self.overlays.cosmicPackages
];
nixpkgs.config = {
cudaSupport = true;
};
# nixos-vscode-server module needs this
programs.nix-ld.enable = true;
services.vscode-server = {
enable = true;
extraRuntimeDependencies = with pkgs; [
docker
];
};
services.pipewire.wireplumber.configPackages = [(
pkgs.stdenvNoCC.mkDerivation {
name = "wireplumber-config";
src = ./wireplumber;
phases = [ "installPhase" ];
installPhase = ''
mkdir -p $out/share/wireplumber/wireplumber.conf.d
cp -r $src/* $out/share/wireplumber/wireplumber.conf.d
'';
}
)];
services.printing.startWhenNeeded = false;
# rgb control for razer, graphics card and motherboard
hardware.i2c.enable = true;
services.hardware.openrgb.enable = true;
services.ollama = {
enable = true;
port = 1434;
acceleration = "cuda";
package = pkgs.unstable.ollama;
host = "0.0.0.0";
};
services.mysql = {
enable = true;
package = pkgs.mariadb;
};
environment.sessionVariables = {
OLLAMA_HOST = "127.0.0.1:${builtins.toString config.services.ollama.port}";
};
nixpkgs.hostPlatform = "x86_64-linux";
system.stateVersion = "24.11";
};
}

60
nixos/hosts/tablet.nix Normal file
View file

@ -0,0 +1,60 @@
{
self,
...
}:
{
imports = [
../modules/core.nix
../modules/core-desktop.nix
../modules/account.nix
../modules/adb.nix
../modules/locale.nix
../modules/shell.nix
../modules/gnupg.nix
../modules/polkit/network.nix
../modules/desktopManagers/cosmic.nix
../modules/displayManagers/cosmic-greeter.nix
../modules/udev.nix
];
config = {
boot.loader.systemd-boot.enable = true;
boot.loader.efi.canTouchEfiVariables = true;
networking.hostName = "wroclaw-hp";
networking.networkmanager.enable = true;
networking.firewall.enable = true;
hardware.sensor.iio.enable = true;
nixpkgs.overlays = [
self.overlays.cosmicPackages
];
networking.firewall.allowedTCPPortRanges = [
# KDE Connect
rec { from = 1714; to = from + 50; }
];
networking.firewall.allowedUDPPortRanges = [
# KDE Connect
rec { from = 1714; to = from + 50; }
];
services.logind = {
powerKey = "suspend";
powerKeyLongPress = "poweroff";
suspendKey = "suspend-then-hibernate";
suspendKeyLongPress = "hibernate";
lidSwitch = "lock";
lidSwitchDocked = "ignore";
lidSwitchExternalPower = "lock";
};
nixpkgs.hostPlatform = "x86_64-linux";
system.stateVersion = "24.11";
};
}

25
nixos/hosts/vm-base.nix Normal file
View file

@ -0,0 +1,25 @@
{ lib, modulesPath, ... }:
{
imports = [
"${modulesPath}/virtualisation/qemu-vm.nix"
../modules/account.nix
../modules/core.nix
../modules/core-desktop.nix
../modules/locale.nix
../modules/polkit/disable-shutdown.nix
../modules/shell.nix
../modules/udev.nix
];
config = {
services.syncthing.enable = lib.mkForce false;
virtualisation = {
memorySize = 4096;
};
virtualisation.forwardPorts = [
{ from = "host"; host.port = 2222; guest.port = 22; }
];
nixpkgs.hostPlatform = "x86_64-linux";
};
}

View file

@ -3,8 +3,8 @@
{
imports = [
./vm-base.nix
../nix-os/desktopManagers/cosmic.nix
../nix-os/displayManagers/cosmic-greeter.nix
../modules/desktopManagers/cosmic.nix
../modules/displayManagers/cosmic-greeter.nix
];
config = {

9
nixos/hosts/vm-gnome.nix Normal file
View file

@ -0,0 +1,9 @@
{ lib, ... }:
{
imports = [
./vm-base.nix
../modules/desktopManagers/gnome.nix
../modules/displayManagers/gdm.nix
];
}

49
nixos/modules/account.nix Normal file
View file

@ -0,0 +1,49 @@
{ config, lib, pkgs, unstablePkgs, ... }:
{
imports = [
./unstable-packages.nix
];
config = {
users.users.wroclaw = {
isNormalUser = true;
description = "Rafał";
group = "wroclaw";
extraGroups = [
"users"
"wheel"
] ++ lib.optional config.programs.adb.enable "adbusers";
linger = true;
initialPassword = "nixos";
packages = with pkgs; [
firefox
(vivaldi.override {
proprietaryCodecs = true;
commandLineArgs = [ "--ozone-platform=wayland" ];
})
vesktop
unstablePkgs.vscode
gimp3
inkscape
jitsi-meet-electron
krita
telegram-desktop
unstablePkgs.zettlr
];
};
users.groups.wroclaw.gid = 1000;
programs.steam = {
enable = true;
remotePlay.openFirewall = true;
};
services.syncthing = {
enable = true;
user = "wroclaw";
group = "wroclaw";
dataDir = "/home/wroclaw";
configDir = "/home/wroclaw/.config/syncthing";
};
};
}

View file

@ -0,0 +1,176 @@
{config, lib, pkgs, ... }:
{
imports = [
./generic/mpv.nix
./xdg-default-apps.nix
];
config = {
services.printing.enable = true;
services.pulseaudio.enable = false;
security.rtkit.enable = true;
services.pipewire = {
enable = true;
alsa.enable = true;
alsa.support32Bit = true;
pulse.enable = true;
# Enable audio interfaces renaming
wireplumber.enable = true;
wireplumber.extraConfig = {
"dont-switch-device-profiles"."wireplumber.settings"."bluetooth.autoswitch-to-headset-profile" = false;
};
};
environment.systemPackages = with pkgs; [
kdePackages.kdeconnect-kde
pcmanfm
pwvucontrol
qimgv
];
programs.mpv = let
fetchMpvScript = {url, hash, scriptName}: pkgs.fetchurl {
inherit url hash;
name = "mpv-script-${scriptName}";
recursiveHash = true;
downloadToTemp = true;
postFetch = ''
mkdir -p $out/share/mpv/scripts
mv $downloadedFile $out/share/mpv/scripts/${scriptName}
'';
passthru.scriptName = scriptName;
};
in {
enable = true;
scripts = [
pkgs.mpvScripts.sponsorblock
pkgs.mpvScripts.mpris
] ++ lib.map (script: fetchMpvScript {
url = "https://raw.githubusercontent.com/occivink/mpv-scripts/d0390c8e802c2e888ff4a2e1d5e4fb040f855b89/scripts/${script.name}";
hash = script.hash;
scriptName = script.name;
}) [
{ name = "crop.lua"; hash = "sha256-/uaTCtV8Aanvnxrt8afBbO4uu2xp8Ec6DxApMb+fg2s="; }
{ name = "encode.lua"; hash = "sha256-yK/DV0cpGhl4Uobl7xA1myZiECJpsShrHnsJftBqzAY="; }
];
settings = {
mpv = {
keep-open = "yes";
volume = "40";
osd-fractions = "yes";
background = "none";
border = "no";
};
input = lib.mkMerge [
# mpv core
''
Alt+1 set window-scale 0.125
Alt+2 set window-scale 0.25
Alt+3 set window-scale 0.5
Alt+4 set window-scale 1
Alt+5 set window-scale 2
''
# crop.lua
''
c script-message-to crop start-crop hard
alt+c script-message-to crop start-crop soft
ctrl+shift+c script-message-to crop start-crop delogo
C script-message-to crop toggle-crop hard
''
# encode.lua
''
b script-message-to encode encode_default
alt+b script-message-to encode set-timestamp encode_default
''
];
script-opts = {
"encode_default.conf" = {
only_active_tracks = "no";
preserve_filters = "yes";
append_filder = "";
codec = "";
output_format = "$f_$n.$x";
output_dir = "/tmp";
detached = "no";
ffmpeg_command = lib.getExe pkgs.ffmpeg;
};
};
};
};
# Fonts
fonts.packages = with pkgs; [
corefonts
nerd-fonts.meslo-lg
roboto
];
# Pcmanfm configuration
environment.etc."xdg/pcmanfm/default/pcmanfm.conf".text = ''
[config]
bm_open_method=0
[volume]
mount_on_startup=0
mount_removable=0
autorun=0
[ui]
always_show_tabs=1
max_tab_chars=32
media_in_new_tab=0
desktop_folder_new_win=0
change_tab_on_drop=1
close_on_unmount=1
focus_previous=1
side_pane_mode=places
view_mode=list
show_hidden=1
sort=name;ascending;
toolbar=newwin;newtab;navigation;home;
show_statusbar=1
pathbar_mode_buttons=0
'';
environment.etc."xdg/libfm/libfm.conf".text = ''
[config]
single_click=0
use_trash=1
confirm_del=1
confirm_trash=1
advanced_mode=0
si_unit=0
force_startup_notify=1
backup_as_hidden=1
no_usb_trash=1
no_child_non_expandable=0
show_full_names=0
only_user_templates=0
drop_default_action=auto
terminal=${lib.optionalString (lib.elem pkgs.kitty config.environment.systemPackages) "kitty"}
archiver=file-roller
thumbnail_local=1
thumbnail_max=16384
[ui]
big_icon_size=48
small_icon_size=16
pane_icon_size=16
thumbnail_size=128
show_thumbnail=1
shadow_hidden=1
[places]
places_home=1
places_desktop=1
places_root=1
places_computer=1
places_trash=1
places_applications=1
places_network=1
places_unmounted=1
'';
};
}

93
nixos/modules/core.nix Normal file
View file

@ -0,0 +1,93 @@
{
inputs,
lib,
pkgs,
self,
...
}:
{
imports = [
./module-overrides.nix
./nix.nix
];
config = {
# kernel
boot.kernelPackages = pkgs.linuxPackages_latest;
# Enable networking
networking.networkmanager.enable = true;
# Allow unfree packages
nixpkgs.config.allowUnfree = true;
nix = {
channel.enable = false;
settings = {
auto-optimise-store = true;
experimental-features = [
"no-url-literals"
];
};
nixPath = [
"nixpkgs=${pkgs.selfExpr { useConfig = false; }}"
"systemNixpkgs=${pkgs.selfExpr { useConfig = true; name = "systemNixpkgs-self"; }}"
# don't garbage collect the nixpkgs input
"inputsNixpkgs=${inputs.nixpkgs}"
"nixos-system=/etc/nixos/default.nix"
];
};
# List packages installed in system profile. To search, run:
# $ nix search wget
environment.systemPackages = with pkgs; [
waypipe
wget
ffmpeg
yt-dlp
htop
btop
fastfetch
smartmontools
ddrescue
];
programs.git.enable = true;
programs.git.config = {
commit.verbose = true;
init.defaultBranch = "main";
merge.conflictstyle = "diff3";
rerere.enabled = true;
};
# Use nix-index for command-not-found handler
programs.command-not-found.enable = false;
programs.nix-index = {
package = pkgs.nix-index.override {
nix-index-unwrapped = pkgs.nix-index-unwrapped.overrideAttrs (oldAttrs: {
patches = oldAttrs.patches or [] ++ [
( builtins.path { path = "${self}/pkgs/by-name/ni/nix-index/cnfOutput.patch"; } )
];
});
};
enable = true;
enableBashIntegration = true;
};
# Enable fail2ban because of the OpenSSH server
services.fail2ban = {
enable = true;
maxretry = 10;
bantime = "7d";
};
# Enable the OpenSSH daemon.
services.openssh = {
enable = true;
ports = [
22
8022
];
};
};
}

View file

@ -59,18 +59,17 @@
"workspace-indicator@gnome-shell-extensions.gcampax.github.com"
"Vitals@CoreCoding.com"
"trayIconsReloaded@selfmade.pl"
"places-menu@gnome-shell-extensions.gcampax.github.com"
"apps-menu@gnome-shell-extensions.gcampax.github.com"
"top-bar-organizer@julian.gse.jsts.xyz"
"color-picker@tuberry"
];
favorite-apps = [
"kitty.desktop"
"pcmanfm.desktop"
"vivaldi-stable.desktop"
"code.desktop"
"org.gnome.Nautilus.desktop"
"steam.desktop"
"pavucontrol.desktop"
"com.saivert.pwvucontrol.desktop"
];
};
@ -92,6 +91,7 @@
active-hint-border-radius = mkUint32 1;
gap-inner = mkUint32 2;
gap-outer = mkUint32 1;
hint-color-rgba = "rgb(161,192,235)";
show-skip-taskbar = true;
show-title = true;
smart-gaps = false;

View file

@ -0,0 +1,11 @@
[
"kitty",
"vivaldi-stable",
"pcmanfm",
"code",
"steam",
"vesktop",
"org.telegram.desktop",
"jitsi-meet-electron",
"com.saivert.pwvucontrol",
]

View file

@ -0,0 +1,9 @@
(
output: "all",
source: Path("@wallpaper@"),
filter_by_theme: true,
rotation_frequency: 300,
filter_method: Lanczos,
scaling_mode: Zoom,
sampling_method: Alphanumeric,
)

View file

@ -0,0 +1,4 @@
(
workspace_mode: OutputBound,
workspace_layout: Horizontal,
)

View file

@ -0,0 +1,5 @@
(
show_content: false,
show_mounted_drives: false,
show_trash: false,
)

View file

@ -0,0 +1,5 @@
Some((
wait_time: 1000,
transition_time: 200,
handle_size: 4,
))

View file

@ -0,0 +1 @@
@corner_radii_panel@

View file

@ -0,0 +1,5 @@
Some([
"com.system76.CosmicAppList",
"com.system76.CosmicAppletMinimize",
"com.system76.CosmicPanelAppButton",
])

View file

@ -0,0 +1,3 @@
Some([
"com.system76.CosmicAppletTime",
])

View file

@ -0,0 +1,14 @@
Some(([
"com.system76.CosmicPanelAppButton",
"com.system76.CosmicAppletWorkspaces",
], [
"com.system76.CosmicAppletStatusArea",
"com.system76.CosmicAppletInputSources",
"com.system76.CosmicAppletTiling",
"com.system76.CosmicAppletAudio",
"com.system76.CosmicAppletNetwork",
"com.system76.CosmicAppletBattery",
"com.system76.CosmicAppletNotifications",
"com.system76.CosmicAppletBluetooth",
"com.system76.CosmicAppletPower",
]))

View file

@ -0,0 +1,36 @@
{
(
modifiers: [
Ctrl,
Alt,
],
key: "t",
description: Some("Open terminal"),
): Spawn("kitty"),
(
modifiers: [
Super,
Shift,
],
key: "s",
): System(Screenshot),
(
modifiers: [
Super,
Ctrl,
],
key: "l",
): System(LockScreen),
(
modifiers: [
Super,
],
): System(Launcher),
(
modifiers: [
Super,
Alt,
],
key: "g",
): ToggleSticky,
}

View file

@ -0,0 +1,8 @@
(
radius_0: (0.0, 0.0, 0.0, 0.0),
radius_xs: (@corner_radii_theme@, @corner_radii_theme@, @corner_radii_theme@, @corner_radii_theme@),
radius_s: (@corner_radii_theme@, @corner_radii_theme@, @corner_radii_theme@, @corner_radii_theme@),
radius_m: (@corner_radii_theme@, @corner_radii_theme@, @corner_radii_theme@, @corner_radii_theme@),
radius_l: (@corner_radii_theme@, @corner_radii_theme@, @corner_radii_theme@, @corner_radii_theme@),
radius_xl: (@corner_radii_theme@, @corner_radii_theme@, @corner_radii_theme@, @corner_radii_theme@),
)

View file

@ -0,0 +1,8 @@
(
radius_0: (0.0, 0.0, 0.0, 0.0),
radius_xs: (@corner_radii_theme@, @corner_radii_theme@, @corner_radii_theme@, @corner_radii_theme@),
radius_s: (@corner_radii_theme@, @corner_radii_theme@, @corner_radii_theme@, @corner_radii_theme@),
radius_m: (@corner_radii_theme@, @corner_radii_theme@, @corner_radii_theme@, @corner_radii_theme@),
radius_l: (@corner_radii_theme@, @corner_radii_theme@, @corner_radii_theme@, @corner_radii_theme@),
radius_xl: (@corner_radii_theme@, @corner_radii_theme@, @corner_radii_theme@, @corner_radii_theme@),
)

View file

@ -0,0 +1,67 @@
{
inputs,
lib,
pkgs,
self,
...
}:
let
cosmic-configuration = pkgs.stdenv.mkDerivation {
name = "cosmic-configuration";
src = ./cosmic-config;
outputs = [ "out" "share" ];
dontConfigure = true;
buildPhase = ''
for file in $(find . -type f); do
substituteInPlace "$file" \
--subst-var-by wallpaper "${builtins.path { path = "${self}/media/wallpaper.png"; }}" \
--subst-var-by corner_radii_theme "2.0" \
--subst-var-by corner_radii_panel "2"
done
'';
installPhase = ''
mkdir -p $out $share/share/cosmic
cp -r ./* $out/
cp -r ./* $share/share/cosmic/
'';
};
in
{
imports = [
"${inputs.cosmic-modules}/nixos/cosmic/module.nix"
"${self}/nixos/modules/generic/dconf.nix"
];
config = {
services.desktopManager.cosmic.enable = true;
environment.cosmic.excludePackages = with pkgs; [
cosmic-edit
cosmic-player
cosmic-term
];
environment.systemPackages = with pkgs; [
(lib.hiPrio cosmic-configuration.share)
google-cursor
];
services.gnome.gnome-keyring.enable = true;
proot.dconf = {
rules."org/gnome/desktop/interface".cursor-theme = "GoogleDot-White";
profiles.user.rulesToApply = [
"org/gnome/desktop/interface"
];
};
environment.sessionVariables = {
XCURSOR_SIZE = "16";
XCURSOR_THEME = "GoogleDot-White";
};
environment.etc."xdg/gtk-3.0/settings.ini".text = ''
[Settings]
gtk-cursor-theme-name=GoogleDot-White
gtk-application-prefer-dark-theme=true
'';
};
}

View file

@ -68,6 +68,7 @@ in
gnome.seahorse
gnome.totem
gnome.yelp
gnome.nautilus
];
environment.systemPackages = with pkgs; [
@ -79,9 +80,14 @@ in
gnomeExtensions.top-bar-organizer
# unstablePkgs.gnomeExtensions.translate-indicator
# translate-shell
pavucontrol
#FIXME: Apply the cursor theme also in GTK3 config
google-cursor
];
environment.etc."xdg/gtk-3.0/settings.ini".text = ''
[Settings]
gtk-cursor-theme-name=${config.proot.dconf.rules."org/gnome/desktop/interface".cursor-theme}
'' + lib.optionalString (lib.hasInfix "dark" config.proot.dconf.rules."org/gnome/desktop/interface".color-scheme) ''
gtk-application-prefer-dark-theme=true
'';
};
}

41
nixos/modules/docker.nix Normal file
View file

@ -0,0 +1,41 @@
{ lib, config, pkgs, ... }:
{
config = {
virtualisation.docker = {
enable = true;
enableOnBoot = true;
storageDriver = if config.fileSystems."/".fsType == "btrfs" then "btrfs" else null;
rootless.enable = true;
rootless.setSocketVariable = true;
daemon.settings = {
default-address-pools = [
{base = "10.64.0.0/10"; size = 24;}
];
bip = "10.127.0.1/16";
};
};
users.users.indocker = {
isSystemUser = true;
hashedPassword = "!";
uid = 900;
group = "indocker";
};
users.groups.indocker = {
gid = 900;
};
environment.systemPackages = with pkgs; [
docker-compose
];
# Docker enables firewall anyway, let's enable the firewall for it if it's disabled
# TODO: Apply only when config.networking.firewall is false
networking.firewall = {
enable = lib.mkOverride 90 true;
allowedTCPPorts = lib.mkOverride 90 [];
allowedUDPPorts = lib.mkOverride 90 [];
allowedTCPPortRanges = lib.mkOverride 90 [{ from = 0; to = 65535;}];
allowedUDPPortRanges = lib.mkOverride 90 [{ from = 0; to = 65535;}];
};
};
}

View file

@ -10,12 +10,12 @@ let
rulesToApply = lib.mkOption {
type = lib.types.listOf lib.types.str;
default = lib.attrNames cfg.rules;
description = lib.mdDoc "A list of rules keys to apply for profile";
description = "A list of rules keys to apply for profile";
};
extraRules = lib.mkOption {
type = lib.types.attrs;
default = {};
description = lib.mdDoc "An attrset of additional dconf rules to apply ontop of selected";
description = "An attrset of additional dconf rules to apply ontop of selected";
};
};
};
@ -31,12 +31,12 @@ in
rules = lib.mkOption {
type = lib.types.attrs;
default = {};
description = lib.mdDoc "An attrset of dconf rules to pull from";
description = "An attrset of dconf rules to pull from";
};
profiles = lib.mkOption {
type = lib.types.attrsOf profileOpts;
default = {};
description = lib.mdDoc "An attret of profiles to create, with pulled rules";
description = "An attret of profiles to create, with pulled rules";
};
};

View file

@ -0,0 +1,91 @@
{config, lib, options, pkgs, ... }:
let
cfg = config.programs.mpv;
opts = options.programs.mpv;
toMpvIniString = attrset: lib.pipe attrset [
(lib.mapAttrsToList (name: value: "${name}=${value}"))
(lib.concatStringsSep "\n")
];
configDir = pkgs.symlinkJoin {
name = "mpv-config-dir";
paths = lib.optional opts.settings.mpv.isDefined (pkgs.writeTextFile {
name = "mpv-config-dir-mpv.conf";
destination = "/share/mpv/mpv.conf";
text = toMpvIniString cfg.settings.mpv;
}) ++ lib.optional opts.settings.input.isDefined (pkgs.writeTextFile {
name = "mpv-config-dir-input.conf";
destination = "/share/mpv/input.conf";
text = cfg.settings.input;
}) ++ lib.mapAttrsToList (filename: opts: pkgs.writeTextFile {
name = "mpv-config-dir-script-opts-${filename}";
destination = "/share/mpv/script-opts/${filename}";
text = toMpvIniString opts;
}) cfg.settings.script-opts;
};
wrappedMpv = cfg.package.wrapper {
mpv = cfg.package;
youtubeSupport = cfg.youtubeSupport;
scripts = cfg.scripts;
extraMakeWrapperArgs = lib.optionals (lib.any (x: x) [
opts.settings.mpv.isDefined
opts.settings.input.isDefined
(lib.length (lib.attrNames cfg.settings.script-opts) > 0)
]) [
"--add-flags" "--config-dir='${configDir}/share/mpv'"
];
};
in
{
options.programs.mpv = {
enable = lib.mkEnableOption "mpv";
package = lib.mkPackageOption pkgs "mpv-unwrapped" {};
scripts = lib.mkOption {
type = lib.types.listOf lib.types.package;
default = [];
};
youtubeSupport = lib.mkEnableOption "yt-dlp support for mpv" // {
default = true;
};
settings = let
mpvini = lib.types.attrsOf lib.types.str;
in {
script-opts = lib.mkOption {
type = lib.types.attrsOf mpvini;
default = {};
example = {
"crop.conf".draw_crosshair = "yes";
};
description = ''
A map of script options for mpv scripts.
The key is the filename of the script, and the value is a map of options.
'';
};
input = lib.mkOption {
type = lib.types.separatedString "\n";
example = ''
Alt+1 set window-scale 0.125
'';
description = ''
A list of input commands to be added to the input.conf file.
'';
};
mpv = lib.mkOption {
type = mpvini;
example = {
keep-open = "yes";
osd-fractions = "yes";
};
description = ''
A map of mpv options.
'';
};
};
};
config = lib.mkIf cfg.enable {
environment.systemPackages = [ wrappedMpv ];
};
}

View file

@ -5,11 +5,15 @@
# Use pcscd for smartcard support
services.pcscd.enable = true;
environment.systemPackages = [(
pkgs.gnupg.overrideAttrs (superAttrs: {
programs.gnupg = {
package = pkgs.gnupg.overrideAttrs (superAttrs: {
configureFlags = superAttrs.configureFlags or []
++ [ "--disable-ccid-driver" ];
})
)];
});
agent = {
enable = true;
pinentryPackage = pkgs.pinentry-qt;
};
};
};
}

View file

@ -1,5 +1,3 @@
{ ... }:
{
config = {
# Set your time zone.

View file

@ -0,0 +1,43 @@
{
lib,
modulesPath,
...
}:
let
moduleOverrides = [
# NIXPKGS-PR: 359882
{
disabledModules = [
"${modulesPath}/system/boot/luksroot.nix"
];
replacementModules = [(builtins.fetchurl {
url = "https://raw.githubusercontent.com/amozeo/nixpkgs/728d5806fe6f975ba3843297332d12e13119fe86/nixos/modules/system/boot/luksroot.nix";
sha256 = "0s2k8k6rrlwn2zb02q6fkvswln8w4hvh02hm4krqvkh46amyasyy";
})];
}
# NIXPKGS-PR: 394300
{
disabledModules = [
"${modulesPath}/hardware/openrazer.nix"
];
replacementModules = [
(builtins.fetchurl {
url = "https://raw.githubusercontent.com/NixOS/nixpkgs/4a11562c20fbe7af7d5ac139dbf0f8d50ce276f6/nixos/modules/hardware/openrazer.nix";
sha256 = "0n6kzrcwlmxgws4pmffyqagp2rxpfxmfjl11vgvlkjcbglg6fs7y";
})
];
}
];
toModule = entry: {
imports = entry.replacementModules;
disabledModules = entry.disabledModules;
_file = let
info = builtins.unsafeGetAttrPos "disabledModules" entry;
in "${info.file}:L${info.line}";
};
in
{
imports = lib.map toModule moduleOverrides;
}

66
nixos/modules/nix.nix Normal file
View file

@ -0,0 +1,66 @@
{
lib,
pkgs,
...
}:
let
# bool -> nixpkgs[]
wrappedNixExecutables = inEnvironment: assert builtins.isBool inEnvironment; pkgs.symlinkJoin {
name = "${pkgs.nix.name}-wrap";
paths = [ pkgs.nix ];
nativeBuildInputs = [
pkgs.makeWrapper
];
postBuild = ''
wrapProgram $out/bin/nix-build \
--add-flags "--log-format" \
--add-flags "bar${lib.optionalString inEnvironment "-with-logs"}"
wrapProgram $out/bin/nix-shell \
--add-flags "--log-format" \
--add-flags "bar"
wrapProgram $out/bin/nix-env \
--add-flags "--log-format" \
--add-flags "bar"
'';
passthru = {
inherit (pkgs.nix) man meta version;
};
};
# NIXPKGS-PR: 389487
futureNixosExecutables = let
nixpkgs = builtins.fetchTarball {
url = "https://github.com/NixOS/nixpkgs/archive/53a47a1c57b35bb5850cfb137d5c51ec6581152d.tar.gz";
sha256 = "sha256-B2nuArKny9jHqEZewqlu61f/4/9lh65iGF9IKjeTc+c=";
};
in pkgs.callPackage "${nixpkgs}/pkgs/os-specific/linux/nixos-rebuild/default.nix" {};
wrappedNixosExecutables = pkgs.symlinkJoin {
name = "${pkgs.nixos-rebuild.name}-wrap";
paths = [ futureNixosExecutables ];
nativeBuildInputs = [
pkgs.makeWrapper
];
postBuild = ''
wrapProgram $out/bin/nixos-rebuild \
--add-flags "--log-format" \
--add-flags "bar" \
--add-flags "--use-remote-sudo"
'';
};
in {
config = {
nix.package = wrappedNixExecutables false;
environment.systemPackages = [
pkgs.nix-output-monitor
pkgs.nix-diff
pkgs.nix-tree
] ++ lib.map (lib.hiPrio) [
(wrappedNixExecutables true)
wrappedNixosExecutables
];
system.build.nixos-rebuild = lib.mkForce wrappedNixosExecutables;
system.tools.nixos-rebuild.enable = false;
};
}

107
nixos/modules/nvidia.nix Normal file
View file

@ -0,0 +1,107 @@
{
config,
lib,
pkgs,
self,
...
}:
{
config = {
hardware.graphics = {
enable = true;
enable32Bit = true;
};
# Workaround for nvidia driver ghost display
boot.kernelParams = [ "nvidia_drm.fbdev=1" ];
services.xserver.videoDrivers = ["nvidia"];
hardware.nvidia = {
modesetting.enable = true;
powerManagement.enable = true;
open = false;
nvidiaSettings = true;
package = let
mkDriverArgs = {
version = "575.64";
sha256_64bit = "sha256-6wG8/nOwbH0ktgg8J+ZBT2l5VC8G5lYBQhtkzMCtaLE=";
sha256_aarch64 = "sha256-uHj8fB1sSJfX0NWZEE1eZN1LQQkf7J0jPV3EeQCSG10=";
openSha256 = "sha256-y93FdR5TZuurDlxc/p5D5+a7OH93qU4hwQqMXorcs/g=";
settingsSha256 = "sha256-3BvryH7p0ioweNN4S8oLDCTSS47fQPWVYwNq4AuWQgQ=";
persistencedSha256 = "sha256-QkDNQKwCsakZOLcSie1NBiFCM5e5NFGiIKtPSFeWdXs=";
patches = [
(pkgs.fetchpatch {
url = "https://raw.githubusercontent.com/rpmfusion/nvidia-kmod/020f5fabfb067150f8dd0d6e470a7a694f59eb59/Workaround-nv_vm_flags_-calling-GPL-only-code.patch";
hash = "sha256-2WQs8WDVzNivwUSWn7t2hoduUVvmem5e+JpGt04380c=";
})
];
};
in ( config.boot.kernelPackages.nvidiaPackages.mkDriver mkDriverArgs ).overrideAttrs (super: {
passthru = super.passthru or {} // {
urls = {
x86_64 = [
"https://download.nvidia.com/XFree86/Linux-x86_64/${mkDriverArgs.version}/NVIDIA-Linux-x86_64-${mkDriverArgs.version}.run"
"https://us.download.nvidia.com/XFree86/Linux-x86_64/${mkDriverArgs.version}/NVIDIA-Linux-x86_64-${mkDriverArgs.version}.run"
];
aarch64 = [
"https://us.download.nvidia.com/XFree86/aarch64/${mkDriverArgs.version}/NVIDIA-Linux-aarch64-${mkDriverArgs.version}.run"
"https://download.nvidia.com/XFree86/Linux-aarch64/${mkDriverArgs.version}/NVIDIA-Linux-aarch64-${mkDriverArgs.version}.run"
];
};
updateScript = pkgs.den-http-get-updater {
fileLocation = ( builtins.unsafeGetAttrPos "any" { any = null; } ).file;
previousVersion = mkDriverArgs.version;
versionUrl = "https://raw.githubusercontent.com/aaronp24/nvidia-versions/master/nvidia-versions.txt";
extraPackages = with pkgs; [
coreutils
gawk
gnugrep
];
contentParser = lib.concatStringsSep " | " [
"echo \"$newVersion\""
"grep current"
"awk '{print $3}'"
"sort -V"
"tail -n 1"
];
unpack = false;
prefetchList = lib.map (x: {
inherit (x) previousHash;
unpack = x.unpack or true;
prefetchUrlLocation = {
file = builtins.toString self + "/outputs.nix";
# TODO: don't use already existing NixOS configuration
attrpath = "nixosConfigurations.main.config.hardware.nvidia.package.${x.locationAttrpath}";
};
}) [
{
previousHash = mkDriverArgs.sha256_64bit;
locationAttrpath = "urls.x86_64";
unpack = false;
}
{
previousHash = mkDriverArgs.sha256_aarch64;
locationAttrpath = "urls.aarch64";
unpack = false;
}
{
previousHash = mkDriverArgs.openSha256;
locationAttrpath = "open.src.urls";
}
{
previousHash = mkDriverArgs.settingsSha256;
locationAttrpath = "settings.src.urls";
}
{
previousHash = mkDriverArgs.persistencedSha256;
locationAttrpath = "persistenced.src.urls";
}
];
};
};
});
};
nixpkgs.config.nvidia.acceptLicense = true;
};
}

View file

@ -0,0 +1,44 @@
{
config = {
security.polkit.extraConfig = ''
polkit.addRule(function(action, subject) {
polkit.log("action=" + action);
polkit.log("subject=" + subject);
if (
action.id == "org.freedesktop.login1.halt" ||
action.id == "org.freedesktop.login1.halt-ignore-inhibit" ||
action.id == "org.freedesktop.login1.halt-multiple-sessions" ||
action.id == "org.freedesktop.login1.hibernate" ||
action.id == "org.freedesktop.login1.hibernate-ignore-inhibit" ||
action.id == "org.freedesktop.login1.hibernate-multiple-sessions" ||
action.id == "org.freedesktop.login1.inhibit-block-idle" ||
action.id == "org.freedesktop.login1.inhibit-block-shutdown" ||
action.id == "org.freedesktop.login1.inhibit-block-sleep" ||
action.id == "org.freedesktop.login1.inhibit-handle-hibernate-key" ||
action.id == "org.freedesktop.login1.inhibit-handle-lid-switch" ||
action.id == "org.freedesktop.login1.inhibit-handle-power-key" ||
action.id == "org.freedesktop.login1.inhibit-handle-reboot-key" ||
action.id == "org.freedesktop.login1.inhibit-handle-suspend-key" ||
action.id == "org.freedesktop.login1.power-off" ||
action.id == "org.freedesktop.login1.power-off-ignore-inhibit" ||
action.id == "org.freedesktop.login1.power-off-multiple-sessions" ||
action.id == "org.freedesktop.login1.reboot" ||
action.id == "org.freedesktop.login1.reboot-ignore-inhibit" ||
action.id == "org.freedesktop.login1.reboot-multiple-sessions" ||
action.id == "org.freedesktop.login1.set-reboot-parameter" ||
action.id == "org.freedesktop.login1.set-reboot-to-boot-loader-entry" ||
action.id == "org.freedesktop.login1.set-reboot-to-boot-loader-menu" ||
action.id == "org.freedesktop.login1.set-reboot-to-firmware-setup" ||
action.id == "org.freedesktop.login1.set-self-linger" ||
action.id == "org.freedesktop.login1.set-user-linger" ||
action.id == "org.freedesktop.login1.set-wall-message" ||
action.id == "org.freedesktop.login1.suspend" ||
action.id == "org.freedesktop.login1.suspend-ignore-inhibit" ||
action.id == "org.freedesktop.login1.suspend-multiple-sessions"
) {
return subject.active ? polkit.Result.AUTH_ADMIN : polkit.Result.NO;
};
});
'';
};
}

View file

@ -0,0 +1,17 @@
{
config = {
security.polkit.extraConfig = ''
polkit.addRule(function(action, subject) {
// Allow to start and stop wireguard client services
if (
action.id == "org.freedesktop.systemd1.manage-units" &&
subject.isInGroup("users") &&
action.lookup("unit") &&
action.lookup("unit").match(/^wg-quick-.*\.service$/)
) {
return polkit.Result.YES;
};
});
'';
};
}

36
nixos/modules/razer.nix Normal file
View file

@ -0,0 +1,36 @@
{
config,
lib,
pkgs,
...
}:
{
config = {
hardware.openrazer = {
enable = true;
users = [
"wroclaw"
];
# NIXPKGS-PR: 384992
packages = let
oldVersion = pkgs.python3Packages.openrazer-daemon.version;
version = "3.10.3";
in lib.mapAttrs (_: package: package.overrideAttrs (oldAttrs: {
version = lib.replaceStrings [ oldVersion ] [ version ] oldAttrs.version;
src = pkgs.fetchFromGitHub {
owner = "openrazer";
repo = "openrazer";
tag = "v${version}";
hash = "sha256-M5g3Rn9WuyudhWQfDooopjexEgGVB0rzfJsPg+dqwn4=";
};
})) {
kernel = config.boot.kernelPackages.openrazer;
daemon = pkgs.python3Packages.openrazer-daemon;
};
};
environment.systemPackages = with pkgs; [
polychromatic
];
};
}

View file

@ -0,0 +1,54 @@
{
config,
lib,
pkgs,
...
}:
{
options = {
services.nix-serve = {
keyName = lib.mkOption {
type = lib.types.str;
default = config.networking.fqdnOrHostName;
defaultText = "config.networking.fqdnOrHostName";
description = "Name of the key when generating (usually domain name)";
};
publicKeyFile = lib.mkOption {
type = lib.types.path;
default = "/var/cache-pub-key.pem";
description = "Path to the public key file";
};
};
};
config = {
services.nix-serve = {
enable = true;
package = pkgs.nix-serve-ng;
secretKeyFile = "/var/cache-priv-key.pem";
};
systemd.services.nix-serve-generate-key = let
inherit (config.services.nix-serve) keyName secretKeyFile publicKeyFile;
in {
description = "Ensure existence of nix binary cache signing key";
wantedBy = [ config.systemd.services.nix-serve.name ];
script = ''
if [ -f ${secretKeyFile} ]; then
echo "File ${secretKeyFile} already exists, nothing to do" >&2
exit 0
fi
if [ -a ${secretKeyFile} ]; then
echo "File ${secretKeyFile} is not a regular file" >&2
exit 1
fi
echo "Generating nix binary cache signing key" >&2
touch ${secretKeyFile}
chmod 600 ${secretKeyFile}
mkdir -p $(dirname ${secretKeyFile})
${lib.getExe' pkgs.nix "nix-store"} --generate-binary-cache-key \
${keyName} ${secretKeyFile} ${publicKeyFile}
'';
restartIfChanged = true;
};
};
}

187
nixos/modules/shell.nix Normal file
View file

@ -0,0 +1,187 @@
{ config, pkgs, unstablePkgs, lib, ... }:
let
aliasDrag = pkgs.writeScriptBin "drag" ''
${pkgs.ripdrag}/bin/ripdrag -Axd $@
'';
in
{
imports = [
./unstable-packages.nix
];
config = {
environment.systemPackages = ( with pkgs; [
aliasDrag
ranger-git
ripgrep
(kitty.overrideAttrs (superAttrs: {
patches = superAttrs.patches or [] ++ [
(fetchpatch {
url = "https://github.com/AmirulAndalib/kitty/commit/61fd8c4003b361503160424cbed1960153f40290.patch";
excludes = lib.map lib.escapeRegex [
"docs/changelog.rst"
];
hash = "sha256-TqO/pLRkxN+Mz4nfNfTntGpPoy6OgbtAGmdohG/1BFs=";
})
];
}))
zoxide
]) ++ [
(
pkgs.writeScriptBin "nix-convert-hash" ''
${lib.getExe' config.nix.package "nix"} --extra-experimental-features "nix-command" hash convert "$@"
''
)
];
programs.bash.shellInit = ''
HISTCONTROL=ignoreboth
'';
programs.bash.interactiveShellInit = lib.mkMerge [
''
HISTCONTROL=ignoreboth
if test -n "$KITTY_INSTALLATION_DIR"; then
export KITTY_SHELL_INTEGRATION="enabled,no-sudo"
source "$KITTY_INSTALLATION_DIR/shell-integration/bash/kitty.bash"
fi
alias bye=exit
''
(lib.mkAfter ''
eval "''$(${lib.getExe pkgs.zoxide} init bash)"
'')
];
environment.etc."xdg/kitty/kitty.conf".text = ''
font_family MesloLGS Nerd Font
font_size 10.0
scrollback_lines 10000
window_border_width 0.5
window_padding_width 3
${if config.services.xserver.desktopManager.gnome.enable then "hide_window_decorations yes" else ""}
background_opacity 0.8
dynamic_background_opacity yes
map kitty_mod+alt+c copy_ansi_to_clipboard
'';
environment.etc."ranger/rc.conf".text = ''
eval import os; fm.set_option_from_string("preview_images", "true") if "KITTY_INSTALLATION_DIR" in os.environ else None;
eval import os; fm.set_option_from_string("preview_images_method", "kitty") if "KITTY_INSTALLATION_DIR" in os.environ else None;
set vcs_aware true
set show_hidden true
alias drag shell ${pkgs.ripdrag}/bin/ripdrag -Axd %p &
map <C-d> drag
'';
environment.etc."ranger/plugins/zoxide.py".source = pkgs.fetchFromGitHub {
owner = "jchook";
repo = "ranger-zoxide";
rev = "281828de060299f73fe0b02fcabf4f2f2bd78ab3";
hash = "sha256-JEuyYSVa1NS3aftezEJx/k19lwwzf7XhqBCL0jH6VT4=";
} + /__init__.py;
programs.direnv.enable = true;
programs.neovim = {
enable = true;
viAlias = true;
vimAlias = true;
configure = {
customRC = ''
set number
set hlsearch
set incsearch
set tabstop=4
set softtabstop=4
set shiftwidth=4
set expandtab
set autoindent
set updatetime=500
colorscheme vim
syntax on
set encoding=utf-8
set wildmode=longest,list,full
set listchars=space:·,tab:»
set indentkeys-=0#
" rainbow-delimeters-nvim
let g:rainbow_delimiters = {
\ 'strategy': {
\ ${"''"}: rainbow_delimiters#strategy.global,
\ },
\ }
" vim-gitguter
set signcolumn=yes
highlight SignColumn NONE
highlight GitGutterAdd ctermfg=2 guifg=#2ea043
highlight GitGutterChange ctermfg=4 guifg=#0078d4
highlight GitGutterDelete ctermfg=1 guifg=#f85149
lua require('guess-indent').setup {}
'';
packages.myVimPackage = with pkgs.vimPlugins; {
start = [
guess-indent-nvim
vim-visual-multi
autoclose-nvim
rainbow-delimiters-nvim
vimagit
vim-gitgutter
];
};
};
};
environment.variables = lib.mkIf config.programs.neovim.enable rec {
EDITOR = "/run/current-system/sw/bin/nvim";
VISUAL = EDITOR;
};
programs.starship = {
enable = true;
settings = {
format = lib.concatStrings [
"$all"
"\${custom.sshAuthSocket}"
"$line_break"
"\${custom.ranger}"
"$jobs"
"$battery"
"$time"
"$status"
"$os"
"$container"
"$shell"
"$character"
];
directory = {
truncation_length = 5;
truncation_symbol = "/";
};
hostname = {
ssh_only = false;
};
username = {
show_always = true;
};
status.disabled = false;
custom.ranger = {
when = "test $RANGER_LEVEL";
command = "echo \"\"";
style = "bold 208";
};
custom.sshAuthSocket = {
when = "test -S \"$SSH_AUTH_SOCK\"";
command = "echo -e \"SSH Auth Agent\"";
style = "124";
format = "with [$output]($style) ";
};
};
};
};
}

View file

@ -1,14 +1,20 @@
{config, pkgs, lib, ...}:
{
config,
lib,
pkgs,
self,
...
}:
let
cfg = config.unstable;
unstableOverlay = import ../pkgs/overlays/unstable.nix;
unstableOverlay = self.overlays.unstableWithMeta;
in
{
options.unstable = {
enable = lib.mkEnableOption (lib.mkDoc ''
enable = lib.mkEnableOption ''
use of unstable packages in configuration. You can use `unstablePkgs` in configuration modules
'') // { default = true; };
'' // { default = true; };
};
config = {
_module.args.unstablePkgs = if config.unstable.enable then pkgs.unstable else pkgs;

View file

@ -0,0 +1,18 @@
{ lib, config, pkgs, ... }:
{
config = {
#virtualisation.waydroid.enable = true;
programs.virt-manager.enable = true;
virtualisation.libvirtd = {
enable = true;
qemu.ovmf = {
enable = true;
packages = [
pkgs.OVMFFull.fd
];
};
};
};
}

View file

@ -0,0 +1,137 @@
{
config = {
xdg.mime.enable = true;
xdg.mime.defaultApplications = {
# Browser
"x-scheme-handler/http" = "vivaldi-stable.desktop";
"application/xhtml+xml" = "vivaldi-stable.desktop";
"text/html" = "vivaldi-stable.desktop";
"x-scheme-handler/https" = "vivaldi-stable.desktop";
"application/pdf" = "vivaldi-stable.desktop";
# Audio
"audio/aiff" = "mpv.desktop";
"audio/basic" = "mpv.desktop";
"audio/it" = "mpv.desktop";
"audio/make" = "mpv.desktop";
"audio/make.my.funk" = "mpv.desktop";
"audio/mid" = "mpv.desktop";
"audio/midi" = "mpv.desktop";
"audio/mod" = "mpv.desktop";
"audio/mpeg" = "mpv.desktop";
"audio/mpeg3" = "mpv.desktop";
"audio/nspaudio" = "mpv.desktop";
"audio/s3m" = "mpv.desktop";
"audio/tsp-audio" = "mpv.desktop";
"audio/tsplayer" = "mpv.desktop";
"audio/vnd.qcelp" = "mpv.desktop";
"audio/voc" = "mpv.desktop";
"audio/voxware" = "mpv.desktop";
"audio/wav" = "mpv.desktop";
"audio/x-adpcm" = "mpv.desktop";
"audio/x-aiff" = "mpv.desktop";
"audio/x-au" = "mpv.desktop";
"audio/x-gsm" = "mpv.desktop";
"audio/x-jam" = "mpv.desktop";
"audio/x-liveaudio" = "mpv.desktop";
"audio/x-mid" = "mpv.desktop";
"audio/x-midi" = "mpv.desktop";
"audio/x-mod" = "mpv.desktop";
"audio/x-mpeg" = "mpv.desktop";
"audio/x-mpeg-3" = "mpv.desktop";
"audio/x-mpequrl" = "mpv.desktop";
"audio/x-nspaudio" = "mpv.desktop";
"audio/x-pn-realaudio" = "mpv.desktop";
"audio/x-pn-realaudio-plugin" = "mpv.desktop";
"audio/x-psid" = "mpv.desktop";
"audio/x-realaudio" = "mpv.desktop";
"audio/x-twinvq" = "mpv.desktop";
"audio/x-twinvq-plugin" = "mpv.desktop";
"audio/x-vnd.audioexplosion.mjuicemediafile" = "mpv.desktop";
"audio/x-voc" = "mpv.desktop";
"audio/x-wav" = "mpv.desktop";
"audio/xm" = "mpv.desktop";
# Video
"video/animaflex" = "mpv.desktop";
"video/avi" = "mpv.desktop";
"video/avs-video" = "mpv.desktop";
"video/dl" = "mpv.desktop";
"video/fli" = "mpv.desktop";
"video/gl" = "mpv.desktop";
"video/mpeg" = "mpv.desktop";
"video/msvideo" = "mpv.desktop";
"video/quicktime" = "mpv.desktop";
"video/vdo" = "mpv.desktop";
"video/vivo" = "mpv.desktop";
"video/vnd.rn-realvideo" = "mpv.desktop";
"video/vnd.vivo" = "mpv.desktop";
"video/vosaic" = "mpv.desktop";
"video/x-amt-demorun" = "mpv.desktop";
"video/x-amt-showrun" = "mpv.desktop";
"video/x-atomic3d-feature" = "mpv.desktop";
"video/x-dl" = "mpv.desktop";
"video/x-dv" = "mpv.desktop";
"video/x-fli" = "mpv.desktop";
"video/x-gl" = "mpv.desktop";
"video/x-isvideo" = "mpv.desktop";
"video/x-motion-jpeg" = "mpv.desktop";
"video/x-mpeg" = "mpv.desktop";
"video/x-mpeq2a" = "mpv.desktop";
"video/x-ms-asf" = "mpv.desktop";
"video/x-ms-asf-plugin" = "mpv.desktop";
"video/x-msvideo" = "mpv.desktop";
"video/x-qtc" = "mpv.desktop";
"video/x-scm" = "mpv.desktop";
"video/x-sgi-movie" = "mpv.desktop";
# Image
"image/bmp" = "qimgv.desktop";
"image/cmu-raster" = "qimgv.desktop";
"image/fif" = "qimgv.desktop";
"image/florian" = "qimgv.desktop";
"image/g3fax" = "qimgv.desktop";
"image/gif" = "qimgv.desktop";
"image/ief" = "qimgv.desktop";
"image/jpeg" = "qimgv.desktop";
"image/jutvision" = "qimgv.desktop";
"image/naplps" = "qimgv.desktop";
"image/pict" = "qimgv.desktop";
"image/pjpeg" = "qimgv.desktop";
"image/png" = "qimgv.desktop";
"image/tiff" = "qimgv.desktop";
"image/vasa" = "qimgv.desktop";
"image/vnd.dwg" = "qimgv.desktop";
"image/vnd.fpx" = "qimgv.desktop";
"image/vnd.net-fpx" = "qimgv.desktop";
"image/vnd.rn-realflash" = "qimgv.desktop";
"image/vnd.rn-realpix" = "qimgv.desktop";
"image/vnd.wap.wbmp" = "qimgv.desktop";
"image/vnd.xiff" = "qimgv.desktop";
"image/x-cmu-raster" = "qimgv.desktop";
"image/x-dwg" = "qimgv.desktop";
"image/x-icon" = "qimgv.desktop";
"image/x-jg" = "qimgv.desktop";
"image/x-jps" = "qimgv.desktop";
"image/x-niff" = "qimgv.desktop";
"image/x-pcx" = "qimgv.desktop";
"image/x-pict" = "qimgv.desktop";
"image/x-portable-anymap" = "qimgv.desktop";
"image/x-portable-bitmap" = "qimgv.desktop";
"image/x-portable-graymap" = "qimgv.desktop";
"image/x-portable-greymap" = "qimgv.desktop";
"image/x-portable-pixmap" = "qimgv.desktop";
"image/x-quicktime" = "qimgv.desktop";
"image/x-rgb" = "qimgv.desktop";
"image/x-tiff" = "qimgv.desktop";
"image/x-windows-bmp" = "qimgv.desktop";
"image/x-xbitmap" = "qimgv.desktop";
"image/x-xbm" = "qimgv.desktop";
"image/x-xpixmap" = "qimgv.desktop";
"image/x-xwd" = "qimgv.desktop";
"image/x-xwindowdump" = "qimgv.desktop";
"image/xbm" = "qimgv.desktop";
"image/xpm" = "qimgv.desktop";
};
};
}

View file

@ -1,47 +1,49 @@
{
inputs ? import ./inputs.nix {},
selfPath ? ./.
inputsPath ? ./inputs.nix,
inputs ? import inputsPath {},
selfPath ? {
outPath = builtins.toString ./.;
selfMode = "impure";
},
}:
let
lib = (import "${inputs.nixpkgs}/lib").extend (import ./lib/overlays/version-info-fixup.nix { inherit inputs; });
lib = (import "${inputs.nixpkgs}/lib").extend (import ./lib/overlays/version-info-fixup.nix { revision = inputs.lock.nixpkgs.revision; });
systems = [
"x86_64-linux"
"aarch64-linux"
];
# (system -> x) -> { [system] := x }
forEachSystem = lib.genAttrs systems;
self = {
inherit inputs lib self;
__toString = _: selfPath;
inherit inputs inputsPath lib self;
outPath = selfPath;
modifiedNixpkgs = import ./pkgs/top-level/impure.nix;
modifiedNixpkgsPure = import ./pkgs/top-level/default.nix;
packagesForSystem = system: self.modifiedNixpkgsPure { localSystem = system; };
packages = forEachSystem (system: let
nixpkgs = import "${inputs.nixpkgs}/pkgs/top-level/default.nix" { localSystem = system; };
attrnames = builtins.attrNames nixpkgs;
in
builtins.removeAttrs (self.packagesForSystem system) attrnames
);
overlays = {
cosmicPackages = import ./pkgs/overlays/cosmic-packages.nix { inherit inputs; };
selfExpr = import ./pkgs/overlays/selfExpr.nix { nixpkgsPath = inputs.nixpkgs; };
unstable = import ./pkgs/overlays/unstable.nix;
unstableWithMeta = import ./pkgs/overlays/unstable-with-meta.nix { unstableSource = inputs.nixpkgs-unstable; revision = inputs.lock.nixpkgs-unstable.revision; };
versionInfoFixup = import ./pkgs/overlays/version-info-fixup.nix { inherit inputs; };
};
nixosConfigurations = let
# list nix file paths in ./hosts to attributes in nixosConfigurations
filePaths = lib.pipe ./hosts [
builtins.readDir
( lib.filterAttrs (name: type:
( # regular .nix files
(type == "regular" && lib.hasSuffix ".nix" name)
|| # directories that contain a default.nix file
(type == "directory" && builtins.pathExists "${./hosts}/${name}/default.nix")
)
# filter out files that start with .
&& !lib.hasPrefix "." name
))
];
nixosSystem = import "${inputs.nixpkgs}/nixos/lib/eval-config.nix";
in
# mapped list of nix file paths to attrSet with initialized NixOS configurations,
# whose names are derived from file names
lib.pipe filePaths [
(builtins.mapAttrs (name: type: {
name = if type == "directory" then name else builtins.substring 0 (builtins.stringLength name - 4) name;
value = nixosSystem {
mkNixosSystem = path: nixosSystem {
inherit lib;
system = null;
modules = [
./hosts/${name}
path
{
config.nixpkgs.overlays = [
( import ./pkgs/overlays/selfExpr.nix { nixpkgsPath = "${self}/pkgs/top-level/impure.nix"; } )
@ -52,10 +54,52 @@ self = {
];
specialArgs = { inherit self inputs; };
};
baseHostsDir = ./nixos/hosts;
in
# mapped attrset of nix file paths to attrSet with initialized NixOS configurations,
# whose names are derived from file names
lib.pipe baseHostsDir [
builtins.readDir
# filter out files that are not .nix files, directories with default.nix or starting with . (dot, hidden files)
( lib.filterAttrs (name: type:
(
(type == "regular" && lib.hasSuffix ".nix" name)
|| (type == "directory" && builtins.pathExists (baseHostsDir + "/${name}/default.nix"))
)
&& !lib.hasPrefix "." name
))
(builtins.mapAttrs (name: type: {
# remove .nix extension
name = if type == "directory" then name else builtins.substring 0 (builtins.stringLength name - 4) name;
# initialize NixOS configuration
value = mkNixosSystem (baseHostsDir + "/${name}");
}))
builtins.attrValues
builtins.listToAttrs
];
updateList = import ./update-list.nix self;
# FIXME: currently impure
# NOTE: to run, you need to evaluate outputs.nix instead of default.nix
# nix-shell outputs.nix -A update
update = let
updateScript = (self.packagesForSystem (builtins.currentSystem)).den-update-script;
in updateScript {
path = "";
packages = lib.pipe self.updateList [
lib.attrsToList
(lib.imap1 (i: {name, value}: {
name = builtins.toString i;
value = value // {
# hack to pass isDerivation check in nixpkgs maintainers/scripts/update.nix
# https://github.com/NixOS/nixpkgs/blob/a1185f4064c18a5db37c5c84e5638c78b46e3341/maintainers/scripts/update.nix#L85
type = "derivation";
name = name;
};
}))
builtins.listToAttrs
lib.recurseIntoAttrs
];
};
};
in self

View file

@ -0,0 +1,180 @@
{
lib,
curl,
gnused,
jq,
nix,
uutils-coreutils-noprefix,
writeScript,
}:
{
# location of file to modify
fileLocation,
previousVersion,
versionUrl,
# {
# fileLocation: string?;
# previousHash: string;
# prefetchUrlLocation: {
# file: string;
# attrpath: string[]'
# };
# prefetchHash: string?;
# targetHash: string?;
# unpack: bool?;
# name: string?;
# }[]
#
prefetchList ? [],
# extra packages to add to the path
extraPackages ? [],
# change newVersion variable in it, if the contents of the page
# is not plaintext version
# (json for example)
contentParser ? "echo \"$newVersion\"",
unpack ? true,
hashAlgo ? "sha256",
hashFormat ? "sri",
}:
let
assertNoStorePathPrefix = path:
assert lib.assertMsg (!lib.hasPrefix builtins.storeDir path) ''
The path '${path}' is a store path.
den-http-get-updater must be evaluated in impure mode,
in order to modify target files, and this cannot be done
with files in the store.
''; path;
realFileLocation = assertNoStorePathPrefix (builtins.toString fileLocation);
prefetchList' = lib.map (x:
assert builtins.isNull x.prefetchUrlLocation || lib.isAttrs x.prefetchUrlLocation;
assert lib.isAttrs x.prefetchUrlLocation && (
lib.isString x.prefetchUrlLocation.file or null ||
lib.isPath x.prefetchUrlLocation.file or null
);
assert lib.isAttrs x.prefetchUrlLocation && lib.isString x.prefetchUrlLocation.attrpath or null;
rec {
inherit fileLocation hashAlgo hashFormat unpack;
name = if x.unpack or unpack then "source" else null;
mark = builtins.hashString "sha256" x.previousHash;
markRegexEscape = lib.escapeRegex mark;
realFileLocation = assertNoStorePathPrefix (builtins.toString x.realFileLocation or fileLocation);
realFileLocationShellEscape = lib.escapeShellArg realFileLocation;
prefetchUrlLocationShellEscape = lib.mapAttrs (_: lib.escapeShellArg) x.prefetchUrlLocation;
previousHashRegexEscape = lib.escapeRegex x.previousHash;
} // x) prefetchList;
realFileLocationShellEscape = lib.escapeShellArg realFileLocation;
versionUrlShellEscape = lib.escapeShellArg versionUrl;
previousVersionRegexEscape = lib.escapeRegex previousVersion;
path = lib.makeBinPath ([
curl
gnused
jq
nix
] ++ extraPackages);
in
writeScript "den-http-get-updater" (''
PATH="${lib.escapeShellArg path}"
prefetchFailed=
newVersion=$(curl -L "${versionUrlShellEscape}")
if [[ "$?" != 0 ]]; then
echo "error: fetching new version failed" 1>&2
exit 1
fi
newVersion=$(${contentParser})
sed -Ei "s!${previousVersionRegexEscape}!$newVersion!g" "${realFileLocationShellEscape}"
''
# invalidate hashes
+ lib.concatStringsSep "\n" (lib.map ({
mark,
previousHash,
previousHashRegexEscape,
realFileLocationShellEscape,
...
}: ''
sed -Ei "s!${previousHashRegexEscape}!${mark}!g" "${realFileLocationShellEscape}"
'') prefetchList')
+ lib.concatStringsSep "\n" (lib.map ({
fileLocation,
markRegexEscape,
name,
prefetchUrlLocationShellEscape,
realFileLocationShellEscape,
unpack,
...
}: let
nixUnpack = lib.optionalString unpack "--unpack";
nixName = lib.optionalString (!builtins.isNull name) "--name \"${lib.escapeShellArg name}\"";
in ''
for i in {1..30}; do
nixUrlsResult=$(nix-instantiate --eval --json --strict \
"${prefetchUrlLocationShellEscape.file}" \
-A "${prefetchUrlLocationShellEscape.attrpath}"
)
if [[ "$?" == "0" ]]; then
break
elif [[ "$i" == 30 ]]; then
echo "error: prefetchUrlLocation failed - attempts exhausted" 1>&2
exit 1
fi
echo "prefetchUrlLocation failed (attempt $i)" 1>&2
${lib.getExe' uutils-coreutils-noprefix "sleep"} 2
done
urlsType=$(jq -rc 'type' <<< "$nixUrlsResult")
if [ "$urlsType" = "array" ]; then
readarray -t prefetchUrls < <(
jq -rc '.[]' <<< "$nixUrlsResult"
)
elif [ "$urlsType" = "string" ]; then
readarray -t prefetchUrls < <(
jq -rc '.' <<< "$nixUrlsResult"
)
fi
prefetchSucceeded=1
for url in "''${prefetchUrls[@]}"; do
echo "trying prefetch '$url'...";
expectedHash=$(nix-prefetch-url "$url" ${nixUnpack} ${nixName} --type "${hashAlgo}")
expectedHash=$(nix --extra-experimental-features "nix-command" hash convert \
--hash-algo "${hashAlgo}" \
--to "${hashFormat}" \
"$expectedHash"
)
if [[ -n $expectedHash ]]; then
echo "prefetch succeeded!"
echo "hash: $expectedHash"
sed -Ei "s!${markRegexEscape}!$expectedHash!g" "${realFileLocationShellEscape}"
prefetchSucceeded=
break
fi
done
if [[ -n "$prefetchSucceeded" ]]; then
echo "warning: prefetch failed" 1>&2
prefetchFailed=1
fi
'') (lib.filter (x: !builtins.isNull x.prefetchUrlLocation) prefetchList'))
+ ''
if [[ -n "$prefetchFailed" ]]; then
exit 1
fi
'')

View file

@ -0,0 +1,39 @@
{
lib,
path,
overlayAttrname ? "den-outputs",
}:
assert lib.assertMsg (!lib.hasInfix "." overlayAttrname) (lib.pipe ''
overlayAttrname must not contain a dot (.),
because dot is used to reference package in a package set
inside nix-update-script.
'' [
lib.lines
(lib.concatStringsSep " ")
]);
let
updateScript = import (path + /maintainers/scripts/update.nix);
functionArgs = lib.functionArgs updateScript;
nameInFunctionArgs = name: lib.elem name (lib.attrNames functionArgs);
in
{
__functionArgs = functionArgs // { packages = false; };
__functor = _: args: let
# args.outputs should be an attrset of packages to update
overlay = _: _: {
"${overlayAttrname}" = args.packages;
};
in updateScript (lib.filterAttrs (name: _: nameInFunctionArgs name) args // {
include-overlays =
if !args ? updateScript then [ overlay ]
else if lib.isList args.updateScript then [ overlay ] ++ args.updateScript
else args.updateScript;
} // lib.optionalAttrs (args ? package) {
package = "${overlayAttrname}.${args.package}";
} // lib.optionalAttrs (args ? path) {
path = if lib.stringLength args.path == 0 then overlayAttrname else "${overlayAttrname}.${args.path}";
});
}

View file

@ -1,29 +0,0 @@
{
lib,
stdenv,
}:
{
src,
script,
...
} @ args:
lib.hiPrio (stdenv.mkDerivation (
{
src = src;
name = "${src.name}-script-override";
phases = [ "installPhase" "scriptOverridePhase" ];
installPhase = ''
runHook preInstall
cp -r $src $out
chmod u+w -R $out
runHook postInstall
'';
scriptOverridePhase = script;
} // lib.removeAttrs args [
"pkg"
"commands"
]
))

View file

@ -1,22 +0,0 @@
{
lib,
makeWrapper,
stdenv
}:
/*
pkg: package - nixpkgs package
exe: string - executable (under bin) in pkg
wrapperArgs: string[] - arguments to pass to the wrapper
*/
{ pkg, exe ? pkg.meta.mainProgram, wrapperArgs }:
lib.hiPrio (stdenv.mkDerivation {
inherit wrapperArgs;
name = "${pkg.name}-wrap-${exe}";
nativeBuildInputs = [ makeWrapper ];
phases = ["installPhase"];
installPhase = ''
mkdir -p $out/bin
makeWrapper ${pkg}/bin/${exe} $out/bin/${exe} $wrapperArgs
'';
})

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