Compare commits

...

105 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
111 changed files with 3982 additions and 3083 deletions

View File

@ -12,5 +12,6 @@ Configurations I took code/ideas from:
- [github:TheMaxMur/NixOS-Configuration](https://github.com/TheMaxMur/NixOS-Configuration) - [github:TheMaxMur/NixOS-Configuration](https://github.com/TheMaxMur/NixOS-Configuration)
- [github:nix-community/srvos](https://github.com/nix-community/srvos) - [github:nix-community/srvos](https://github.com/nix-community/srvos)
- [github:cloud-gouv/securix](https://github.com/cloud-gouv/securix) - [github:cloud-gouv/securix](https://github.com/cloud-gouv/securix)
- [GLF OS](https://www.gaminglinux.fr/glf-os/en)
Thx a lot <3 Thx a lot <3

684
flake.lock generated

File diff suppressed because it is too large Load Diff

130
flake.nix
View File

@ -2,44 +2,104 @@
description = "unexplrd's personal configuration"; description = "unexplrd's personal configuration";
inputs = { inputs = {
blueprint.url = "github:numtide/blueprint"; # lix = {
chaotic.url = "github:chaotic-cx/nyx/nyxpkgs-unstable"; # url = "https://git.lix.systems/lix-project/nixos-module/archive/2.93.1.tar.gz";
disko.url = "github:nix-community/disko/latest"; # inputs.nixpkgs.follows = "nixpkgs";
home-manager.url = "github:nix-community/home-manager"; # };
hyprland.url = "github:hyprwm/Hyprland"; # neve = {
hyprsunset.url = "github:hyprwm/hyprsunset"; # inputs.nixvim.follows = "nixvim";
lanzaboote.url = "github:nix-community/lanzaboote/v0.4.2"; # url = "git+https://gitea.linerds.us/unexplrd/Neve";
# 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";
# nixvim.url = "github:nix-community/nixvim"; # nixvim.url = "github:nix-community/nixvim";
nix-flatpak.url = "github:gmodena/nix-flatpak"; systems.url = "github:nix-systems/default";
nix-index-database.url = "github:nix-community/nix-index-database"; blueprint = {
nixos-cosmic.url = "github:lilyinstarlight/nixos-cosmic"; url = "github:numtide/blueprint";
nixos-facter-modules.url = "github:numtide/nixos-facter-modules"; inputs.nixpkgs.follows = "nixpkgs";
nixpkgs-stable.url = "github:nixos/nixpkgs/nixos-24.11"; inputs.systems.follows = "systems";
nixpkgs.url = "github:NixOS/nixpkgs?ref=nixos-unstable"; };
sops-nix.url = "github:mic92/sops-nix"; chaotic = {
walker = { url = "github:chaotic-cx/nyx/nyxpkgs-unstable";
url = "github:abenz1267/walker"; inputs = {
home-manager.follows = "home-manager";
nixpkgs.follows = "nixpkgs";
};
};
disko = {
url = "github:nix-community/disko/latest";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
stylix.url = "github:danth/stylix"; ghostty = {
# TODO: somehow reduce the number of *.inputs.nixpkgs.follows = "nixpkgs" stuff, mb a function? url = "github:ghostty-org/ghostty";
blueprint.inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
chaotic.inputs.nixpkgs.follows = "nixpkgs"; inputs.flake-utils.inputs.systems.follows = "systems";
disko.inputs.nixpkgs.follows = "nixpkgs"; };
home-manager.inputs.nixpkgs.follows = "nixpkgs"; home-manager = {
hyprland.inputs.nixpkgs.follows = "nixpkgs"; url = "github:nix-community/home-manager";
hyprsunset.inputs.hyprland-protocols.follows = "hyprland/hyprland-protocols"; inputs.nixpkgs.follows = "nixpkgs";
hyprsunset.inputs.hyprutils.follows = "hyprland/hyprutils"; };
hyprsunset.inputs.nixpkgs.follows = "nixpkgs"; hyprland = {
lanzaboote.inputs.nixpkgs.follows = "nixpkgs"; url = "github:hyprwm/Hyprland";
# lix.inputs.nixpkgs.follows = "nixpkgs"; inputs = {
mysecrets.flake = false; systems.follows = "systems";
# neve.inputs.nixvim.follows = "nixvim"; nixpkgs.follows = "nixpkgs";
nix-index-database.inputs.nixpkgs.follows = "nixpkgs"; };
sops-nix.inputs.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;}; outputs = inputs: inputs.blueprint {inherit inputs;};

View File

@ -1,11 +1,6 @@
{ {inputs, ...}: {
config,
inputs,
pkgs,
...
}: {
imports = with inputs; [ imports = with inputs; [
self.nixosModules.config self.modules.shared.nixos
self.nixosModules.desktop self.nixosModules.desktop
self.nixosModules.system self.nixosModules.system
./disko ./disko
@ -13,20 +8,18 @@
]; ];
networking = { networking = {
networkmanager.enable = true;
hostId = "c7f6c4a1"; hostId = "c7f6c4a1";
hostName = "dunamis"; hostName = "dunamis";
}; };
environment.memoryAllocator.provider = "mimalloc";
system.stateVersion = "25.11"; system.stateVersion = "25.11";
time.timeZone = "Europe/Kyiv"; time.timeZone = "Europe/Kyiv";
desktop.niri.enable = true; desktop.niri.enable = true;
# TODO: make a module for autologin
services.greetd.settings.initial_session = { services.displayManager.autoLogin = {
enable = true;
user = "user"; user = "user";
command = "${pkgs.niri}/bin/niri-session";
}; };
module = { module = {
@ -37,24 +30,13 @@
}; };
stylix = { stylix = {
enable = true; enable = true;
theme = "rose-pine-moon"; theme = "sandcastle";
}; };
}; locale = "uk_UA.UTF-8";
misc = {
locale.ukrainian.enable = true; opentabletdriver.enable = false;
opentabletdriver.enable = false; qmk-vial.enable = true;
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;
}; };
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"; disk = "/dev/disk/by-id/nvme-eui.000000000000000100a075244b5d6185";
in { in {
imports = with inputs; [ imports = with inputs; [
@ -10,5 +15,5 @@ in {
mountOptions = ["rw" "nosuid" "nodev"]; 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"; type = "disk";
device = disk; device = disk;
content = { content = {
@ -25,45 +28,30 @@
size = "100%"; size = "100%";
content = { content = {
type = "luks"; type = "luks";
name = "luks-main"; name = "luks-" + hostId;
initrdUnlock = true; initrdUnlock = true;
settings.allowDiscards = true; settings.allowDiscards = true;
content = { content = let
mountOptions = ["autodefrag" "compress-force=zstd" "noatime"];
in {
type = "btrfs"; type = "btrfs";
extraArgs = ["-f"]; extraArgs = ["-f"];
subvolumes = { subvolumes = {
"@nixos-root" = { "@nixos-root" = {
mountpoint = "/"; mountpoint = "/";
mountOptions = [ mountOptions = mountOptions ++ ["noexec"];
"autodefrag"
"compress=zstd"
"noatime"
"noexec"
];
}; };
"@home" = { "@home" = {
mountpoint = "/home"; mountpoint = "/home";
mountOptions = [ inherit mountOptions;
"autodefrag"
"compress=zstd"
"noatime"
];
}; };
"@storage" = { "@storage" = {
mountpoint = "/storage"; mountpoint = "/storage";
mountOptions = [ inherit mountOptions;
"autodefrag"
"compress=zstd"
"noatime"
];
}; };
"@nix" = { "@nix" = {
mountpoint = "/nix"; mountpoint = "/nix";
mountOptions = [ inherit mountOptions;
"autodefrag"
"compress-force=zstd"
"noatime"
];
}; };
}; };
}; };

View File

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

View File

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

View File

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

View File

@ -1,100 +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
zk.enable = true;
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
systemctl-tui # systemctl tui 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,6 +1,6 @@
{inputs, ...}: { {inputs, ...}: {
imports = with inputs; [ imports = with inputs; [
self.nixosModules.config self.modules.shared.nixos
self.nixosModules.desktop self.nixosModules.desktop
self.nixosModules.system self.nixosModules.system
./disko ./disko
@ -9,16 +9,26 @@
]; ];
networking = { networking = {
networkmanager.enable = true; hostId = "14f63637";
# hostId = "";
hostName = "eldrid"; hostName = "eldrid";
}; };
environment.memoryAllocator.provider = "mimalloc";
system.stateVersion = "25.11"; system.stateVersion = "25.11";
time.timeZone = "Europe/Kyiv"; 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 = { module = {
config = { config = {
@ -30,19 +40,11 @@
}; };
stylix = { stylix = {
enable = true; 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 { in {
imports = with inputs; [ imports = with inputs; [
disko.nixosModules.disko disko.nixosModules.disko
@ -10,5 +15,5 @@ in {
mountOptions = ["rw" "nosuid" "nodev"]; 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"; type = "disk";
device = disk; device = disk;
content = { content = {
@ -25,7 +28,7 @@
size = "100%"; size = "100%";
content = { content = {
type = "luks"; type = "luks";
name = "luks-main"; name = "luks-" + hostId;
initrdUnlock = true; initrdUnlock = true;
settings.allowDiscards = true; settings.allowDiscards = true;
content = { content = {

View File

@ -1,20 +1,47 @@
{pkgs, ...}: let {pkgs, ...}: let
cb-ucm-conf = pkgs.alsa-ucm-conf.overrideAttrs { cb-ucm-conf = with pkgs;
wttsrc = pkgs.fetchFromGitHub { alsa-ucm-conf.overrideAttrs {
owner = "WeirdTreeThing"; wttsrc = fetchFromGitHub {
repo = "chromebook-ucm-conf"; owner = "WeirdTreeThing";
rev = "b6ce2a7"; repo = "alsa-ucm-conf-cros";
hash = "sha256-QRUKHd3RQmg1tnZU8KCW0AmDtfw/daOJ/H3XU5qWTCc="; 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 { 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 = [ system.replaceDependencies.replacements = [
{ {
original = pkgs.alsa-ucm-conf; original = pkgs.alsa-ucm-conf;
@ -22,6 +49,10 @@ in {
} }
]; ];
boot.extraModprobeConfig = ''
options snd-intel-dspcfg dsp_driver=3
'';
services.pipewire.wireplumber.configPackages = [ services.pipewire.wireplumber.configPackages = [
(pkgs.writeTextDir "share/wireplumber/main.lua.d/51-increase-headroom.lua" '' (pkgs.writeTextDir "share/wireplumber/main.lua.d/51-increase-headroom.lua" ''
rule = { rule = {
@ -37,10 +68,19 @@ in {
table.insert(alsa_monitor.rules,rule) 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

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

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,7 @@
{
services.undervolt = {
enable = true;
# coreOffset = -150;
turbo = 1;
};
}

View File

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

View File

@ -1,10 +1,6 @@
{ {inputs, ...}: {
config,
inputs,
...
}: {
imports = with inputs; [ imports = with inputs; [
self.nixosModules.config self.modules.shared.nixos
self.nixosModules.desktop self.nixosModules.desktop
self.nixosModules.system self.nixosModules.system
./disko ./disko
@ -13,30 +9,33 @@
]; ];
networking = { networking = {
networkmanager.enable = true; hostId = "45b00123";
hostName = "legion"; hostName = "legion";
}; };
environment.memoryAllocator.provider = "mimalloc";
system.stateVersion = "25.11"; system.stateVersion = "25.11";
time.timeZone = "Europe/Kyiv"; time.timeZone = "Europe/Kyiv";
desktop.niri.enable = true; desktop.niri.enable = true;
services.displayManager.autoLogin = {
enable = true;
user = "user";
};
module = { module = {
config = { config = {
laptop.homeRowMods = true; laptop.homeRowMods = true;
powerSave = true; powerSave = true;
# secureBoot = true; secureBoot = true;
# tpmDiskUnlock = true; tpmDiskUnlock = true;
vaapi = "nvidia"; vaapi = "nvidia";
}; };
stylix = { stylix = {
enable = true; 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-main = "/dev/disk/by-id/nvme-INTEL_SSDPEKKF256G8L_BTHH81460QC2256B";
disk-second = "/dev/disk/by-id/nvme-WDC_PC_SN730_SDBPNTY-1T00-1101_21114D802446"; disk-second = "/dev/disk/by-id/nvme-WDC_PC_SN730_SDBPNTY-1T00-1101_21114D802446";
in { in {
@ -11,6 +16,6 @@ in {
mountOptions = ["rw" "nosuid" "nodev"]; mountOptions = ["rw" "nosuid" "nodev"];
}; };
}; };
disko.devices.disk.main = import ./disk-main.nix {inherit disk-main;}; disko.devices.disk.main = import ./disk-main.nix {inherit disk-main hostId;};
disko.devices.disk.second = import ./disk-second.nix {inherit disk-second;}; 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"; type = "disk";
device = disk-main; device = disk-main;
content = { content = {
@ -25,7 +28,7 @@
size = "100%"; size = "100%";
content = { content = {
type = "luks"; type = "luks";
name = "luks-main"; name = "luks-" + hostId;
initrdUnlock = true; initrdUnlock = true;
settings.allowDiscards = true; settings.allowDiscards = true;
content = { content = {

View File

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

View File

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

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

View File

@ -1,28 +1,28 @@
{ {inputs, ...}: {
inputs,
pkgs,
...
}: {
imports = with inputs; [ imports = with inputs; [
self.nixosModules.desktop self.nixosModules.desktop
self.nixosModules.system self.nixosModules.system
self.nixosModules.config self.modules.shared.nixos
./disko ./disko
./hardware ./hardware
./misc ./misc
]; ];
networking = { networking = {
networkmanager.enable = true; hostId = "bd1b5837";
# hostId = "31150fae";
hostName = "morphius"; hostName = "morphius";
}; };
boot.kernelModules = ["i915"];
environment.memoryAllocator.provider = "mimalloc";
system.stateVersion = "25.11"; system.stateVersion = "25.11";
time.timeZone = "Europe/Kyiv"; time.timeZone = "Europe/Kyiv";
desktop.gnome.enable = true;
services.displayManager.autoLogin = {
enable = true;
user = "user";
};
swapDevices = [ swapDevices = [
{ {
device = "/swap/swapfile"; device = "/swap/swapfile";
@ -30,8 +30,6 @@
} }
]; ];
desktop.gnome.enable = true;
module = { module = {
config = { config = {
secureBoot = true; secureBoot = true;
@ -42,10 +40,8 @@
}; };
stylix = { stylix = {
enable = true; enable = true;
theme = "rose-pine-moon"; theme = "sandcastle";
}; };
locale = "uk_UA.UTF-8";
}; };
locale.ukrainian.enable = true;
opentabletdriver.enable = false;
} }

View File

@ -1,4 +1,9 @@
{inputs, ...}: let {
config,
inputs,
...
}: let
inherit (config.networking) hostId;
disk = "/dev/nvme0n1"; disk = "/dev/nvme0n1";
in { in {
imports = with inputs; [ imports = with inputs; [
@ -10,5 +15,5 @@ in {
mountOptions = ["rw" "nosuid" "nodev"]; 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,8 @@
{disk, ...}: { {
disk,
hostId,
...
}: {
type = "disk"; type = "disk";
device = disk; device = disk;
content = { content = {
@ -25,7 +29,7 @@
size = "100%"; size = "100%";
content = { content = {
type = "luks"; type = "luks";
name = "luks-main"; name = "luks-" + hostId;
initrdUnlock = true; initrdUnlock = true;
settings.allowDiscards = true; settings.allowDiscards = true;
content = { content = {

View File

@ -2,6 +2,7 @@
imports = [ imports = [
# ./laptop # ./laptop
]; ];
hardware.sensor.iio.enable = true;
services = { services = {
logind = { logind = {
lidSwitch = "ignore"; lidSwitch = "ignore";

View File

@ -1,5 +0,0 @@
{
imports = [
./keyboard-fix.nix
];
}

View File

@ -1,21 +0,0 @@
{
services = {
udev.extraHwdb = ''
evdev:input:b0011v0001p0001eAB83*
KEYBOARD_KEY_d5=sysrq
KEYBOARD_KEY_d4=leftmeta
KEYBOARD_KEY_95=brightnessdown
KEYBOARD_KEY_91=brightnessup
'';
keyd = {
enable = true;
keyboards.default = {
ids = ["0001:0001"];
settings.main = {
camera = "brightnessdown";
prog1 = "brightnessup";
};
};
};
};
}

View File

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

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

View File

@ -1,34 +1,41 @@
{ {inputs, ...}: {
inputs,
pkgs,
...
}: {
imports = with inputs; [ imports = with inputs; [
self.nixosModules.desktop self.nixosModules.desktop
self.nixosModules.system self.nixosModules.system
self.nixosModules.config self.modules.shared.nixos
./disko ./disko
./hardware ./hardware
./misc ./misc
]; ];
networking = { networking = {
networkmanager.enable = true;
hostId = "31150fae"; hostId = "31150fae";
hostName = "sarien"; hostName = "sarien";
}; };
boot.loader.systemd-boot.enable = true;
environment.memoryAllocator.provider = "mimalloc";
system.stateVersion = "25.11"; system.stateVersion = "25.11";
time.timeZone = "Europe/Kyiv"; time.timeZone = "Europe/Kyiv";
desktop.niri.enable = true; desktop.niri.enable = true;
services.greetd.settings.initial_session = {
services.displayManager.autoLogin = {
enable = true;
user = "user"; user = "user";
command = "${pkgs.niri}/bin/niri-session";
}; };
swapDevices = [
{
device = "/swap/swapfile";
size = 4 * 1024;
priority = 100;
}
{
device = "/swap/hibernate";
size = 16 * 1024;
priority = 1;
}
];
module = { module = {
config = { config = {
laptop.homeRowMods = true; laptop.homeRowMods = true;
@ -38,12 +45,10 @@
}; };
stylix = { stylix = {
enable = true; enable = true;
theme = "rose-pine-moon"; 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"; disk = "/dev/disk/by-id/nvme-eui.0025385911b36714";
in { in {
imports = with inputs; [ imports = with inputs; [
@ -10,5 +15,6 @@ in {
mountOptions = ["rw" "nosuid" "nodev"]; 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,70 +0,0 @@
{disk, ...}: {
type = "disk";
device = disk;
content = {
type = "gpt";
partitions = {
ESP = {
size = "2G";
type = "EF00";
content = {
type = "filesystem";
format = "vfat";
mountpoint = "/boot";
mountOptions = [
"umask=0077"
"fmask=0022"
"dmask=0022"
"noexec"
"nosuid"
"nodev"
];
};
};
luks = {
size = "100%";
content = {
type = "luks";
name = "luks-main";
initrdUnlock = true;
settings.allowDiscards = true;
content = {
type = "btrfs";
extraArgs = ["-f"];
subvolumes = {
"@nixos-root" = {
mountpoint = "/";
mountOptions = [
"compress=zstd"
"noatime"
"noexec"
];
};
"@home" = {
mountpoint = "/home";
mountOptions = [
"compress=zstd"
"noatime"
];
};
"@storage" = {
mountpoint = "/storage";
mountOptions = [
"compress=zstd"
"noatime"
];
};
"@nix" = {
mountpoint = "/nix";
mountOptions = [
"compress-force=zstd"
"noatime"
];
};
};
};
};
};
};
};
}

View File

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

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

View File

@ -1,5 +1,4 @@
{ {
imports = [ 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 = [ imports = [
./common # ./common
./cosmic ./cosmic
./gnome ./gnome
./hyprland ./hyprland

View File

@ -1,4 +1,5 @@
{ {
osConfig,
config, config,
pkgs, pkgs,
lib, lib,
@ -13,33 +14,63 @@ in {
mkEnableOption "enable gnome desktop"; mkEnableOption "enable gnome desktop";
}; };
config = mkIf cfg.enable { config = mkIf cfg.enable {
home.packages = with pkgs; [ home.packages =
gnomeExtensions.alphabetical-app-grid (with pkgs.gnomeExtensions; [
gnomeExtensions.removable-drive-menu # extensions
gnomeExtensions.caffeine alphabetical-app-grid
gnomeExtensions.space-bar app-icons-taskbar
gnomeExtensions.switcher caffeine
gnomeExtensions.tactile pano
gnomeExtensions.pano removable-drive-menu
gnomeExtensions.window-is-ready-remover space-bar
junction switcher
celluloid tactile
mission-center window-is-ready-remover
dconf ])
pwvucontrol ++ (with pkgs; [
wl-clipboard # regular packages
]; junction
celluloid
mission-center
dconf
pwvucontrol
wl-clipboard
]);
programs.gnome-shell.extensions = [ programs.gnome-shell.extensions = [
{package = pkgs.gnomeExtensions.alphabetical-app-grid;} {package = pkgs.gnomeExtensions.alphabetical-app-grid;}
{package = pkgs.gnomeExtensions.app-icons-taskbar;}
{package = pkgs.gnomeExtensions.removable-drive-menu;}
{package = pkgs.gnomeExtensions.caffeine;} {package = pkgs.gnomeExtensions.caffeine;}
{package = pkgs.gnomeExtensions.pano;}
{package = pkgs.gnomeExtensions.removable-drive-menu;}
{package = pkgs.gnomeExtensions.space-bar;} {package = pkgs.gnomeExtensions.space-bar;}
{package = pkgs.gnomeExtensions.switcher;} {package = pkgs.gnomeExtensions.switcher;}
{package = pkgs.gnomeExtensions.tactile;} {package = pkgs.gnomeExtensions.tactile;}
{package = pkgs.gnomeExtensions.pano;}
{package = pkgs.gnomeExtensions.window-is-ready-remover;} {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; { dconf.settings = with lib.hm.gvariant; {
"org/gnome/desktop/a11y/applications" = { "org/gnome/desktop/a11y/applications" = {
screen-reader-enabled = false; screen-reader-enabled = false;
@ -54,12 +85,12 @@ in {
"org/gnome/desktop/input-sources" = { "org/gnome/desktop/input-sources" = {
mru-sources = [(mkTuple ["xkb" "us"])]; 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"]; xkb-options = ["terminate:ctrl_alt_bksp"];
}; };
"org/gnome/desktop/interface" = { "org/gnome/desktop/interface" = {
accent-color = "slate"; # accent-color = "slate";
clock-show-seconds = true; clock-show-seconds = true;
color-scheme = "prefer-dark"; color-scheme = "prefer-dark";
enable-animations = true; enable-animations = true;
@ -100,8 +131,8 @@ in {
move-to-workspace-last = ["<Shift><Control><Super>End"]; move-to-workspace-last = ["<Shift><Control><Super>End"];
move-to-workspace-left = ["<Control><Super>Left"]; move-to-workspace-left = ["<Control><Super>Left"];
move-to-workspace-right = ["<Control><Super>Right"]; move-to-workspace-right = ["<Control><Super>Right"];
switch-input-source = ["<Super>Escape"]; switch-input-source = ["<Super>Space"];
switch-input-source-backward = ["<Shift><Super>Escape"]; switch-input-source-backward = ["<Shift><Super>Space"];
switch-to-workspace-1 = ["<Super>1"]; switch-to-workspace-1 = ["<Super>1"];
switch-to-workspace-2 = ["<Super>2"]; switch-to-workspace-2 = ["<Super>2"];
switch-to-workspace-3 = ["<Super>3"]; switch-to-workspace-3 = ["<Super>3"];
@ -135,7 +166,18 @@ in {
}; };
"org/gnome/shell" = { "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" = { "org/gnome/shell/app-switcher" = {
@ -167,6 +209,21 @@ in {
workspace-indicator = true; 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" = { "org/gnome/shell/extensions/tactile" = {
background-color = "#${colors.base00}"; background-color = "#${colors.base00}";
border-color = "#${colors.base0D}"; 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, config,
pkgs, inputs,
lib, lib,
osConfig,
# perSystem,
pkgs,
... ...
}: let }: let
# inherit (lib.strings) removeSuffix; inherit (lib) mkIf mkEnableOption mkForce getExe;
inherit (lib) mkIf mkEnableOption mkDefault mkForce getExe;
# inherit (osConfig.module.stylix) theme;
inherit (osConfig.networking) hostName; inherit (osConfig.networking) hostName;
cfg = config.desktop.niri; cfg = config.desktop.niri;
ifLaptop = mkIf (hostName != "dunamis"); 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 { in {
imports = [ imports = with inputs; [
./programs walker.homeManagerModules.default
]; ];
options = { options = {
desktop.niri.enable = desktop.niri.enable =
@ -28,6 +33,24 @@ in {
wpaperd.enable = true; wpaperd.enable = true;
qt.enable = false; 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 = { dconf.settings = {
"org/gnome/desktop/wm/preferences" = { "org/gnome/desktop/wm/preferences" = {
button-layout = "icon:close"; button-layout = "icon:close";
@ -40,30 +63,14 @@ in {
else lib.mkDefault "prefer-light"; 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 = { qt = {
enable = true; enable = true;
platformTheme.name = "gtk3"; platformTheme.name = "gtk3";
}; };
xdg.configFile.niri = import ./niri.nix {inherit config hostName launcher lockscreen;}; programs.walker = import ./programs/walker commonArgs;
services = import ./services {inherit pkgs lockscreen getExe perSystem;}; programs.waybar = import ./programs/waybar commonArgs;
services = import ./services commonArgs;
home.packages = with pkgs; home.packages = with pkgs;
[ [
@ -73,13 +80,9 @@ in {
helvum # pipewire patchbay in rust helvum # pipewire patchbay in rust
junction # app chooser junction # app chooser
loupe # image viewer and editor in rust loupe # image viewer and editor in rust
mission-center # task manager in rust (partly)
nautilus # file manager nautilus # file manager
overskride # bluetooth gui in rust
papers # pdf reader in rust papers # pdf reader in rust
pika-backup # borg gui in rust
pwvucontrol # pipewire gui in rust pwvucontrol # pipewire gui in rust
sonusmix # pipewire routing tool in rust
wdisplays # wlroots display configurator wdisplays # wlroots display configurator
] ]
++ [ ++ [
@ -92,6 +95,10 @@ in {
]; ];
xdg = { xdg = {
configFile = {
niri = import ./niri.nix commonArgs;
"mimeapps.list".force = true;
};
mime.enable = true; mime.enable = true;
mimeApps = { mimeApps = {
enable = true; enable = true;
@ -120,12 +127,11 @@ in {
}; };
systemd.user = { systemd.user = {
settings.Manager.DefaultEnvironment = { settings.Manager.DefaultEnvironment = {
QT_QPA_PLATFORM = "wayland";
DISPLAY = ":123"; DISPLAY = ":123";
}; };
targets.tray.Unit.Description = "Home Manager System Tray"; # workaround for udiskie targets.tray.Unit.Description = "Home Manager System Tray"; # workaround for udiskie
services = let services = let
mkGraphicalService = config: graphicalService // config; mkGraphicalService = config: lib.attrsets.recursiveUpdate graphicalService config;
graphicalService = { graphicalService = {
Install.WantedBy = ["niri.service"]; Install.WantedBy = ["niri.service"];
Unit = { Unit = {
@ -139,38 +145,50 @@ in {
RestartSec = 1; RestartSec = 1;
}; };
}; };
in { in
udiskie = mkGraphicalService {}; lib.mkMerge [
waybar = mkGraphicalService {}; {
network-manager-applet = mkGraphicalService {}; copyq = mkGraphicalService {Service.Environment = mkForce "QT_QPA_PLATFORM=wayland";};
copyq = mkGraphicalService { network-manager-applet = mkGraphicalService {};
Service = udiskie = mkGraphicalService {};
graphicalService.Service walker = mkGraphicalService {};
// { waybar = mkGraphicalService {};
Environment = mkForce "QT_QPA_PLATFORM=wayland"; wpaperd =
mkGraphicalService {}
// {
Service.TimeoutStopSec = mkForce "1";
Service.Restart = mkForce "always";
};
xwayland-satellite = mkGraphicalService {
Service = {
Type = "simple";
ExecStart = getExe pkgs.xwayland-satellite + " :123";
};
}; };
}; # gnome-polkit-agent = mkGraphicalService {
xwayland-satellite = mkGraphicalService { # Service = {
Service = # Type = "simple";
graphicalService.Service # ExecStart = pkgs.polkit_gnome + "/libexec/polkit-gnome-authentication-agent-1";
// { # };
Type = "simple"; # };
ExecStart = getExe pkgs.xwayland-satellite + " :123"; }
(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, config,
hostName, osConfig,
launcher, launcher,
lockscreen, lockscreen,
... ...
}: let }: let
inherit (config.lib.stylix) colors; inherit (config.lib.stylix) colors;
inherit (config.stylix) cursor; inherit (config.stylix) cursor;
inherit (osConfig.networking) hostName;
keyboard = keyboard =
if hostName == "eldrid" if hostName == "eldrid"
then "chromeos" then "chromeos"
@ -91,15 +93,15 @@ in {
in '' in ''
environment { environment {
DISPLAY ":123" DISPLAY ":123"
QT_QPA_PLATFORMTHEME "gtk3" CLUTTER_BACKEND "wayland"
GDK_BACKEND "wayland"
MOZ_ENABLE_WAYLAND "1" MOZ_ENABLE_WAYLAND "1"
MOZ_WEBRENDER "1" MOZ_WEBRENDER "1"
GDK_BACKEND "wayland"
QT_QPA_PLATFORM "wayland" QT_QPA_PLATFORM "wayland"
XDG_SESSION_TYPE "wayland"
CLUTTER_BACKEND "wayland"
SDL_VIDEODRIVER "wayland" SDL_VIDEODRIVER "wayland"
XDG_SESSION_TYPE "wayland"
} }
input { input {
keyboard { keyboard {
xkb { xkb {
@ -108,53 +110,23 @@ in {
} }
repeat-delay 200 repeat-delay 200
repeat-rate 50 repeat-rate 50
track-layout "global" track-layout "window"
} }
touchpad { touchpad {
// off
tap tap
// dwt
// dwtp
natural-scroll natural-scroll
accel-speed 0.2 accel-speed 0.2
accel-profile "flat" accel-profile "flat"
// scroll-method "two-finger"
// disabled-on-external-mouse
} }
mouse { mouse {
// off
// natural-scroll
accel-speed 0.0 accel-speed 0.0
accel-profile "flat" accel-profile "flat"
// scroll-method "no-scroll" }
touch {
map-to-output "eDP-1"
} }
warp-mouse-to-focus warp-mouse-to-focus
// focus-follows-mouse workspace-auto-back-and-forth
}
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
} }
cursor { cursor {
@ -162,45 +134,62 @@ in {
xcursor-size ${toString cursor.size} 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 { layout {
gaps 6 gaps 3
// background-color "#${colors.base02}"
background-color "transparent"
center-focused-column "never" // "on-overflow" center-focused-column "never" // "on-overflow"
default-column-width { proportion 1.0; }
preset-column-widths { preset-column-widths {
proportion 0.33333 proportion 0.33333
proportion 0.66667 proportion 0.66667
} }
background-color "transparent" struts {
// default-column-width { proportion 0.9; } left 36
default-column-width { proportion 0.5; } right 36
}
tab-indicator { tab-indicator {
active-color "#${colors.base04}" active-color "#${colors.base04}"
inactive-color "#${colors.base03}" inactive-color "#${colors.base03}"
corner-radius 4 corner-radius 6
gap 6 gap 3
gaps-between-tabs 3 gaps-between-tabs 3
length total-proportion=0.3 // length total-proportion=0.3
place-within-column place-within-column
position "left" position "left"
width 6 width 6
} }
focus-ring { focus-ring {
// off width 1
width 3 active-color "#${colors.base0D}"
active-gradient from="#${colors.base0D}" to="#${colors.base0F}" angle=40 relative-to="workspace-view"
inactive-color "#${colors.base03}" inactive-color "#${colors.base03}"
urgent-color "#${colors.base08}"
} }
struts { border {
left 33 off
right 33 width 1
active-color "#${colors.base0D}"
inactive-color "#${colors.base03}"
urgent-color "#${colors.base08}"
} }
} }
prefer-no-csd
hotkey-overlay {
skip-at-startup
}
window-rule { window-rule {
geometry-corner-radius 12 geometry-corner-radius 12
clip-to-geometry true clip-to-geometry true
@ -217,31 +206,22 @@ in {
active-color "#${colors.base0F}" active-color "#${colors.base0F}"
inactive-color "#${colors.base03}" inactive-color "#${colors.base03}"
} }
shadow {
on
color "#${colors.base0F}"
inactive-color "#${colors.base03}"
}
} }
// Make the wallpaper stationary, rather than moving with workspaces.
layer-rule { layer-rule {
// This is for swaybg; change for other wallpaper tools. match namespace="^wpaperd.*$"
// Find the right namespace by running niri msg layers.
match namespace="^wallpaper$"
place-within-backdrop true place-within-backdrop true
} }
// Optionally, disable the workspace shadows in the overview.
overview { overview {
workspace-shadow { workspace-shadow {
off off
} }
} }
screenshot-path "${xdgPics}/screenshots/screenshot-%Y-%m-%d-%H-%M-%S.png" layer-rule {
match namespace="waybar"
match at-startup=true
animations { opacity 0.99 // fixes the black fill
slowdown 0.8
} }
window-rule { window-rule {
@ -256,6 +236,7 @@ in {
} }
window-rule { window-rule {
match app-id="re.sonny.Junction" match app-id="re.sonny.Junction"
match app-id="com.github.hluk.copyq"
open-floating true open-floating true
open-focused true open-focused true
} }
@ -269,6 +250,7 @@ in {
match app-id=r#"^org\.keepassxc\.KeePassXC$"# match app-id=r#"^org\.keepassxc\.KeePassXC$"#
match app-id=r#"^org\.gnome\.World\.Secrets$"# match app-id=r#"^org\.gnome\.World\.Secrets$"#
match app-id=r#"^Bitwarden$"# match app-id=r#"^Bitwarden$"#
match app-id="io.github.kukuruzka165.materialgram"
match app-id="org.telegram.desktop" match app-id="org.telegram.desktop"
match app-id="org.signal.Signal" match app-id="org.signal.Signal"
match app-id="WebCord" match app-id="WebCord"
@ -276,6 +258,7 @@ in {
block-out-from "screencast" block-out-from "screencast"
} }
binds { binds {
Mod+Shift+Slash { show-hotkey-overlay; } Mod+Shift+Slash { show-hotkey-overlay; }
@ -287,6 +270,7 @@ in {
Mod+Shift+T { set-column-width "67%"; } Mod+Shift+T { set-column-width "67%"; }
Mod+V { toggle-column-tabbed-display; } Mod+V { toggle-column-tabbed-display; }
Mod+G { switch-focus-between-floating-and-tiling; } 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+Comma { consume-or-expel-window-left; }
Mod+Ctrl+Period { consume-or-expel-window-right; } Mod+Ctrl+Period { consume-or-expel-window-right; }
@ -312,7 +296,7 @@ in {
Mod+BackSpace repeat=false { spawn "${launcher}"; } Mod+BackSpace repeat=false { spawn "${launcher}"; }
Mod+A repeat=false { spawn "${launcher}"; } Mod+A repeat=false { spawn "${launcher}"; }
Mod+Ctrl+L repeat=false { spawn "${lockscreen}"; } Mod+Ctrl+L repeat=false { spawn "${lockscreen}"; }
Mod+Ctrl+V repeat=false { spawn "copyq" "toggle"; } Mod+Ctrl+V repeat=false { spawn "copyq" "menu"; }
Mod+Shift+W repeat=false { spawn "walker" "-m" "windows"; } 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, config,
mkDefault, lib,
}: { }: {
enable = true; enable = true;
settings = { settings = {
@ -15,7 +15,7 @@
match-mode = "fuzzy"; match-mode = "fuzzy";
icon-theme = config.dconf.settings."org/gnome/desktop/interface".icon-theme; icon-theme = config.dconf.settings."org/gnome/desktop/interface".icon-theme;
}; };
border = mkDefault { border = lib.mkDefault {
width = 3; width = 3;
radius = 12; radius = 12;
}; };

View File

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

View File

@ -1,329 +1,537 @@
{ {
colors,
config, config,
getExe, lib,
ifLaptop, osConfig,
pkgs, pkgs,
launcher,
... ...
}: { }: let
inherit (config.lib.stylix) colors;
ifLaptop = lib.mkIf (osConfig.networking.hostName != "dunamis");
in {
enable = true; enable = true;
systemd = { systemd = {
enable = true; enable = true;
target = "graphical-session.target"; target = "graphical-session.target";
}; };
settings = { settings.bottom = {
bar-0 = { position = "bottom";
# layer = "top"; height = 33;
position = "bottom"; spacing = 0;
height = 24; # margin-left = 36 + 3;
spacing = 6; # margin-right = 36 + 3;
margin-left = 33 + 3; # margin-bottom = 3;
margin-right = 33 + 3; modules-left = [
margin-bottom = 3; "custom/launcher"
reload_style_on_change = true; "wlr/taskbar"
modules-left = [ # "privacy"
"niri/language" ];
"niri/workspaces" modules-right = [
"wlr/taskbar" "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 = [ backlight = {
(ifLaptop "group/laptop") format = "{percent}% {icon}";
"wireplumber" format-icons = [
"tray" "󰃚"
"privacy" "󰃛"
(ifLaptop "power-profiles-daemon") "󰃜"
"idle_inhibitor" "󰃝"
"custom/notification" "󰃞"
"󰃟"
"󰃠"
]; ];
"niri/workspaces" = { };
format = "{index}"; idle_inhibitor = {
format-icons = { format = "{icon}";
"1" = ""; format-icons = {
"2" = ""; activated = "󰅶";
"3" = ""; deactivated = "󰾪";
"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";
}; };
}; };
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 = '' settings.top = {
@define-color base00 #${colors.base00}; position = "top";
@define-color base01 #${colors.base01}; height = 33;
@define-color base02 #${colors.base02}; spacing = 0;
@define-color base03 #${colors.base03}; # margin-left = 36 + 3;
@define-color base04 #${colors.base04}; # margin-right = 36 + 3;
@define-color base05 #${colors.base05}; # margin-top = 3;
@define-color base06 #${colors.base06}; modules-left = [
@define-color base07 #${colors.base07}; "custom/notification"
@define-color base08 #${colors.base08}; "tray"
@define-color base09 #${colors.base09}; ];
@define-color base0A #${colors.base0A}; modules-center = ["clock"];
@define-color base0B #${colors.base0B}; modules-right = [
@define-color base0C #${colors.base0C}; "privacy"
@define-color base0D #${colors.base0D}; "network"
@define-color base0E #${colors.base0E}; "cpu"
@define-color base0F #${colors.base0F}; "memory"
* { "wireplumber"
font-family: ${config.stylix.fonts.sansSerif.name}, FontAwesome; (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-weight: 500;
font-size: 100%; font-size: 16px;
} }
window#waybar {
background-color: transparent; .modules-left, .modules-center, .modules-right, window#waybar {
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; background-color: @base00;
border-radius: 24px;
border: 3px solid @base0D;
color: @base05; color: @base05;
padding: 0 0.4em; border-radius: 12px;
} }
tooltip {
window#waybar {
border-radius: 0;
}
/* for leftmost modules */
.modules-left, .modules-center, .modules-right {
padding-left: 3px;
background-color: @base00;
color: @base05;
}
window#bottom.modules-center {
background-color: transparent
}
tooltip {
background: @base01; background: @base01;
border: 1px solid @base0E; border: 1px solid @base0D;
}
tooltip label {
color: @base05;
}
button {
box-shadow: inset 0 -3px transparent;
border-radius: 16px; border-radius: 16px;
} padding: 2em;
button:hover { }
tooltip label {
color: @base05;
}
button {
box-shadow: inset 0 -3px transparent;
border-radius: 6px;
}
button:hover {
background: inherit; background: inherit;
box-shadow: inset 0 -3px transparent; box-shadow: inset 0 -3px transparent;
} }
#mode {
background-color: rgba(0, 0, 0, 0.2); #backlight,
box-shadow: inset 0 -3px @base05; #battery,
} #clock,
#battery, #cpu,
#backlight, #custom-launcher,
/* #workspaces, #custom-notification,
#taskbar, #idle_inhibitor,
#privacy, */ #language,
#taskbar button, #memory,
#language, #network,
#clock, #power-profiles-daemon,
#battery, #privacy,
#backlight, #privacy-item,
#wireplumber, #taskbar button,
#workspaces button, #taskbar,
#custom-notification, #tray button,
#idle_inhibitor, #tray,
#power-profiles-daemon, #wireplumber,
#privacy-item, #workspaces button,
#custom-separator { #workspaces {
padding: 0 0.3em; all: unset;
} border-radius: 9px;
#tray button { background-color: @base01;
padding: 0 0.3em; margin: 3px 3px 3px 0;
margin: 0 0.2em; padding: 0 0.42em;
} min-width: 1em;
#workspaces button.active { }
color: @base0D;
} #backlight,
#taskbar button:hover { #battery,
box-shadow: transparent; #custom-launcher,
} #custom-notification,
#taskbar.empty, #idle_inhibitor,
window#empty { #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; background-color: transparent;
} }
#battery.critical:not(.charging) {
color: @base09; #tray > .needs-attention {
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; -gtk-icon-effect: highlight;
background-color: @base08; background-color: @base08;
} }
#privacy-item.screenshare {
color: @base0C; #tray > .passive {
} -gtk-icon-effect: dim;
#privacy-item.audio-in { }
color: @base0E;
} /* #workspaces button.active {
''; color: @base00;
background-color: @base0D;
} */
label:focus {
background-color: #000000;
}
'';
} }

View File

@ -1,24 +1,26 @@
{ {
getExe, lib,
perSystem, osConfig,
pkgs, pkgs,
lockscreen, 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; network-manager-applet.enable = true;
playerctld.enable = true; playerctld.enable = true;
swaync = import ./swaync;
swayosd.enable = true;
udiskie.enable = true;
wpaperd.enable = true; wpaperd.enable = true;
copyq = { }
enable = true; {
package = perSystem.nixpkgs-stable.copyq;
};
gnome-keyring = {
enable = true;
components = ["secrets"];
};
gammastep = { gammastep = {
enable = true;
provider = "manual"; provider = "manual";
latitude = 49.6; latitude = 49.6;
longitude = 36.1; longitude = 36.1;
@ -28,34 +30,28 @@
night = 3000; night = 3000;
}; };
}; };
swayosd = { gnome-keyring.components = ["secrets"];
enable = true; hypridle.settings = {
topMargin = 0.8; 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 = { udiskie = {
enable = true;
automount = false; automount = false;
notify = true; notify = true;
tray = "auto"; 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"; control-center-layer = "overlay";
# Notification settings # Notification settings
positionX = "right"; positionX = "left";
positionY = "top"; positionY = "top";
notification-2fa-action = true; notification-2fa-action = true;
notification-inline-replies = false; notification-inline-replies = false;
notification-icon-size = 32; notification-icon-size = 48;
notification-body-image-height = 100; notification-body-image-height = 100;
notification-body-image-width = 200; notification-body-image-width = 200;
notification-window-width = 400; notification-window-width = 400;
# Control center settings # Control center settings
control-center-positionX = "right"; control-center-positionX = "left";
control-center-positionY = "top"; control-center-positionY = "top";
control-center-width = 500; control-center-width = 500;
control-center-exclusive-zone = true; control-center-exclusive-zone = true;
@ -59,8 +59,12 @@
}; };
}; };
}; };
# TODO: disable stylix, redo everything
style = '' style = ''
/*** Global ***/ * {
all: unset;
}
progress, progress,
progressbar, progressbar,
trough { trough {
@ -70,20 +74,19 @@
.app-icon, .app-icon,
.image { .image {
-gtk-icon-effect: none; -gtk-icon-effect: none;
padding-right: 0.5rem;
} }
.notification-action { .notification-action {
border-radius: 12px; border-radius: 9px;
margin: 0.5rem; margin: 3px;
} }
.close-button { .close-button {
margin: 24px; margin: 12px;
padding: 0.2rem; border-radius: 6px;
border-radius: 16px;
} }
/*** Notifications ***/
.notification-group.collapsed .notification-group.collapsed
.notification-row:not(:last-child) .notification-row:not(:last-child)
.notification-action, .notification-action,
@ -103,21 +106,21 @@
.notification.normal, .notification.normal,
.notification.critical, .notification.critical,
.control-center { .control-center {
margin: 16px; border-radius: 12px;
border-radius: 7px; margin: 6px;
} }
.floating-notifications, .floating-notifications,
.notification-content { .notification-content {
border-radius: 7px; padding: 0.5rem;
margin: 3px;
border-radius: 9px;
} }
.control-center-list { .control-center-list {
background: transparent; background: transparent;
} }
/*** Widgets ***/
/* Title widget */
.widget-title { .widget-title {
margin: 0.5rem; margin: 0.5rem;
} }
@ -127,11 +130,10 @@
} }
.widget-title > button { .widget-title > button {
border-radius: 16px; border-radius: 9px;
padding: 0.5rem; padding: 0.5rem;
} }
/* DND Widget */
.widget-dnd { .widget-dnd {
margin: 0.5rem; margin: 0.5rem;
} }
@ -141,23 +143,23 @@
} }
.widget-dnd > switch { .widget-dnd > switch {
border-radius: 16px; border-radius: 9px;
} }
.widget-dnd > switch slider { .widget-dnd > switch slider {
border-radius: 16px; margin: 3px;
padding: 0.25rem; border-radius: 6px;
padding: 0px;
} }
/* Mpris widget */
.widget-mpris .widget-mpris-player { .widget-mpris .widget-mpris-player {
border-radius: 16px; border-radius: 12px;
margin: 0.5rem; margin: 0.5rem;
padding: 0.5rem; padding: 0.5rem;
} }
.widget-mpris .widget-mpris-player .widget-mpris-album-art { .widget-mpris .widget-mpris-player .widget-mpris-album-art {
border-radius: 16px; border-radius: 9px;
} }
.widget-mpris .widget-mpris-player .widget-mpris-title { .widget-mpris .widget-mpris-player .widget-mpris-title {
@ -169,9 +171,8 @@
} }
.widget-mpris .widget-mpris-player > box > button { .widget-mpris .widget-mpris-player > box > button {
border: 1px solid transparent; border-radius: 6px;
border-radius: 16px; padding: 3px;
padding: 0.25rem;
} }
''; '';
} }

View File

@ -62,44 +62,57 @@ in {
}; };
languages = { languages = {
language-server = { language-server = {
clangd.command = "${pkgs.clang-tools}/bin/clangd";
# markdown-oxide.command = getExe pkgs.markdown-oxide; # markdown-oxide.command = getExe pkgs.markdown-oxide;
# nil.command = getExe pkgs.nil; # nixd.command = getExe pkgs.nixd;
nixd.command = getExe pkgs.nixd; # pyright = {
# pyright.command = getExe pkgs.pyright; # command = getExe pkgs.pyright;
# pyright.args = ["-"]; # args = ["-"];
ruff.command = getExe pkgs.ruff; # };
ruff.args = ["server"];
# rust-analyzer.command = getExe pkgs.rust-analyzer; # rust-analyzer.command = getExe pkgs.rust-analyzer;
# texlab.command = getExe pkgs.texlab; # 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; tinymist.command = getExe pkgs.tinymist;
vscode-json-language-server.command = getExe pkgs.nodePackages.vscode-json-languageserver;
yaml-language-server.command = getExe pkgs.yaml-language-server;
zk = { zk = {
command = getExe pkgs.zk; command = getExe pkgs.zk;
args = ["lsp"]; args = ["lsp"];
}; };
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;
};
}; };
language = [ language = [
{ {
name = "nix"; name = "nix";
auto-format = true; auto-format = true;
formatter.command = getExe pkgs.alejandra; language-servers = ["nil"];
language-servers = ["nixd"];
} }
# {
# name = "latex";
# auto-format = true;
# formatter.command = "${pkgs.texlivePackages.latexindent}/bin/latexindent";
# language-servers = ["texlab"];
# }
{ {
name = "typst"; name = "typst";
auto-format = true; auto-format = true;
@ -109,23 +122,21 @@ in {
{ {
name = "markdown"; name = "markdown";
# auto-format = true; # auto-format = true;
# formatter.command = "${pkgs.comrak}/bin/comrak";
language-servers = ["zk" "markdown-oxide"]; language-servers = ["zk" "markdown-oxide"];
} }
{ {
name = "c"; name = "c";
auto-format = true; auto-format = true;
formatter.command = "${pkgs.clang-tools}/bin/clang-format"; # formatter.command = "${pkgs.clang-tools}/bin/clang-format";
} }
{ {
name = "cpp"; name = "cpp";
auto-format = true; auto-format = true;
formatter.command = "${pkgs.clang-tools}/bin/clang-format"; # formatter.command = "${pkgs.clang-tools}/bin/clang-format";
} }
{ {
name = "fsharp"; name = "fsharp";
auto-format = true; auto-format = true;
# formatter.command = getExe pkgs.fantomas;
language-servers = ["fsac"]; language-servers = ["fsac"];
scope = "source.fs"; scope = "source.fs";
roots = ["fsproj" "sln" ".git"]; roots = ["fsproj" "sln" ".git"];
@ -136,6 +147,25 @@ in {
# language-servers = ["rust-analyzer"]; # language-servers = ["rust-analyzer"];
# formatter.command = getExe pkgs.rustfmt; # 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"; name = "python";
auto-format = true; auto-format = true;

View File

@ -15,11 +15,11 @@ in {
programs.zed-editor = { programs.zed-editor = {
enable = true; enable = true;
extensions = [ extensions = [
"nix" "bash"
"fsharp" "fsharp"
# "latex"
"typst"
"justfile" "justfile"
"nix"
"typst"
]; ];
userSettings = { userSettings = {
vim_mode = true; vim_mode = true;
@ -35,30 +35,29 @@ in {
}; };
"Nix" = { "Nix" = {
language-servers = [ language-servers = [
"!nil" "nil"
"nixd"
]; ];
formatter = { # formatter = {
external.command = getExe pkgs.alejandra; # external.command = getExe pkgs.alejandra;
}; # };
};
"Rust" = {
formatter = {
external = {
command = getExe pkgs.rustfmt;
arguments = ["--edition" "2021"];
};
};
}; };
# "Rust" = {
# formatter = {
# external = {
# command = getExe pkgs.rustfmt;
# arguments = ["--edition" "2021"];
# };
# };
# };
"typst" = { "typst" = {
language-servers = ["tinymist"]; language-servers = ["tinymist"];
format_on_save = "on"; format_on_save = "on";
formatter = { # formatter = {
external = { # external = {
command = getExe pkgs.typstyle; # command = getExe pkgs.typstyle;
arguments = ["-i" "{buffer_path}"]; # arguments = ["-i" "{buffer_path}"];
}; # };
}; # };
}; };
"Python" = { "Python" = {
format_on_save = "on"; format_on_save = "on";
@ -73,6 +72,15 @@ in {
}; };
}; };
lsp = { lsp = {
bash-language-server = {
binary = {
path = getExe pkgs.bash-language-server;
env = {
"SHELLCHECK_PATH" = getExe pkgs.shellcheck;
"SHFMT_PATH" = getExe pkgs.shfmt;
};
};
};
fsautocomplete = { fsautocomplete = {
binary = { binary = {
path = getExe pkgs.fsautocomplete; path = getExe pkgs.fsautocomplete;
@ -91,32 +99,32 @@ in {
path = "${pkgs.clang-tools}/bin/clangd"; path = "${pkgs.clang-tools}/bin/clangd";
}; };
}; };
rust-analyzer = { # rust-analyzer = {
binary = { # binary = {
arguments = []; # arguments = [];
path = getExe pkgs.rust-analyzer; # path = getExe pkgs.rust-analyzer;
}; # };
}; # };
ruff = { ruff = {
binary = { binary = {
arguments = []; arguments = [];
path = getExe pkgs.ruff; path = getExe pkgs.ruff;
}; };
}; };
nixd = { # nixd = {
binary = {
arguments = [];
path = getExe pkgs.nixd;
};
initialization_options.formatting.command = [(getExe pkgs.alejandra)];
};
# nil = {
# binary = { # binary = {
# arguments = []; # arguments = [];
# path = getExe pkgs.nil; # path = getExe pkgs.nixd;
# }; # };
# initialization_options.formatting.command = [(getExe pkgs.alejandra)]; # initialization_options.formatting.command = [(getExe pkgs.alejandra)];
# }; # };
nil = {
binary = {
arguments = [];
path = getExe pkgs.nil;
};
settings.formatting.command = [(getExe pkgs.alejandra)];
};
# texlab = { # texlab = {
# binary = { # binary = {
# arguments = []; # arguments = [];
@ -129,6 +137,16 @@ in {
path = getExe pkgs.tinymist; 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 = { telemetry = {
diagnostics = false; diagnostics = false;

View File

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

View File

@ -1,117 +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.kernel.sysctl = {
"dev.tty.ldisc_autoload" = 0;
"fs.protected_fifos" = 2;
"fs.protected_regular" = 2;
"fs.suid_dumpable" = 0;
"kernel.kptr_restrict" = 2;
# "kernel.modules_disabled" = 1;
"kernel.sysrq" = 0;
"kernel.unprivileged_bpf_disabled" = 1;
"net.ipv4.conf.all.forwarding" = 0;
"net.ipv4.conf.all.log_martians" = 1;
"net.ipv4.conf.all.rp_filter" = 1;
"net.ipv4.conf.all.send_redirects" = 0;
"net.ipv4.conf.default.accept_redirects" = 0;
"net.ipv4.conf.default.log_martians" = 1;
"net.ipv6.conf.all.accept_redirects" = 0;
"net.ipv6.conf.default.accept_redirects" = 0;
};
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

@ -16,7 +16,7 @@ in {
gcr_4 gcr_4
libsecret libsecret
]; ];
# programs.seahorse.enable = true; programs.seahorse.enable = true;
services.gnome.gnome-keyring.enable = true; services.gnome.gnome-keyring.enable = true;
xdg.portal.config.common = { xdg.portal.config.common = {
"org.freedesktop.impl.portal.Secret" = ["gnome-keyring"]; "org.freedesktop.impl.portal.Secret" = ["gnome-keyring"];

View File

@ -24,7 +24,10 @@ in {
services.displayManager.cosmic-greeter.enable = true; services.displayManager.cosmic-greeter.enable = true;
}) })
(mkIf (cfg.displayManager == "gdm") { (mkIf (cfg.displayManager == "gdm") {
services.xserver.displayManager.gdm.enable = true; services.displayManager.gdm = {
enable = true;
wayland = true;
};
}) })
(mkIf (cfg.displayManager == "greetd") { (mkIf (cfg.displayManager == "greetd") {
programs.regreet.enable = true; programs.regreet.enable = true;

View File

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

View File

@ -1,22 +0,0 @@
{
config,
lib,
...
}:
with lib; let
cfg = config.desktop.gnome;
in {
options = {
desktop.gnome.enable =
mkEnableOption "enable gnome desktop";
};
config = mkIf cfg.enable {
module.desktop.displayManager = "gdm";
sound.pipewire.enable = true;
services.xserver = {
enable = true;
desktopManager.gnome.enable = true;
};
};
}

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,33 +0,0 @@
{
config,
pkgs,
lib,
...
}: let
inherit (lib) mkIf mkEnableOption;
cfg = config.desktop.niri;
in {
options = {
desktop.niri.enable =
mkEnableOption "enable niri desktop";
};
config = mkIf cfg.enable {
module.desktop.displayManager = "greetd";
module.desktop.gnome-keyring.enable = true;
sound.pipewire.enable = true;
security = {
soteria.enable = true; # polkit agent in rust
pam.services.gtklock = {};
};
programs.niri.enable = true; # wayland compositor in rust
xdg.portal = {
enable = true;
extraPortals = with pkgs; [
xdg-desktop-portal-gnome
xdg-desktop-portal-gtk
];
config.niri.default = ["gnome" "gtk"];
};
};
}

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

@ -7,9 +7,6 @@
with lib; let with lib; let
cfg = config.desktop.plasma; cfg = config.desktop.plasma;
in { in {
imports = [
./common/pipewire.nix
];
options = { options = {
desktop.plasma = { desktop.plasma = {
enable = mkEnableOption "enable plasma desktop"; enable = mkEnableOption "enable plasma desktop";

View File

@ -1,11 +1,21 @@
{lib, ...}: { {
environment.variables = { lib,
LESS = "-R --mouse"; 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; networking.networkmanager.enable = true;
boot.tmp.cleanOnBoot = lib.mkDefault true;
services.openssh = { services.openssh = {
settings.X11Forwarding = false; settings.X11Forwarding = false;
@ -24,4 +34,12 @@
"sntrup761x25519-sha512@openssh.com" "sntrup761x25519-sha512@openssh.com"
]; ];
}; };
services.journald.extraConfig = ''
SystemMaxUse=1G
'';
systemd.coredump.extraConfig = ''
Storage=none
ProcessSizeMax=0
'';
} }

View File

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

View File

@ -3,16 +3,18 @@
lib, lib,
... ...
}: let }: let
inherit (lib) mkIf mkEnableOption; inherit (lib) types mkOption;
cfg = config.locale.ukrainian;
in { in {
options = { options = {
locale.ukrainian.enable = module.locale = mkOption {
mkEnableOption "enables ukrainian locale"; 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 i18n = let
locale = "uk_UA.UTF-8"; inherit (config.module) locale;
in { in {
defaultLocale = locale; defaultLocale = locale;
extraLocaleSettings = { extraLocaleSettings = {

View File

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

View File

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

View File

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

View File

@ -5,57 +5,81 @@
pkgs, pkgs,
... ...
}: let }: let
inherit (builtins) fetchurl;
inherit (lib) mkEnableOption mkOption mkIf; inherit (lib) mkEnableOption mkOption mkIf;
inherit (lib) optionalAttrs; inherit (lib) optionalAttrs;
inherit (lib.types) bool str; inherit (lib.types) bool str;
inherit (config.system) stateVersion;
cfg = config.module.stylix; cfg = config.module.stylix;
fromBase16Schemes = f: "${pkgs.base16-schemes}/share/themes/${f}.yaml";
interPackage = pkgs.inter-nerdfont; interPackage = pkgs.inter-nerdfont;
iosevkaPackage = iosevkaPackage = pkgs.nerd-fonts.iosevka;
if stateVersion == "24.11" iosevkaTermPackage = pkgs.nerd-fonts.iosevka-term;
then pkgs.nerdfonts.override {fonts = ["Iosevka"];} mesloLgPackage = pkgs.nerd-fonts.meslo-lg;
else pkgs.nerd-fonts.iosevka; # jetBrainsMonoPackage = pkgs.nerd-fonts.jetbrains-mono;
iosevkaTermPackage = geistMonoPackage = pkgs.nerd-fonts.geist-mono;
if stateVersion == "24.11" geistPackage = pkgs.geist-font;
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;
wallpapers = { 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"; url = "https://w.wallhaven.cc/full/p9/wallhaven-p9m7ve.png";
name = "wallhaven-p9m7ve.png"; name = "wallhaven-p9m7ve.png";
sha256 = "0r7dl4fjwv2p5q5ggr4sjsl2h5m0s98k9qhiwkvmwi010lyffkx7"; sha256 = "0r7dl4fjwv2p5q5ggr4sjsl2h5m0s98k9qhiwkvmwi010lyffkx7";
}; };
mountains-pink = builtins.fetchurl { mountains-pink = fetchurl {
url = "https://w.wallhaven.cc/full/yq/wallhaven-yq7gox.jpg"; url = "https://w.wallhaven.cc/full/yq/wallhaven-yq7gox.jpg";
name = "wallhaven-yq7gox.jpg"; name = "wallhaven-yq7gox.jpg";
sha256 = "09s31spp9mq71fgkl1w80nzdc1458p1gjfyi3y6fy14wj2dza0pj"; sha256 = "09s31spp9mq71fgkl1w80nzdc1458p1gjfyi3y6fy14wj2dza0pj";
}; };
mountains-black = builtins.fetchurl { mountains-black = fetchurl {
url = "https://w.wallhaven.cc/full/9d/wallhaven-9djzww.jpg"; url = "https://w.wallhaven.cc/full/9d/wallhaven-9djzww.jpg";
name = "wallhaven-9djzww.jpg"; name = "wallhaven-9djzww.jpg";
sha256 = "1p2si922i9qs09h8c74lrvx0f284g0xvm7lh85gk1x7lqhn611zm"; sha256 = "1p2si922i9qs09h8c74lrvx0f284g0xvm7lh85gk1x7lqhn611zm";
}; };
cyber-dawn = builtins.fetchurl { cyber-dawn = fetchurl {
url = "https://w.wallhaven.cc/full/ym/wallhaven-ymo2y7.png"; url = "https://w.wallhaven.cc/full/ym/wallhaven-ymo2y7.png";
name = "wallhaven-ymo2y7.png"; name = "wallhaven-ymo2y7.png";
sha256 = "1b3j0hxxy8m25scq42lxsxc99xvr15pha1j4wplgz761asrvxly3"; 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 = { themes = {
rose-pine-dawn = { rose-pine-dawn = {
polarity = "light"; polarity = "light";
scheme = "${pkgs.base16-schemes}/share/themes/rose-pine-dawn.yaml"; scheme = fromBase16Schemes "rose-pine-dawn";
wallpaper = wallpapers.cyber-dawn; wallpaper = wallpapers.cyber-dawn;
serif = { serif = {
@ -76,12 +100,12 @@
}; };
rose-pine-moon = { rose-pine-moon = {
polarity = "dark"; polarity = "dark";
scheme = "${pkgs.base16-schemes}/share/themes/rose-pine-moon.yaml"; scheme = fromBase16Schemes "rose-pine-moon";
wallpaper = wallpapers.cyber-dawn; wallpaper = wallpapers.cyber-dawn;
serif = { serif = {
package = iosevkaPackage; package = interPackage;
name = "Iosevka Nerd Font Propo"; name = "Inter Nerd Font";
}; };
monospace = { monospace = {
@ -95,10 +119,52 @@
size = 24; 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 = { nord = {
polarity = "dark"; polarity = "dark";
scheme = "${pkgs.base16-schemes}/share/themes/nord.yaml"; scheme = fromBase16Schemes "nord";
wallpaper = builtins.fetchurl { wallpaper = fetchurl {
url = "https://w.wallhaven.cc/full/l8/wallhaven-l8l9gq.png"; url = "https://w.wallhaven.cc/full/l8/wallhaven-l8l9gq.png";
name = "wallhaven-l8l9gq.png"; name = "wallhaven-l8l9gq.png";
sha256 = "0ypr44sg0fn55m1b52dgr1nnscpi2p6rfkjsm7vvrdqw7bafbx2z"; sha256 = "0ypr44sg0fn55m1b52dgr1nnscpi2p6rfkjsm7vvrdqw7bafbx2z";
@ -123,8 +189,8 @@
nord-light = { nord-light = {
polarity = "light"; polarity = "light";
scheme = "${pkgs.base16-schemes}/share/themes/nord-light.yaml"; scheme = fromBase16Schemes "nord-light";
wallpaper = builtins.fetchurl { wallpaper = fetchurl {
url = "https://w.wallhaven.cc/full/l8/wallhaven-l8l9gq.png"; url = "https://w.wallhaven.cc/full/l8/wallhaven-l8l9gq.png";
name = "wallhaven-l8l9gq.png"; name = "wallhaven-l8l9gq.png";
sha256 = "0ypr44sg0fn55m1b52dgr1nnscpi2p6rfkjsm7vvrdqw7bafbx2z"; sha256 = "0ypr44sg0fn55m1b52dgr1nnscpi2p6rfkjsm7vvrdqw7bafbx2z";
@ -149,8 +215,8 @@
helios = { helios = {
polarity = "dark"; polarity = "dark";
scheme = "${pkgs.base16-schemes}/share/themes/helios.yaml"; scheme = fromBase16Schemes "helios";
wallpaper = builtins.fetchurl { wallpaper = fetchurl {
url = "https://w.wallhaven.cc/full/lq/wallhaven-lqorw2.png"; url = "https://w.wallhaven.cc/full/lq/wallhaven-lqorw2.png";
name = "wallhaven-lqorw2.png"; name = "wallhaven-lqorw2.png";
sha256 = "sha256:1rjchjq4pc2jyq8dvpa17mmscv9qcm0h0zv468lsf8s51anpid6p"; sha256 = "sha256:1rjchjq4pc2jyq8dvpa17mmscv9qcm0h0zv468lsf8s51anpid6p";
@ -175,8 +241,8 @@
sulphurpool = { sulphurpool = {
polarity = "dark"; polarity = "dark";
scheme = "${pkgs.base16-schemes}/share/themes/atelier-sulphurpool.yaml"; scheme = fromBase16Schemes "atelier-sulphurpool";
wallpaper = builtins.fetchurl { wallpaper = fetchurl {
url = "https://w.wallhaven.cc/full/rd/wallhaven-rd5q3m.jpg"; url = "https://w.wallhaven.cc/full/rd/wallhaven-rd5q3m.jpg";
name = "wallhaven-rd5q3m.jpg"; name = "wallhaven-rd5q3m.jpg";
sha256 = "sha256:1sa2739vwwv1xafzjvxlg3kvq26xmcxg6hrwq29q40j617r63sy6"; sha256 = "sha256:1sa2739vwwv1xafzjvxlg3kvq26xmcxg6hrwq29q40j617r63sy6";
@ -201,7 +267,7 @@
himalaya = { himalaya = {
# lightly pink like himalayan salt # lightly pink like himalayan salt
polarity = "light"; polarity = "light";
scheme = "${pkgs.base16-schemes}/share/themes/atelier-plateau-light.yaml"; scheme = fromBase16Schemes "atelier-plateau-light";
wallpaper = wallpapers.mountains-pink; wallpaper = wallpapers.mountains-pink;
serif = { serif = {
@ -214,6 +280,48 @@
name = "MesloLGM Nerd Font Mono"; 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 = { cursor = {
package = pkgs.bibata-cursors; package = pkgs.bibata-cursors;
name = "Bibata-Modern-Ice"; name = "Bibata-Modern-Ice";
@ -243,6 +351,7 @@ in {
}; };
config = mkIf cfg.enable { config = mkIf cfg.enable {
fonts.packages = [pkgs.nerd-fonts.symbols-only];
stylix = stylix =
{ {
enable = true; enable = true;

View File

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

View File

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

View File

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

View File

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

View File

@ -11,6 +11,7 @@ in {
imports = [ imports = [
./boot ./boot
./hardware ./hardware
./misc
./networking ./networking
./nix ./nix
./security ./security
@ -43,15 +44,26 @@ in {
keyboards = { keyboards = {
internal = { internal = {
ids = ["0001:0001" "048d:c101"]; ids = ["0001:0001" "048d:c101"];
settings.main = { settings.main = let
a = "lettermod(alt, a, 200, 150)"; # finger = mod;
s = "lettermod(meta, s, 200, 150)"; pinky = "alt";
d = "lettermod(control, d, 200, 150)"; ring = "meta";
f = "lettermod(shift, f, 200, 150)"; middle = "control";
j = "lettermod(shift, j, 200, 150)"; index = "shift";
k = "lettermod(control, k, 200, 150)"; # timeouts
l = "lettermod(meta, l, 200, 150)"; idle = "200";
";" = "lettermod(alt, ;, 200, 150)"; 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, pkgs,
# inputs,
lib, lib,
... ...
}: { }: {
# imports = with inputs; [lix.nixosModules.default];
nix = { nix = {
package = pkgs.lixPackageSets.latest.lix; package = pkgs.lixPackageSets.latest.lix;
channel.enable = false; channel.enable = false;
daemonCPUSchedPolicy = "idle"; daemonCPUSchedPolicy = "idle";
optimise = {
automatic = true;
dates = ["weekly"];
};
settings = { settings = {
auto-optimise-store = true;
experimental-features = [ experimental-features = [
"nix-command" "nix-command"
"flakes" "flakes"
@ -32,8 +39,5 @@
nix.settings.use-cgroups = true; nix.settings.use-cgroups = true;
# for container in builds support # for container in builds support
nix.settings.system-features = nix.settings.system-features = ["uid-range"];
if lib.versionAtLeast lib.version "25.05pre"
then ["uid-range"]
else lib.mkDefault ["uid-range"];
} }

View File

@ -1,6 +1,7 @@
{ {
imports = [ imports = [
./common.nix ./common.nix
./distibuted-build.nix
./substituters.nix ./substituters.nix
]; ];
} }

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