Compare commits

..

124 Commits

Author SHA1 Message Date
c0d1341448 niri: redo a lot
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-07-19 13:21:31 +03:00
bba55dc973 try to fix styling
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-07-15 15:32:05 +03:00
d48559e6d8 modules/shared/user: apps
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-07-15 15:32:05 +03:00
c18c1d0060 stylix: geist fonts for sandcastle
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-07-15 15:32:05 +03:00
bec0e9d43a flake.lock: bump
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-07-15 15:32:05 +03:00
3937656ce1 cleanup the mess
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-07-13 13:55:45 +03:00
6554808614 unused stuff
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-07-13 13:55:45 +03:00
8a35e18e4e modules/home/desktop/niri/services/swaync/default.nix
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-07-12 15:36:36 +03:00
930417968f hosts/eldrid/cb-audio-fix: update
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-07-12 15:15:12 +03:00
7d0e089e3f use hostId for luks disks
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-07-12 15:15:12 +03:00
d135a13a5a niri/swaync: still hate it
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-07-10 13:21:04 +03:00
9c0e7c4cae flake.lock: bump
flake.nix: add ghostty
modules/home/programs/terminal/ghostty.nix: switch to ghostty flake

Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-07-07 13:09:26 +03:00
c65a7997e2 change colorscheme
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-07-07 13:09:26 +03:00
61d4307a10 modules/home/desktop/niri/programs/waybar/default.nix
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-07-07 13:09:26 +03:00
81c866645f modules/shared/nixos/nix/common.nix: use upstream lix
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-07-04 16:31:09 +03:00
1065479388 flake.nix: switch to nixpkgs/master
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-07-04 16:02:54 +03:00
5d9782d733 finish niri rice
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-07-02 20:14:50 +03:00
67009df2a9 desktop/niri: blueman
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-07-02 19:06:12 +03:00
547e41d3f9 stylix: new theme
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-07-02 19:06:12 +03:00
8fe81eb9cd niri/walker: rework
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-07-01 12:44:58 +03:00
e599e4c5c4 niri/waybar: some fixes, new module
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-07-01 10:30:28 +03:00
b42de80180 desktop/niri: 1px border
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-07-01 00:34:05 +03:00
2093304e4c niri/waybar: polished
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-07-01 00:02:37 +03:00
e30f4a74cd niri/waybar: initial rework
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-30 22:11:35 +03:00
7c72e527e7 niri/waybar: now
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-29 17:45:14 +03:00
f854f65029 niri/waybar: now pixel perfect
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-29 17:40:05 +03:00
9034502635 switch to lix flake
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-29 14:42:57 +03:00
24b195b766 flake.lock: bump
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-29 14:42:57 +03:00
1ae179eb85 hosts/dunamis/configuration.nix: rose-pine-moon
modules/nixos/system/stylix/default.nix: change serif to inter

Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-28 17:35:18 +03:00
efaae1a801 modules/nixos/system/common.nix: systemd
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-28 17:35:18 +03:00
27f29769e2 desktop/niri/default.nix: force mimeapps.list
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-28 17:35:18 +03:00
c586cc93d8 home/desktop/niri/programs/default.nix: remove
nixos/desktop/niri/default.nix: fix

Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-28 17:35:18 +03:00
5526b559cf modules/shared/nixos/default.nix: refactor keyd
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-21 16:21:24 +03:00
47c88ecf63 modules/nixos/desktop/niri/default.nix: add gvfs
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-19 11:18:49 +03:00
71d94e52a8 desktop/niri: change settings
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-19 10:28:48 +03:00
268e527db6 flake.lock: bump
flake.nix: less repeated inputs

Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-19 10:28:48 +03:00
f3bf120805 rework modules
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-19 10:23:34 +03:00
422b0551db hosts/eldrid/misc/undervolt.nix: add
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-19 10:23:34 +03:00
ac28a3442f hosts/morphius: enable iio for autorotate
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-18 18:50:26 +03:00
078351becd stylix: new theme
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-18 18:27:24 +03:00
46be9aa879 some options
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-18 18:27:24 +03:00
8f91352720 hosts/sarien/disko/disk-main.nix: remove
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-18 18:27:24 +03:00
d3ce08e765 misc/stylix: new wallpaper
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-18 00:22:46 +03:00
5859b9d469 flake.nix: sort
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-18 00:22:46 +03:00
a1cac8803a hosts: cleanup
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-17 17:35:36 +03:00
4054e42e21 desktop/niri: nest programs
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-17 17:35:36 +03:00
89ff07ac7b hosts/dunamis: switch to niri
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-17 17:35:36 +03:00
7641390aba desktop/niri: enable animations
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-17 15:01:22 +03:00
539a1d8713 hosts/dunamis/configuration.nix: remove TODO
hosts/legion: autologin, secure boot, tpm

Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-17 15:01:22 +03:00
b3ac24719a move xdg.userDirs config to modules/shared/user
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-17 14:33:53 +03:00
f8d4b52394 services/kanshi: change
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-17 14:33:53 +03:00
4abde43c61 hosts: rename module
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-17 14:33:53 +03:00
686e36b144 niri/services/kanshi: some more config
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-17 14:10:55 +03:00
0bdff5ef5b restructure
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-17 14:10:55 +03:00
02a8c645e9 modules/nixos: rename config to shared
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-17 12:35:52 +03:00
8217a70b34 config/security: add pam.sshAgentAuth
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-17 12:27:29 +03:00
34795ac894 desktop/niri: Mod+X to hide/show waybar
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-17 12:27:29 +03:00
a876874791 move kanshi to niri module
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-15 17:08:45 +03:00
6dbd2b86a2 move display config to kanshi
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-15 16:43:45 +03:00
a4e5add644 desktop/niri: tweak copyq
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-14 17:26:23 +03:00
cc31b858f7 desktop/niri: use autoLogin module for greetd
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-14 17:26:23 +03:00
e669331366 config/boot/loader: set timeout to 0
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-14 17:26:23 +03:00
453fda9a36 desktop/niri: disable animations
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-14 17:26:23 +03:00
e2f6ed72ed modules/home/programs/editor: some lsp work
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-14 17:26:23 +03:00
8a4af44494 user/programs: enable zellij
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-14 17:26:23 +03:00
0c28f1e978 hosts/eldrid: update id's
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-13 00:21:37 +03:00
1dc168ce63 README.md: add GLF OS credits
and adapt various config elements from it

Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-13 00:15:20 +03:00
e170e9d2b7 editor/helix: use nil instead of nixd
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-12 22:40:19 +03:00
002b06bb91 nixos/config: add slim module from nuschtos
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-12 13:30:29 +03:00
f39a105caf modules/nixos/config/services.nix: enable avahi
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-12 13:30:29 +03:00
432fad779a hosts/dunamis/users/user/flatpak.nix: an app
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-12 13:30:29 +03:00
590238d3e9 desktop/gnome: restructure packages
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-12 13:30:29 +03:00
fff9e50163 hosts/dunamis/configuration.nix: switch to gnome
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-12 13:30:29 +03:00
161a5917f6 distibuted-build: change to ssh-ng
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-11 17:58:39 +03:00
e828500be7 distributed-build: move to modules/config/nix
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-11 13:32:46 +03:00
0db2cbfe19 modules/nixos/config/services: disable speechd
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-11 01:19:17 +03:00
590a94af56 user/flatpak: add comments, add/remove programs
hosts/dunamis/users/user/programs: bleh

Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-11 00:38:51 +03:00
c6d5a071b4 flake.lock: bump
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-11 00:38:51 +03:00
9534e50252 desktop/gnome: select layouts individually
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-08 15:04:40 +03:00
989c740184 hosts/sarien: switch to gnome
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-08 15:04:40 +03:00
f6f5121d1e hosts/sarien: add swap
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-08 15:04:40 +03:00
391886ef59 dunamis/user/programs: libadwaita apps
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-08 15:04:40 +03:00
0aec9e92c1 dunamis/misc/nix-ssh-serve.nix: rename
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-08 14:59:09 +03:00
7662e9cd6e desktop/gnome: add extension, change shortcut
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-07 18:48:56 +03:00
5c11830083 desktop/gnome.nix: fix autologin
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-07 18:48:56 +03:00
4397eec2a1 hosts/morphius: set hostId, autologin
change boot.loader.timeout to 0

Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-07 18:48:56 +03:00
3cd27e0e79 desktop/gnome: move to 25.11 opts, add exdludePackages
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-07 16:42:33 +03:00
572314fe46 flake.nix: PR that fixes nix/lix bug w/ sshServe
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-06 16:55:29 +03:00
854a3be744 hosts/dunamis: move nix.sshServe to misc
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-06 16:55:29 +03:00
a5a2e9ceac user/programs: remove devenv
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-06 16:55:29 +03:00
c58b5489d8 desktop/gnome: better theming
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-06 15:15:10 +03:00
4fb2c8cc12 hosts/morphius: change desktop, colors
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-06 15:15:10 +03:00
08deff70bc desktop/hyprland: refactor
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-06 15:15:10 +03:00
920c75e997 desktop/niri: lisgd for touchscreen gestures
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-06 15:15:09 +03:00
2108320d1d flake.lock: bump
flake.nix: restructure, add some inputs.*.follows

Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-05 00:44:24 +03:00
463e6f1630 desktop/niri: screencast block for materialgram
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-05 00:44:24 +03:00
16eb328cf5 dunamis/user/programs.nix: add gpu-screen-recorder-gtk
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-05 00:44:24 +03:00
672f28c75c hosts/dunamis/disko/disk-main.nix: refactor
hosts/sarien/disko/default.nix: source dunamis/disko/disk-main.nix

Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-06-05 00:44:24 +03:00
f5a5f4b87c desktop/niri: change focus-ring to border
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-30 16:52:21 +03:00
95671a0343 stylix: add gruvbox-dark-pale
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-30 16:52:21 +03:00
b63073cab7 config/nix: try to fix distributed builds
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-29 14:40:08 +03:00
a22109abba hosts/morphius: user conf default to ghostty term
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-28 16:01:18 +03:00
af05ec7980 hosts/morphius: switch desktop to niri
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-28 16:01:18 +03:00
ddd039c803 hosts/morphius: enable zramSwap
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-28 16:01:18 +03:00
8ae65a6752 desktop/niri: hotfix for other desktops
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-28 16:01:18 +03:00
d81c644665 desktop/niri: add border around walker
programs/syncthing: add morphius
config/users: add morphius

Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-28 15:53:36 +03:00
f0ecc5bdb9 hosts/morphius: some changes
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-27 22:19:55 +03:00
7139cfb640 hosts/morphius: init new device
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-27 16:55:14 +03:00
5dfa9d62c4 flake.lock: bump
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-25 22:19:01 +03:00
aff9f72f2c desktop/niri: add gnome-text-editor
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-25 22:19:01 +03:00
7bc1d7e36a hosts: move additional config to misc/
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-24 23:04:03 +03:00
f213931b6f hosts/sarien: add autologin
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-24 13:22:44 +03:00
52dcc3279e refactor modules/desktop
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-24 13:01:05 +03:00
56bad06595 README.md: update
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-22 09:57:04 +03:00
afd1d00116 README.md: update
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-22 09:55:19 +03:00
14eaee2bbc desktop/niri: switch polkit-gnome to soteria, update layout, keybinds
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-22 09:55:19 +03:00
43334d6dbd config/nix: fix
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-22 09:55:19 +03:00
d70b2f7f8a hosts: bump system.stateVersion
flake.lock: bump

Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-22 09:55:19 +03:00
38579e3cb4 config/security: new sysctls
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-22 09:55:19 +03:00
6658a54631 user/programs.nix: new programs
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-22 09:55:19 +03:00
9d51e09afe editor/zed: add fsharp
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-22 09:55:19 +03:00
30fcac5ff6 hosts/dunamis: switch theme
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-22 09:55:19 +03:00
fce3a4ff0c desktop/niri: waybar modules now round pills
Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-15 11:13:44 +03:00
8ee252f59c flake.lock: bump
flake.nix: remove catppuccin

Signed-off-by: unexplrd <unexplrd@linerds.us>
2025-05-15 11:13:44 +03:00
112 changed files with 4309 additions and 3126 deletions

View File

@ -1,6 +1,17 @@
<h1>So what is this?</h1>
<p>This is a personal config based on <a href="https://github.com/numtide/blueprint">Blueprint</a>, and it's pretty usable. If one wants to use it, they have to change and adapt it for their own use case, for that please visit the original repo, as it contains the necessary documentation.</p>
<h2>TODOs:</h2>
<ul>
<li>i'll put that in when i recall what i wanted to add</li>
</ul>
# NixOS Configuration
## So what is this?
This is a personal NixOS config based on
[Blueprint](https://github.com/numtide/blueprint).
This repo is mainly used to sync changes between devices. If you want to
use it - it's pretty composable, so modules can be integrated in your
configs without much hassle.
## Credits
Configurations I took code/ideas from:
- [github:TheMaxMur/NixOS-Configuration](https://github.com/TheMaxMur/NixOS-Configuration)
- [github:nix-community/srvos](https://github.com/nix-community/srvos)
- [github:cloud-gouv/securix](https://github.com/cloud-gouv/securix)
- [GLF OS](https://www.gaminglinux.fr/glf-os/en)
Thx a lot <3

736
flake.lock generated

File diff suppressed because it is too large Load Diff

132
flake.nix
View File

@ -2,46 +2,104 @@
description = "unexplrd's personal configuration";
inputs = {
blueprint.url = "github:numtide/blueprint";
catppuccin.url = "github:catppuccin/nix";
chaotic.url = "github:chaotic-cx/nyx/nyxpkgs-unstable";
disko.url = "github:nix-community/disko/latest";
home-manager.url = "github:nix-community/home-manager";
hyprland.url = "github:hyprwm/Hyprland";
hyprsunset.url = "github:hyprwm/hyprsunset";
lanzaboote.url = "github:nix-community/lanzaboote/v0.4.2";
# lix.url = "https://git.lix.systems/lix-project/nixos-module/archive/2.92.0-2.tar.gz";
mysecrets.url = "git+ssh://gitea@gitea.linerds.us/unexplrd/nix-secrets";
# neve.url = "git+https://gitea.linerds.us/unexplrd/Neve";
# lix = {
# url = "https://git.lix.systems/lix-project/nixos-module/archive/2.93.1.tar.gz";
# inputs.nixpkgs.follows = "nixpkgs";
# };
# neve = {
# inputs.nixvim.follows = "nixvim";
# url = "git+https://gitea.linerds.us/unexplrd/Neve";
# };
# nixvim.url = "github:nix-community/nixvim";
nix-flatpak.url = "github:gmodena/nix-flatpak";
nix-index-database.url = "github:nix-community/nix-index-database";
nixos-cosmic.url = "github:lilyinstarlight/nixos-cosmic";
nixos-facter-modules.url = "github:numtide/nixos-facter-modules";
# nixos-hardware.url = "github:NixOS/nixos-hardware/master";
nixpkgs-stable.url = "github:nixos/nixpkgs/nixos-24.11";
nixpkgs.url = "github:NixOS/nixpkgs?ref=nixos-unstable";
sops-nix.url = "github:mic92/sops-nix";
walker = {
url = "github:abenz1267/walker";
systems.url = "github:nix-systems/default";
blueprint = {
url = "github:numtide/blueprint";
inputs.nixpkgs.follows = "nixpkgs";
inputs.systems.follows = "systems";
};
chaotic = {
url = "github:chaotic-cx/nyx/nyxpkgs-unstable";
inputs = {
home-manager.follows = "home-manager";
nixpkgs.follows = "nixpkgs";
};
};
disko = {
url = "github:nix-community/disko/latest";
inputs.nixpkgs.follows = "nixpkgs";
};
stylix.url = "github:danth/stylix/8b0d9317edd57c5374adcf6957ae4775875c2a9d";
# TODO: somehow reduce the number of *.inputs.nixpkgs.follows = "nixpkgs" stuff, mb a function?
blueprint.inputs.nixpkgs.follows = "nixpkgs";
chaotic.inputs.nixpkgs.follows = "nixpkgs";
disko.inputs.nixpkgs.follows = "nixpkgs";
home-manager.inputs.nixpkgs.follows = "nixpkgs";
hyprland.inputs.nixpkgs.follows = "nixpkgs";
hyprsunset.inputs.hyprland-protocols.follows = "hyprland/hyprland-protocols";
hyprsunset.inputs.hyprutils.follows = "hyprland/hyprutils";
hyprsunset.inputs.nixpkgs.follows = "nixpkgs";
lanzaboote.inputs.nixpkgs.follows = "nixpkgs";
# lix.inputs.nixpkgs.follows = "nixpkgs";
mysecrets.flake = false;
# neve.inputs.nixvim.follows = "nixvim";
nix-index-database.inputs.nixpkgs.follows = "nixpkgs";
sops-nix.inputs.nixpkgs.follows = "nixpkgs";
ghostty = {
url = "github:ghostty-org/ghostty";
inputs.nixpkgs.follows = "nixpkgs";
inputs.flake-utils.inputs.systems.follows = "systems";
};
home-manager = {
url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs";
};
hyprland = {
url = "github:hyprwm/Hyprland";
inputs = {
systems.follows = "systems";
nixpkgs.follows = "nixpkgs";
};
};
hyprsunset = {
url = "github:hyprwm/hyprsunset";
inputs = {
hyprland-protocols.follows = "hyprland/hyprland-protocols";
hyprutils.follows = "hyprland/hyprutils";
hyprwayland-scanner.follows = "hyprland/hyprwayland-scanner";
nixpkgs.follows = "nixpkgs";
systems.follows = "hyprland/systems";
};
};
lanzaboote = {
url = "github:nix-community/lanzaboote/v0.4.2";
inputs.nixpkgs.follows = "nixpkgs";
};
mysecrets = {
url = "git+ssh://gitea@gitea.linerds.us/unexplrd/nix-secrets";
flake = false;
};
nix-flatpak.url = "github:gmodena/nix-flatpak";
nix-index-database = {
url = "github:nix-community/nix-index-database";
inputs.nixpkgs.follows = "nixpkgs";
};
nixos-cosmic = {
url = "github:lilyinstarlight/nixos-cosmic";
inputs = {
nixpkgs-stable.follows = "nixpkgs-stable";
nixpkgs.follows = "nixpkgs";
};
};
nixos-facter-modules.url = "github:numtide/nixos-facter-modules";
nixpkgs-stable.url = "github:nixos/nixpkgs/nixos-24.11";
nixpkgs = {
url = "github:NixOS/nixpkgs/nixos-unstable";
# workaround for `unexpected Nix daemon error: error: serialised integer 7022364302122705765 is too large for type 'j'`
# url = "github:NixOS/nixpkgs/pull/413627/head";
};
sops-nix = {
url = "github:mic92/sops-nix";
inputs.nixpkgs.follows = "nixpkgs";
};
stylix = {
url = "github:danth/stylix";
inputs = {
# home-manager.follows = "home-manager";
nixpkgs.follows = "nixpkgs";
systems.follows = "systems";
};
};
walker = {
url = "github:abenz1267/walker";
inputs = {
nixpkgs.follows = "nixpkgs";
systems.follows = "systems";
};
};
};
outputs = inputs: inputs.blueprint {inherit inputs;};

View File

@ -1,28 +1,27 @@
{
config,
inputs,
...
}: {
{inputs, ...}: {
imports = with inputs; [
self.nixosModules.config
self.modules.shared.nixos
self.nixosModules.desktop
self.nixosModules.system
./disko
# ./minecraft.nix
./misc
];
networking = {
networkmanager.enable = true;
hostId = "c7f6c4a1";
hostName = "dunamis";
};
environment.memoryAllocator.provider = "mimalloc";
system.stateVersion = "25.05";
system.stateVersion = "25.11";
time.timeZone = "Europe/Kyiv";
desktop.niri.enable = true;
services.displayManager.autoLogin = {
enable = true;
user = "user";
};
module = {
config = {
secureBoot = true;
@ -31,24 +30,13 @@
};
stylix = {
enable = true;
theme = "rose-pine-dawn";
theme = "sandcastle";
};
};
locale.ukrainian.enable = true;
opentabletdriver.enable = false;
qmk-vial.enable = true;
virtual.libvirt.enable = true;
nix = let
inherit (builtins) readFile;
inherit (config.users.users) user;
in {
settings.trusted-users = ["nix-ssh"];
sshServe = {
enable = true;
write = true;
keys = map (f: readFile f) user.openssh.authorizedKeys.keyFiles;
locale = "uk_UA.UTF-8";
misc = {
opentabletdriver.enable = false;
qmk-vial.enable = true;
};
virt.libvirt.enable = true;
};
}

View File

@ -1,4 +1,9 @@
{inputs, ...}: let
{
config,
inputs,
...
}: let
inherit (config.networking) hostId;
disk = "/dev/disk/by-id/nvme-eui.000000000000000100a075244b5d6185";
in {
imports = with inputs; [
@ -10,5 +15,5 @@ in {
mountOptions = ["rw" "nosuid" "nodev"];
};
};
disko.devices.disk.main = import ./disk-main.nix {inherit disk;};
disko.devices.disk.main = import ./disk-main.nix {inherit disk hostId;};
}

View File

@ -1,4 +1,7 @@
{disk, ...}: {
{
disk,
hostId,
}: {
type = "disk";
device = disk;
content = {
@ -25,45 +28,30 @@
size = "100%";
content = {
type = "luks";
name = "luks-main";
name = "luks-" + hostId;
initrdUnlock = true;
settings.allowDiscards = true;
content = {
content = let
mountOptions = ["autodefrag" "compress-force=zstd" "noatime"];
in {
type = "btrfs";
extraArgs = ["-f"];
subvolumes = {
"@nixos-root" = {
mountpoint = "/";
mountOptions = [
"autodefrag"
"compress=zstd"
"noatime"
"noexec"
];
mountOptions = mountOptions ++ ["noexec"];
};
"@home" = {
mountpoint = "/home";
mountOptions = [
"autodefrag"
"compress=zstd"
"noatime"
];
inherit mountOptions;
};
"@storage" = {
mountpoint = "/storage";
mountOptions = [
"autodefrag"
"compress=zstd"
"noatime"
];
inherit mountOptions;
};
"@nix" = {
mountpoint = "/nix";
mountOptions = [
"autodefrag"
"compress-force=zstd"
"noatime"
];
inherit mountOptions;
};
};
};

View File

@ -0,0 +1,6 @@
{
imports = [
# ./minecraft.nix
# ./nix-ssh-serve.nix
];
}

View File

@ -1,17 +0,0 @@
{
inputs,
osConfig,
...
}: {
imports = with inputs; [
nix-index-database.hmModules.nix-index
self.homeModules.desktop
self.homeModules.programs
];
inherit (osConfig) desktop;
home.stateVersion = osConfig.system.stateVersion;
home.sessionPath = ["$HOME/.local/bin"];
# TODO: remove when unbroken
stylix.targets.mako.enable = false;
}

View File

@ -1,7 +1 @@
{
imports = [
./common.nix
./flatpak.nix
./programs.nix
];
}
{flake, ...}: {imports = [flake.modules.shared.user];}

View File

@ -1,98 +0,0 @@
{pkgs, ...}: {
console.yazi.enable = true;
editor.helix.enable = true;
shell = {
fish.enable = true;
oh-my-posh.enable = true;
};
syncthing.enable = true;
terminal.wezterm.enable = true;
terminal.ghostty.enable = true;
systemd.user.settings.Manager.DefaultEnvironment = {
TERMINAL = "wezterm";
};
services = {
pueue.enable = true; # process queue in rust
ssh-agent.enable = true;
};
programs = {
bat.enable = true; # cat in rust
btop = {
enable = true;
settings.update_ms = 200;
};
direnv.enable = true;
direnv.silent = true;
eza.enable = true; # ls in rust
fd.enable = true; # find in rust
fzf.enable = true; # fuzzy finder in rust
git = {
enable = true;
delta.enable = true; # diff in rust
signing.format = "ssh";
aliases = {
cl = "clone";
co = "checkout";
pom = "push origin main";
};
};
gitui.enable = true; # git ui in rust
jujutsu.enable = true; # vcs in rust
keychain = {
enable = true;
keys = ["id_ed25519"];
};
nix-index-database.comma.enable = true;
nix-index.enable = true;
nix-your-shell.enable = true;
pay-respects.enable = true; # thefuck in rust
ripgrep.enable = true; # grep in rust
zoxide.enable = true; # fuzzy cd in rust
};
home.packages = with pkgs;
[
# development utils
alejandra # nix formatter in rust
devenv # programming deps in rust
jj-fzf # fuzzy finder jujutsu tui
just # make in rust
silicon # create code pics in rust
]
++ [
# console utils
bluetuith # bluetooth tui in go
dua # disk space usage in rust
duf # better df in go
fend # calculator in rust
mprocs # process runner in rust
ouch # archive manager in rust
procs # ps in rust
rbw # bitwarden cli in rust
sd # sed in rust
trashy # trash cli in rust
]
++ [
# misc apps
# vial # qmk keyboard configuring app
pinentry-qt # pinentry for rbw
virt-manager # libvirt gui
waycheck # check wayland protocols
];
xdg.desktopEntries = {
uni = {
actions."Copy".exec = "fish -c \"~/.local/bin/uni --copy\"";
categories = ["Utility" "X-Launch" "Network"];
comment = "Select and open or copy URLs from a list.";
exec = "fish -c \"~/.local/bin/uni\"";
icon = "web-browser";
name = "Uni URL Handler";
startupNotify = true;
terminal = false;
type = "Application";
};
};
}

View File

@ -1,23 +1,34 @@
{inputs, ...}: {
imports = with inputs; [
self.nixosModules.config
self.modules.shared.nixos
self.nixosModules.desktop
self.nixosModules.system
./disko
./hardware
./misc
];
networking = {
networkmanager.enable = true;
# hostId = "";
hostId = "14f63637";
hostName = "eldrid";
};
environment.memoryAllocator.provider = "mimalloc";
system.stateVersion = "25.05";
system.stateVersion = "25.11";
time.timeZone = "Europe/Kyiv";
desktop.plasma.enable = true;
desktop.niri.enable = true;
services.displayManager.autoLogin = {
enable = true;
user = "user";
};
swapDevices = [
{
device = "/swap/swapfile";
size = 8 * 1024; # eight gigs
}
];
module = {
config = {
@ -29,19 +40,11 @@
};
stylix = {
enable = true;
theme = "helios";
theme = "sandcastle";
};
locale = "uk_UA.UTF-8";
misc = {
qmk-vial.enable = true;
};
};
locale.ukrainian.enable = true;
opentabletdriver.enable = false;
qmk-vial.enable = true;
virtual.libvirt.enable = false;
swapDevices = [
{
device = "/swap/swapfile";
size = 8 * 1024; # eight gigs
}
];
}

View File

@ -1,5 +1,10 @@
{inputs, ...}: let
disk = "/dev/nvme0n1";
{
config,
inputs,
...
}: let
inherit (config.networking) hostId;
disk = "/dev/disk/by-id/nvme-eui.e8238fa6bf530001001b444a44022ad0";
in {
imports = with inputs; [
disko.nixosModules.disko
@ -10,5 +15,5 @@ in {
mountOptions = ["rw" "nosuid" "nodev"];
};
};
disko.devices.disk.main = import ./disk-main.nix {inherit disk;};
disko.devices.disk.main = import ./disk-main.nix {inherit disk hostId;};
}

View File

@ -1,4 +1,7 @@
{disk, ...}: {
{
disk,
hostId,
}: {
type = "disk";
device = disk;
content = {
@ -25,7 +28,7 @@
size = "100%";
content = {
type = "luks";
name = "luks-main";
name = "luks-" + hostId;
initrdUnlock = true;
settings.allowDiscards = true;
content = {

View File

@ -1,30 +0,0 @@
{
config,
inputs,
...
}: let
inherit (builtins) readFile;
inherit (config.networking) hostName;
inherit (config.sops) secrets;
inherit (inputs) mysecrets;
pubHost = readFile "${mysecrets}/ssh/ssh_host_ed25519_dunamis.base64";
in {
nix = {
distributedBuilds = true;
buildMachines = [
{
hostName = "dunamis";
publicHostKey = pubHost;
sshKey = secrets."ssh-${hostName}-user".path;
sshUser = "nix-ssh";
supportedFeatures = [
"benchmark"
"big-parallel"
"kvm"
"nixos-test"
];
system = "x86_64-linux";
}
];
};
}

View File

@ -1,20 +1,47 @@
{pkgs, ...}: let
cb-ucm-conf = pkgs.alsa-ucm-conf.overrideAttrs {
wttsrc = pkgs.fetchFromGitHub {
owner = "WeirdTreeThing";
repo = "chromebook-ucm-conf";
rev = "b6ce2a7";
hash = "sha256-QRUKHd3RQmg1tnZU8KCW0AmDtfw/daOJ/H3XU5qWTCc=";
cb-ucm-conf = with pkgs;
alsa-ucm-conf.overrideAttrs {
wttsrc = fetchFromGitHub {
owner = "WeirdTreeThing";
repo = "alsa-ucm-conf-cros";
rev = "a4f0ed6cf59163fb571c33a81a6b40b6f53ed57d";
hash = "sha256-H0BsRzHSEJ6XCZB/Rvb3w+uGCzr+kAvAwcHWqYEtp6w=";
};
unpackPhase = ''
runHook preUnpack
tar xf "$src"
runHook postUnpack
'';
installPhase = ''
runHook preInstall
mkdir -p $out/share/alsa
cp -r alsa-ucm*/ucm2 $out/share/alsa
runHook postInstall
'';
};
postInstall = ''
cp -R $wttsrc/common/* $out/share/alsa/ucm2/common
cp -R $wttsrc/codecs/* $out/share/alsa/ucm2/codecs
cp -R $wttsrc/platforms/* $out/share/alsa/ucm2/platforms
cp -R $wttsrc/sof-rt5682 $out/share/alsa/ucm2/conf.d
cp -R $wttsrc/sof-cs42l42 $out/share/alsa/ucm2/conf.d
'';
};
in {
environment = {
systemPackages = [pkgs.sof-firmware];
sessionVariables.ALSA_CONFIG_UCM2 = "${cb-ucm-conf}/share/alsa/ucm2";
etc = {
"wireplumber/main.lua.d/51-increase-headroom.lua".text = ''
rule = {
matches = {
{
{ "node.name", "matches", "alsa_output.*" },
},
},
apply_properties = {
["api.alsa.headroom"] = 4096,
},
}
table.insert(alsa_monitor.rules,rule)
'';
};
};
system.replaceDependencies.replacements = [
{
original = pkgs.alsa-ucm-conf;
@ -22,6 +49,10 @@ in {
}
];
boot.extraModprobeConfig = ''
options snd-intel-dspcfg dsp_driver=3
'';
services.pipewire.wireplumber.configPackages = [
(pkgs.writeTextDir "share/wireplumber/main.lua.d/51-increase-headroom.lua" ''
rule = {
@ -37,10 +68,19 @@ in {
table.insert(alsa_monitor.rules,rule)
'')
(pkgs.writeTextDir "share/wireplumber/main.lua.d/51-avs-dmic.lua" ''
rule = {
matches = {
{
{ "node.nick", "equals", "Internal Microphone" },
},
},
apply_properties = {
["audio.format"] = "S16LE",
},
}
table.insert(alsa_monitor.rules, rule)
'')
];
boot = {
extraModprobeConfig = ''
options snd-intel-dspcfg dsp_driver=3
'';
};
}

View File

@ -0,0 +1,6 @@
{
imports = [
# ./distributed-build.nix
./undervolt.nix
];
}

View File

@ -0,0 +1,7 @@
{
services.undervolt = {
enable = true;
# coreOffset = -150;
turbo = 1;
};
}

View File

@ -1,7 +1 @@
{lib, ...}: {
imports = [
../../../dunamis/users/user/common.nix
../../../dunamis/users/user/programs.nix
../../../dunamis/users/user/flatpak.nix
];
}
{flake, ...}: {imports = [flake.modules.shared.user];}

View File

@ -1,41 +1,41 @@
{
config,
inputs,
...
}: {
{inputs, ...}: {
imports = with inputs; [
self.nixosModules.config
self.modules.shared.nixos
self.nixosModules.desktop
self.nixosModules.system
./disko
./hardware
./misc
];
networking = {
networkmanager.enable = true;
hostId = "45b00123";
hostName = "legion";
};
environment.memoryAllocator.provider = "mimalloc";
system.stateVersion = "25.05";
system.stateVersion = "25.11";
time.timeZone = "Europe/Kyiv";
desktop.niri.enable = true;
services.displayManager.autoLogin = {
enable = true;
user = "user";
};
module = {
config = {
laptop.homeRowMods = true;
powerSave = true;
# secureBoot = true;
# tpmDiskUnlock = true;
secureBoot = true;
tpmDiskUnlock = true;
vaapi = "nvidia";
};
stylix = {
enable = true;
theme = "helios";
theme = "sandcastle";
};
locale = "uk_UA.UTF-8";
virt.libvirt.enable = true;
};
locale.ukrainian.enable = true;
virtual.libvirt.enable = true;
}

View File

@ -1,4 +1,9 @@
{inputs, ...}: let
{
config,
inputs,
...
}: let
inherit (config.networking) hostId;
disk-main = "/dev/disk/by-id/nvme-INTEL_SSDPEKKF256G8L_BTHH81460QC2256B";
disk-second = "/dev/disk/by-id/nvme-WDC_PC_SN730_SDBPNTY-1T00-1101_21114D802446";
in {
@ -11,6 +16,6 @@ in {
mountOptions = ["rw" "nosuid" "nodev"];
};
};
disko.devices.disk.main = import ./disk-main.nix {inherit disk-main;};
disko.devices.disk.second = import ./disk-second.nix {inherit disk-second;};
disko.devices.disk.main = import ./disk-main.nix {inherit disk-main hostId;};
disko.devices.disk.second = import ./disk-second.nix {inherit disk-second hostId;};
}

View File

@ -1,4 +1,7 @@
{disk-main}: {
{
disk-main,
hostId,
}: {
type = "disk";
device = disk-main;
content = {
@ -25,7 +28,7 @@
size = "100%";
content = {
type = "luks";
name = "luks-main";
name = "luks-" + hostId;
initrdUnlock = true;
settings.allowDiscards = true;
content = {

View File

@ -1,4 +1,7 @@
{disk-second}: {
{
disk-second,
hostId,
}: {
type = "disk";
device = disk-second;
content = {
@ -8,7 +11,7 @@
size = "100%";
content = {
type = "luks";
name = "luks-second";
name = "luks-${hostId}-second";
initrdUnlock = true;
settings.allowDiscards = true;
content = {

View File

@ -0,0 +1,5 @@
{
imports = [
# ./distributed-build.nix
];
}

View File

@ -1,7 +1 @@
{
imports = [
../../../dunamis/users/user/common.nix
../../../dunamis/users/user/flatpak.nix
../../../dunamis/users/user/programs.nix
];
}
{flake, ...}: {imports = [flake.modules.shared.user];}

View File

@ -0,0 +1,47 @@
{inputs, ...}: {
imports = with inputs; [
self.nixosModules.desktop
self.nixosModules.system
self.modules.shared.nixos
./disko
./hardware
./misc
];
networking = {
hostId = "bd1b5837";
hostName = "morphius";
};
system.stateVersion = "25.11";
time.timeZone = "Europe/Kyiv";
desktop.gnome.enable = true;
services.displayManager.autoLogin = {
enable = true;
user = "user";
};
swapDevices = [
{
device = "/swap/swapfile";
size = 8 * 1024;
}
];
module = {
config = {
secureBoot = true;
tpmDiskUnlock = true;
powerSave = true;
useIwd = true;
vaapi = "intel-media-driver";
};
stylix = {
enable = true;
theme = "sandcastle";
};
locale = "uk_UA.UTF-8";
};
}

View File

@ -0,0 +1,19 @@
{
config,
inputs,
...
}: let
inherit (config.networking) hostId;
disk = "/dev/nvme0n1";
in {
imports = with inputs; [
disko.nixosModules.disko
];
disko.devices.nodev = {
"/tmp" = {
fsType = "tmpfs";
mountOptions = ["rw" "nosuid" "nodev"];
};
};
disko.devices.disk.main = import ./disk-main.nix {inherit disk hostId;};
}

View File

@ -1,11 +1,15 @@
{disk, ...}: {
{
disk,
hostId,
...
}: {
type = "disk";
device = disk;
content = {
type = "gpt";
partitions = {
ESP = {
size = "2G";
size = "1G";
type = "EF00";
content = {
type = "filesystem";
@ -25,7 +29,7 @@
size = "100%";
content = {
type = "luks";
name = "luks-main";
name = "luks-" + hostId;
initrdUnlock = true;
settings.allowDiscards = true;
content = {
@ -61,6 +65,12 @@
"noatime"
];
};
"@swap" = {
mountpoint = "/swap";
mountOptions = [
"noatime"
];
};
};
};
};

View File

@ -0,0 +1,12 @@
{
imports = [
# ./laptop
];
hardware.sensor.iio.enable = true;
services = {
logind = {
lidSwitch = "ignore";
powerKey = "suspend";
};
};
}

View File

@ -0,0 +1,5 @@
{
imports = [
# ./distributed-build.nix
];
}

View File

@ -0,0 +1 @@
{flake, ...}: {imports = [flake.modules.shared.user];}

View File

@ -2,25 +2,40 @@
imports = with inputs; [
self.nixosModules.desktop
self.nixosModules.system
self.nixosModules.config
self.modules.shared.nixos
./disko
./hardware
./distributed-build.nix
./misc
];
networking = {
networkmanager.enable = true;
hostId = "31150fae";
hostName = "sarien";
};
boot.loader.systemd-boot.enable = true;
environment.memoryAllocator.provider = "mimalloc";
system.stateVersion = "25.05";
system.stateVersion = "25.11";
time.timeZone = "Europe/Kyiv";
desktop.niri.enable = true;
services.displayManager.autoLogin = {
enable = true;
user = "user";
};
swapDevices = [
{
device = "/swap/swapfile";
size = 4 * 1024;
priority = 100;
}
{
device = "/swap/hibernate";
size = 16 * 1024;
priority = 1;
}
];
module = {
config = {
laptop.homeRowMods = true;
@ -30,12 +45,10 @@
};
stylix = {
enable = true;
theme = "nord";
theme = "sandcastle";
};
locale = "uk_UA.UTF-8";
misc.qmk-vial.enable = true;
virt.libvirt.enable = true;
};
locale.ukrainian.enable = true;
opentabletdriver.enable = false;
qmk-vial.enable = true;
virtual.libvirt.enable = true;
}

View File

@ -1,4 +1,9 @@
{inputs, ...}: let
{
config,
inputs,
...
}: let
inherit (config.networking) hostId;
disk = "/dev/disk/by-id/nvme-eui.0025385911b36714";
in {
imports = with inputs; [
@ -10,5 +15,6 @@ in {
mountOptions = ["rw" "nosuid" "nodev"];
};
};
disko.devices.disk.main = import ./disk-main.nix {inherit disk;};
# same partitioning setup
disko.devices.disk.main = import ../../dunamis/disko/disk-main.nix {inherit disk hostId;};
}

View File

@ -1,30 +0,0 @@
{
config,
inputs,
...
}: let
inherit (builtins) readFile;
inherit (config.networking) hostName;
inherit (config.sops) secrets;
inherit (inputs) mysecrets;
pubHost = readFile "${mysecrets}/ssh/ssh_host_ed25519_dunamis.base64";
in {
nix = {
distributedBuilds = true;
buildMachines = [
{
hostName = "dunamis";
publicHostKey = pubHost;
sshKey = secrets."ssh-${hostName}-user".path;
sshUser = "nix-ssh";
supportedFeatures = [
"benchmark"
"big-parallel"
"kvm"
"nixos-test"
];
system = "x86_64-linux";
}
];
};
}

View File

@ -0,0 +1,5 @@
{
imports = [
# ./distributed-build.nix
];
}

View File

@ -1,7 +1 @@
{
imports = [
../../../dunamis/users/user/common.nix
../../../dunamis/users/user/programs.nix
../../../dunamis/users/user/flatpak.nix
];
}
{flake, ...}: {imports = [flake.modules.shared.user];}

View File

@ -1,5 +1,4 @@
{
imports = [
./xdg-userdirs.nix
];
}

View File

@ -1,17 +0,0 @@
{config, ...}: let
inherit (config.home) homeDirectory;
home = f: "${homeDirectory}/${f}";
in {
xdg.userDirs = {
enable = true;
createDirectories = true;
templates = home "temps";
publicShare = home "pub";
desktop = home "desktop";
download = home "downloads";
documents = home "docs";
pictures = home "pics";
videos = home "vids";
music = home "music";
};
}

View File

@ -1,6 +1,6 @@
{
imports = [
./common
# ./common
./cosmic
./gnome
./hyprland

View File

@ -1,4 +1,5 @@
{
osConfig,
config,
pkgs,
lib,
@ -13,33 +14,63 @@ in {
mkEnableOption "enable gnome desktop";
};
config = mkIf cfg.enable {
home.packages = with pkgs; [
gnomeExtensions.alphabetical-app-grid
gnomeExtensions.removable-drive-menu
gnomeExtensions.caffeine
gnomeExtensions.space-bar
gnomeExtensions.switcher
gnomeExtensions.tactile
gnomeExtensions.pano
gnomeExtensions.window-is-ready-remover
junction
celluloid
mission-center
dconf
pwvucontrol
wl-clipboard
];
home.packages =
(with pkgs.gnomeExtensions; [
# extensions
alphabetical-app-grid
app-icons-taskbar
caffeine
pano
removable-drive-menu
space-bar
switcher
tactile
window-is-ready-remover
])
++ (with pkgs; [
# regular packages
junction
celluloid
mission-center
dconf
pwvucontrol
wl-clipboard
]);
programs.gnome-shell.extensions = [
{package = pkgs.gnomeExtensions.alphabetical-app-grid;}
{package = pkgs.gnomeExtensions.removable-drive-menu;}
{package = pkgs.gnomeExtensions.app-icons-taskbar;}
{package = pkgs.gnomeExtensions.caffeine;}
{package = pkgs.gnomeExtensions.pano;}
{package = pkgs.gnomeExtensions.removable-drive-menu;}
{package = pkgs.gnomeExtensions.space-bar;}
{package = pkgs.gnomeExtensions.switcher;}
{package = pkgs.gnomeExtensions.tactile;}
{package = pkgs.gnomeExtensions.pano;}
{package = pkgs.gnomeExtensions.window-is-ready-remover;}
];
gtk = {
enable = true;
iconTheme = let
name =
if (lib.strings.hasPrefix "gruvbox" osConfig.module.stylix.theme)
then "Gruvbox-Plus-Dark"
else if config.stylix.polarity == "dark"
then "Papirus-Dark"
else "Papirus-Light";
package =
if (lib.strings.hasPrefix "gruvbox" osConfig.module.stylix.theme)
then pkgs.gruvbox-plus-icons
else if (lib.strings.hasPrefix "rose-pine" osConfig.module.stylix.theme)
then pkgs.papirus-icon-theme.override {color = "indigo";}
else if (lib.strings.hasPrefix "nord" osConfig.module.stylix.theme)
then pkgs.papirus-icon-theme.override {color = "nordic";}
else pkgs.papirus-icon-theme;
in {inherit name package;};
};
qt = {
enable = true;
platformTheme.name = lib.mkForce "adwaita";
};
dconf.settings = with lib.hm.gvariant; {
"org/gnome/desktop/a11y/applications" = {
screen-reader-enabled = false;
@ -54,12 +85,12 @@ in {
"org/gnome/desktop/input-sources" = {
mru-sources = [(mkTuple ["xkb" "us"])];
sources = [(mkTuple ["xkb" "us"]) (mkTuple ["xkb" "ua"]) (mkTuple ["xkb" "us+colemak_dh"])];
# sources = [(mkTuple ["xkb" "us"]) (mkTuple ["xkb" "ua"]) (mkTuple ["xkb" "us+colemak_dh"])];
xkb-options = ["terminate:ctrl_alt_bksp"];
};
"org/gnome/desktop/interface" = {
accent-color = "slate";
# accent-color = "slate";
clock-show-seconds = true;
color-scheme = "prefer-dark";
enable-animations = true;
@ -100,8 +131,8 @@ in {
move-to-workspace-last = ["<Shift><Control><Super>End"];
move-to-workspace-left = ["<Control><Super>Left"];
move-to-workspace-right = ["<Control><Super>Right"];
switch-input-source = ["<Super>Escape"];
switch-input-source-backward = ["<Shift><Super>Escape"];
switch-input-source = ["<Super>Space"];
switch-input-source-backward = ["<Shift><Super>Space"];
switch-to-workspace-1 = ["<Super>1"];
switch-to-workspace-2 = ["<Super>2"];
switch-to-workspace-3 = ["<Super>3"];
@ -135,7 +166,18 @@ in {
};
"org/gnome/shell" = {
enabled-extensions = ["drive-menu@gnome-shell-extensions.gcampax.github.com" "caffeine@patapon.info" "AlphabeticalAppGrid@stuarthayhurst" "appindicatorsupport@rgcjonas.gmail.com" "user-theme@gnome-shell-extensions.gcampax.github.com" "tactile@lundal.io" "switcher@landau.fi" "pano@elhan.io" "space-bar@luchrioh"];
enabled-extensions = [
"AlphabeticalAppGrid@stuarthayhurst"
"appindicatorsupport@rgcjonas.gmail.com"
"aztaskbar@aztaskbar.gitlab.com"
"caffeine@patapon.info"
"drive-menu@gnome-shell-extensions.gcampax.github.com"
"pano@elhan.io"
"space-bar@luchrioh"
"switcher@landau.fi"
"tactile@lundal.io"
"user-theme@gnome-shell-extensions.gcampax.github.com"
];
};
"org/gnome/shell/app-switcher" = {
@ -167,6 +209,21 @@ in {
workspace-indicator = true;
};
"org/gnome/shell/extensions/aztaskbar" = with lib.hm.gvariant; {
favorites = true;
icon-size = 25;
icon-style = "REGULAR";
# intellihide = true;
main-panel-height = mkTuple [true 40];
position-offset = 4;
prefs-visible-page = "";
show-apps-button = mkTuple [true 0];
show-panel-activities-button = true;
show-weather-by-clock = "LEFT";
taskbar-spacing = 2;
# update-notifier-project-version = 30;
};
"org/gnome/shell/extensions/tactile" = {
background-color = "#${colors.base00}";
border-color = "#${colors.base0D}";

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,458 @@
{
config,
osConfig,
perSystem,
launcher,
lockscreen,
# pkgs,
# lib,
...
}: let
inherit (config.lib.stylix) colors;
# inherit (lib) mkIf;
hostname = osConfig.networking.hostName;
cursorSize = config.stylix.cursor.size;
fontName = config.stylix.fonts.sansSerif.name;
keyboard =
if hostname == "eldrid"
then "chromeos"
else "platform";
xdgPictures =
config.xdg.userDirs.pictures;
# ifLaptop = mkIf (hostname != "dunamis");
in {
enable = true;
systemd = {
enable = true;
variables = [
"--all"
];
};
package = perSystem.hyprland.hyprland;
portalPackage = perSystem.hyprland.xdg-desktop-portal-hyprland;
# plugins = with pkgs.hyprlandPlugins; [
# hyprspace
# hy3
# hyprscroller
# ];
settings = {
input = {
kb_layout = "us,ua";
resolve_binds_by_sym =
if hostname == "dunamis"
then 0
else 1;
repeat_rate = 50;
repeat_delay = 300;
# mouse
accel_profile = "flat";
sensitivity = 0;
};
device = [
{
name = "ite-tech.-inc.-ite-device(8910)-keyboard";
kb_variant = "colemak_dh,";
}
{
name = "at-translated-set-2-keyboard";
kb_variant = "colemak_dh,";
}
{
name = "keyd-virtual-keyboard";
kb_variant = "colemak_dh,";
}
];
xwayland.force_zero_scaling = true;
monitor = [
", preferred, auto, 1"
"desc:AOC 27V2G5 0x0000026C, addreserved, 0, 300, 0, 0"
"desc:Samsung Electric Company S24R65x H4TMA03291, preferred, 0x0, 1, bitdepth, 10, vrr, 1"
"desc:Philips Consumer Electronics Company 27M2N5500 UK02418033254, 2560x1440@180.00Hz, 0x0, 1.3333333, bitdepth, 10, vrr, 1"
"desc:BOE 0x08E8, preferred, 1920x0, 1.2, bitdepth, 10"
"desc:LG Display 0x068B, preferred, 1920x0, 1.2, bitdepth, 10"
"desc:Chimei Innolux Corporation 0x1406, preferred, 1920x0, 1.2"
"desc:KDC 0x0000, preferred, 1920x0, 1.25"
];
env = [
"ELECTRON_OZONE_PLATFORM_HINT,auto"
"QT_QPA_PLATFORM,wayland"
"QT_QPA_PLATFORMTHEME,gtk3"
"XCURSORSIZE,${toString cursorSize}"
"GSK_RENDERER,ngl"
];
decoration = {
shadow.enabled = false;
# drop_shadow = false;
blur = {
size = 8;
passes = 3;
};
# shadow_offset = "0 5";
# "col.shadow" = "rgba(00000099)";
rounding = 12;
};
misc = {
font_family = fontName;
disable_splash_rendering = true;
disable_hyprland_logo = true;
# vfr = true;
};
bezier = [
"easeOutQuad, 0.25, 0.46, 0.45, 0.94"
"easeOutExpo, 0.19, 1, 0.22, 1"
];
animation = [
"workspaces, 1, 3, easeOutExpo, slidefade 20%"
"windows, 1, 3, easeOutExpo, popin 80%"
"layers, 1, 2, easeOutExpo, fade"
];
plugin = [
{
overview = {
gapsIn = 12;
gapsOut = 24;
exitOnClick = true;
centerAligned = true;
showNewWorkspace = false;
showEmptyWorkspace = false;
affectStrut = false;
};
hyprexpo = {
columns = 3;
gap_size = 8;
#bg_col = "rgb(111111)";
workspace_method = "first 1"; # [center/first] [workspace] e.g. first 1 or center m+1
enable_gesture = true; # laptop touchpad
gesture_fingers = 3; # 3 or 4
gesture_distance = 400; # how far is the "max"
gesture_positive = false; # positive = swipe down. Negative = swipe up.;
};
}
{
hy3 = {
autotile = true;
tab_first_window = false;
tabs = {
render_text = true;
height = 24;
padding = 8;
rounding = 8;
text_height = 14;
text_center = true;
text_font = fontName;
"col.active" = "0xff${colors.base00}";
"col.inactive" = "0xff${colors.base00}";
"col.urgent" = "0xff${colors.base00}";
"col.active.text" = "0xff${colors.base0D}";
"col.inactive.text" = "0xff${colors.base05}";
"col.urgent.text" = "0xff${colors.base09}";
"col.active.border" = "0xff${colors.base00}";
"col.inactive.border" = "0xff${colors.base00}";
"col.urgent.border" = "0xff${colors.base00}";
};
};
}
{
scroller = {
column_widths = "onethird onehalf twothirds one";
window_heights = "onethird onehalf twothirds one";
gesture_scroll_fingers = 3;
gesture_overview_fingers = 3;
jump_labels_font = fontName;
jump_labels_color = "0xff${colors.base0A}";
};
}
];
dwindle = {
force_split = 2;
default_split_ratio = 1.2;
};
master = {
mfact = 0.6;
};
"$mod" = "SUPER";
"$modShift" = "$mod SHIFT";
"$modCtrl" = "$mod CTRL";
"$modShiftCtrl" = "$mod SHIFT CTRL";
"$left" = "N";
"$down" = "E";
"$up" = "I";
"$right" = "O";
"$terminal" = "ghostty";
"$launcher" = launcher;
"$screenLocker" = lockscreen;
"$webBrowser" = "io.github.zen_browser.zen";
"$clipboardManager" = "copyq menu";
general = {
"col.active_border" = "0xff${colors.base0D}";
"col.inactive_border" = "0xff${colors.base03}";
gaps_in = 4;
gaps_out = 8;
border_size = 3;
allow_tearing = true;
layout = "dwindle";
};
group = {
"col.border_active" = "0xff${colors.base0D}";
"col.border_inactive" = "0xff${colors.base03}";
"col.border_locked_active" = "0xff${colors.base0A}";
"col.border_locked_inactive" = "0xff${colors.base0F}";
groupbar = {
height = 16;
rounding = 0;
indicator_height = 0;
gradient_rounding = 4;
font_size = 14;
gradients = true;
font_family = fontName;
"text_color" = "0xff${colors.base00}";
"col.active" = "0xff${colors.base0D}";
"col.inactive" = "0xff${colors.base03}";
};
};
binds.scroll_event_delay = 0;
cursor.persistent_warps = true;
bind = [
"$mod, Return, exec, $terminal"
"$mod, Space, exec, $launcher"
# "$modShift, Space, exec, $launcher"
"$modCtrl, Q, killactive"
"$modCtrl, M, fullscreen"
"$modCtrl, G, togglefloating"
"$mod, G, pin"
"$mod, T, togglegroup"
"$mod, period, changegroupactive, f"
"$mod, comma, changegroupactive, b"
"$modCtrl, period, movewindoworgroup, r"
"$modCtrl, comma, movewindoworgroup, l"
"$mod, Tab, cyclenext,"
"$modShift, Tab, cyclenext, prev"
"$mod, Tab, bringactivetotop,"
"$modShift, U, focusurgentorlast"
"$modCtrl, L, exec, $screenLocker"
"$modCtrl, B, exec, $webBrowser"
"$modCtrl, V, exec, $clipboardManager"
"$modCtrl, K, focuswindow, title:(Meet:.*)"
# ", Print, exec, ${pkgs.grim}/bin/grim -g \"$(${pkgs.slurp}/bin/slurp -o -r -c '\#\#00000000')\" -t ppm - | ${pkgs.satty}/bin/satty --filename - --fullscreen --output-filename ${xdgPictures}/screenshots/satty-$(date '+%Y%m%d-%H:%M:%S').png"
", Print, exec, hyprshot -z -m region -o ${xdgPictures}/screenshots -f screenshot-$(date '+%Y%m%d-%H:%M:%S').png"
"CTRL, Print, exec, hyprshot -z -m window -o ${xdgPictures}/screenshots -f screenshot-$(date '+%Y%m%d-%H:%M:%S').png"
"SHIFT, Print, exec, hyprshot -z -m output -o ${xdgPictures}/screenshots -f screenshot-$(date '+%Y%m%d-%H:%M:%S').png"
## navigation
"$mod, $left, movefocus, l"
"$mod, $down, movefocus, d"
"$mod, $up, movefocus, u"
"$mod, $right, movefocus, r"
"$modShift, $left, workspace, e-1"
"$modShift, $right, workspace, e+1"
"$mod, left, movefocus, l"
"$mod, up, movefocus, u"
"$mod, down, movefocus, d"
"$mod, right, movefocus, r"
"$modShift, W, focuscurrentorlast"
"$mod, mouse_down, workspace, e-1"
"$mod, mouse_up, workspace, e+1"
"$modShift, left, workspace, e-1"
"$modShift, right, workspace, e+1"
"$modCtrl, $left, movewindow, l"
"$modCtrl, $down, movewindow, d"
"$modCtrl, $up, movewindow, u"
"$modCtrl, $right, movewindow, r"
"$modCtrl, left, movewindow, l"
"$modCtrl, up, movewindow, u"
"$modCtrl, down, movewindow, d"
"$modCtrl, right, movewindow, r"
# workspaces
"$mod, 1, workspace, 1"
"$mod, 2, workspace, 2"
"$mod, 3, workspace, 3"
"$mod, 4, workspace, 4"
"$mod, 5, workspace, 5"
"$mod, 6, workspace, 6"
"$mod, 7, workspace, 7"
"$mod, 8, workspace, 8"
"$mod, 9, workspace, 9"
"$mod, 0, togglespecialworkspace"
"$modShiftCtrl, 1, movetoworkspace, 1"
"$modShiftCtrl, 2, movetoworkspace, 2"
"$modShiftCtrl, 3, movetoworkspace, 3"
"$modShiftCtrl, 4, movetoworkspace, 4"
"$modShiftCtrl, 5, movetoworkspace, 5"
"$modShiftCtrl, 6, movetoworkspace, 6"
"$modShiftCtrl, 7, movetoworkspace, 7"
"$modShiftCtrl, 8, movetoworkspace, 8"
"$modShiftCtrl, 9, movetoworkspace, 9"
"$modShiftCtrl, 0, movetoworkspace, special"
"$mod, Q, workspace, 1"
"$mod, W, workspace, 2"
"$mod, F, workspace, 3"
"$mod, P, workspace, 4"
"$mod, B, workspace, 5"
"$mod, J, workspace, 6"
"$mod, L, workspace, 7"
"$mod, U, workspace, 8"
"$mod, Y, workspace, 9"
"$mod, apostrophe, togglespecialworkspace"
"$modShiftCtrl, Q, movetoworkspace, 1"
"$modShiftCtrl, W, movetoworkspace, 2"
"$modShiftCtrl, F, movetoworkspace, 3"
"$modShiftCtrl, P, movetoworkspace, 4"
"$modShiftCtrl, B, movetoworkspace, 5"
"$modShiftCtrl, J, movetoworkspace, 6"
"$modShiftCtrl, L, movetoworkspace, 7"
"$modShiftCtrl, U, movetoworkspace, 8"
"$modShiftCtrl, Y, movetoworkspace, 9"
"$modShiftCtrl, apostrophe, movetoworkspace, special"
"$modShiftCtrl, $left, movetoworkspace, e-1"
"$modShiftCtrl, $right, movetoworkspace, e+1"
"$modShiftCtrl, left, movetoworkspace, e-1"
"$modShiftCtrl, right, movetoworkspace, e+1"
''$mod ALT, mouse_down, exec, hyprctl keyword cursor:zoom_factor "$(hyprctl getoption cursor:zoom_factor | awk 'NR==1 {factor = $2; if (factor < 1) {factor = 1}; print factor * 1.25}')"''
''$mod ALT, mouse_up, exec, hyprctl keyword cursor:zoom_factor "$(hyprctl getoption cursor:zoom_factor | awk 'NR==1 {factor = $2; if (factor < 1) {factor = 1}; print factor / 1.25}')"''
"$mod ALT, mouse:274, exec, hyprctl keyword cursor:zoom_factor 1" # middle wheel click
];
# binde = [
# "$mod, comma, resizeactive, -10 0"
# "$mod, period, resizeactive, 10 0"
# "$modShift, comma, resizeactive, 0 -10"
# "$modShift, period, resizeactive, 0 10"
# ];
bindl = [
"$mod, Escape, exec, hyprctl switchxkblayout all next"
", switch:on:Lid Switch, exec, hyprctl keyword monitor 'eDP-1, disable'"
", switch:off:Lid Switch, exec, hyprctl keyword monitor 'eDP-1, preferred, 1920x0, 1.2'"
", XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"
", XF86AudioPlay, exec, playerctl play-pause"
", XF86AudioPrev, exec, playerctl previous"
", XF86AudioNext, exec, playerctl next"
"$modShiftCtrl ALT, Q, exit"
];
binde = [
", XF86MonBrightnessUp, exec, brightnessctl s 5%+"
", XF86MonBrightnessDown, exec, brightnessctl s 5%-"
"ALT, XF86MonBrightnessUp, exec, brightnessctl s 5%+ -d ${keyboard}::kbd_backlight"
"ALT, XF86MonBrightnessDown, exec, brightnessctl s 5%- -d ${keyboard}::kbd_backlight"
", XF86KbdBrightnessUp, exec, brightnessctl s 5%+ -d ${keyboard}::kbd_backlight"
", XF86KbdBrightnessDown, exec, brightnessctl s 5%- -d ${keyboard}::kbd_backlight"
", XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+"
", XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-"
];
bindm = [
"$mod, mouse:272, movewindow"
"$mod, mouse:273, resizewindow"
"$mod ALT, mouse:272, resizewindow"
];
gestures = {
workspace_swipe = true;
workspace_swipe_fingers = 3;
workspace_swipe_distance = 300;
};
workspace = [
"1, defaultName:general"
"2, defaultName:web"
"3, defaultName:chat"
"4, defaultName:code"
"5, defaultName:uni"
"6, defaultName:games"
"7, defaultName:system"
"8, defaultName:media"
"9, defaultName:tray"
# "10, defaultName:"
];
windowrulev2 = [
## tray/misc utilities
# file picker
"float, class:xdg-desktop-portal-gtk"
"size <50% <90%, class:xdg-desktop-portal-gtk"
"center 1, class:xdg-desktop-portal-gtk"
# xdp-hyprland stream picker
"float, initialTitle:MainPicker"
# general apps
"float, class:(com.saivert.pwvucontrol)"
"float, class:(re.sonny.Junction)"
"float, class:(com.github.hluk.copyq)"
"float, class:(nm-connection-editor)"
"float, class:(.blueman-manager-wrapped)"
# telegram
"maximize, initialTitle:Медіапереглядач"
"noborder, title:TelegramDesktop"
"keepaspectratio, title:TelegramDesktop"
"noblur, title:TelegramDesktop"
"float, title:TelegramDesktop"
"pin, title:TelegramDesktop"
# any chromium-based
"noborder, title:Картинка в картинці"
"keepaspectratio, title:Картинка в картинці"
"noblur, title:Картинка в картинці"
"float, title:Картинка в картинці"
"pin, title:Картинка в картинці"
# and firefox
"noborder, title:Picture-in-Picture"
"keepaspectratio, title:Picture-in-Picture"
"noblur, title:Picture-in-Picture"
"float, title:Picture-in-Picture"
"pin, title:Picture-in-Picture"
# screenshot editor
"noanim, class:com.gabm.satty"
"float, class:com.gabm.satty"
"rounding 0, class:com.gabm.satty"
"size 100% 100%, class:com.gabm.satty"
"move 0 0, class:com.gabm.satty"
"pin, class:com.gabm.satty"
## games
"float, class:(com.mojang.minecraft.java-edition)"
"immediate, class:(com.mojang.minecraft.java-edition)"
# cs2
"immediate, class:(cs2)"
# deadlock
# "float, class:(steam_app_1422450)"
"fullscreen, class:(steam_app_1422450)"
"immediate, class:(steam_app_1422450)"
"immediate, initialTitle:(Ghostrunner)"
# dead by daylight
"immediate, class:deadbydaylight-egs-shipping.exe"
## workspace assignments
"workspace name:chat, class:org.telegram.desktop"
"workspace name:chat, class:org.signal.Signal"
"workspace name:chat, class:im.riot.Riot"
"workspace name:chat, class:WebCord"
"workspace name:games, class:com.heroicgameslauncher.hgl"
"workspace name:games, class:net.lutris.Lutris"
"workspace name:games, class:steam"
# "workspace name:game, class:"
];
};
extraConfig = ''
bind = $modShift, R, submap, resize
submap = resize
binde = , right, resizeactive, 10 0
binde = , left, resizeactive, -10 0
binde = , up, resizeactive, 0 -10
binde = , down, resizeactive, 0 10
binde = , $right, resizeactive, 10 0
binde = , $left, resizeactive, -10 0
binde = , $up, resizeactive, 0 -10
binde = , $down, resizeactive, 0 10
bind = , escape, submap, reset
submap = reset
'';
}

View File

@ -0,0 +1,23 @@
{
osConfig,
config,
inputs,
pkgs,
lib,
...
}: let
inherit (lib) mkIf mkDefault getExe;
inherit (config.lib.stylix) colors;
inherit (osConfig.networking) hostName;
ifLaptop = mkIf (hostName != "dunamis");
in {
imports = with inputs; [
walker.homeManagerModules.default
];
options = config.desktop.hyprland.enable {
# programs.fuzzel = import ./fuzzel {inherit config mkDefault;};
programs.walker = import ./walker {inherit config inputs pkgs;};
programs.waybar = import ./waybar {inherit colors config getExe ifLaptop pkgs;};
programs.hyprlock = import ./hyprlock {inherit config pkgs;};
};
}

View File

@ -0,0 +1,23 @@
{
config,
mkDefault,
}: {
enable = true;
settings = {
main = {
terminal = "$TERMINAL -e";
fields = "filename,name,generic,keywords,categories,exec";
dpi-aware = false;
width = 20;
horizontal-pad = 12;
vertical-pad = 12;
show-actions = true;
match-mode = "fuzzy";
icon-theme = config.dconf.settings."org/gnome/desktop/interface".icon-theme;
};
border = mkDefault {
width = 3;
radius = 12;
};
};
}

View File

@ -0,0 +1,94 @@
{
config,
pkgs,
...
}: let
inherit (config.stylix) colors;
in {
enable = true;
settings = {
general = {
disable_loading_bar = true;
#grace = 300;
hide_cursor = true;
no_fade_in = false;
};
background = [
{
path = "screenshot";
blur_passes = 4;
blur_size = 8;
}
];
input-field = [
{
size = "274, 50";
rounding = 12;
outline_thickness = 3;
position = "0, 0";
monitor = "";
dots_center = true;
fade_on_empty = false;
font_family = "${config.stylix.fonts.serif.name}";
font_color = "rgb(${colors.base05})";
inner_color = "rgb(${colors.base00})";
outer_color = "rgb(${colors.base0D})";
check_color = "rgb(${colors.base0A})";
fail_color = "rgb(${colors.base08})";
placeholder_text = "locked...";
fail_text = "wrong";
shadow_passes = 0;
}
];
shape = [
{
rounding = 12;
#border_size = 3;
size = "274, 50";
color = "rgb(${colors.base00})";
border_color = "rgb(${colors.base0D})";
position = "0, 60";
halign = "center";
valign = "center";
}
{
rounding = 12;
#border_size = 3;
size = "274, 50";
color = "rgb(${colors.base00})";
border_color = "rgb(${colors.base0D})";
position = "0, -60";
halign = "center";
valign = "center";
}
];
label = [
{
monitor = "";
text = "$LAYOUT"; #"cmd[update:1000] ${pkgs.uutils-coreutils-noprefix}/bin/echo $(${pkgs.uutils-coreutils-noprefix}/bin/date +%H:%M:%S)";
text_align = "center";
font_size = 16;
font_family = "${config.stylix.fonts.serif.name}";
outer_color = "rgb(${colors.base00})";
color = "rgb(${colors.base05})";
position = "0, 60";
halign = "center";
valign = "center";
}
{
monitor = "";
text = "cmd[update:1000] ${pkgs.uutils-coreutils-noprefix}/bin/echo $(${pkgs.uutils-coreutils-noprefix}/bin/date +'%m/%d %a %T')";
text_align = "center";
font_size = 16;
font_family = "${config.stylix.fonts.serif.name}";
outer_color = "rgb(${colors.base00})";
color = "rgb(${colors.base05})";
position = "0, -60";
halign = "center";
valign = "center";
}
];
};
}

View File

@ -0,0 +1,307 @@
{
config,
pkgs,
...
}: {
enable = true;
package = pkgs.walker;
runAsService = true;
config = {
activation_mode.labels = "neiotsra";
as_window = false;
disabled = [
"bookmarks"
"clipboard"
"custom_commands"
"translation"
"websearch"
];
builtins = {
applications = {
actions.enabled = true;
context_aware = true;
name = "applications";
placeholder = "Applications";
prioritize_new = true;
refresh = true;
show_generic = true;
show_icon_when_single = true;
show_sub_when_single = true;
weight = 10;
};
calc = {
icon = "accessories-calculator";
min_chars = 4;
name = "calc";
placeholder = "Calculator";
weight = 5;
};
clipboard = {
image_height = 300;
max_entries = 10;
name = "clipboard";
placeholder = "Clipboard";
switcher_only = true;
weight = 5;
};
commands = {
icon = "utilities-terminal";
name = "commands";
placeholder = "Commands";
switcher_only = true;
weight = 8;
};
custom_commands = {
icon = "utilities-terminal";
name = "custom_commands";
placeholder = "Custom Commands";
weight = 5;
};
dmenu = {
name = "dmenu";
placeholder = "Dmenu";
switcher_only = true;
weight = 5;
};
emojis = {
history = true;
name = "emojis";
placeholder = "Emojis";
switcher_only = true;
typeahead = true;
weight = 5;
};
finder = {
concurrency = 8;
icon = "folder";
ignore_gitignore = true;
name = "finder";
placeholder = "Finder";
refresh = true;
switcher_only = true;
weight = 5;
};
runner = {
generic_entry = false;
history = true;
icon = "utilities-terminal";
name = "runner";
placeholder = "Runner";
refresh = true;
typeahead = true;
weight = 5;
};
ssh = {
history = true;
icon = "preferences-system-network";
name = "ssh";
placeholder = "SSH";
refresh = true;
switcher_only = true;
weight = 5;
};
switcher = {
name = "switcher";
placeholder = "Switcher";
prefix = "/";
weight = 5;
};
websearch = {
icon = "applications-internet";
name = "websearch";
placeholder = "Websearch";
weight = 5;
};
windows = {
icon = "view-restore";
name = "windows";
placeholder = "Windows";
weight = 10;
};
};
disable_click_to_close = false;
force_keyboard_focus = true;
list = {
max_entries = 50;
show_initial_entries = true;
single_click = true;
};
search = {
delay = 0;
force_keyboard_focus = true;
history = true;
placeholder = "Search...";
};
};
theme = {
layout = {
ui = {
anchors = {
bottom = false;
left = false;
right = false;
top = false;
};
window = {
h_align = "center";
v_align = "center";
box = {
width = 450;
h_align = "center";
v_align = "center";
# spacing = 12;
orientation = "vertical";
search = {
margins = {
start = 8;
top = 8;
end = 8;
bottom = 0;
};
h_align = "top";
};
scroll = {
overlay_scrolling = true;
list = {
margins = {
bottom = 8;
top = 4;
start = 8;
end = 8;
};
item = {
icon.theme = "${config.gtk.iconTheme.name}";
spacing = 4;
activation_label = {
x_align = 0.5;
y_align = 0.5;
width = 32;
};
text = {
h_align = "start";
h_expand = true;
revert = true;
wrap = true;
};
};
};
};
};
};
};
};
style = let
inherit (config.lib.stylix) colors;
in ''
@define-color base00 #${colors.base00};
@define-color base01 #${colors.base01};
@define-color base02 #${colors.base02};
@define-color base03 #${colors.base03};
@define-color base04 #${colors.base04};
@define-color base05 #${colors.base05};
@define-color base06 #${colors.base06};
@define-color base07 #${colors.base07};
@define-color base08 #${colors.base08};
@define-color base09 #${colors.base09};
@define-color base0A #${colors.base0A};
@define-color base0B #${colors.base0B};
@define-color base0C #${colors.base0C};
@define-color base0D #${colors.base0D};
@define-color base0E #${colors.base0E};
@define-color base0F #${colors.base0F};
#window,
#box,
#search,
#password,
#input,
#typeahead,
#spinner,
#list,
child,
scrollbar,
slider,
#item,
#text,
#label,
#sub,
#activationlabel {
all: unset;
}
#window {
background: @base00;
color: @base05;
border-radius: 20px;
border: 3px solid @base0D;
}
#box {
background: @base00;
}
#search {
background: @base01;
border-radius: 12px 12px 6px 6px;
padding: 8px;
}
#password,
#input,
#typeahead {
background: none;
box-shadow: none;
border-radius: 12px;
}
#input > *:first-child,
#typeahead > *:first-child {
margin-right: 12px;
border-radius: 0px;
}
#typeahead {
color: @base05;
}
#input placeholder {
opacity: 0.5;
}
#list {
padding: 8px;
border-radius: 6px 6px 12px 12px;
background: @base01;
}
child {
box-shadow: none;
}
child:selected,
child:hover {
box-shadow: none;
border-radius: 8px;
background: @base02;
}
#item {
padding: 4px;
}
#sub {
font-size: smaller;
opacity: 0.5;
}
#activationlabel {
opacity: 0.5;
}
.activation #activationlabel {
opacity: 1;
color: @base05;
}
'';
};
}

View File

@ -0,0 +1,331 @@
{
colors,
config,
getExe,
ifLaptop,
pkgs,
...
}: {
enable = true;
systemd = {
enable = true;
target = "graphical-session.target";
};
settings = {
bar-0 = {
# layer = "top";
position = "bottom";
height = 24;
spacing = 6;
# margin-left = 33 + 3;
# margin-right = 33 + 3;
margin-left = 8;
margin-right = 8;
margin-bottom = 8;
reload_style_on_change = true;
modules-left = [
"hyprland/language"
"hyprland/workspaces"
"wlr/taskbar"
];
modules-center = ["clock"];
modules-right = [
(ifLaptop "group/laptop")
"wireplumber"
"tray"
"privacy"
(ifLaptop "power-profiles-daemon")
"idle_inhibitor"
"custom/notification"
];
"niri/workspaces" = {
format = "{icon}";
format-icons = {
"1" = "";
"2" = "";
"3" = "";
"4" = "";
"5" = "";
"6" = "";
"7" = "";
"8" = "";
"9" = "";
"10" = "";
general = "󰘧";
web = "󰖟";
chat = "󰻞";
code = "󰅩";
uni = "󱆀";
games = "󰺶";
system = "󰢻";
media = "󱜐";
tray = "󱊖";
};
};
"niri/language" = {
format = "{}";
format-en = "🇺🇸";
format-uk = "🇺🇦";
};
"custom/separator" = {
format = "󰝠";
interval = "once";
tooltip = false;
};
"group/laptop" = {
orientation = "inherit";
modules = [
"battery"
"backlight"
];
};
"backlight" = {
format = "{icon} {percent}%";
format-icons = [
"󰃚"
"󰃛"
"󰃜"
"󰃝"
"󰃞"
"󰃟"
"󰃠"
];
};
"idle_inhibitor" = {
format = "{icon}";
format-icons = {
activated = "󰅶";
deactivated = "󰾪";
};
};
"tray" = {
icon-size = 20;
spacing = 6;
};
"clock" = {
interval = 1;
format = "{:%H:%M:%S}";
tooltip-format = "{:%d.%m.%Y}";
};
battery = {
states = {
good = 95;
warning = 30;
critical = 15;
};
format = "{icon} {capacity}%";
format-full = "󱟢 {capacity}%";
format-charging = "󰂄 {capacity}%";
format-plugged = "󰚥 {capacity}%";
format-alt = "{icon} {time}";
format-icons = ["󰁺" "󰁻" "󰁼" "󰁽" "󰁾" "󰁿" "󰂀" "󰂁" "󰂂" "󰁹"];
};
mpris = {
format = "{player_icon} {dynamic}";
format-paused = "{status_icon} <i>{dynamic}</i>";
playing-len = 30;
playing-paused = 30;
player-icons = {
default = "";
mpv = "🎵";
};
status-icons = {paused = "";};
};
"upower" = {
icon-size = 16;
format = "{percentage}";
hide-if-empty = true;
tooltip = true;
tooltip-spacing = 20;
};
"power-profiles-daemon" = {
format = "{icon}";
tooltip-format = "Power profile: {profile}\nDriver: {driver}";
tooltip = true;
format-icons = {
default = "󱡮";
performance = "󱡮";
balanced = "";
power-saver = "";
};
};
"wireplumber" = {
scroll-step = 3;
format = "{icon} {volume}%";
format-muted = "󰖁";
format-icons = ["󰕿" "󰖀" "󰕾"];
on-click = getExe pkgs.pwvucontrol;
on-click-right = "wpctl set-mute @DEFAULT_SINK@ toggle";
};
"custom/notification" = {
tooltip = false;
format = "{icon}";
format-icons = {
notification = "󱅫";
none = "󰂚";
dnd-notification = "󰂛";
dnd-none = "󰂛";
};
return-type = "json";
exec-if = "which swaync-client";
exec = "swaync-client -swb";
on-click = "swaync-client -t -sw";
on-click-right = "swaync-client -d -sw";
escape = true;
};
"privacy" = {
icon-spacing = 2;
icon-size = 16;
transition-duration = 250;
screenshare = {
type = "screenshare";
tooltip = true;
tooltip-icon-size = 24;
};
audio-in = {
type = "audio-in";
tooltip = true;
tooltip-icon-size = 24;
};
};
"wlr/taskbar" = {
format = "{icon}";
icon-size = 20;
icon-theme = "${config.dconf.settings."org/gnome/desktop/interface".icon-theme}";
tooltip-format = "{title}";
on-click = "activate";
};
};
};
style = ''
@define-color base00 #${colors.base00};
@define-color base01 #${colors.base01};
@define-color base02 #${colors.base02};
@define-color base03 #${colors.base03};
@define-color base04 #${colors.base04};
@define-color base05 #${colors.base05};
@define-color base06 #${colors.base06};
@define-color base07 #${colors.base07};
@define-color base08 #${colors.base08};
@define-color base09 #${colors.base09};
@define-color base0A #${colors.base0A};
@define-color base0B #${colors.base0B};
@define-color base0C #${colors.base0C};
@define-color base0D #${colors.base0D};
@define-color base0E #${colors.base0E};
@define-color base0F #${colors.base0F};
* {
font-family: ${config.stylix.fonts.sansSerif.name}, FontAwesome;
font-weight: 500;
font-size: 100%;
}
window#waybar {
background-color: transparent;
color: @base05;
}
.modules-center {
background-color: transparent;
}
.mpris.stopped {
background-color: transparent;
}
.modules-left,
.modules-center,
.modules-right {
/* border-bottom-left-radius: 12px;
border-bottom-right-radius: 12px;
border-top-left-radius: 0px;
border-top-right-radius: 0px; */
background-color: @base00;
border-radius: 24px;
border: 3px solid @base0D;
color: @base05;
padding: 0 0.4em;
}
tooltip {
background: @base01;
border: 1px solid @base0E;
}
tooltip label {
color: @base05;
}
button {
box-shadow: inset 0 -3px transparent;
border-radius: 16px;
}
button:hover {
background: inherit;
box-shadow: inset 0 -3px transparent;
}
#mode {
background-color: rgba(0, 0, 0, 0.2);
box-shadow: inset 0 -3px @base05;
}
#battery,
#backlight,
/* #workspaces,
#taskbar,
#privacy, */
#taskbar button,
#language,
#clock,
#battery,
#backlight,
#wireplumber,
#workspaces button,
#custom-notification,
#idle_inhibitor,
#power-profiles-daemon,
#privacy-item,
#custom-separator {
padding: 0 0.3em;
}
#tray button {
padding: 0 0.3em;
margin: 0 0.2em;
}
#workspaces button.active {
color: @base0D;
}
#taskbar button:hover {
box-shadow: transparent;
}
#taskbar.empty,
window#empty {
background-color: transparent;
}
#battery.critical:not(.charging) {
color: @base09;
animation-name: blink;
animation-duration: 0.5s;
animation-timing-function: steps(12);
animation-iteration-count: infinite;
animation-direction: alternate;
}
#power-profiles-daemon.performance {
color: @base0D;
}
#power-profiles-daemon.balanced {
color: @base0B;
}
#power-profiles-daemon.power-saver {
color: @base0A;
}
label:focus {
background-color: #000000;
}
#tray > .passive {
-gtk-icon-effect: dim;
}
#tray > .needs-attention {
-gtk-icon-effect: highlight;
background-color: @base08;
}
#privacy-item.screenshare {
color: @base0C;
}
#privacy-item.audio-in {
color: @base0E;
}
'';
}

View File

@ -0,0 +1,65 @@
{
# getExe,
perSystem,
# pkgs,
lockscreen,
...
}: {
swaync = import ./swaync;
network-manager-applet.enable = true;
blueman-applet.enable = true;
playerctld.enable = true;
wpaperd.enable = true;
hyprpaper.enable = true;
copyq = {
enable = true;
package = perSystem.nixpkgs-stable.copyq;
};
gnome-keyring = {
enable = true;
components = ["secrets"];
};
gammastep = {
enable = true;
provider = "manual";
latitude = 49.6;
longitude = 36.1;
tray = true;
temperature = {
day = 6500;
night = 3000;
};
};
swayosd = {
enable = true;
topMargin = 0.8;
};
udiskie = {
enable = true;
automount = false;
notify = true;
tray = "auto";
};
hypridle = {
enable = true;
settings = {
general = {
before_sleep_cmd = "loginctl lock-session";
after_sleep_cmd = "hyprctl dispatch dpms on";
lock_cmd = "pidof hyprlock || hyprlock";
# unlock_cmd = "loginctl unlock-session";
};
listener = [
{
timeout = 600;
on-timeout = "pidof ${lockscreen} || ${lockscreen}";
}
{
timeout = 601;
on-timeout = "hyprctl dispatch dpms off";
on-resume = "hyprctl dispatch dpms on";
}
];
};
};
}

View File

@ -0,0 +1,177 @@
{
enable = true;
settings = {
cssPriority = "user";
image-visibility = "when-available";
keyboard-shortcut = true;
relative-timestamps = true;
timeout = 5;
timeout-low = 5;
timeout-critical = 0;
script-fail-notify = true;
transition-time = 200;
# Layer settings
layer-shell = true;
layer = "overlay";
control-center-layer = "overlay";
# Notification settings
positionX = "right";
positionY = "top";
notification-2fa-action = true;
notification-inline-replies = false;
notification-icon-size = 32;
notification-body-image-height = 100;
notification-body-image-width = 200;
notification-window-width = 400;
# Control center settings
control-center-positionX = "right";
control-center-positionY = "top";
control-center-width = 500;
control-center-exclusive-zone = true;
fit-to-screen = true;
hide-on-action = true;
hide-on-clear = false;
# Widget settings
widgets = [
"title"
"dnd"
"notifications"
"mpris"
];
widget-config = {
title = {
text = "Notifications";
clear-all-button = true;
button-text = "Clear All";
};
dnd = {
text = "Do Not Disturb";
};
mpris = {
image-size = 96;
image-radius = 12;
blur = true;
};
};
};
style = ''
/*** Global ***/
progress,
progressbar,
trough {
border-radius: 16px;
}
.app-icon,
.image {
-gtk-icon-effect: none;
}
.notification-action {
border-radius: 12px;
margin: 0.5rem;
}
.close-button {
margin: 24px;
padding: 0.2rem;
border-radius: 16px;
}
/*** Notifications ***/
.notification-group.collapsed
.notification-row:not(:last-child)
.notification-action,
.notification-group.collapsed
.notification-row:not(:last-child)
.notification-default-action {
opacity: 0;
}
.trough {
margin: 4px;
border-radius: 7px;
}
.notification,
.notification.low,
.notification.normal,
.notification.critical,
.control-center {
margin: 16px;
border-radius: 7px;
}
.floating-notifications,
.notification-content {
border-radius: 7px;
}
.control-center-list {
background: transparent;
}
/*** Widgets ***/
/* Title widget */
.widget-title {
margin: 0.5rem;
}
.widget-title > label {
font-weight: bold;
}
.widget-title > button {
border-radius: 16px;
padding: 0.5rem;
}
/* DND Widget */
.widget-dnd {
margin: 0.5rem;
}
.widget-dnd > label {
font-weight: bold;
}
.widget-dnd > switch {
border-radius: 16px;
}
.widget-dnd > switch slider {
border-radius: 16px;
padding: 0.25rem;
}
/* Mpris widget */
.widget-mpris .widget-mpris-player {
border-radius: 16px;
margin: 0.5rem;
padding: 0.5rem;
}
.widget-mpris .widget-mpris-player .widget-mpris-album-art {
border-radius: 16px;
}
.widget-mpris .widget-mpris-player .widget-mpris-title {
font-weight: bold;
}
.widget-mpris .widget-mpris-player .widget-mpris-subtitle {
font-weight: normal;
}
.widget-mpris .widget-mpris-player > box > button {
border: 1px solid transparent;
border-radius: 16px;
padding: 0.25rem;
}
'';
}

View File

@ -1,22 +1,27 @@
{
perSystem,
osConfig,
config,
pkgs,
inputs,
lib,
osConfig,
# perSystem,
pkgs,
...
}: let
inherit (lib.strings) removeSuffix;
inherit (lib) mkIf mkEnableOption mkDefault mkForce getExe;
inherit (osConfig.module.stylix) theme;
inherit (lib) mkIf mkEnableOption mkForce getExe;
inherit (osConfig.networking) hostName;
cfg = config.desktop.niri;
ifLaptop = mkIf (hostName != "dunamis");
launcher = getExe pkgs.walker;
lockscreen = getExe pkgs.gtklock;
commonArgs = {
inherit config inputs lib osConfig pkgs;
launcher = getExe pkgs.walker;
lockscreen = getExe pkgs.gtklock;
};
in {
imports = [
./programs
imports = with inputs; [
walker.homeManagerModules.default
];
options = {
desktop.niri.enable =
@ -28,6 +33,24 @@ in {
wpaperd.enable = true;
qt.enable = false;
};
stylix.iconTheme = {
enable = true;
light = "Papirus-Light";
dark = "Papirus-Dark";
package = let
inherit (lib.strings) hasPrefix;
inherit (osConfig.module.stylix) theme;
color =
if (hasPrefix "rose-pine" theme)
then "indigo"
else if (hasPrefix "nord" theme)
then "nordic"
else if (hasPrefix "s" theme)
then "teal"
else null;
in
pkgs.papirus-icon-theme.override {inherit color;};
};
dconf.settings = {
"org/gnome/desktop/wm/preferences" = {
button-layout = "icon:close";
@ -40,45 +63,26 @@ in {
else lib.mkDefault "prefer-light";
};
};
gtk = {
enable = true;
iconTheme = let
papirusPackage =
if (lib.strings.hasPrefix "rose-pine" osConfig.module.stylix.theme)
then pkgs.papirus-icon-theme.override {color = "indigo";}
else if (lib.strings.hasPrefix "nord" osConfig.module.stylix.theme)
then pkgs.papirus-icon-theme.override {color = "nordic";}
else pkgs.papirus-icon-theme;
in {
name =
if config.stylix.polarity == "dark"
then "Papirus-Dark"
else "Papirus-Light";
package = papirusPackage;
};
};
qt = {
enable = true;
platformTheme.name = "gtk3";
};
xdg.configFile.niri = import ./niri.nix {inherit config hostName launcher lockscreen;};
services = import ./services {inherit pkgs lockscreen getExe perSystem;};
programs.walker = import ./programs/walker commonArgs;
programs.waybar = import ./programs/waybar commonArgs;
services = import ./services commonArgs;
home.packages = with pkgs;
[
# gui libadwaita apps
celluloid # mpv gui in libadwaita
gnome-text-editor
helvum # pipewire patchbay in rust
junction # app chooser
loupe # image viewer and editor in rust
mission-center # task manager in rust (partly)
nautilus # file manager
overskride # bluetooth gui in rust
papers # pdf reader in rust
pika-backup # borg gui in rust
pwvucontrol # pipewire gui in rust
sonusmix # pipewire routing tool in rust
wdisplays # wlroots display configurator
]
++ [
@ -91,6 +95,10 @@ in {
];
xdg = {
configFile = {
niri = import ./niri.nix commonArgs;
"mimeapps.list".force = true;
};
mime.enable = true;
mimeApps = {
enable = true;
@ -119,12 +127,11 @@ in {
};
systemd.user = {
settings.Manager.DefaultEnvironment = {
QT_QPA_PLATFORM = "wayland";
DISPLAY = ":123";
};
targets.tray.Unit.Description = "Home Manager System Tray"; # workaround for udiskie
services = let
mkGraphicalService = config: graphicalService // config;
mkGraphicalService = config: lib.attrsets.recursiveUpdate graphicalService config;
graphicalService = {
Install.WantedBy = ["niri.service"];
Unit = {
@ -138,38 +145,50 @@ in {
RestartSec = 1;
};
};
in {
udiskie = mkGraphicalService {};
waybar = mkGraphicalService {};
network-manager-applet = mkGraphicalService {};
copyq = mkGraphicalService {
Service =
graphicalService.Service
// {
Environment = mkForce "QT_QPA_PLATFORM=wayland";
in
lib.mkMerge [
{
copyq = mkGraphicalService {Service.Environment = mkForce "QT_QPA_PLATFORM=wayland";};
network-manager-applet = mkGraphicalService {};
udiskie = mkGraphicalService {};
walker = mkGraphicalService {};
waybar = mkGraphicalService {};
wpaperd =
mkGraphicalService {}
// {
Service.TimeoutStopSec = mkForce "1";
Service.Restart = mkForce "always";
};
xwayland-satellite = mkGraphicalService {
Service = {
Type = "simple";
ExecStart = getExe pkgs.xwayland-satellite + " :123";
};
};
};
xwayland-satellite = mkGraphicalService {
Service =
graphicalService.Service
// {
Type = "simple";
ExecStart = getExe pkgs.xwayland-satellite + " :123";
# gnome-polkit-agent = mkGraphicalService {
# Service = {
# Type = "simple";
# ExecStart = pkgs.polkit_gnome + "/libexec/polkit-gnome-authentication-agent-1";
# };
# };
}
(lib.mkIf (hostName == "morphius") {
lisgd = mkGraphicalService {
Service = {
# Group = "input";
Type = "simple";
ExecStart =
"${pkgs.lisgd}/bin/lisgd"
+ " -d /dev/input/by-path/pci-0000:00:15.1-platform-i2c_designware.1-event"
+ " -g \"1,DU,TL,*,P,niri msg action toggle-overview\""
+ " -g \"3,UD,T,*,P,niri msg action focus-workspace-up\""
+ " -g \"3,DU,B,*,P,niri msg action focus-workspace-down\""
+ " -g \"3,LR,L,*,P,niri msg action focus-column-left\""
+ " -g \"3,RL,R,*,P,niri msg action focus-column-right\"";
};
};
};
wpaperd = mkGraphicalService {
Service =
mkDefault graphicalService.Service;
};
gnome-polkit-agent = mkGraphicalService {
Service =
graphicalService.Service
// {
Type = "simple";
ExecStart = pkgs.polkit_gnome + "/libexec/polkit-gnome-authentication-agent-1";
};
};
};
})
];
};
};
}

View File

@ -1,12 +1,14 @@
{
config,
hostName,
osConfig,
launcher,
lockscreen,
...
}: let
inherit (config.lib.stylix) colors;
inherit (config.stylix) cursor;
inherit (osConfig.networking) hostName;
keyboard =
if hostName == "eldrid"
then "chromeos"
@ -91,74 +93,40 @@ in {
in ''
environment {
DISPLAY ":123"
QT_QPA_PLATFORMTHEME "gtk3"
CLUTTER_BACKEND "wayland"
GDK_BACKEND "wayland"
MOZ_ENABLE_WAYLAND "1"
MOZ_WEBRENDER "1"
GDK_BACKEND "wayland"
QT_QPA_PLATFORM "wayland"
XDG_SESSION_TYPE "wayland"
CLUTTER_BACKEND "wayland"
SDL_VIDEODRIVER "wayland"
XDG_SESSION_TYPE "wayland"
}
input {
keyboard {
xkb {
layout "us,ua"
${
if (hostName == "dunamis" || hostName == "legion")
then "// variant \"colemak_dh_ortho,\""
else "variant \"colemak_dh_ortho,\""
}
}
repeat-delay 200
repeat-rate 50
track-layout "global"
variant "colemak_dh_ortho,"
}
repeat-delay 200
repeat-rate 50
track-layout "window"
}
touchpad {
// off
tap
// dwt
// dwtp
natural-scroll
accel-speed 0.2
accel-profile "flat"
// scroll-method "two-finger"
// disabled-on-external-mouse
}
mouse {
// off
// natural-scroll
accel-speed 0.0
accel-profile "flat"
// scroll-method "no-scroll"
}
touch {
map-to-output "eDP-1"
}
warp-mouse-to-focus
// focus-follows-mouse
}
output "eDP-1" {
// off
scale 1.2
transform "normal"
// position x=1920 y=0
}
output "Samsung Electric Company S24R65x H4TMA03291" {
position x=0 y=0
variable-refresh-rate
}
output "Philips Consumer Electronics Company 27M2N5500 UK02418033254" {
mode "2560x1440@${
if hostName == "legion"
then "144.001"
else "180.000"
}"
variable-refresh-rate
position x=0 y=0
scale 1.33
}
output "PNP(AOC) 27V2G5 0x0000026C" {
position x=1920 y=0
mode "1920x1080@74.973"
variable-refresh-rate
workspace-auto-back-and-forth
}
cursor {
@ -166,44 +134,62 @@ in {
xcursor-size ${toString cursor.size}
}
hotkey-overlay {
skip-at-startup
}
prefer-no-csd
screenshot-path "${xdgPics}/screenshots/screenshot-%Y-%m-%d-%H-%M-%S.png"
animations {
slowdown 0.5
}
layout {
gaps 6
gaps 3
// background-color "#${colors.base02}"
background-color "transparent"
center-focused-column "never" // "on-overflow"
default-column-width { proportion 1.0; }
preset-column-widths {
proportion 0.33333
proportion 0.66667
}
// default-column-width { proportion 0.9; }
default-column-width { proportion 0.5; }
struts {
left 36
right 36
}
tab-indicator {
active-color "#${colors.base04}"
inactive-color "#${colors.base03}"
corner-radius 4
gap 6
corner-radius 6
gap 3
gaps-between-tabs 3
length total-proportion=0.3
// length total-proportion=0.3
place-within-column
position "left"
width 6
}
focus-ring {
// off
width 3
active-gradient from="#${colors.base0D}" to="#${colors.base0F}" angle=40 relative-to="workspace-view"
width 1
active-color "#${colors.base0D}"
inactive-color "#${colors.base03}"
urgent-color "#${colors.base08}"
}
struts {
left 33
right 33
border {
off
width 1
active-color "#${colors.base0D}"
inactive-color "#${colors.base03}"
urgent-color "#${colors.base08}"
}
}
prefer-no-csd
hotkey-overlay {
skip-at-startup
}
window-rule {
geometry-corner-radius 12
clip-to-geometry true
@ -220,17 +206,22 @@ in {
active-color "#${colors.base0F}"
inactive-color "#${colors.base03}"
}
shadow {
on
color "#${colors.base0F}"
inactive-color "#${colors.base03}"
}
}
screenshot-path "${xdgPics}/screenshots/screenshot-%Y-%m-%d-%H-%M-%S.png"
layer-rule {
match namespace="^wpaperd.*$"
place-within-backdrop true
}
overview {
workspace-shadow {
off
}
}
layer-rule {
match namespace="waybar"
match at-startup=true
animations {
slowdown 0.8
opacity 0.99 // fixes the black fill
}
window-rule {
@ -245,6 +236,7 @@ in {
}
window-rule {
match app-id="re.sonny.Junction"
match app-id="com.github.hluk.copyq"
open-floating true
open-focused true
}
@ -258,6 +250,7 @@ in {
match app-id=r#"^org\.keepassxc\.KeePassXC$"#
match app-id=r#"^org\.gnome\.World\.Secrets$"#
match app-id=r#"^Bitwarden$"#
match app-id="io.github.kukuruzka165.materialgram"
match app-id="org.telegram.desktop"
match app-id="org.signal.Signal"
match app-id="WebCord"
@ -265,6 +258,7 @@ in {
block-out-from "screencast"
}
binds {
Mod+Shift+Slash { show-hotkey-overlay; }
@ -276,6 +270,7 @@ in {
Mod+Shift+T { set-column-width "67%"; }
Mod+V { toggle-column-tabbed-display; }
Mod+G { switch-focus-between-floating-and-tiling; }
Mod+X { spawn "pkill" "-SIGUSR1" "waybar"; } // hide/show waybar
Mod+Ctrl+Comma { consume-or-expel-window-left; }
Mod+Ctrl+Period { consume-or-expel-window-right; }
@ -284,6 +279,8 @@ in {
Mod+Ctrl+M { fullscreen-window; }
Mod+Ctrl+G { toggle-window-floating; }
Mod+Ctrl+Shift+M { toggle-windowed-fullscreen; }
Mod+Minus { set-column-width "-10%"; }
Mod+Equal { set-column-width "+10%"; }
Mod+Comma { set-column-width "-10%"; }
@ -291,12 +288,15 @@ in {
Mod+Shift+Comma { set-window-height "-10%"; }
Mod+Shift+Period { set-window-height "+10%"; }
Mod+Escape { switch-layout "next"; }
Mod+Space { switch-layout "next"; }
Mod+Ctrl+Space repeat=false { toggle-overview; }
Mod+Return repeat=false { spawn "sh" "-c" "$TERMINAL"; }
Mod+Space repeat=false { spawn "${launcher}"; }
Mod+Ctrl+L repeat=false { spawn "${lockscreen}"; }
Mod+Ctrl+V repeat=false { spawn "copyq" "toggle"; }
Mod+BackSpace repeat=false { spawn "${launcher}"; }
Mod+A repeat=false { spawn "${launcher}"; }
Mod+Ctrl+L repeat=false { spawn "${lockscreen}"; }
Mod+Ctrl+V repeat=false { spawn "copyq" "menu"; }
Mod+Shift+W repeat=false { spawn "walker" "-m" "windows"; }

View File

@ -1,20 +0,0 @@
{
osConfig,
config,
inputs,
pkgs,
lib,
...
}: let
inherit (lib) mkIf mkDefault getExe;
inherit (config.lib.stylix) colors;
inherit (osConfig.networking) hostName;
ifLaptop = mkIf (hostName != "dunamis");
in {
imports = with inputs; [
walker.homeManagerModules.default
];
# programs.fuzzel = import ./fuzzel {inherit config mkDefault;};
programs.walker = import ./walker {inherit config inputs pkgs;};
programs.waybar = import ./waybar {inherit colors config getExe ifLaptop pkgs;};
}

View File

@ -1,6 +1,6 @@
{
config,
mkDefault,
lib,
}: {
enable = true;
settings = {
@ -15,7 +15,7 @@
match-mode = "fuzzy";
icon-theme = config.dconf.settings."org/gnome/desktop/interface".icon-theme;
};
border = mkDefault {
border = lib.mkDefault {
width = 3;
radius = 12;
};

View File

@ -146,32 +146,30 @@
h_align = "center";
v_align = "center";
box = {
width = 450;
h_align = "center";
v_align = "center";
# spacing = 12;
orientation = "vertical";
search = {
margins = {
start = 8;
top = 8;
end = 8;
bottom = 0;
};
h_align = "top";
margins = {
start = 3;
top = 3;
end = 3;
bottom = 3;
};
};
scroll = {
overlay_scrolling = true;
list = {
margins = {
bottom = 8;
top = 4;
start = 8;
end = 8;
bottom = 3;
top = 0;
start = 3;
end = 3;
};
item = {
icon.theme = "${config.gtk.iconTheme.name}";
spacing = 4;
spacing = 3;
activation_label = {
x_align = 0.5;
y_align = 0.5;
@ -230,20 +228,19 @@
}
#window {
background: none;
background: @base00;
color: @base05;
border-radius: 12px;
border: 1px solid @base0D;
}
#box {
border-radius: 20px;
border-width: 4px;
border-color: @base0D;
background: @base00;
}
#search {
background: @base01;
border-radius: 12px 12px 6px 6px;
border-radius: 9px;
padding: 8px;
}
@ -252,12 +249,12 @@
#typeahead {
background: none;
box-shadow: none;
border-radius: 12px;
border-radius: 6px;
}
#input > *:first-child,
#typeahead > *:first-child {
margin-right: 12px;
margin-right: 3px;
border-radius: 0px;
}
@ -270,8 +267,8 @@
}
#list {
padding: 8px;
border-radius: 6px 6px 12px 12px;
padding: 3px;
border-radius: 9px;
background: @base01;
}
@ -282,7 +279,7 @@
child:selected,
child:hover {
box-shadow: none;
border-radius: 8px;
border-radius: 6px;
background: @base02;
}

View File

@ -1,329 +1,537 @@
{
colors,
config,
getExe,
ifLaptop,
lib,
osConfig,
pkgs,
launcher,
...
}: {
}: let
inherit (config.lib.stylix) colors;
ifLaptop = lib.mkIf (osConfig.networking.hostName != "dunamis");
in {
enable = true;
systemd = {
enable = true;
target = "graphical-session.target";
};
settings = {
bar-0 = {
# layer = "top";
position = "bottom";
height = 24;
spacing = 6;
margin-left = 33 + 3;
margin-right = 33 + 3;
margin-bottom = 3;
reload_style_on_change = true;
modules-left = [
"niri/language"
"niri/workspaces"
"wlr/taskbar"
settings.bottom = {
position = "bottom";
height = 33;
spacing = 0;
# margin-left = 36 + 3;
# margin-right = 36 + 3;
# margin-bottom = 3;
modules-left = [
"custom/launcher"
"wlr/taskbar"
# "privacy"
];
modules-right = [
"niri/workspaces"
"niri/language"
];
"niri/workspaces" = {
format = "{index}";
};
"niri/language" = {
format = "{}";
format-en = "🇺🇸";
format-uk = "🇺🇦";
};
"group/laptop" = {
orientation = "inherit";
modules = [
"backlight"
"battery"
"power-profiles-daemon"
];
modules-center = ["clock"];
modules-right = [
(ifLaptop "group/laptop")
"wireplumber"
"tray"
"privacy"
(ifLaptop "power-profiles-daemon")
"idle_inhibitor"
"custom/notification"
};
backlight = {
format = "{percent}% {icon}";
format-icons = [
"󰃚"
"󰃛"
"󰃜"
"󰃝"
"󰃞"
"󰃟"
"󰃠"
];
"niri/workspaces" = {
format = "{index}";
format-icons = {
"1" = "";
"2" = "";
"3" = "";
"4" = "";
"5" = "";
"6" = "";
"7" = "";
"8" = "";
"9" = "";
"10" = "";
general = "󰘧";
web = "󰖟";
chat = "󰻞";
code = "󰅩";
uni = "󱆀";
games = "󰺶";
system = "󰢻";
media = "󱜐";
tray = "󱊖";
};
};
"niri/language" = {
format = "{}";
format-en = "🇺🇸";
format-uk = "🇺🇦";
};
"custom/separator" = {
format = "󰝠";
interval = "once";
tooltip = false;
};
"group/laptop" = {
orientation = "inherit";
modules = [
"battery"
"backlight"
];
};
"backlight" = {
format = "{icon} {percent}%";
format-icons = [
"󰃚"
"󰃛"
"󰃜"
"󰃝"
"󰃞"
"󰃟"
"󰃠"
];
};
"idle_inhibitor" = {
format = "{icon}";
format-icons = {
activated = "󰅶";
deactivated = "󰾪";
};
};
"tray" = {
icon-size = 20;
spacing = 6;
};
"clock" = {
interval = 1;
format = "{:%H:%M:%S}";
tooltip-format = "{:%d.%m.%Y}";
};
battery = {
states = {
good = 95;
warning = 30;
critical = 15;
};
format = "{icon} {capacity}%";
format-full = "󱟢 {capacity}%";
format-charging = "󰂄 {capacity}%";
format-plugged = "󰚥 {capacity}%";
format-alt = "{icon} {time}";
format-icons = ["󰁺" "󰁻" "󰁼" "󰁽" "󰁾" "󰁿" "󰂀" "󰂁" "󰂂" "󰁹"];
};
mpris = {
format = "{player_icon} {dynamic}";
format-paused = "{status_icon} <i>{dynamic}</i>";
playing-len = 30;
playing-paused = 30;
player-icons = {
default = "";
mpv = "🎵";
};
status-icons = {paused = "";};
};
"upower" = {
icon-size = 16;
format = "{percentage}";
hide-if-empty = true;
tooltip = true;
tooltip-spacing = 20;
};
"power-profiles-daemon" = {
format = "{icon}";
tooltip-format = "Power profile: {profile}\nDriver: {driver}";
tooltip = true;
format-icons = {
default = "󱡮";
performance = "󱡮";
balanced = "";
power-saver = "";
};
};
"wireplumber" = {
scroll-step = 3;
format = "{icon} {volume}%";
format-muted = "󰖁";
format-icons = ["󰕿" "󰖀" "󰕾"];
on-click = getExe pkgs.pwvucontrol;
on-click-right = "wpctl set-mute @DEFAULT_SINK@ toggle";
};
"custom/notification" = {
tooltip = false;
format = "{icon}";
format-icons = {
notification = "󱅫";
none = "󰂚";
dnd-notification = "󰂛";
dnd-none = "󰂛";
};
return-type = "json";
exec-if = "which swaync-client";
exec = "swaync-client -swb";
on-click = "swaync-client -t -sw";
on-click-right = "swaync-client -d -sw";
escape = true;
};
"privacy" = {
icon-spacing = 2;
icon-size = 16;
transition-duration = 250;
screenshare = {
type = "screenshare";
tooltip = true;
tooltip-icon-size = 24;
};
audio-in = {
type = "audio-in";
tooltip = true;
tooltip-icon-size = 24;
};
};
"wlr/taskbar" = {
format = "{icon}";
icon-size = 20;
icon-theme = "${config.dconf.settings."org/gnome/desktop/interface".icon-theme}";
tooltip-format = "{title}";
on-click = "activate";
};
idle_inhibitor = {
format = "{icon}";
format-icons = {
activated = "󰅶";
deactivated = "󰾪";
};
};
tray = {
icon-size = 16;
spacing = 6;
};
clock = {
interval = 1;
format = "{:%R}";
tooltip = true;
tooltip-format = "{:%B %d, %A}";
};
battery = {
states = {
good = 95;
warning = 30;
critical = 15;
};
format = "{capacity}% {icon}";
format-full = "{capacity}% 󱟢";
format-charging = "{capacity}% 󰂄";
format-plugged = "{capacity}% 󰚥";
format-alt = "{icon} {time}";
format-icons = ["󰁺" "󰁻" "󰁼" "󰁽" "󰁾" "󰁿" "󰂀" "󰂁" "󰂂" "󰁹"];
};
memory = {
format = "{used:0.1f}G ";
tooltip-format = ''
RAM: {used:0.1f}G/{total:0.1f}G ({percentage}%)
Swap: {swapUsed:0.1f}G/{swapTotal:0.1f}G ({swapPercentage}%)'';
};
network = {
format = "{bandwidthDownBits} 󰇚 | {bandwidthUpBits} 󰕒";
interval = 3;
tooltip = false;
};
cpu = {
format = "{usage}% 󰍛";
interval = 3;
};
upower = {
icon-size = 16;
format = "{percentage}";
hide-if-empty = true;
tooltip = true;
tooltip-spacing = 20;
};
power-profiles-daemon = {
format = "{icon}";
tooltip-format = "Power profile: {profile}\nDriver: {driver}";
tooltip = true;
format-icons = {
default = "󱡮";
performance = "󱡮";
balanced = "";
power-saver = "";
};
};
wireplumber = {
scroll-step = 3;
format = "{volume}% {icon}";
format-muted = "󰖁";
format-icons = ["󰕿" "󰖀" "󰕾"];
on-click = lib.getExe pkgs.pwvucontrol;
on-click-right = "wpctl set-mute @DEFAULT_SINK@ toggle";
};
"custom/launcher" = {
format = "";
on-click = launcher;
tooltip = false;
};
"custom/notification" = {
tooltip = false;
format = "{icon}";
format-icons = {
notification = "󱅫";
none = "󰂚";
dnd-notification = "󰂛";
dnd-none = "󰂛";
};
return-type = "json";
exec-if = "which swaync-client";
exec = "swaync-client -swb";
on-click = "swaync-client -t -sw";
on-click-right = "swaync-client -d -sw";
escape = true;
};
"privacy" = {
icon-spacing = 0;
icon-size = 16;
transition-duration = 250;
screenshare = {
type = "screenshare";
tooltip = true;
tooltip-icon-size = 24;
};
audio-in = {
type = "audio-in";
tooltip = true;
tooltip-icon-size = 24;
};
};
"wlr/taskbar" = {
format = "{icon} {name}";
icon-size = 16;
icon-theme = "${config.dconf.settings."org/gnome/desktop/interface".icon-theme}";
tooltip-format = "{title}";
on-click = "activate";
};
};
style = ''
@define-color base00 #${colors.base00};
@define-color base01 #${colors.base01};
@define-color base02 #${colors.base02};
@define-color base03 #${colors.base03};
@define-color base04 #${colors.base04};
@define-color base05 #${colors.base05};
@define-color base06 #${colors.base06};
@define-color base07 #${colors.base07};
@define-color base08 #${colors.base08};
@define-color base09 #${colors.base09};
@define-color base0A #${colors.base0A};
@define-color base0B #${colors.base0B};
@define-color base0C #${colors.base0C};
@define-color base0D #${colors.base0D};
@define-color base0E #${colors.base0E};
@define-color base0F #${colors.base0F};
* {
font-family: ${config.stylix.fonts.sansSerif.name}, FontAwesome;
settings.top = {
position = "top";
height = 33;
spacing = 0;
# margin-left = 36 + 3;
# margin-right = 36 + 3;
# margin-top = 3;
modules-left = [
"custom/notification"
"tray"
];
modules-center = ["clock"];
modules-right = [
"privacy"
"network"
"cpu"
"memory"
"wireplumber"
(ifLaptop "group/laptop")
# "tray"
"idle_inhibitor"
];
"niri/workspaces" = {
format = "{index}";
};
"niri/language" = {
format = "{}";
format-en = "🇺🇸";
format-uk = "🇺🇦";
};
"group/laptop" = {
orientation = "inherit";
modules = [
"backlight"
"battery"
"power-profiles-daemon"
];
};
backlight = {
format = "{percent}% {icon}";
format-icons = [
"󰃚"
"󰃛"
"󰃜"
"󰃝"
"󰃞"
"󰃟"
"󰃠"
];
};
idle_inhibitor = {
format = "{icon}";
format-icons = {
activated = "󰅶";
deactivated = "󰾪";
};
};
tray = {
icon-size = 16;
spacing = 6;
};
clock = {
interval = 1;
format = "{:%R}";
tooltip = true;
tooltip-format = "{:%B %d, %A}";
};
battery = {
states = {
good = 95;
warning = 30;
critical = 15;
};
format = "{capacity}% {icon}";
format-full = "{capacity}% 󱟢";
format-charging = "{capacity}% 󰂄";
format-plugged = "{capacity}% 󰚥";
format-alt = "{icon} {time}";
format-icons = ["󰁺" "󰁻" "󰁼" "󰁽" "󰁾" "󰁿" "󰂀" "󰂁" "󰂂" "󰁹"];
};
memory = {
format = "{used:0.1f}G ";
tooltip-format = ''
RAM: {used:0.1f}G/{total:0.1f}G ({percentage}%)
Swap: {swapUsed:0.1f}G/{swapTotal:0.1f}G ({swapPercentage}%)'';
};
network = {
format = "{bandwidthDownBits} 󰇚 | {bandwidthUpBits} 󰕒";
interval = 3;
tooltip = false;
};
cpu = {
format = "{usage}% 󰍛";
interval = 3;
};
upower = {
icon-size = 16;
format = "{percentage}";
hide-if-empty = true;
tooltip = true;
tooltip-spacing = 20;
};
power-profiles-daemon = {
format = "{icon}";
tooltip-format = "Power profile: {profile}\nDriver: {driver}";
tooltip = true;
format-icons = {
default = "󱡮";
performance = "󱡮";
balanced = "";
power-saver = "";
};
};
wireplumber = {
scroll-step = 3;
format = "{volume}% {icon}";
format-muted = "󰖁";
format-icons = ["󰕿" "󰖀" "󰕾"];
on-click = lib.getExe pkgs.pwvucontrol;
on-click-right = "wpctl set-mute @DEFAULT_SINK@ toggle";
};
"custom/launcher" = {
format = "";
on-click = launcher;
tooltip = false;
};
"custom/notification" = {
tooltip = false;
format = "{icon}";
format-icons = {
notification = "󱅫";
none = "󰂚";
dnd-notification = "󰂛";
dnd-none = "󰂛";
};
return-type = "json";
exec-if = "which swaync-client";
exec = "swaync-client -swb";
on-click = "swaync-client -t -sw";
on-click-right = "swaync-client -d -sw";
escape = true;
};
"privacy" = {
icon-spacing = 0;
icon-size = 16;
transition-duration = 250;
screenshare = {
type = "screenshare";
tooltip = true;
tooltip-icon-size = 24;
};
audio-in = {
type = "audio-in";
tooltip = true;
tooltip-icon-size = 24;
};
};
"wlr/taskbar" = {
format = "{icon} {name}";
icon-size = 18;
icon-theme = "${config.dconf.settings."org/gnome/desktop/interface".icon-theme}";
tooltip-format = "{title}";
on-click = "activate";
};
};
# TODO: figure out magic waybar css styling (does it pick up `~/.config/gtk-3.0/gtk.css` ?)
style =
# css
''
@define-color base00 #${colors.base00}; @define-color base08 #${colors.base08};
@define-color base01 #${colors.base01}; @define-color base09 #${colors.base09};
@define-color base02 #${colors.base02}; @define-color base0A #${colors.base0A};
@define-color base03 #${colors.base03}; @define-color base0B #${colors.base0B};
@define-color base04 #${colors.base04}; @define-color base0C #${colors.base0C};
@define-color base05 #${colors.base05}; @define-color base0D #${colors.base0D};
@define-color base06 #${colors.base06}; @define-color base0E #${colors.base0E};
@define-color base07 #${colors.base07}; @define-color base0F #${colors.base0F};
* {
/* all: unset; */
font-family: Symbols Nerd Font, FontAwesome, ${config.stylix.fonts.sansSerif.name};
font-weight: 500;
font-size: 100%;
}
window#waybar {
background-color: transparent;
color: @base05;
}
.modules-center {
background-color: transparent;
}
.mpris.stopped {
background-color: transparent;
}
.modules-left,
.modules-center,
.modules-right {
/* border-bottom-left-radius: 12px;
border-bottom-right-radius: 12px;
border-top-left-radius: 0px;
border-top-right-radius: 0px; */
font-size: 16px;
}
.modules-left, .modules-center, .modules-right, window#waybar {
background-color: @base00;
color: @base05;
border-radius: 12px;
border: 3px solid @base0D;
}
window#waybar {
border-radius: 0;
}
/* for leftmost modules */
.modules-left, .modules-center, .modules-right {
padding-left: 3px;
background-color: @base00;
color: @base05;
padding: 0 0.4em;
}
tooltip {
}
window#bottom.modules-center {
background-color: transparent
}
tooltip {
background: @base01;
border: 1px solid @base0E;
}
tooltip label {
color: @base05;
}
button {
box-shadow: inset 0 -3px transparent;
border: 1px solid @base0D;
border-radius: 16px;
}
button:hover {
padding: 2em;
}
tooltip label {
color: @base05;
}
button {
box-shadow: inset 0 -3px transparent;
border-radius: 6px;
}
button:hover {
background: inherit;
box-shadow: inset 0 -3px transparent;
}
#mode {
background-color: rgba(0, 0, 0, 0.2);
box-shadow: inset 0 -3px @base05;
}
#battery,
#backlight,
/* #workspaces,
#taskbar,
#privacy, */
#taskbar button,
#language,
#clock,
#battery,
#backlight,
#wireplumber,
#workspaces button,
#custom-notification,
#idle_inhibitor,
#power-profiles-daemon,
#privacy-item,
#custom-separator {
padding: 0 0.3em;
}
#tray button {
padding: 0 0.3em;
margin: 0 0.2em;
}
#workspaces button.active {
color: @base0D;
}
#taskbar button:hover {
box-shadow: transparent;
}
#taskbar.empty,
window#empty {
}
#backlight,
#battery,
#clock,
#cpu,
#custom-launcher,
#custom-notification,
#idle_inhibitor,
#language,
#memory,
#network,
#power-profiles-daemon,
#privacy,
#privacy-item,
#taskbar button,
#taskbar,
#tray button,
#tray,
#wireplumber,
#workspaces button,
#workspaces {
all: unset;
border-radius: 9px;
background-color: @base01;
margin: 3px 3px 3px 0;
padding: 0 0.42em;
min-width: 1em;
}
#backlight,
#battery,
#custom-launcher,
#custom-notification,
#idle_inhibitor,
#power-profiles-daemon,
#wireplumber {
padding: 0 0.5em;
}
#custom-notification,
#power-profiles-daemon {
min-width: 1em;
}
#privacy,
#taskbar,
#workspaces {
padding: 0;
}
#workspaces {
padding-left: 3px;
}
#privacy-item {
padding: 0 0.3em;
}
#taskbar button {
padding-left: 0;
}
#taskbar button,
#tray button,
#workspaces button {
border-radius: 6px;
min-width: 0.8em;
}
#battery.critical:not(.charging) {
background-color: @base09;
color: @base00;
}
#power-profiles-daemon.performance {
background-color: @base0D;
color: @base00;
}
#power-profiles-daemon.power-saver {
background-color: @base0A;
color: @base00;
}
#privacy-item.audio-in {
background-color: @base0E;
color: @base00;
margin: 3px;
}
#privacy-item.screenshare {
background-color: @base0C;
color: @base00;
margin: 3px 0 3px 3px;
}
#taskbar button,
#tray button {
padding: 0 0.4em;
margin: 3px;
}
#workspaces button.active,
#taskbar button.active {
background-color: @base02;
}
#workspaces button:hover,
#workspaces button.active:hover,
#taskbar button.active:hover,
#taskbar button:hover {
background-color: @base0D;
color: @base00;
}
#taskbar.empty {
background-color: transparent;
}
#battery.critical:not(.charging) {
color: @base09;
animation-name: blink;
animation-duration: 0.5s;
animation-timing-function: steps(12);
animation-iteration-count: infinite;
animation-direction: alternate;
}
#power-profiles-daemon.performance {
color: @base0D;
}
#power-profiles-daemon.balanced {
color: @base0B;
}
#power-profiles-daemon.power-saver {
color: @base0A;
}
label:focus {
background-color: #000000;
}
#tray > .passive {
-gtk-icon-effect: dim;
}
#tray > .needs-attention {
}
#tray > .needs-attention {
-gtk-icon-effect: highlight;
background-color: @base08;
}
#privacy-item.screenshare {
color: @base0C;
}
#privacy-item.audio-in {
color: @base0E;
}
'';
}
#tray > .passive {
-gtk-icon-effect: dim;
}
/* #workspaces button.active {
color: @base00;
background-color: @base0D;
} */
label:focus {
background-color: #000000;
}
'';
}

View File

@ -1,24 +1,26 @@
{
getExe,
perSystem,
lib,
osConfig,
pkgs,
lockscreen,
...
}: {
swaync = import ./swaync;
}:
lib.attrsets.recursiveUpdate {
blueman-applet.enable = osConfig.services.blueman.enable;
copyq.enable = true;
gammastep.enable = true;
gnome-keyring.enable = true;
hypridle.enable = true;
kanshi = import ./kanshi;
network-manager-applet.enable = true;
playerctld.enable = true;
swaync = import ./swaync;
swayosd.enable = true;
udiskie.enable = true;
wpaperd.enable = true;
copyq = {
enable = true;
package = perSystem.nixpkgs-stable.copyq;
};
gnome-keyring = {
enable = true;
components = ["secrets"];
};
}
{
gammastep = {
enable = true;
provider = "manual";
latitude = 49.6;
longitude = 36.1;
@ -28,34 +30,28 @@
night = 3000;
};
};
swayosd = {
enable = true;
topMargin = 0.8;
gnome-keyring.components = ["secrets"];
hypridle.settings = {
general = {
before_sleep_cmd = "loginctl lock-session";
lock_cmd = "pidof ${lockscreen} || ${lockscreen}";
# unlock_cmd = "loginctl unlock-session";
};
listener = [
{
timeout = 600;
on-timeout = "pidof ${lockscreen} || ${lockscreen}";
}
{
timeout = 601;
on-timeout = lib.getExe pkgs.niri + " msg action power-off-monitors";
}
];
};
swayosd.topMargin = 0.8;
udiskie = {
enable = true;
automount = false;
notify = true;
tray = "auto";
};
hypridle = {
enable = true;
settings = {
general = {
before_sleep_cmd = "loginctl lock-session";
lock_cmd = "pidof ${lockscreen} || ${lockscreen}";
# unlock_cmd = "loginctl unlock-session";
};
listener = [
{
timeout = 600;
on-timeout = "pidof ${lockscreen} || ${lockscreen}";
}
{
timeout = 601;
on-timeout = getExe pkgs.niri + " msg action power-off-monitors";
}
];
};
};
}

View File

@ -0,0 +1,113 @@
{
enable = true;
settings = let
main = "Philips Consumer Electronics Company 27M2N5500 UK02418033254";
second = "Samsung Electric Company S24R65x H4TMA03291";
builtin = {
eldrid = "Chimei Innolux Corporation 0x1406 Unknown";
sarien = "LG Display 0x068B Unknown";
# morphius =;
};
in [
{
output = {
criteria = main;
position = "0,0";
scale = 4.0 / 3.0;
adaptiveSync = true;
};
}
{
output = {
criteria = second;
mode = "1920x1080@74.973";
adaptiveSync = true;
};
}
{
output = {
criteria = builtin.eldrid;
position = "0,0";
scale = 1.2;
# adaptiveSync = true;
};
}
{
output = {
criteria = builtin.sarien;
position = "0,0";
scale = 1.25;
# adaptiveSync = true;
};
}
{
profile = {
name = "dunamis";
outputs = [
{criteria = main;}
{
criteria = second;
position = "1920,180";
scale = 1.2;
# transform = "90";
adaptiveSync = true;
}
];
};
}
{
profile = {
name = "eldrid-docked";
outputs = [
{
criteria = main;
position = "0,0";
scale = 4.0 / 3.0;
}
{
criteria = builtin.eldrid;
position = "1920,0";
}
];
};
}
{
profile = {
name = "eldrid-undocked";
outputs = [
{
criteria = builtin.eldrid;
position = "0,0";
}
];
};
}
{
profile = {
name = "sarien-docked";
outputs = [
{
criteria = main;
position = "0,0";
scale = 4.0 / 3.0;
}
{
criteria = builtin.sarien;
position = "1920,0";
}
];
};
}
{
profile = {
name = "sarien-undocked";
outputs = [
{
criteria = builtin.sarien;
position = "0,0";
}
];
};
}
];
}

View File

@ -17,17 +17,17 @@
control-center-layer = "overlay";
# Notification settings
positionX = "right";
positionX = "left";
positionY = "top";
notification-2fa-action = true;
notification-inline-replies = false;
notification-icon-size = 32;
notification-icon-size = 48;
notification-body-image-height = 100;
notification-body-image-width = 200;
notification-window-width = 400;
# Control center settings
control-center-positionX = "right";
control-center-positionX = "left";
control-center-positionY = "top";
control-center-width = 500;
control-center-exclusive-zone = true;
@ -59,8 +59,12 @@
};
};
};
# TODO: disable stylix, redo everything
style = ''
/*** Global ***/
* {
all: unset;
}
progress,
progressbar,
trough {
@ -70,20 +74,19 @@
.app-icon,
.image {
-gtk-icon-effect: none;
padding-right: 0.5rem;
}
.notification-action {
border-radius: 12px;
margin: 0.5rem;
border-radius: 9px;
margin: 3px;
}
.close-button {
margin: 24px;
padding: 0.2rem;
border-radius: 16px;
margin: 12px;
border-radius: 6px;
}
/*** Notifications ***/
.notification-group.collapsed
.notification-row:not(:last-child)
.notification-action,
@ -103,21 +106,21 @@
.notification.normal,
.notification.critical,
.control-center {
margin: 16px;
border-radius: 7px;
border-radius: 12px;
margin: 6px;
}
.floating-notifications,
.notification-content {
border-radius: 7px;
padding: 0.5rem;
margin: 3px;
border-radius: 9px;
}
.control-center-list {
background: transparent;
}
/*** Widgets ***/
/* Title widget */
.widget-title {
margin: 0.5rem;
}
@ -127,11 +130,10 @@
}
.widget-title > button {
border-radius: 16px;
border-radius: 9px;
padding: 0.5rem;
}
/* DND Widget */
.widget-dnd {
margin: 0.5rem;
}
@ -141,23 +143,23 @@
}
.widget-dnd > switch {
border-radius: 16px;
border-radius: 9px;
}
.widget-dnd > switch slider {
border-radius: 16px;
padding: 0.25rem;
margin: 3px;
border-radius: 6px;
padding: 0px;
}
/* Mpris widget */
.widget-mpris .widget-mpris-player {
border-radius: 16px;
border-radius: 12px;
margin: 0.5rem;
padding: 0.5rem;
}
.widget-mpris .widget-mpris-player .widget-mpris-album-art {
border-radius: 16px;
border-radius: 9px;
}
.widget-mpris .widget-mpris-player .widget-mpris-title {
@ -169,9 +171,8 @@
}
.widget-mpris .widget-mpris-player > box > button {
border: 1px solid transparent;
border-radius: 16px;
padding: 0.25rem;
border-radius: 6px;
padding: 3px;
}
'';
}

View File

@ -62,40 +62,57 @@ in {
};
languages = {
language-server = {
clangd.command = "${pkgs.clang-tools}/bin/clangd";
markdown-oxide.command = getExe pkgs.markdown-oxide;
# nil.command = getExe pkgs.nil;
nixd.command = getExe pkgs.nixd;
# pyright.command = getExe pkgs.pyright;
# pyright.args = ["-"];
ruff.command = getExe pkgs.ruff;
ruff.args = ["server"];
# markdown-oxide.command = getExe pkgs.markdown-oxide;
# nixd.command = getExe pkgs.nixd;
# pyright = {
# command = getExe pkgs.pyright;
# args = ["-"];
# };
# rust-analyzer.command = getExe pkgs.rust-analyzer;
# texlab.command = getExe pkgs.texlab;
bash-language-server = {
command = getExe pkgs.bash-language-server;
environment = {
"SHELLCHECK_PATH" = getExe pkgs.shellcheck;
"SHFMT_PATH" = getExe pkgs.shfmt;
};
};
clangd.command = "${pkgs.clang-tools}/bin/clangd";
fsac = {
command = getExe pkgs.fsautocomplete;
config = {
# editor.formatOnSave = true;
AutomaticWorkspaceInit = true;
FSharp.ExternalAutocomplete = true;
FSharp.linting.fsharplint.enabled = true;
FSharp.linting.fsharplint.configFile = "fsharplint.json";
FSharp.formatting.fantomas.enabled = true;
};
};
nil = {
command = getExe pkgs.nil;
config = {
formatting.command = [(getExe pkgs.alejandra)];
};
};
ruff = {
command = getExe pkgs.ruff;
args = ["server"];
};
tinymist.command = getExe pkgs.tinymist;
fsac.command = getExe pkgs.fsautocomplete;
fsac.config = {
# editor.formatOnSave = true;
AutomaticWorkspaceInit = true;
FSharp.ExternalAutocomplete = true;
FSharp.linting.fsharplint.enabled = true;
FSharp.linting.fsharplint.configFile = "fsharplint.json";
FSharp.formatting.fantomas.enabled = true;
vscode-json-language-server.command = getExe pkgs.nodePackages.vscode-json-languageserver;
yaml-language-server.command = getExe pkgs.yaml-language-server;
zk = {
command = getExe pkgs.zk;
args = ["lsp"];
};
};
language = [
{
name = "nix";
auto-format = true;
formatter.command = getExe pkgs.alejandra;
language-servers = ["nixd"];
language-servers = ["nil"];
}
# {
# name = "latex";
# auto-format = true;
# formatter.command = "${pkgs.texlivePackages.latexindent}/bin/latexindent";
# language-servers = ["texlab"];
# }
{
name = "typst";
auto-format = true;
@ -105,23 +122,21 @@ in {
{
name = "markdown";
# auto-format = true;
# formatter.command = "${pkgs.comrak}/bin/comrak";
language-servers = ["markdown-oxide"];
language-servers = ["zk" "markdown-oxide"];
}
{
name = "c";
auto-format = true;
formatter.command = "${pkgs.clang-tools}/bin/clang-format";
# formatter.command = "${pkgs.clang-tools}/bin/clang-format";
}
{
name = "cpp";
auto-format = true;
formatter.command = "${pkgs.clang-tools}/bin/clang-format";
# formatter.command = "${pkgs.clang-tools}/bin/clang-format";
}
{
name = "fsharp";
auto-format = true;
# formatter.command = getExe pkgs.fantomas;
language-servers = ["fsac"];
scope = "source.fs";
roots = ["fsproj" "sln" ".git"];
@ -132,6 +147,25 @@ in {
# language-servers = ["rust-analyzer"];
# formatter.command = getExe pkgs.rustfmt;
# }
{
name = "json";
auto-format = true;
formatter.command = getExe pkgs.jq;
language-servers = ["vscode-json-language-server"];
}
{
name = "yaml";
auto-format = true;
formatter.command = getExe pkgs.yamlfmt;
formatter.args = ["-"];
language-servers = ["yaml-language-server"];
}
{
name = "bash";
auto-format = true;
# formatter.command = getExe pkgs.shfmt;
# formatter.args = ["-"];
}
{
name = "python";
auto-format = true;

View File

@ -15,44 +15,49 @@ in {
programs.zed-editor = {
enable = true;
extensions = [
"nix"
"latex"
"typst"
"bash"
"fsharp"
"justfile"
"nix"
"typst"
];
userSettings = {
vim_mode = true;
ui_font_size = mkForce 16;
buffer_font_size = mkForce 16;
features = {inline_completion_provider = "none";};
# features = {inline_completion_provider = "none";};
auto_update = false;
languages = {
"FSharp" = {
language-servers = [
"fsautocomplete"
];
};
"Nix" = {
language-servers = [
"!nil"
"nixd"
"nil"
];
formatter = {
external.command = getExe pkgs.alejandra;
};
};
"Rust" = {
formatter = {
external = {
command = getExe pkgs.rustfmt;
arguments = ["--edition" "2021"];
};
};
# formatter = {
# external.command = getExe pkgs.alejandra;
# };
};
# "Rust" = {
# formatter = {
# external = {
# command = getExe pkgs.rustfmt;
# arguments = ["--edition" "2021"];
# };
# };
# };
"typst" = {
language-servers = ["tinymist"];
format_on_save = "on";
formatter = {
external = {
command = getExe pkgs.typstyle;
arguments = ["-i" "{buffer_path}"];
};
};
# formatter = {
# external = {
# command = getExe pkgs.typstyle;
# arguments = ["-i" "{buffer_path}"];
# };
# };
};
"Python" = {
format_on_save = "on";
@ -67,50 +72,81 @@ in {
};
};
lsp = {
bash-language-server = {
binary = {
path = getExe pkgs.bash-language-server;
env = {
"SHELLCHECK_PATH" = getExe pkgs.shellcheck;
"SHFMT_PATH" = getExe pkgs.shfmt;
};
};
};
fsautocomplete = {
binary = {
path = getExe pkgs.fsautocomplete;
};
settings = {
AutomaticWorkspaceInit = true;
FSharp.ExternalAutocomplete = true;
FSharp.linting.fsharplint.enabled = true;
FSharp.linting.fsharplint.configFile = "fsharplint.json";
FSharp.formatting.fantomas.enabled = true;
};
};
clangd = {
binary = {
arguments = [];
path = "${pkgs.clang-tools}/bin/clangd";
};
};
rust-analyzer = {
binary = {
arguments = [];
path = getExe pkgs.rust-analyzer;
};
};
# rust-analyzer = {
# binary = {
# arguments = [];
# path = getExe pkgs.rust-analyzer;
# };
# };
ruff = {
binary = {
arguments = [];
path = getExe pkgs.ruff;
};
};
nixd = {
binary = {
arguments = [];
path = getExe pkgs.nixd;
};
initialization_options.formatting.command = [(getExe pkgs.alejandra)];
};
# nixd = {
# binary = {
# arguments = [];
# path = getExe pkgs.nixd;
# };
# initialization_options.formatting.command = [(getExe pkgs.alejandra)];
# };
nil = {
binary = {
arguments = [];
path = getExe pkgs.nil;
};
initialization_options.formatting.command = [(getExe pkgs.alejandra)];
};
texlab = {
binary = {
arguments = [];
path = getExe pkgs.texlab;
};
settings.formatting.command = [(getExe pkgs.alejandra)];
};
# texlab = {
# binary = {
# arguments = [];
# path = getExe pkgs.texlab;
# };
# };
tinymist = {
binary = {
arguments = [];
path = getExe pkgs.tinymist;
};
};
vscode-json-language-server = {
binary = {
path = getExe pkgs.nodePackages.vscode-json-languageserver;
};
};
yaml-language-server = {
binary = {
path = getExe pkgs.yaml-language-server;
};
};
};
telemetry = {
diagnostics = false;

View File

@ -23,7 +23,7 @@ in {
"dunamis".id = "72VRZFX-65SZUKP-2XL2WLG-75MMKLG-PQLDEZN-G5OI5U7-RLF4OHS-LNCXEQX";
"eldrid".id = "VTSBNN6-W6UUT66-NDEQBNJ-DJJM5YE-PWU63IW-Y6CTJNN-Q3RHEQB-POBLCQH";
"legion".id = "FDS73OW-BHRWDBO-AOFQX4D-FSCABP2-HN4575T-CSIO6TX-5CPJQLQ-L25TYQJ";
"phone".id = "XBZLA7Y-YOBZHLO-MSTRAGS-6SN5MEZ-FDKR76F-DIX2BKE-FMDNUYR-TMD6UAQ";
"morphius".id = "VATWBD7-ZTMGGCT-XH6YDYD-5OMPILK-U43UYYW-OGC4BLB-IQGH35R-4X5HZQH";
"sarien".id = "LUVZGFV-OV6FV5E-SDROWHZ-4BR5PFB-VP5Y326-AFEP6NL-ORUMJQQ-SSYCQQO";
};
folders = {
@ -33,7 +33,7 @@ in {
"dunamis"
"eldrid"
"legion"
"phone"
"morphius"
"sarien"
];
};
@ -42,6 +42,7 @@ in {
devices = [
"dunamis"
"eldrid"
"morphius"
"legion"
"sarien"
];

View File

@ -1,6 +1,7 @@
{
config,
lib,
perSystem,
...
}:
with lib; let
@ -12,6 +13,7 @@ in {
config = mkIf cfg.enable {
programs.ghostty = {
enable = true;
package = perSystem.ghostty.ghostty;
settings = {
gtk-single-instance = true;
window-decoration = "client";

View File

@ -1,99 +0,0 @@
{
config,
lib,
pkgs,
...
}: let
inherit (lib) mkIf mkDefault;
in {
security = {
sudo.enable = false;
# doas.enable = true;
sudo-rs = {
enable = true;
execWheelOnly = true;
};
polkit.enable = true;
polkit.extraConfig = ''
polkit.addRule(function(action, subject) {
if (
subject.isInGroup("users")
&& (
action.id == "org.freedesktop.login1.reboot" ||
action.id == "org.freedesktop.login1.reboot-multiple-sessions" ||
action.id == "org.freedesktop.login1.power-off" ||
action.id == "org.freedesktop.login1.power-off-multiple-sessions"
)
)
{
return polkit.Result.YES;
}
});
'';
apparmor.enable = mkDefault true;
};
environment.systemPackages = with pkgs; [
(mkIf config.security.doas.enable doas-sudo-shim) # if doas install doas sudo shim
];
services.dbus = {
apparmor = "enabled";
implementation = "broker";
};
services.ntpd-rs = {
enable = true;
#settings = {
# server = {
# require-nts = true;
# };
#};
};
boot.kernelParams = [
"amd_iommu=force_isolation"
"debugfs=off"
"efi=disable_early_pci_dma"
"gather_data_sampling=force"
"intel_iommu=on"
"iommu.passthrough=0"
"iommu.strict=1"
"iommu=force"
"page_alloc.shuffle=1"
"vsyscall=none"
# "ia32_emulation=0"
# "lockdown=confidentiality"
# "module.sig_enforce=1"
];
boot.blacklistedKernelModules = [
# Obscure network protocols
"ax25"
"netrom"
"rose"
# Old or rare or insufficiently audited filesystems
"adfs"
"affs"
"bfs"
"befs"
"cramfs"
"efs"
"erofs"
"exofs"
"freevxfs"
"f2fs"
"hfs"
"hpfs"
"jfs"
"minix"
"nilfs2"
"ntfs"
"omfs"
"qnx4"
"qnx6"
"sysv"
"ufs"
];
nix.settings.allowed-users = mkDefault ["@users"];
}

View File

@ -0,0 +1,16 @@
{config, ...}: {
imports = [
./gnome-keyring.nix
./greeter.nix
./pam-rtprio.nix
./pipewire.nix
];
fonts.fontDir.enable = true;
security = {
pam = {
services.greetd.enableGnomeKeyring = config.services.greetd.enable && config.services.gnome.gnome-keyring.enable;
};
};
services.udisks2.enable = true;
programs.dconf.enable = true;
}

View File

@ -0,0 +1,25 @@
{
lib,
pkgs,
config,
...
}: let
inherit (lib) mkEnableOption mkIf;
cfg = config.module.desktop.gnome-keyring;
in {
options = {
module.desktop.gnome-keyring.enable = mkEnableOption "enable gnome keyring";
};
config = mkIf cfg.enable {
environment.systemPackages = with pkgs; [
gcr_4
libsecret
];
programs.seahorse.enable = true;
services.gnome.gnome-keyring.enable = true;
xdg.portal.config.common = {
"org.freedesktop.impl.portal.Secret" = ["gnome-keyring"];
};
};
}

View File

@ -0,0 +1,51 @@
{
lib,
pkgs,
config,
...
}: let
inherit (lib) mkOption mkIf getExe types mkMerge;
cfg = config.module.desktop;
in {
options = {
module.desktop.displayManager = mkOption {
default = "greetd";
type = types.enum [
"cosmic"
"gdm"
"greetd"
"sddm"
];
};
};
config = mkMerge [
(mkIf (cfg.displayManager == "cosmic") {
services.displayManager.cosmic-greeter.enable = true;
})
(mkIf (cfg.displayManager == "gdm") {
services.displayManager.gdm = {
enable = true;
wayland = true;
};
})
(mkIf (cfg.displayManager == "greetd") {
programs.regreet.enable = true;
services.greetd = {
enable = true;
vt = 1;
settings = {
default_session = {
command = "${getExe pkgs.cage} -s -m last -- ${getExe pkgs.greetd.regreet}";
};
};
};
})
(mkIf (cfg.displayManager == "sddm") {
services.displayManager.sddm = {
enable = true;
wayland.enable = true;
};
})
];
}

View File

@ -0,0 +1,10 @@
{
security.pam.loginLimits = [
{
domain = "@users";
item = "rtprio";
type = "-";
value = -1;
}
];
}

View File

@ -16,17 +16,11 @@ in {
mkEnableOption "enable cosmic desktop";
};
config = mkIf cfg.enable {
environment.sessionVariables.COSMIC_DATA_CONTROL_ENABLED = 1;
module.desktop.displayManager = "cosmic";
sound.pipewire.enable = true;
services = {
desktopManager.cosmic.enable = true;
displayManager.cosmic-greeter.enable = true;
gnome.gnome-keyring.enable = true;
dbus = {
apparmor = "enabled";
implementation = "broker";
};
};
environment.sessionVariables.COSMIC_DATA_CONTROL_ENABLED = 1;
services.desktopManager.cosmic.enable = true;
systemd = {
packages = [pkgs.observatory];
services.monitord.wantedBy = ["multi-user.target"];
@ -37,10 +31,7 @@ in {
xdg-desktop-portal-cosmic
xdg-desktop-portal-gtk
];
config.cosmic = {
default = ["cosmic" "gtk"];
"org.freedesktop.impl.portal.Secret" = ["gnome-keyring"];
};
config.cosmic.default = ["cosmic" "gtk"];
};
};
}

View File

@ -1,10 +1,10 @@
{
imports = [
./common/pipewire.nix
./cosmic.nix
./gnome.nix
./hyprland.nix
./niri.nix
./plasma.nix
./common
./cosmic
./gnome
./hyprland
./niri
./plasma
];
}

View File

@ -1,29 +0,0 @@
{
config,
lib,
...
}:
with lib; let
cfg = config.desktop.gnome;
in {
options = {
desktop.gnome.enable =
mkEnableOption "enable gnome desktop";
};
config = mkIf cfg.enable {
sound.pipewire.enable = true;
services.xserver = {
enable = true;
displayManager.gdm.enable = true;
desktopManager.gnome.enable = true;
};
programs.dconf.enable = true;
programs.seahorse.enable = true;
services.gnome.gnome-keyring.enable = true;
services.udisks2.enable = true;
services.dbus = {
apparmor = "enabled";
implementation = "broker";
};
};
}

View File

@ -0,0 +1,79 @@
{
config,
pkgs,
lib,
...
}:
with lib; let
cfg = config.desktop.gnome;
in {
options = {
desktop.gnome.enable =
mkEnableOption "enable gnome desktop";
};
config = lib.mkMerge [
(mkIf cfg.enable {
module.desktop.displayManager = "gdm";
sound.pipewire.enable = true;
services.desktopManager.gnome.enable = true;
environment.gnome.excludePackages = with pkgs; [
orca
evince
# file-roller
geary
# gnome-disk-utility
# seahorse
# sushi
# sysprof
#
# gnome-shell-extensions
#
# adwaita-icon-theme
# nixos-background-info
# gnome-backgrounds
# gnome-bluetooth
# gnome-color-manager
# gnome-control-center
# gnome-shell-extensions
gnome-tour # GNOME Shell detects the .desktop file on first log-in.
gnome-user-docs
# glib # for gsettings program
# gnome-menus
# gtk3.out # for gtk-launch program
# xdg-user-dirs # Update user dirs as described in https://freedesktop.org/wiki/Software/xdg-user-dirs/
# xdg-user-dirs-gtk # Used to create the default bookmarks
#
# baobab
# epiphany
# gnome-text-editor
# gnome-calculator
# gnome-calendar
# gnome-characters
# gnome-clocks
gnome-console
gnome-contacts
# gnome-font-viewer
gnome-logs
# gnome-maps
gnome-music
gnome-system-monitor
# gnome-weather
# loupe
# nautilus
gnome-connections
# simple-scan
# snapshot
totem
yelp
# gnome-software
];
})
# workaround for crashing autologin session
(mkIf (cfg.enable && config.services.displayManager.autoLogin.enable) {
systemd.services = {
"getty@tty1".enable = false;
"autovt@tty1".enable = false;
};
})
];
}

View File

@ -1,77 +0,0 @@
{
perSystem,
config,
pkgs,
lib,
...
}:
with lib; let
cfg = config.desktop.hyprland;
in {
options = {
desktop.hyprland.enable =
mkEnableOption "enable hyprland desktop";
};
config = mkIf cfg.enable {
sound.pipewire.enable = true;
programs.hyprland = {
enable = true;
package = perSystem.hyprland.hyprland;
portalPackage = perSystem.hyprland.xdg-desktop-portal-hyprland;
};
environment.systemPackages = with pkgs; [
brightnessctl
gcr_4
];
fonts.fontDir.enable = true;
security.pam = {
services.hyprlock = {};
loginLimits = [
{
domain = "@users";
item = "rtprio";
type = "-";
value = 1;
}
];
};
services = {
gnome.gnome-keyring.enable = true;
udisks2.enable = true;
dbus = {
apparmor = "enabled";
implementation = "broker";
};
};
programs = {
dconf.enable = true;
seahorse.enable = true;
};
xdg.portal = {
enable = true;
extraPortals = [
perSystem.hyprland.xdg-desktop-portal-hyprland
pkgs.xdg-desktop-portal-gtk
];
config.common.default = [
"hyprland"
"gtk"
];
};
programs.regreet.enable = true;
services.greetd = {
enable = true;
vt = 6;
settings = {
default_session = {
command = "${pkgs.cage}/bin/cage -s -m last -- ${pkgs.greetd.regreet}/bin/regreet";
};
initial_session = {
user = "user";
command = "Hyprland";
};
};
};
};
}

View File

@ -0,0 +1,36 @@
{
perSystem,
config,
pkgs,
lib,
...
}: let
inherit (lib) mkEnableOption mkIf;
inherit (perSystem) hyprland;
cfg = config.desktop.hyprland;
in {
options = {
desktop.hyprland.enable =
mkEnableOption "enable hyprland desktop";
};
config = mkIf cfg.enable {
module.desktop.displayManager = "greetd";
module.desktop.gnome-keyring.enable = true;
sound.pipewire.enable = true;
programs.hyprland = {
enable = true;
package = hyprland.hyprland;
portalPackage = hyprland.xdg-desktop-portal-hyprland;
};
security.pam.services.hyprlock = {};
xdg.portal = {
enable = true;
extraPortals = [
hyprland.xdg-desktop-portal-hyprland
pkgs.xdg-desktop-portal-gtk
];
config.hyprland.default = ["hyprland" "gtk"];
};
};
}

View File

@ -1,72 +0,0 @@
{
config,
pkgs,
lib,
...
}: let
inherit (lib) mkIf mkEnableOption getExe;
cfg = config.desktop.niri;
in {
options = {
desktop.niri.enable =
mkEnableOption "enable niri desktop";
};
config = mkIf cfg.enable {
sound.pipewire.enable = true;
programs.niri.enable = true; # wayland compositor in rust
environment.systemPackages = with pkgs; [
brightnessctl
gcr_4
];
fonts.fontDir.enable = true;
security.pam = {
services.greetd.enableGnomeKeyring = true;
services.gtklock = {};
loginLimits = [
{
domain = "@users";
item = "rtprio";
type = "-";
value = 1;
}
];
};
services = {
gnome.gnome-keyring.enable = true;
udisks2.enable = true;
dbus = {
apparmor = "enabled";
implementation = "broker";
};
};
programs = {
dconf.enable = true;
seahorse.enable = true;
};
xdg.portal = {
enable = true;
extraPortals = with pkgs; [
xdg-desktop-portal-gnome
xdg-desktop-portal-gtk
];
config.niri = {
default = ["gnome" "gtk"];
"org.freedesktop.impl.portal.Secret" = ["gnome-keyring"];
};
};
programs.regreet.enable = true;
services.greetd = {
enable = true;
vt = 6;
settings = {
default_session = {
command = "${pkgs.cage}/bin/cage -s -m last -- ${getExe pkgs.greetd.regreet}";
};
initial_session = {
user = "user";
command = "${pkgs.niri}/bin/niri-session";
};
};
};
};
}

View File

@ -0,0 +1,45 @@
{
config,
pkgs,
lib,
...
}: let
inherit (lib) mkIf mkEnableOption;
cfg = config.desktop.niri;
in {
options = {
desktop.niri.enable =
mkEnableOption "enable niri desktop";
};
config = lib.mkMerge [
(mkIf cfg.enable {
module.desktop = {
displayManager = "greetd";
gnome-keyring.enable = true;
};
sound.pipewire.enable = true;
programs.niri.enable = true; # wayland compositor in rust
security = {
pam.services.gtklock = {};
soteria.enable = true; # polkit agent in rust
};
services = {
blueman.enable = config.hardware.bluetooth.enable;
gvfs.enable = true;
};
xdg.portal = {
enable = true;
extraPortals = with pkgs; [xdg-desktop-portal-gnome xdg-desktop-portal-gtk];
config.niri.default = ["gnome" "gtk"];
};
})
(mkIf (cfg.enable
&& config.services.displayManager.autoLogin.enable) {
services.greetd.settings.initial_session = {
command = "niri-session";
user = config.services.displayManager.autoLogin.user;
};
})
];
}

View File

@ -1,39 +0,0 @@
{
config,
pkgs,
lib,
...
}:
with lib; let
cfg = config.desktop.plasma;
in {
imports = [
./common/pipewire.nix
];
options = {
desktop.plasma = {
enable = mkEnableOption "enable plasma desktop";
# sddmEnable = mkEnableOption "enable simple display manager";
};
};
config = mkIf cfg.enable {
stylix.targets.qt.enable = mkDefault false;
environment.systemPackages = with pkgs; [gcr_4];
services = {
gnome.gnome-keyring.enable = true;
desktopManager.plasma6.enable = true;
displayManager.sddm = {
enable = true; # cfg.sddmEnable;
wayland.enable = true;
};
};
fonts.fontDir.enable = true;
xdg.portal = {
enable = true;
config.common = {
"org.freedesktop.impl.portal.Secret" = ["gnome-keyring"];
};
};
};
}

View File

@ -0,0 +1,22 @@
{
config,
pkgs,
lib,
...
}:
with lib; let
cfg = config.desktop.plasma;
in {
options = {
desktop.plasma = {
enable = mkEnableOption "enable plasma desktop";
};
};
config = mkIf cfg.enable {
module.desktop.displayManager = "sddm";
sound.pipewire.enable = true;
services.desktopManager.plasma6.enable = true;
stylix.targets.qt.enable = mkDefault false;
};
}

View File

@ -1,11 +1,21 @@
{lib, ...}: {
environment.variables = {
LESS = "-R --mouse";
{
lib,
pkgs,
...
}: {
boot.tmp.cleanOnBoot = lib.mkDefault true;
console.font = "${pkgs.spleen}/share/consolefonts/spleen-16x32.psfu";
environment = {
ldso32 = null;
memoryAllocator.provider = "mimalloc";
variables = {
LESS = "-R --mouse";
};
};
environment.ldso32 = null;
boot.tmp.cleanOnBoot = lib.mkDefault true;
networking.networkmanager.enable = true;
services.openssh = {
settings.X11Forwarding = false;
@ -24,4 +34,12 @@
"sntrup761x25519-sha512@openssh.com"
];
};
services.journald.extraConfig = ''
SystemMaxUse=1G
'';
systemd.coredump.extraConfig = ''
Storage=none
ProcessSizeMax=0
'';
}

View File

@ -1,7 +1,9 @@
{
imports = [
./common.nix
./locale.nix
./misc
./virtual
./stylix
./virt
];
}

View File

@ -3,16 +3,18 @@
lib,
...
}: let
inherit (lib) mkIf mkEnableOption;
cfg = config.locale.ukrainian;
inherit (lib) types mkOption;
in {
options = {
locale.ukrainian.enable =
mkEnableOption "enables ukrainian locale";
module.locale = mkOption {
type = types.strMatching "[a-z]{2}_[A-Z]{2}\\.UTF-8";
default = "en_US.UTF-8";
description = "set locale";
};
};
config = mkIf cfg.enable {
config = {
i18n = let
locale = "uk_UA.UTF-8";
inherit (config.module) locale;
in {
defaultLocale = locale;
extraLocaleSettings = {

View File

@ -1,8 +1,6 @@
{
imports = [
./locale.nix
./opentabletdriver.nix
./qmk-vial.nix
./stylix
];
}

View File

@ -6,10 +6,10 @@
inherit (lib) mkIf mkEnableOption;
in {
options = {
opentabletdriver.enable =
module.misc.opentabletdriver.enable =
mkEnableOption "enables opentabletdriver";
};
config = mkIf config.opentabletdriver.enable {
config = mkIf config.module.misc.opentabletdriver.enable {
hardware.opentabletdriver = {
enable = true;
daemon.enable = true;

View File

@ -6,10 +6,10 @@
inherit (lib) mkIf mkEnableOption;
in {
options = {
qmk-vial.enable =
module.misc.qmk-vial.enable =
mkEnableOption "adds a udev rule for vial keyboards";
};
config = mkIf config.qmk-vial.enable {
config = mkIf config.module.misc.qmk-vial.enable {
services.udev.extraRules = ''
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", MODE="0660", GROUP="users", TAG+="uaccess", TAG+="udev-acl"
'';

View File

@ -5,57 +5,81 @@
pkgs,
...
}: let
inherit (builtins) fetchurl;
inherit (lib) mkEnableOption mkOption mkIf;
inherit (lib) optionalAttrs;
inherit (lib.types) bool str;
inherit (config.system) stateVersion;
cfg = config.module.stylix;
fromBase16Schemes = f: "${pkgs.base16-schemes}/share/themes/${f}.yaml";
interPackage = pkgs.inter-nerdfont;
iosevkaPackage =
if stateVersion == "24.11"
then pkgs.nerdfonts.override {fonts = ["Iosevka"];}
else pkgs.nerd-fonts.iosevka;
iosevkaTermPackage =
if stateVersion == "24.11"
then pkgs.nerdfonts.override {fonts = ["Iosevka Term"];}
else pkgs.nerd-fonts.iosevka-term;
mesloLgPackage =
if stateVersion == "24.11"
then pkgs.nerdfonts.override {fonts = ["MesloLG"];}
else pkgs.nerd-fonts.meslo-lg;
jetBrainsMonoPackage =
if stateVersion == "24.11"
then pkgs.nerdfonts.override {fonts = ["JetBrainsMono"];}
else pkgs.nerd-fonts.jetbrains-mono;
iosevkaPackage = pkgs.nerd-fonts.iosevka;
iosevkaTermPackage = pkgs.nerd-fonts.iosevka-term;
mesloLgPackage = pkgs.nerd-fonts.meslo-lg;
# jetBrainsMonoPackage = pkgs.nerd-fonts.jetbrains-mono;
geistMonoPackage = pkgs.nerd-fonts.geist-mono;
geistPackage = pkgs.geist-font;
wallpapers = {
fern-outline = builtins.fetchurl {
abstract = {
squares = fetchurl {
url = "https://w.wallhaven.cc/full/p9/wallhaven-p91dym.jpg";
name = "wallhaven-p91dym.jpg";
sha256 = "wnsAhh0Soxm+lxahh+Xc/+CAw/abWgPIkeoOlzNGaDo=";
};
waves = fetchurl {
url = "https://w.wallhaven.cc/full/5y/wallhaven-5ydl93.png";
name = "wallhaven-5ydl93.png";
sha256 = "fTE2cyn2mkx05+Zn6qcs4+Rb7AYD0uyi6CNznuZYOjw=";
};
};
fern-outline = fetchurl {
url = "https://w.wallhaven.cc/full/p9/wallhaven-p9m7ve.png";
name = "wallhaven-p9m7ve.png";
sha256 = "0r7dl4fjwv2p5q5ggr4sjsl2h5m0s98k9qhiwkvmwi010lyffkx7";
};
mountains-pink = builtins.fetchurl {
mountains-pink = fetchurl {
url = "https://w.wallhaven.cc/full/yq/wallhaven-yq7gox.jpg";
name = "wallhaven-yq7gox.jpg";
sha256 = "09s31spp9mq71fgkl1w80nzdc1458p1gjfyi3y6fy14wj2dza0pj";
};
mountains-black = builtins.fetchurl {
mountains-black = fetchurl {
url = "https://w.wallhaven.cc/full/9d/wallhaven-9djzww.jpg";
name = "wallhaven-9djzww.jpg";
sha256 = "1p2si922i9qs09h8c74lrvx0f284g0xvm7lh85gk1x7lqhn611zm";
};
cyber-dawn = builtins.fetchurl {
cyber-dawn = fetchurl {
url = "https://w.wallhaven.cc/full/ym/wallhaven-ymo2y7.png";
name = "wallhaven-ymo2y7.png";
sha256 = "1b3j0hxxy8m25scq42lxsxc99xvr15pha1j4wplgz761asrvxly3";
};
nixos-rainbow = fetchurl {
url = "https://w.wallhaven.cc/full/p9/wallhaven-p9pd23.png";
name = "wallhaven-p9pd23.png";
sha256 = "7CMuETntiVUCKhUIdJzX+sf3F47GvuX2a61o4xbEzww=";
};
mountains-sepia = fetchurl {
url = "https://w.wallhaven.cc/full/k8/wallhaven-k89k81.jpg";
name = "wallhaven-k89k81.jpg";
sha256 = "C0lvJ0ff0mCC3i9mmeHZsj/n6Ehkp3jaslVr7VDUB3k=";
};
jcurry-cloud = fetchurl {
url = "https://w.wallhaven.cc/full/7j/wallhaven-7j6wpy.jpg";
name = "wallhaven-je8rwq.jpg";
sha256 = "xsuCYc0mCDkrJZ+BUmEEclAfF17g1n39JHeubtZHP78=";
};
vapor-moon = fetchurl {
url = "https://w.wallhaven.cc/full/lm/wallhaven-lm6d2r.png";
name = "wallhaven-lm6d2r.png";
sha256 = "V07kj2zwFHDwzIN8QE8IFrJMXxDOBoK9C11sQGgTjyQ=";
};
};
themes = {
rose-pine-dawn = {
polarity = "light";
scheme = "${pkgs.base16-schemes}/share/themes/rose-pine-dawn.yaml";
scheme = fromBase16Schemes "rose-pine-dawn";
wallpaper = wallpapers.cyber-dawn;
serif = {
@ -76,12 +100,12 @@
};
rose-pine-moon = {
polarity = "dark";
scheme = "${pkgs.base16-schemes}/share/themes/rose-pine-moon.yaml";
scheme = fromBase16Schemes "rose-pine-moon";
wallpaper = wallpapers.cyber-dawn;
serif = {
package = iosevkaPackage;
name = "Iosevka Nerd Font Propo";
package = interPackage;
name = "Inter Nerd Font";
};
monospace = {
@ -95,10 +119,52 @@
size = 24;
};
};
sandcastle = {
polarity = "dark";
scheme = fromBase16Schemes "sandcastle";
wallpaper = wallpapers.abstract.waves;
serif = {
package = geistPackage;
name = "Geist";
};
monospace = {
package = geistMonoPackage;
name = "GeistMono NFM";
};
cursor = {
package = pkgs.bibata-cursors;
name = "Bibata-Modern-Classic";
size = 24;
};
};
gruvbox-dark-pale = {
polarity = "dark";
scheme = fromBase16Schemes "gruvbox-dark-pale";
wallpaper = wallpapers.mountains-sepia;
serif = {
package = geistPackage;
name = "Geist";
};
monospace = {
package = geistMonoPackage;
name = "GeistMono Nerd Font";
};
cursor = {
package = pkgs.bibata-cursors;
name = "Bibata-Modern-Classic";
size = 24;
};
};
nord = {
polarity = "dark";
scheme = "${pkgs.base16-schemes}/share/themes/nord.yaml";
wallpaper = builtins.fetchurl {
scheme = fromBase16Schemes "nord";
wallpaper = fetchurl {
url = "https://w.wallhaven.cc/full/l8/wallhaven-l8l9gq.png";
name = "wallhaven-l8l9gq.png";
sha256 = "0ypr44sg0fn55m1b52dgr1nnscpi2p6rfkjsm7vvrdqw7bafbx2z";
@ -123,8 +189,8 @@
nord-light = {
polarity = "light";
scheme = "${pkgs.base16-schemes}/share/themes/nord-light.yaml";
wallpaper = builtins.fetchurl {
scheme = fromBase16Schemes "nord-light";
wallpaper = fetchurl {
url = "https://w.wallhaven.cc/full/l8/wallhaven-l8l9gq.png";
name = "wallhaven-l8l9gq.png";
sha256 = "0ypr44sg0fn55m1b52dgr1nnscpi2p6rfkjsm7vvrdqw7bafbx2z";
@ -149,8 +215,8 @@
helios = {
polarity = "dark";
scheme = "${pkgs.base16-schemes}/share/themes/helios.yaml";
wallpaper = builtins.fetchurl {
scheme = fromBase16Schemes "helios";
wallpaper = fetchurl {
url = "https://w.wallhaven.cc/full/lq/wallhaven-lqorw2.png";
name = "wallhaven-lqorw2.png";
sha256 = "sha256:1rjchjq4pc2jyq8dvpa17mmscv9qcm0h0zv468lsf8s51anpid6p";
@ -175,8 +241,8 @@
sulphurpool = {
polarity = "dark";
scheme = "${pkgs.base16-schemes}/share/themes/atelier-sulphurpool.yaml";
wallpaper = builtins.fetchurl {
scheme = fromBase16Schemes "atelier-sulphurpool";
wallpaper = fetchurl {
url = "https://w.wallhaven.cc/full/rd/wallhaven-rd5q3m.jpg";
name = "wallhaven-rd5q3m.jpg";
sha256 = "sha256:1sa2739vwwv1xafzjvxlg3kvq26xmcxg6hrwq29q40j617r63sy6";
@ -201,7 +267,7 @@
himalaya = {
# lightly pink like himalayan salt
polarity = "light";
scheme = "${pkgs.base16-schemes}/share/themes/atelier-plateau-light.yaml";
scheme = fromBase16Schemes "atelier-plateau-light";
wallpaper = wallpapers.mountains-pink;
serif = {
@ -214,6 +280,48 @@
name = "MesloLGM Nerd Font Mono";
};
cursor = {
package = pkgs.bibata-cursors;
name = "Bibata-Modern-Ice";
size = 24;
};
};
vesper = {
polarity = "dark";
scheme = fromBase16Schemes "vesper";
wallpaper = wallpapers.abstract.squares;
serif = {
package = geistPackage;
name = "Geist";
};
monospace = {
package = geistMonoPackage;
name = "GeistMono Nerd Font";
};
cursor = {
package = pkgs.bibata-cursors;
name = "Bibata-Modern-Classic";
size = 24;
};
};
github = {
polarity = "light";
scheme = fromBase16Schemes "github";
wallpaper = wallpapers.abstract.squares;
serif = {
package = geistPackage;
name = "Geist Light";
};
monospace = {
package = geistMonoPackage;
name = "GeistMono Nerd Font";
};
cursor = {
package = pkgs.bibata-cursors;
name = "Bibata-Modern-Ice";
@ -243,6 +351,7 @@ in {
};
config = mkIf cfg.enable {
fonts.packages = [pkgs.nerd-fonts.symbols-only];
stylix =
{
enable = true;

View File

@ -5,10 +5,10 @@
...
}:
with lib; let
cfg = config.virtual.docker;
cfg = config.module.virt.docker;
in {
options = {
virtual.docker.enable =
module.virt.docker.enable =
mkEnableOption "enable docker";
};
config = mkIf cfg.enable {

View File

@ -5,10 +5,10 @@
...
}:
with lib; let
cfg = config.virtual.libvirt;
cfg = config.module.virt.libvirt;
in {
options = {
virtual.libvirt.enable =
module.virt.libvirt.enable =
mkEnableOption "enables virtualisation";
};
config = mkIf cfg.enable {

View File

@ -5,10 +5,10 @@
...
}:
with lib; let
cfg = config.virtual.podman;
cfg = config.module.virt.podman;
in {
options = {
virtual.podman.enable =
module.virt.podman.enable =
mkEnableOption "enables podman";
};
config = mkIf cfg.enable {

View File

@ -4,7 +4,7 @@
...
}: {
boot.loader = {
timeout = 3;
timeout = 0;
efi.canTouchEfiVariables = true;
systemd-boot = {
consoleMode = "auto";

View File

@ -11,6 +11,7 @@ in {
imports = [
./boot
./hardware
./misc
./networking
./nix
./security
@ -43,15 +44,26 @@ in {
keyboards = {
internal = {
ids = ["0001:0001" "048d:c101"];
settings.main = {
a = "lettermod(alt, a, 200, 150)";
s = "lettermod(meta, s, 200, 150)";
d = "lettermod(control, d, 200, 150)";
f = "lettermod(shift, f, 200, 150)";
j = "lettermod(shift, j, 200, 150)";
k = "lettermod(control, k, 200, 150)";
l = "lettermod(meta, l, 200, 150)";
";" = "lettermod(alt, ;, 200, 150)";
settings.main = let
# finger = mod;
pinky = "alt";
ring = "meta";
middle = "control";
index = "shift";
# timeouts
idle = "200";
hold = "150";
# function takes finger and letter
homeRowMod = f: l: "lettermod(${f}, ${l}, ${idle}, ${hold})";
in {
"a" = homeRowMod pinky "a";
"s" = homeRowMod ring "s";
"d" = homeRowMod middle "d";
"f" = homeRowMod index "f";
"j" = homeRowMod index "j";
"k" = homeRowMod middle "k";
"l" = homeRowMod ring "l";
";" = homeRowMod pinky ";";
};
};
};

View File

@ -0,0 +1,3 @@
{
imports = [./slim.nix ./zram.nix];
}

View File

@ -0,0 +1,20 @@
{
# taken from https://github.com/NuschtOS/nixos-modules/blob/main/modules/slim.nix
documentation = {
# html docs and info are not required, man pages are enough
doc.enable = false;
info.enable = false;
};
# environment.defaultPackages = lib.mkForce [];
# programs.thunderbird.package = pkgs.thunderbird.override {cfg.speechSynthesisSupport = false;};
# during testing only 550K-650K of the tmpfs where used
security.wrapperDirSize = "10M";
services = {
orca.enable = false; # requires speechd
speechd.enable = false; # voice files are big and fat
};
}

View File

@ -0,0 +1,8 @@
{
zramSwap = {
enable = true;
algorithm = "zstd";
memoryPercent = 25;
priority = 5;
};
}

View File

@ -1,13 +1,20 @@
{
pkgs,
# inputs,
lib,
...
}: {
# imports = with inputs; [lix.nixosModules.default];
nix = {
package = pkgs.lixPackageSets.latest.lix;
channel.enable = false;
daemonCPUSchedPolicy = "idle";
optimise = {
automatic = true;
dates = ["weekly"];
};
settings = {
auto-optimise-store = true;
experimental-features = [
"nix-command"
"flakes"
@ -19,7 +26,7 @@
"fetch-closure"
# Allow derivation builders to call Nix, and thus build derivations recursively.
"recursive-nix"
# "recursive-nix"
# Allow the use of the impure-env setting.
# "configurable-impure-env"
@ -32,8 +39,5 @@
nix.settings.use-cgroups = true;
# for container in builds support
nix.settings.system-features =
if lib.versionAtLeast lib.version "25.05pre"
then ["uid-range"]
else lib.mkDefault ["uid-range"];
nix.settings.system-features = ["uid-range"];
}

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