Compare commits

..

138 commits

Author SHA1 Message Date
559e23faae
shared/pkgs: remove bolt-launcher 2025-02-22 23:14:07 +01:00
849b43d69f
flake: switch to hjem-rum's PR 2025-02-22 23:00:53 +01:00
1a159bb60c
editors/neovim: switch to nil for nix 2025-02-22 23:00:45 +01:00
74749c5af1
flake: switch back to upstream hjem/hjem-rum 2025-02-22 17:29:41 +01:00
558c12a420
editors/neovim: add some mini.nvim plugins 2025-02-22 00:40:02 +01:00
98a319696f
programs/hyprland: switch to hjem-rum 2025-02-22 00:39:41 +01:00
4e4a2d86e5
flake: add own fork of hjem/hjem-rum 2025-02-22 00:39:32 +01:00
4abdc5e278
programs/misc: add devenv 2025-02-19 18:00:16 +01:00
dd9833a199
shell/zsh: add alias for lsd 2025-02-19 18:00:11 +01:00
cc10685f6d
programs/lsd: add lsd 2025-02-19 18:00:01 +01:00
07fbc5de39
flake: add hjem-rum 2025-02-19 17:59:51 +01:00
0e72c5f67d
hjem/environment: update to provide environment script 2025-02-18 19:02:00 +01:00
a3a3aa8231
modules: avoid circular dependencies 2025-02-18 13:19:22 +01:00
cefaa9a11a
hjem/environment: add uwsm support 2025-02-18 13:19:11 +01:00
5a0e7a92f4
core/boot: dont setup systemd-boot on servers 2025-02-18 10:19:45 +01:00
d3bb2e0e57
ghostty: support nesting attrs
This makes the hjem ghostty module more RFC42 compliant, as it can now
map nested attribute sets one level deep (as per Ghostty's configuration
format).
2025-02-18 09:33:53 +01:00
54ae0fdd92
treewide: add hjem module for ghostty 2025-02-17 23:12:39 +01:00
b84f8374cd
shell/zsh: update KEYTIMEOUT to be instant
Removes a lot of the annoying delay.
2025-02-17 21:54:11 +01:00
55a3c1bce2
hjem/environment: source env file only once 2025-02-17 14:12:42 +01:00
d049c9ce43
hyprland/binds: remove cursor from grimblast 2025-02-15 23:20:48 +01:00
3748b6c433
flake: update inputs 2025-02-15 01:20:46 +01:00
d393b01634
modules/programs: switch back to vesktop with electron override (fixes broken screenshare) 2025-02-15 01:20:42 +01:00
c122cea302
treewide: use original MoreWaita with patch
I originally made my own MoreWaita fork to add a few icons I needed,
anticipating for my future ags shell, but applying a patch actually made
way more sense, and is also simpler than maintaining my own fork.
2025-02-15 01:02:35 +01:00
2ee69adcd7
assets/icons: add morewaita additional icons 2025-02-15 00:55:40 +01:00
edd039947c
programs/waybar: switch to hjem systemd 2025-02-15 00:50:14 +01:00
d11fb3a0e2
hjem/collection: add systemd module
This adds a systemd module locally, allowing to define your own services
at hjem level rather than systemd level.
2025-02-15 00:50:11 +01:00
174b6251e8
core/hardware: add bluetooth 2025-02-14 18:55:53 +01:00
9ecbef95bf
flake: add fork of MoreWaita 2025-02-14 18:55:13 +01:00
9774000f64
hjem/collection: add firefox module 2025-02-14 00:01:37 +01:00
876153ba2c
programs/firefox: add extra policies, cleanup 2025-02-13 19:56:58 +01:00
906ee6c1ed
editors/neovim: enable gitsigns 2025-02-13 16:42:58 +01:00
276bc305cf
editors/neovim: add smart columns 2025-02-13 16:42:58 +01:00
806a59d366
shell/zsh: update config, add completions, cleanup 2025-02-13 16:42:58 +01:00
a3f40b2778
flake: update inputs 2025-02-13 16:42:58 +01:00
f5d16c5e87
programs/editors: add basedpyright-fix for neovim 2025-02-13 16:42:58 +01:00
8cdb458c0c
programs/games: remove ankama-launcher 2025-02-13 16:42:58 +01:00
9648fdf0a5
programs/discord: autostart 2025-02-13 16:42:58 +01:00
6129318685
hjem/collection: add autostart module 2025-02-13 16:42:58 +01:00
2719bbada1
modules: consistently define systemd services 2025-02-13 16:42:58 +01:00
d14fc3c13d
programs/pcmanfm: add daemon service 2025-02-13 16:42:58 +01:00
749de574a0
programs: thunar -> pcmanfm 2025-02-13 16:42:58 +01:00
c5e559afc0
services/gtk: add awaita-icon-theme as fallback 2025-02-13 16:42:58 +01:00
8569d84f5b
options/style: switch icon theme to MoreWaita 2025-02-13 16:42:58 +01:00
76ee718615
flake: add morewaita as input 2025-02-13 16:42:58 +01:00
6c27c49918
hyprland/binds: run anyrun with uwsm 2025-02-13 16:42:58 +01:00
aa36a6eda9
services/gtk: add gtk3/4 settings in dconf
dconf is seemingly the preferred way to setup GTK theming and settings
(including icon themes etc.).
2025-02-13 16:42:58 +01:00
b15f8de08f
services/gtk: add back dconf settings
`xdg-desktop-portal-gtk` did not seem to open my apps with the correct
themes when using `xdg-open`, which I assume to be because it's trying
to read from `dconf` in order to set the themes correctly.
2025-02-13 16:42:58 +01:00
a6e1683060
shell/starship: add git short status 2025-02-13 16:42:58 +01:00
b6d62c71fe
services/gtk: remove dconf 2025-02-13 16:42:58 +01:00
a1ebf9d7fa
options/style: add assertion for icon theme 2025-02-13 16:42:58 +01:00
ceac787218
options/style: switch to kora as default icon theme 2025-02-13 16:42:58 +01:00
6f4e01d8fa
services/gtk: use singleton to remove unnecessary list 2025-02-13 16:42:58 +01:00
22a9c7e80b
readme: update README 2025-02-13 16:42:58 +01:00
c0dda38da1
treewide: export shared/modules/hjem
This method takes inspiration from how
[hjem-rum](https://github.com/snugnug/hjem-rum) does it
2025-02-13 16:42:58 +01:00
1a299516a3
shared/modules/hjem: update environment module to use ~/.profile instead
I decided to go with the simpler solution of using `~/.profile`, as that
is the only option that will ensure that the environment will be set
correctly. If you launch a more barebones compositor such as Hyprland
from your tty, since it won't be launched by systemd it will not inherit
the environment.
2025-02-13 16:42:58 +01:00
f6fedf748f
treewide: add environment module from hjem PR
This commit adds the module I made for hjem (https://github.com/feel-co/hjem/pull/16). Needs to be removed after it gets merged.
2025-02-13 16:42:58 +01:00
3540b0af76
programs: add comma with nix-index-database 2025-02-13 16:42:58 +01:00
c208306c96
flake: nix-index-db -> nix-index-database 2025-02-13 16:42:58 +01:00
46c78fe6e1
core/nix: remove unused attribute 2025-02-13 16:42:58 +01:00
50ed7b7b4d
services/gnome: add seahorse 2025-02-13 16:42:58 +01:00
8bd8c3f995
flake: remove non existing override 2025-02-13 16:42:58 +01:00
7a109c779e
flake: update inputs 2025-02-13 16:42:58 +01:00
Eman Resu
4e6b2a1162
flake: remove duplicate inputs 2025-02-13 16:42:58 +01:00
499973debf
flake: update inputs 2025-02-13 16:42:58 +01:00
b67d532e24
editors/neovim: add nixd 2025-02-13 16:42:58 +01:00
dfc86765ff
flake: update nvf 2025-02-13 16:42:58 +01:00
4dcf7a0890
modules: move nh from core/nix to programs
This is a user program, it cannot be in core.
2025-02-13 16:42:58 +01:00
7dcc38f6a2
core/users: conditionally enable user options
We don't want to create extra groups on the server user, and we don't
wanna setup hjem for it either.
2025-02-13 16:42:58 +01:00
ed3dde6c28
options: provide defaults for user and fullName
This fixes users not being present, even on the server. We have to
create a placeholder user, even if we're only going to ssh as root.
2025-02-13 16:42:58 +01:00
5e568693f6
services/searx: fix secrets relative path 2025-02-13 16:42:58 +01:00
dccea7f8c6
hosts: import hjem everywhere
This fixes evaluation issues when hjem is not a known option.
2025-02-13 16:42:58 +01:00
d9bcae7d25
programs/discord: move to directory to use canary and apply krisp-patcher 2025-02-13 16:42:58 +01:00
a0f3b2b2d8
flake: update inputs 2025-02-13 16:42:58 +01:00
cdf775bb8a
services/greetd: enable gnome-keyring on greetd unlock 2025-02-13 16:42:58 +01:00
befd97efe5
core/nix: point NIX_PATH to flake nixpkgs 2025-02-13 16:42:58 +01:00
fddfda5787
services: fix gnome keyring not unlocking on login 2025-02-13 16:42:58 +01:00
2b85d48a32
programs/anyrun: remove unnecessary css 2025-02-13 16:42:58 +01:00
7e2602becd
services/gtk: set theme and variant using dconf, change accent to purple 2025-02-13 16:42:58 +01:00
aaa060915a
programs/anyrun: update border color 2025-02-13 16:42:58 +01:00
95d6d0cc32
services/gtk: add theme package and session variables 2025-02-13 16:42:58 +01:00
ef4a5c8ae6
services/gtk: use base16 colors for gtk 2025-02-13 16:42:58 +01:00
f71dd9c197
options/style: switch to adw-gtk3 gtk theme 2025-02-13 16:42:58 +01:00
8078f7b853
programs/terminal/programs/git: update default branch to main 2025-02-13 16:42:58 +01:00
00d1d7cad5
programs/terminal/shell: update bat to work with man and --help 2025-02-13 16:42:58 +01:00
fabbd78476
treewide: environment.variables -> environment.sessionVariables 2025-02-13 16:42:58 +01:00
5216978270
flake: update nixpkgs to use a proper input 2025-02-13 16:42:58 +01:00
5f90b9194f
services/greetd: fix environment variables 2025-02-13 16:42:58 +01:00
9426ccfc1d
programs/terminal/shell/zsh: update unknown token to be red 2025-02-13 16:42:58 +01:00
4f3e57eeef
flake: update inputs, remove unused, avoid duplicates 2025-02-13 16:42:58 +01:00
45f8e26757
treewide: use hjem fork, remove shared module 2025-02-13 16:42:58 +01:00
9e65cad8fc
flake: remove unused inputs, switch to hjem's PR fork 2025-02-13 16:42:58 +01:00
8c64859dab
modules: use hjem environment module 2025-02-13 16:42:58 +01:00
107729a57a
shared/modules/hjem: init environment module 2025-02-13 16:42:58 +01:00
dec28d2d6e
flake: update inputs 2025-02-13 16:42:58 +01:00
f2e7539501
programs/hyprland: enable vrr 2025-02-13 16:42:58 +01:00
79a5f87dce
programs/anyrun: add configuration for additional plugins 2025-02-13 16:42:58 +01:00
86f91b9ca9
programs/terminal/emulators/ghostty: rename service 2025-02-13 16:42:58 +01:00
3152fb01ee
programs/editors: fix user EDITOR value being overriden by the default NixOS one 2025-02-13 16:42:58 +01:00
0c97bb510b
programs/terminal/shell/zsh: update suggestion and highlighting colors 2025-02-13 16:42:58 +01:00
b8aba304d9
programs/terminal/shell/zsh: add fzf integration 2025-02-13 16:42:58 +01:00
c953ba9371
core/hardware/nvidia: add nvidia_drm.fbdev=1 to kernel params (should help wakeup issues) 2025-02-13 16:42:58 +01:00
87b908311c
programs/hyprland: disable idle on all fullscreen apps
No clue why that was here, this is really stupid
2025-02-13 16:42:58 +01:00
daffd82cdb
programs/terminal/shell: switch to zsh 2025-02-13 16:42:58 +01:00
2f14eb0526
programs/terminal/emulators: welcome back ghosttyd! 2025-02-13 16:42:58 +01:00
bc6404817e
programs/anyrun: update config and styling 2025-02-13 16:42:58 +01:00
739f6506f4
flake: add nix-community cache 2025-02-13 16:42:58 +01:00
fefb76e1cf
programs/games: add openrgb 2025-02-13 16:42:58 +01:00
c39c540a3f
core/hardware: remove uni-sync 2025-02-13 16:42:58 +01:00
0007b9be66
programs/terminal/emulators/ghostty: goodbye ghosttyd 💔 2025-02-13 16:42:58 +01:00
51d1e95ee6
programs/fastfetch: update logo 2025-02-13 16:42:58 +01:00
7cf0fbc18e
programs/hypr/land/binds: switch back to ghostty 2025-02-13 16:42:58 +01:00
aab4e171f1
programs: add fastfetch config 2025-02-13 16:42:58 +01:00
52d5aaf340
flake: only support x86_64-linux 2025-02-13 16:42:58 +01:00
54542a1b85
README: update README 2025-02-13 16:42:58 +01:00
3ed8addd90
treewide: move shared/lib to lib 2025-02-13 16:42:58 +01:00
2ede974607
flake: remove unused inputs 2025-02-13 16:42:58 +01:00
77b9b09d12
README: update README 2025-02-13 16:42:58 +01:00
4a6b8edd73
services/greetd: remove regreet (unused), hide default hyprland stuff 2025-02-13 16:42:58 +01:00
1c12cf34ad
programs: update hyprland binds (use ghostty and add calculator) 2025-02-13 16:42:58 +01:00
1fb4a2ec9c
services/ssh: add keys to agent automatically 2025-02-13 16:42:58 +01:00
61821dcf20
programs/terminal/shell/nushell: remove indicator chars for vi mode 2025-02-13 16:42:58 +01:00
b416ae7660
treewide: replace nautilus with thunar 2025-02-13 16:42:58 +01:00
4a419ae083
programs/terminal/programs/misc: add comma 2025-02-13 16:42:58 +01:00
ba2e8b4ad3
programs/hyprland: switch from ghostty to foot again 2025-02-13 16:42:58 +01:00
a718648ca7
treewide: move FLAKE env variable to core/nix 2025-02-13 16:42:58 +01:00
767ef7b903
programs/terminal/emulators/ghostty: add programs to service path (avoid x not found) 2025-02-13 16:42:58 +01:00
948f46e401
core/security: add polkit 2025-02-13 16:42:58 +01:00
c06a16c8d7
programs/hyprland: disable Unknown-1 ghost monitor, move env variables to environment.d, add nvidia env variables 2025-02-13 16:42:58 +01:00
6d7509521f
programs: fix environment.d syntax being wrong 2025-02-13 16:42:58 +01:00
d8a86714d8
programs/anyrun: remove desktop actions
I JUST WANNA LAUNCH PROGRAMS!!
2025-02-13 16:42:58 +01:00
38fa12f409
core/boot: use stable linux kernel 2025-02-13 16:42:58 +01:00
43bc4fe2a5
treewide: hosts/solaire/config/nvidia -> core/hardware/nvidia 2025-02-13 16:42:58 +01:00
58301019f3
options/modules: add local.modules.nvidia 2025-02-13 16:42:58 +01:00
6a1d960485
flake:: update inputs 2025-02-13 16:42:58 +01:00
3015496b7d
programs/misc remove cinny 2025-02-13 16:42:58 +01:00
762634f489
terminal/shell/nushell: add carapace and zoxide to ghostty's service path 2025-02-13 16:42:58 +01:00
f304048421
programs/editors/neovim: add back indent for nix files 2025-02-13 16:42:58 +01:00
61372c7e34
treewide: remove home-manager (switch to hjem)
As my NixOS configuration kept growing, I noticed that I don't need
home-manager as much as I did before. A lot of what I need is just a way
to map nix attrsets to the program's respective configuration format,
which is something that I can now do myself, as my nix knowledge got
more extensive. After all of this, I decided to completely get rid of
home-manager, and switch to a simpler solution called hjem, which just
lets me write files to my home directory that are automatically
symlinked using `systemd-tmpfiles`.

This allows me to simplify my configuration, remove the separation
between NixOS and home-manager modules, and cut my eval times by quite a
lot (which allows for faster `nixos-rebuild switch`!).
2025-02-13 16:42:54 +01:00
84 changed files with 1321 additions and 4185 deletions

View file

@ -13,7 +13,7 @@ My NixOS configurations, using flakes.
| [assets](assets/) | Resources used throughout the system (images etc.) |
| [hosts](hosts/) | Host-specific |
| [modules](modules/) | Local module system (where the bulk of the configurations lives) |
| [shared](shared/) | Exported components (so far only packages) |
| [shared](shared/) | Exported components (packages and NixOS modules) |
My configuration is structured based on the following principles:

View file

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" version="1.1">
<path style="fill:#dfdfdf" d="M 4,6 C 1.7909,6 0,7.79 0,10 0,12.21 1.7909,14 4,14 4.2425,14 4.4843,13.98 4.7227,13.93 5.462,15.48 6.958,16 10,16 16,16 16,14 16,6 Z M 4,8 H 4.0078 C 4.0194,9.6 4.06,10.94 4.2031,11.99 4.1357,11.99 4.0679,12 4,12 2.8954,12 2,11.1 2,10 2,8.9 2.8954,8 4,8 Z"/>
</svg>

After

Width:  |  Height:  |  Size: 376 B

View file

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" version="1.1">
<path style="fill:#dfdfdf" d="M 7.1934,0 C 6.0952,1.38 5.766,1.57 6.1621,2.45 6.5212,3.25 7.449,3.15 6.9824,5 7.7488,4.1 8.3577,3.46 7.7559,2.54 7.1437,1.6 6.8084,1.53 7.1934,0 Z M 10.193,0 C 9.0952,1.38 8.766,1.57 9.1621,2.45 9.5212,3.25 10.449,3.15 9.9824,5 10.749,4.1 11.358,3.46 10.756,2.54 10.144,1.6 9.8084,1.53 10.193,0 Z M 13.193,0 C 12.095,1.38 11.766,1.57 12.162,2.45 12.521,3.25 13.449,3.15 12.982,5 13.749,4.1 14.358,3.46 13.756,2.54 13.144,1.6 12.808,1.53 13.193,0 Z M 4,6 C 1.7909,6 0,7.79 0,10 0,12.21 1.7909,14 4,14 4.2425,14 4.4843,13.98 4.7227,13.93 5.462,15.48 6.958,16 10,16 16,16 16,14 16,6 Z M 4,8 H 4.0078 C 4.0194,9.6 4.06,10.94 4.2031,11.99 4.1357,11.99 4.0679,12 4,12 2.8954,12 2,11.1 2,10 2,8.9 2.8954,8 4,8 Z"/>
</svg>

After

Width:  |  Height:  |  Size: 826 B

3519
flake.lock generated

File diff suppressed because it is too large Load diff

View file

@ -17,6 +17,8 @@
(system: function nixpkgs.legacyPackages.${system});
treefmtEval = forAllSystems (pkgs: treefmt-nix.lib.evalModule pkgs ./treefmt.nix);
in {
checks = builtins.mapAttrs (_: deployLib: deployLib.deployChecks self.deploy) deploy-rs.lib;
deploy.nodes = import ./nodes.nix {inherit inputs;};
devShells = forAllSystems (pkgs: {
default = pkgs.mkShell {
packages = [
@ -29,15 +31,14 @@
});
formatter = forAllSystems (pkgs: treefmtEval.${pkgs.system}.config.build.wrapper);
nixosConfigurations = import ./hosts {inherit self inputs;};
nixosModules.hjemModules = import ./shared/modules/hjem/nixos.nix {inherit (nixpkgs) lib;};
packages = forAllSystems (pkgs: import ./shared/pkgs {inherit inputs pkgs;});
deploy.nodes = import ./nodes.nix {inherit inputs;};
checks = builtins.mapAttrs (_: deployLib: deployLib.deployChecks self.deploy) deploy-rs.lib;
};
inputs = {
# nix related
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
nixos-hardware.url = "github:NixOS/nixos-hardware";
nix-index-db = {
nix-index-database = {
url = "github:nix-community/nix-index-database";
inputs.nixpkgs.follows = "nixpkgs";
};
@ -46,32 +47,42 @@
agenix = {
url = "github:ryantm/agenix";
inputs.nixpkgs.follows = "nixpkgs";
inputs.systems.follows = "systems";
};
anyrun = {
url = "github:anyrun-org/anyrun";
inputs.nixpkgs.follows = "nixpkgs";
inputs = {
nixpkgs.follows = "nixpkgs";
systems.follows = "systems";
flake-parts.follows = "flake-parts";
};
};
basix = {
url = "github:notashelf/basix";
inputs.nixpkgs.follows = "nixpkgs";
};
nixos-cosmic = {
url = "github:lilyinstarlight/nixos-cosmic";
inputs.nixpkgs.follows = "nixpkgs";
inputs.flake-parts.follows = "flake-parts";
};
deploy-rs = {
url = "github:serokell/deploy-rs";
inputs.nixpkgs.follows = "nixpkgs";
inputs.utils.follows = "flake-utils"; # Yes, it's actually called `utils`, not a typo
};
hyprland.url = "github:hyprwm/Hyprland";
hyprland = {
url = "github:hyprwm/Hyprland";
inputs.systems.follows = "systems";
};
hypridle = {
url = "github:hyprwm/hypridle";
inputs = {
hyprlang.follows = "hyprland/hyprlang";
hyprutils.follows = "hyprland/hyprutils";
hyprwayland-scanner.follows = "hyprland/hyprwayland-scanner";
hyprland-protocols.follows = "hyprland/hyprland-protocols";
nixpkgs.follows = "hyprland/nixpkgs";
systems.follows = "hyprland/systems";
systems.follows = "systems";
};
};
hyprlock = {
@ -79,8 +90,11 @@
inputs = {
hyprlang.follows = "hyprland/hyprlang";
hyprutils.follows = "hyprland/hyprutils";
hyprgraphics.follows = "hyprland/hyprgraphics";
hyprwayland-scanner.follows = "hyprland/hyprwayland-scanner";
nixpkgs.follows = "hyprland/nixpkgs";
systems.follows = "hyprland/systems";
systems.follows = "systems";
};
};
hyprpaper = {
@ -88,25 +102,45 @@
inputs = {
hyprlang.follows = "hyprland/hyprlang";
hyprutils.follows = "hyprland/hyprutils";
hyprgraphics.follows = "hyprland/hyprgraphics";
hyprwayland-scanner.follows = "hyprland/hyprwayland-scanner";
nixpkgs.follows = "hyprland/nixpkgs";
systems.follows = "hyprland/systems";
systems.follows = "systems";
};
};
hyprwm-contrib = {
url = "github:hyprwm/contrib";
inputs.nixpkgs.follows = "nixpkgs";
};
hjem = {
url = "github:nezia1/hjem/implement-environment-variables"; # TODO: change to github:feel-co/hjem if env var PR gets in
url = "github:nezia1/hjem";
inputs.nixpkgs.follows = "nixpkgs";
};
# TODO: remove once https://github.com/snugnug/hjem-rum/pull/14 gets merged
hjem-rum = {
url = "github:nezia1/hjem-rum/add-hyprland";
inputs.nixpkgs.follows = "nixpkgs";
};
morewaita = {
url = "github:somepaulo/MoreWaita";
flake = false;
};
nix-gaming = {
url = "github:fufexan/nix-gaming";
inputs.nixpkgs.follows = "nixpkgs";
inputs.flake-parts.follows = "flake-parts";
};
nvf = {
url = "github:notashelf/nvf";
inputs.nixpkgs.follows = "nixpkgs";
inputs = {
nixpkgs.follows = "nixpkgs";
systems.follows = "systems";
flake-utils.follows = "flake-utils";
flake-parts.follows = "flake-parts";
};
};
treefmt-nix = {
url = "github:numtide/treefmt-nix";
@ -116,6 +150,14 @@
url = "github:nezia1/nezia.dev";
inputs.nixpkgs.follows = "nixpkgs";
};
# dependency pinning to prevent duplicate versions
systems.url = "github:nix-systems/default";
flake-utils = {
url = "github:numtide/flake-utils";
inputs.systems.follows = "systems";
};
flake-parts.url = "github:hercules-ci/flake-parts";
};
nixConfig = {
extra-substituters = [
@ -125,7 +167,6 @@
"https://hyprland.cachix.org"
"https://nix-gaming.cachix.org"
"https://anyrun.cachix.org"
"https://cosmic.cachix.org/"
];
extra-trusted-public-keys = [
"cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY="
@ -133,7 +174,6 @@
"hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="
"nix-gaming.cachix.org-1:nbjlureqMbRAxR1gJ/f3hxemL9svXaZF/Ees8vCUUs4="
"anyrun.cachix.org-1:pqBobmOjI7nKlsUMV25u9QHa9btJK65/C8vnO3p346s="
"cosmic.cachix.org-1:Dya9IyXD4xdBehWjrkPv6rtxpmMdRel02smYzA85dPE="
];
};
}

View file

@ -1,14 +1,15 @@
{inputs, ...}: let
{
self,
inputs,
...
}: let
lib' = import ../lib inputs.nixpkgs.lib;
mkSystem = args:
inputs.nixpkgs.lib.nixosSystem {
specialArgs = {inherit inputs lib';};
specialArgs = {inherit self inputs lib';};
modules =
(args.modules or [])
++ [
../modules
inputs.hjem.nixosModules.default
];
++ [../modules];
};
in {
vamos = mkSystem {

View file

@ -5,7 +5,6 @@ _: {
systemVars = {
hostName = "solaire";
username = "nezia";
desktop = "Hyprland";
};
homeVars = {
fullName = "Anthony Rodriguez";
@ -14,10 +13,12 @@ _: {
};
profiles = {
desktop.enable = true;
gaming.enable = true;
};
modules = {
hyprland.enable = true;
nvidia.enable = true;
};
};

View file

@ -8,7 +8,6 @@ _: {
systemVars = {
hostName = "vamos";
username = "nezia";
desktop = "Hyprland";
};
homeVars = {
@ -18,7 +17,12 @@ _: {
};
profiles = {
desktop.enable = true;
laptop.enable = true;
};
modules = {
hyprland.enable = true;
};
};
}

View file

@ -1,30 +1,39 @@
{pkgs, ...}: {
boot = {
loader = {
timeout = 0;
systemd-boot = {
enable = true;
consoleMode = "2";
{
lib,
config,
...
}: let
inherit (lib.modules) mkIf;
inherit (config.local.profiles) server;
in {
config = mkIf (!server.enable) {
boot = {
loader = {
timeout = 0;
systemd-boot = {
enable = true;
consoleMode = "2";
};
efi.canTouchEfiVariables = true;
};
efi.canTouchEfiVariables = true;
plymouth = {
enable = true;
extraConfig = ''
[Daemon]
DeviceScale=2
'';
};
consoleLogLevel = 0;
initrd.systemd.enable = true;
initrd.verbose = false;
kernelParams = [
"quiet"
"systemd.show_status=auto"
"rd.udev.log_level=3"
];
};
plymouth = {
enable = true;
extraConfig = ''
[Daemon]
DeviceScale=2
'';
};
consoleLogLevel = 0;
initrd.systemd.enable = true;
initrd.verbose = false;
kernelParams = [
"quiet"
"systemd.show_status=auto"
"rd.udev.log_level=3"
];
};
}

View file

@ -4,7 +4,7 @@
config,
...
}: {
config = lib.mkIf (config.local.systemVars.desktop != "none") {
config = lib.mkIf config.local.profiles.desktop.enable {
fonts = {
enableDefaultPackages = false;
packages = [

View file

@ -0,0 +1,13 @@
{
lib,
config,
...
}: let
inherit (lib.modules) mkIf;
inherit (config.local.profiles) desktop;
in {
config = mkIf desktop.enable {
hardware.bluetooth.enable = true; # enables support for Bluetooth
hardware.bluetooth.powerOnBoot = true; # powers up the default Bluetooth controller on boot
};
}

View file

@ -1,5 +1,6 @@
{
imports = [
./bluetooth.nix
./fprintd.nix
./fwupd.nix
./nvidia.nix

View file

@ -3,7 +3,7 @@
config,
...
}: {
config = lib.mkIf (config.local.systemVars.desktop != "none") {
config = lib.mkIf config.local.profiles.desktop.enable {
services.fwupd.enable = true;
};
}

View file

@ -4,7 +4,7 @@
config,
...
}: {
config = lib.mkIf (config.local.systemVars.desktop != "none") {
config = lib.mkIf config.local.profiles.desktop.enable {
services = {
# setup printing service
printing.enable = true;

View file

@ -1,7 +1,6 @@
{
inputs,
pkgs,
config,
...
}: {
nix = {

View file

@ -4,7 +4,7 @@
config,
...
}: {
config = lib.mkIf (config.local.systemVars.desktop != "none") {
config = lib.mkIf config.local.profiles.desktop.enable {
security = {
polkit.enable = true;
polkit = {

View file

@ -1,16 +1,24 @@
{
self,
inputs,
lib,
config,
...
}: let
inherit (lib) mkIf;
inherit (config.local.systemVars) desktop username;
inherit (lib.modules) mkIf;
inherit (config.local.systemVars) username;
inherit (config.local.homeVars) fullName;
inherit (config.local.profiles) desktop;
in {
imports = [
inputs.hjem.nixosModules.default
inputs.hjem-rum.nixosModules.default
self.outputs.nixosModules.hjemModules
];
users.users.${username} = {
isNormalUser = true;
description = fullName;
extraGroups = mkIf (desktop != "none") [
extraGroups = mkIf desktop.enable [
"networkmanager"
"audio"
"video"
@ -19,15 +27,12 @@ in {
];
};
hjem = mkIf (desktop != "none") {
hjem = mkIf desktop.enable {
clobberByDefault = true;
users.${username} = {
enable = true;
directory = "/home/${username}";
user = "${username}";
environment = {
forceOverride = true;
};
};
};
}

View file

@ -4,30 +4,23 @@
options,
...
}: let
inherit (lib) mkOption;
inherit (lib.modules) mkIf;
inherit (lib) mkIf mkOption;
inherit (lib.types) str;
in {
options.local.homeVars = {
fullName = mkOption {
type = str;
description = ''
your full name (used for git commits and user description)
'';
description = "your full name (used for git commits and user description)";
default = "User";
};
email = mkOption {
type = str;
description = ''
your email (used for git commits)
'';
description = "your email (used for git commits)";
default = null;
};
signingKey = mkOption {
type = str;
description = ''
your ssh public key (used for signing git commits)"
'';
description = "your ssh public key (used for signing git commits)";
};
};

View file

@ -1,5 +1,6 @@
{
imports = [
./hyprland.nix
./nvidia.nix
];
}

View file

@ -0,0 +1,7 @@
{lib, ...}: let
inherit (lib) mkEnableOption;
in {
options.local.modules.hyprland = {
enable = mkEnableOption "Hyprland modules";
};
}

View file

@ -1,5 +1,6 @@
{
imports = [
./desktop.nix
./gaming.nix
./laptop.nix
./server.nix

View file

@ -0,0 +1,18 @@
{
lib,
config,
...
}: let
inherit (lib) mkEnableOption;
in {
options = {
local.profiles.desktop.enable = mkEnableOption "the desktop profile";
};
config.assertions = lib.mkIf config.local.profiles.desktop.enable [
{
assertion = !config.local.profiles.server.enable;
message = "The desktop profile cannot be enabled if `local.profiles.server.enable` is set to true.";
}
];
}

View file

@ -11,7 +11,7 @@ in {
config.assertions = lib.mkIf config.local.profiles.server.enable [
{
assertion = !(config.local.systemVars.desktop != "none");
assertion = !config.local.profiles.desktop.enable;
message = "The server profile cannot be enabled if `local.profiles.desktop.enable` is set to true.";
}

View file

@ -8,6 +8,7 @@
}: let
inherit (lib) attrNames mkEnableOption mkOption pathExists;
inherit (lib.types) attrs bool enum package path str;
inherit (lib.lists) singleton;
cfg = config.local.style;
in {
@ -80,7 +81,7 @@ in {
name = mkOption {
type = str;
description = "Name for the GTK theme";
default = "adw-gtk3";
default = "adw-gtk3-dark";
};
package = mkOption {
type = package;
@ -94,15 +95,41 @@ in {
name = mkOption {
type = str;
description = "The name for the icon theme that will be used for GTK programs";
default = "Papirus-Dark";
default = "MoreWaita";
};
package = mkOption {
type = package;
description = "The GTK icon theme to be used";
default = pkgs.catppuccin-papirus-folders.override {
flavor = "mocha";
accent = "lavender";
default = pkgs.morewaita-icon-theme.overrideAttrs {
src = inputs.morewaita;
installPhase = ''
runHook preInstall
install -d $out/share/icons/MoreWaita
cp -r . $out/share/icons/MoreWaita
cp ${../../assets/icons/my-caffeine-on-symbolic.svg} $out/share/icons/MoreWaita/symbolic/status/my-caffeine-on-symbolic.svg
cp ${../../assets/icons/my-caffeine-off-symbolic.svg} $out/share/icons/MoreWaita/symbolic/status/my-caffeine-off-symbolic.svg
gtk-update-icon-cache -f -t $out/share/icons/MoreWaita && xdg-desktop-menu forceupdate
runHook postInstall
'';
/*
a patch is needed because MoreWaita expects a `meson.build` file in the directory, containing the
name of every icon.
*/
patches = singleton (pkgs.writeText "add-caffeine-icons.patch" ''
diff --git a/symbolic/status/meson.build b/symbolic/status/meson.build
index 4e5bfc5..3bbf989 100644
--- a/symbolic/status/meson.build
+++ b/symbolic/status/meson.build
@@ -17,2 +17,4 @@ regular_files = [
'keepassxc-unlocked.svg',
+ 'my-caffeine-off-symbolic.svg',
+ 'my-caffeine-on-symbolic.svg',
'pamac-tray-no-update.svg',
'');
};
};
};
@ -119,8 +146,20 @@ in {
${toString themePath} set by the GTK module does not exist!
To suppress this message, make sure that
`config.modules.theme.gtk.theme.package` contains
the path `${cfg.theme.name}`
`config.local.theme.gtk.theme.package` contains
the path `${cfg.gtk.theme.name}`
'';
})
(let
iconPath = cfg.gtk.iconTheme.package + /share/icons + "/${cfg.gtk.iconTheme.name}";
in {
assertion = cfg.gtk.enable -> pathExists iconPath;
message = ''
${toString iconPath} set by the GTK module does not exist!
To suppress this message, make sure that
`config.local.theme.gtk.iconTheme.package` contains
the path `${cfg.gtk.iconTheme.name}`
'';
})
{

View file

@ -4,30 +4,19 @@
...
}: let
inherit (lib) mkOption;
inherit (lib.types) enum str;
inherit (lib.types) str;
in {
options.local.systemVars = {
hostName = mkOption {
type = str;
description = ''
hostname for the current host
'';
description = "hostname for the current host";
default = null;
};
username = mkOption {
type = str;
description = ''
username for the home directory
'';
description = "username for the home directory";
default = "user";
};
desktop = mkOption {
type = enum ["none" "Hyprland" "cosmic"];
default = "none";
description = ''
the desktop environment to be used
'';
};
};
config.assertions = [
@ -37,8 +26,5 @@ in {
{
assertion = options.local.systemVars.username.isDefined;
}
{
assertion = options.local.systemVars.desktop.isDefined;
}
];
}

View file

@ -8,7 +8,7 @@
inherit (lib) mkIf;
inherit (config.local.systemVars) username;
in {
config = mkIf (config.local.systemVars.desktop == "Hyprland") {
config = mkIf config.local.modules.hyprland.enable {
hjem.users.${username} = {
packages = [inputs.anyrun.packages.${pkgs.system}.anyrun-with-all-plugins];
files = {

View file

@ -0,0 +1,14 @@
{
inputs,
lib,
config,
...
}: let
inherit (lib.modules) mkIf;
inherit (config.local.profiles) desktop;
in {
imports = [inputs.nix-index-database.nixosModules.nix-index];
config = mkIf desktop.enable {
programs.nix-index-database.comma.enable = true;
};
}

View file

@ -1,18 +1,19 @@
{
imports = [
./anyrun
./discord
./editors
./hypr
./media
./terminal
./comma.nix
./discord.nix
./fastfetch.nix
./firefox.nix
./games.nix
./misc.nix
./nh.nix
./thunar.nix
./pcmanfm.nix
./waybar.nix
./wlogout.nix
./xdg.nix

View file

@ -7,25 +7,16 @@
inherit (lib) mkIf;
inherit (config.local.systemVars) username;
styleCfg = config.local.style;
discord = pkgs.discord-canary.override {
withOpenASAR = true;
withVencord = true;
# TODO remove override when https://github.com/NixOS/nixpkgs/issues/380429 gets merged
discord = pkgs.vesktop.override {
electron = pkgs.electron_33;
};
# run once with krisp-patcher ~/.config/discordcanary/*/modules/discord_krisp/discord_krisp.node
krisp-patcher = pkgs.writers.writePython3Bin "krisp-patcher" {
libraries = with pkgs.python3Packages; [capstone pyelftools];
flakeIgnore = [
"E501" # line too long (82 > 79 characters)
"F403" # from module import * used; unable to detect undefined names
"F405" # name may be undefined, or defined from star imports: module
];
} (builtins.readFile ./krisp-patcher.py);
in {
config = mkIf (config.local.systemVars.desktop != "none") {
config = mkIf config.local.profiles.desktop.enable {
hjem.users.${username} = {
packages = [discord krisp-patcher];
files.".config/Vencord/themes/midnight-base16.css".text = with styleCfg.scheme.palette;
packages = [discord];
autostart.programs = [discord];
files.".config/vesktop/themes/midnight-base16.css".text = with styleCfg.scheme.palette;
mkIf styleCfg.enable ''
/**
* @name Midnight-base16

View file

@ -1,91 +0,0 @@
import sys
import shutil
from elftools.elf.elffile import ELFFile
from capstone import *
from capstone.x86 import *
if len(sys.argv) < 2:
print(f"Usage: {sys.argv[0]} [path to discord_krisp.node]")
# "Unix programs generally use 2 for command line syntax errors and 1 for all other kind of errors."
sys.exit(2)
executable = sys.argv[1]
elf = ELFFile(open(executable, "rb"))
symtab = elf.get_section_by_name(".symtab")
krisp_initialize_address = symtab.get_symbol_by_name(
"_ZN7discordL17DoKrispInitializeEv"
)[0].entry.st_value
isSignedByDiscord_address = symtab.get_symbol_by_name(
"_ZN7discord4util17IsSignedByDiscordERKNSt4__Cr12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEE"
)[0].entry.st_value
text = elf.get_section_by_name(".text")
text_start = text["sh_addr"]
text_start_file = text["sh_offset"]
# This seems to always be zero (.text starts at the right offset in the file). Do it just in case?
address_to_file = text_start_file - text_start
# Done with the ELF now.
# elf.close()
krisp_initialize_offset = krisp_initialize_address - address_to_file
isSignedByDiscord_offset = krisp_initialize_address - address_to_file
f = open(executable, "rb")
f.seek(krisp_initialize_offset)
krisp_initialize = f.read(256)
f.close()
# States
found_issigned_by_discord_call = False
found_issigned_by_discord_test = False
found_issigned_by_discord_je = False
found_already_patched = False
je_location = None
je_size = 0
# We are looking for a call to IsSignedByDiscord, followed by a test, followed by a je.
# Then we replace the je with nops.
md = Cs(CS_ARCH_X86, CS_MODE_64)
md.detail = True
for i in md.disasm(krisp_initialize, krisp_initialize_address):
if i.id == X86_INS_CALL:
if i.operands[0].type == X86_OP_IMM:
if i.operands[0].imm == isSignedByDiscord_address:
found_issigned_by_discord_call = True
if i.id == X86_INS_TEST:
if found_issigned_by_discord_call:
found_issigned_by_discord_test = True
if i.id == X86_INS_JE:
if found_issigned_by_discord_test:
found_issigned_by_discord_je = True
je_location = i.address
je_size = len(i.bytes)
break
if i.id == X86_INS_NOP:
if found_issigned_by_discord_test:
found_already_patched = True
break
if je_location:
print(f"Found patch location: 0x{je_location:x}")
shutil.copyfile(executable, executable + ".orig")
f = open(executable, "rb+")
f.seek(je_location - address_to_file)
f.write(
b"\x90" * je_size
) # je can be larger than 2 bytes given a large enough displacement :(
f.close()
else:
if found_already_patched:
print("Couldn't find patch location - already patched.")
else:
print("Couldn't find patch location - review manually. Sorry.")

View file

@ -7,10 +7,10 @@
inherit (config.local.systemVars) username;
in {
imports = [
./neovim.nix
./neovim
];
config = mkIf (config.local.systemVars.desktop != "none") {
config = mkIf config.local.profiles.desktop.enable {
/*
we don't want the default NixOS EDITOR value, which is nano and will override the `environment.d` setting.
we have to unset it like this so that our systemd user variable will take precedence:

View file

@ -0,0 +1,15 @@
# thanks https://gitlab.com/fazzi/nixohess/-/blob/3e0544761d7f0361e7a8ac7b15714515e7fd5e7c/overlays/basedpyright-fix.nix
_: {
nixpkgs.overlays = [
(_: prev: {
basedpyright = prev.basedpyright.overrideAttrs (old: {
postInstall =
old.postInstall
+ ''
# Remove dangling symlinks created during installation (remove -delete to just see the files, or -print '%l\n' to see the target
find -L $out -type l -print -delete
'';
});
})
];
}

View file

@ -53,9 +53,21 @@
ui = {
noice.enable = true;
smartcolumn = {
enable = true;
setupOpts = {
custom_colorcolumn = {
nix = "110";
};
};
};
};
notify.nvim-notify.enable = true;
mini = {
comment.enable = true;
notify.enable = true;
surround.enable = true;
};
statusline = {
lualine = {
enable = true;
@ -159,11 +171,13 @@
};
};
git.enable = true;
git = {
enable = true;
gitsigns.enable = true;
};
utility = {
vim-wakatime.enable = true;
surround.enable = true;
motion.leap = {
enable = true;
};
@ -204,7 +218,10 @@
enableLSP = true;
enableTreesitter = true;
nix.enable = true;
nix = {
enable = true;
lsp.server = "nil";
};
clang.enable = true;
python.enable = true;
ts.enable = true;
@ -239,7 +256,8 @@
};
};
in {
config = lib.mkIf (config.local.systemVars.desktop != "none") {
imports = [./basedpyright-fix.nix];
config = lib.mkIf config.local.profiles.desktop.enable {
hjem.users.${username} = {
packages = [customNeovim.neovim];
};

View file

@ -10,7 +10,7 @@
sha256 = "137k3i7z4va68v4rvrazy26szc7p2w59h7bc2h8japzjyj6xjs71";
};
in {
config = lib.mkIf (config.local.systemVars.desktop != "none") {
config = lib.mkIf config.local.profiles.desktop.enable {
hjem.users.${username} = {
packages = [pkgs.fastfetch];
files = {

View file

@ -4,8 +4,8 @@
config,
...
}: let
inherit (builtins) readFile;
inherit (config.local.systemVars) username;
toINI = lib.generators.toINI {};
betterfox = pkgs.fetchFromGitHub {
owner = "yokoffing";
@ -13,156 +13,152 @@
rev = "e026ed7d3a763c5d3f96c2680d7bc3340831af4f";
hash = "sha256-hpkEO5BhMVtINQG8HN4xqfas/R6q5pYPZiFK8bilIDs=";
};
in {
config = lib.mkIf config.local.profiles.desktop.enable {
hjem.users.${username} = {
programs.firefox = {
enable = true;
inherit username;
firefox = pkgs.wrapFirefox pkgs.firefox-esr-128-unwrapped {
extraPolicies = {
SearchEngines.Default = "SearxNG";
SearchEngines.Add = [
{
Name = "SearxNG";
URLTemplate = "https://search.nezia.dev/search?q={searchTerms}";
Method = "GET";
SuggestURLTemplate = "https://search.nezia.dev/autocompleter?q={searchTerms}";
}
{
Name = "Nix Packages";
Alias = "@np";
URLTemplate = "https://search.nixos.org/packages?channel=unstable&query={searchTerms}";
Method = "GET";
}
{
Name = "Nix Options";
Alias = "@no";
URLTemplate = "https://search.nixos.org/options?channel=unstable&query={searchTerms}";
Method = "GET";
}
{
Name = "NixOS Wiki";
Alias = "@nw";
URLTemplate = "https://wiki.nixos.org/w/index.php?search={searchTerms}";
Method = "GET";
}
{
Name = "Home Manager Options";
Alias = "@hmo";
URLTemplate = "https://home-manager-options.extranix.com/?query={searchTerms}&release=master";
Method = "GET";
}
{
Name = "ProtonDB";
Alias = "@pdb";
URLTemplate = "https://www.protondb.com/search?q={searchTerms}";
Method = "GET";
}
{
Name = "Noogle";
Alias = "@ng";
URLTemplate = "https://noogle.dev/q?term={searchTerms}";
}
{
Name = "GitHub Nix";
Alias = "@ghn";
URLTemplate = "https://github.com/search?q=language:nix NOT is:fork {searchTerms}&type=code";
}
];
DisableTelemetry = true;
DisablePocket = true;
DisableFeedbackCommands = true;
DisableFirefoxStudies = true;
OfferToSaveLogins = false;
OffertosaveloginsDefault = false;
PasswordManagerEnabled = false;
SearchSuggestEnabled = true;
# https://github.com/Sly-Harvey/NixOS/blob/f9da2691ea46565256ad757959cfc26ec6cee10d/modules/programs/browser/firefox/default.nix#L58-L163
"3rdparty".Extensions = {
"addon@darkreader.org" = {
permissions = ["internal:privateBrowsingAllowed"];
enabled = true;
automation = {
enabled = true;
behavior = "OnOff";
mode = "system";
policies = {
DisableTelemetry = true;
DisablePocket = true;
DisableFeedbackCommands = true;
DisableFirefoxStudies = true;
OfferToSaveLogins = false;
OffertosaveloginsDefault = false;
PasswordManagerEnabled = false;
SearchSuggestEnabled = true;
FirefoxHome = {
Pocket = false;
Snippets = false;
};
detectDarkTheme = true;
enabledByDefault = true;
changeBrowserTheme = false;
enableForProtectedPages = true;
fetchNews = false;
previewNewDesign = true;
};
"uBlock0@raymondhill.net" = {
permissions = ["internal:privateBrowsingAllowed"];
advancedSettings = [
[
"userResourcesLocation"
"https://raw.githubusercontent.com/pixeltris/TwitchAdSolutions/master/video-swap-new/video-swap-new-ublock-origin.js"
]
SearchEngines.Default = "SearxNG";
SearchEngines.Add = [
{
Name = "SearxNG";
URLTemplate = "https://search.nezia.dev/search?q={searchTerms}";
Method = "GET";
SuggestURLTemplate = "https://search.nezia.dev/autocompleter?q={searchTerms}";
}
{
Name = "Nix Packages";
Alias = "@np";
URLTemplate = "https://search.nixos.org/packages?channel=unstable&query={searchTerms}";
Method = "GET";
}
{
Name = "Nix Options";
Alias = "@no";
URLTemplate = "https://search.nixos.org/options?channel=unstable&query={searchTerms}";
Method = "GET";
}
{
Name = "NixOS Wiki";
Alias = "@nw";
URLTemplate = "https://wiki.nixos.org/w/index.php?search={searchTerms}";
Method = "GET";
}
{
Name = "Home Manager Options";
Alias = "@hmo";
URLTemplate = "https://home-manager-options.extranix.com/?query={searchTerms}&release=master";
Method = "GET";
}
{
Name = "ProtonDB";
Alias = "@pdb";
URLTemplate = "https://www.protondb.com/search?q={searchTerms}";
Method = "GET";
}
{
Name = "Noogle";
Alias = "@ng";
URLTemplate = "https://noogle.dev/q?term={searchTerms}";
}
{
Name = "GitHub Nix";
Alias = "@ghn";
URLTemplate = "https://github.com/search?q=language:nix NOT is:fork {searchTerms}&type=code";
}
];
adminSettings = {
userSettings = {
uiTheme = "dark";
advancedUserEnabled = true;
userFiltersTrusted = true;
importedLists = [
"https://raw.githubusercontent.com/laylavish/uBlockOrigin-HUGE-AI-Blocklist/main/list.txt"
];
selectedFilterLists = [
"FRA-0"
"adguard-cookies"
"adguard-mobile-app-banners"
"adguard-other-annoyances"
"adguard-popup-overlays"
"adguard-social"
"adguard-spyware-url"
"adguard-widgets"
"easylist"
"easylist-annoyances"
"easylist-chat"
"easylist-newsletters"
"easylist-notifications"
"easyprivacy"
"fanboy-cookiemonster"
"https://filters.adtidy.org/extension/ublock/filters/3.txt"
"https://github.com/DandelionSprout/adfilt/raw/master/LegitimateURLShortener.txt"
"plowe-0"
"ublock-annoyances"
"ublock-badware"
"ublock-cookies-adguard"
"ublock-cookies-easylist"
"ublock-filters"
"ublock-privacy"
"ublock-quick-fixes"
"ublock-unbreak"
"urlhaus-1"
"https://raw.githubusercontent.com/laylavish/uBlockOrigin-HUGE-AI-Blocklist/main/list.txt"
# https://github.com/Sly-Harvey/NixOS/blob/f9da2691ea46565256ad757959cfc26ec6cee10d/modules/programs/browser/firefox/default.nix#L58-L163
"3rdparty".Extensions = {
"addon@darkreader.org" = {
permissions = ["internal:privateBrowsingAllowed"];
enabled = true;
automation = {
enabled = true;
behavior = "OnOff";
mode = "system";
};
detectDarkTheme = true;
enabledByDefault = true;
changeBrowserTheme = false;
enableForProtectedPages = true;
fetchNews = false;
previewNewDesign = true;
};
"uBlock0@raymondhill.net" = {
permissions = ["internal:privateBrowsingAllowed"];
advancedSettings = [
[
"userResourcesLocation"
"https://raw.githubusercontent.com/pixeltris/TwitchAdSolutions/master/video-swap-new/video-swap-new-ublock-origin.js"
]
];
adminSettings = {
userSettings = {
uiTheme = "dark";
advancedUserEnabled = true;
userFiltersTrusted = true;
importedLists = [
"https://raw.githubusercontent.com/laylavish/uBlockOrigin-HUGE-AI-Blocklist/main/list.txt"
];
selectedFilterLists = [
"FRA-0"
"adguard-cookies"
"adguard-mobile-app-banners"
"adguard-other-annoyances"
"adguard-popup-overlays"
"adguard-social"
"adguard-spyware-url"
"adguard-widgets"
"easylist"
"easylist-annoyances"
"easylist-chat"
"easylist-newsletters"
"easylist-notifications"
"easyprivacy"
"fanboy-cookiemonster"
"https://filters.adtidy.org/extension/ublock/filters/3.txt"
"https://github.com/DandelionSprout/adfilt/raw/master/LegitimateURLShortener.txt"
"plowe-0"
"ublock-annoyances"
"ublock-badware"
"ublock-cookies-adguard"
"ublock-cookies-easylist"
"ublock-filters"
"ublock-privacy"
"ublock-quick-fixes"
"ublock-unbreak"
"urlhaus-1"
"https://raw.githubusercontent.com/laylavish/uBlockOrigin-HUGE-AI-Blocklist/main/list.txt"
];
};
};
};
};
};
};
};
};
in {
config = lib.mkIf (config.local.systemVars.desktop != "none") {
hjem.users.${username} = {
packages = [firefox];
files = {
".mozilla/firefox/profiles.ini".text = toINI {
Profile0 = {
# creates lunarnova profile and sets it as default
Name = "${username}";
IsRelative = 1;
Path = "${username}";
Default = 1;
};
};
".mozilla/firefox/${username}/user.js".text = builtins.concatStringsSep "\n" [
(builtins.readFile "${betterfox}/user.js")
(builtins.readFile "${betterfox}/Securefox.js")
(builtins.readFile "${betterfox}/Fastfox.js")
(builtins.readFile "${betterfox}/Peskyfox.js")
(builtins.readFile "${betterfox}/Smoothfox.js")
extraConfig = builtins.concatStringsSep "\n" [
(readFile "${betterfox}/user.js")
(readFile "${betterfox}/Securefox.js")
(readFile "${betterfox}/Fastfox.js")
(readFile "${betterfox}/Peskyfox.js")
(readFile "${betterfox}/Smoothfox.js")
];
};
};

View file

@ -12,7 +12,6 @@ in {
packages = [
pkgs.mangohud
pkgs.bolt-launcher
pkgs.ankama-launcher
pkgs.lutris
pkgs.qbittorrent
pkgs.protonplus

View file

@ -12,7 +12,7 @@
hyprlock = "${inputs.hyprlock.packages.${pkgs.system}.hyprlock}/bin/hyprlock";
in {
config = lib.mkIf (config.local.systemVars.desktop == "Hyprland") {
config = lib.mkIf config.local.modules.hyprland.enable {
hjem.users.${username} = {
packages = [hypridle];
files = {
@ -52,7 +52,7 @@ in {
wantedBy = ["graphical-session.target"];
restartTriggers = ["${config.hjem.users.${username}.files.".config/hypr/hypridle.conf".text}"];
serviceConfig = {
Type = "exec";
Type = "simple";
ExecStart = "${hypridle}/bin/hypridle";
Restart = "on-failure";
Slice = "background-graphical.slice";

View file

@ -8,17 +8,17 @@ lib: let
in {
"$mod" = "SUPER";
bindr = [
"$mod, SUPER_L, exec, ${toggle "anyrun" false}"
"$mod, SUPER_L, exec, ${toggle "anyrun" true}"
];
bind = [
"$mod, Return, exec, ${run "ghostty"}"
"$mod, n, exec, ${run "neovide"}"
"$mod, w, exec, ${run "firefox"}"
", Print, exec, ${runOnce "grimblast"} --notify --cursor copysave output"
", Print, exec, ${runOnce "grimblast"} --notify copysave output"
"$mod, q, killactive"
"$mod SHIFT, q, exec, loginctl terminate-user ''"
"$mod, period, exec, ${toggle "walker -m emojis" false}" # not using uwsm as it already runs as a service
"CTRL, Print, exec, ${runOnce "grimblast"} --notify --cursor --freeze copysave area"
"CTRL, Print, exec, ${runOnce "grimblast"} --notify --freeze copysave area"
"$mod, h, movefocus, l"
"$mod, j, movefocus, d"

View file

@ -11,6 +11,7 @@
inherit (config.local.systemVars) username;
styleCfg = config.local.style;
gnomeControlCenter = pkgs.gnome-control-center.overrideAttrs (old: {
postInstall =
old.postInstall
@ -29,7 +30,7 @@
'';
});
in {
config = mkIf (config.local.systemVars.desktop == "Hyprland") {
config = mkIf config.local.modules.hyprland.enable {
programs.hyprland = {
enable = true;
package = inputs.hyprland.packages.${pkgs.system}.hyprland;
@ -58,103 +59,103 @@ in {
inputs.hyprwm-contrib.packages.${pkgs.system}.grimblast
gnomeControlCenter
];
files = {
".config/hypr/hyprland.conf".text = toHyprConf {
attrs =
{
xwayland = {
force_zero_scaling = true;
};
env = [
rum.programs.hyprland = {
enable = true;
settings =
{
xwayland = {
force_zero_scaling = true;
};
env = [
];
cursor = {
no_hardware_cursors = 1;
};
monitor = [
"eDP-1, preferred, auto, 1.33"
"Unknown-1,disabled"
];
workspace = [
"special:terminal, on-created-empty:ghostty"
"special:file_manager_gui, on-created-empty:pcmanfm"
"special:file_manager_tui, on-created-empty:ghostty -e yazi"
"special:calculator_gui, on-created-empty:qalculate-gtk"
"special:mixer_gui, on-created-empty:pavucontrol"
];
windowrulev2 = [
# fixes fullscreen windows (mostly games)
"stayfocused, initialtitle:^()$, initialclass:^(steam)$"
"minsize 1 1, initialtitle:^()$, initialclass:^(steam)$"
"maximize, initialtitle:^(\S+)$, initialclass:^(steamwebhelper)$"
"immediate, initialclass:^(steam_app_)(.*)$"
"fullscreen, initialclass:^(steam_app_)(.*)$"
# inhibit idle on fullscreen apps (avoids going idle on games when playing with gamepad)
"idleinhibit always, fullscreen:1"
];
render = {
explicit_sync = 1;
explicit_sync_kms = 1;
expand_undersized_textures = false;
};
bezier = "overshot, 0.05, 0.9, 0.1, 1.1";
animations = {
enabled = true;
animation = [
"windows, 1, 5, overshot"
"windowsOut, 1, 5, default, popin 80%"
"windowsMove, 1, 5, default, popin 80%"
"fade, 1, 5, default"
"border, 1, 5, default"
"borderangle, 0, 8, default"
"workspaces, 0"
"specialWorkspace, 0"
];
};
cursor = {
no_hardware_cursors = 1;
input = {
kb_options = "compose:ralt";
touchpad = {
natural_scroll = true;
scroll_factor = 0.8;
tap-to-click = true;
clickfinger_behavior = true;
};
};
monitor = [
"eDP-1, preferred, auto, 1.33"
"Unknown-1,disabled"
];
workspace = [
"special:terminal, on-created-empty:ghostty"
"special:file_manager_gui, on-created-empty:thunar"
"special:file_manager_tui, on-created-empty:ghostty -e yazi"
gestures = {
workspace_swipe = true;
workspace_swipe_direction_lock = false;
workspace_swipe_cancel_ratio = 0.15;
};
"special:calculator_gui, on-created-empty:qalculate-gtk"
"special:mixer_gui, on-created-empty:pavucontrol"
];
windowrulev2 = [
# fixes fullscreen windows (mostly games)
"stayfocused, initialtitle:^()$, initialclass:^(steam)$"
"minsize 1 1, initialtitle:^()$, initialclass:^(steam)$"
"maximize, initialtitle:^(\S+)$, initialclass:^(steamwebhelper)$"
"immediate, initialclass:^(steam_app_)(.*)$"
"fullscreen, initialclass:^(steam_app_)(.*)$"
# inhibit idle on fullscreen apps (avoids going idle on games when playing with gamepad)
"idleinhibit always, fullscreen:1"
];
render = {
explicit_sync = 1;
explicit_sync_kms = 1;
expand_undersized_textures = false;
};
bezier = "overshot, 0.05, 0.9, 0.1, 1.1";
animations = {
enabled = true;
animation = [
"windows, 1, 5, overshot"
"windowsOut, 1, 5, default, popin 80%"
"windowsMove, 1, 5, default, popin 80%"
"fade, 1, 5, default"
"border, 1, 5, default"
"borderangle, 0, 8, default"
"workspaces, 0"
"specialWorkspace, 0"
];
};
input = {
kb_options = "compose:ralt";
touchpad = {
natural_scroll = true;
scroll_factor = 0.8;
tap-to-click = true;
clickfinger_behavior = true;
};
};
gestures = {
workspace_swipe = true;
workspace_swipe_direction_lock = false;
workspace_swipe_cancel_ratio = 0.15;
};
misc = {
force_default_wallpaper = 0;
disable_hyprland_logo = true;
middle_click_paste = false;
};
}
// optionalAttrs styleCfg.enable {
general = {
border_size = 4;
"col.active_border" = "rgb(${lib.removePrefix "#" styleCfg.scheme.palette.base0E})";
};
decoration = {
rounding = 10;
blur.enabled = true;
};
}
// import ./binds.nix lib;
};
misc = {
force_default_wallpaper = 0;
disable_hyprland_logo = true;
middle_click_paste = false;
};
}
// optionalAttrs styleCfg.enable {
general = {
border_size = 4;
"col.active_border" = "rgb(${lib.removePrefix "#" styleCfg.scheme.palette.base0E})";
};
decoration = {
rounding = 10;
blur.enabled = true;
};
}
// import ./binds.nix lib;
};
environment.sessionVariables = mkMerge [

View file

@ -14,7 +14,7 @@
styleCfg = config.local.style;
rgbaPalette = builtins.mapAttrs (_: c: (lib'.rgba c 1)) styleCfg.scheme.palette;
in {
config = mkIf (config.local.systemVars.desktop == "Hyprland") {
config = mkIf config.local.modules.hyprland.enable {
hjem.users.${username} = {
packages = [hyprlock];
files = {

View file

@ -11,7 +11,7 @@
inherit (config.local.style) wallpaper;
inherit (inputs.hyprpaper.packages.${pkgs.system}) hyprpaper;
in {
config = lib.mkIf (config.local.systemVars.desktop == "Hyprland") {
config = lib.mkIf config.local.modules.hyprland.enable {
hjem.users.${username} = {
packages = [hyprpaper];
files = {

View file

@ -11,7 +11,7 @@ in {
./zathura.nix
];
config = lib.mkIf (config.local.systemVars.desktop != "none") {
config = lib.mkIf config.local.profiles.desktop.enable {
hjem.users.${username}.packages = [
pkgs.gnome-calculator
pkgs.gthumb

View file

@ -7,7 +7,7 @@
inherit (config.local.systemVars) username;
styleCfg = config.local.style;
in {
config = lib.mkIf (config.local.systemVars.desktop != "none") {
config = lib.mkIf config.local.profiles.desktop.enable {
hjem.users.${username} = {
packages = [pkgs.tidal-hifi];
files = {

View file

@ -9,7 +9,7 @@
builtins.concatStringsSep "\n"
(lib.mapAttrsToList (option: value: "set ${option} \"${toString value}\"") attrs);
in {
config = lib.mkIf (config.local.systemVars.desktop != "none") {
config = lib.mkIf config.local.profiles.desktop.enable {
hjem.users.${username} = {
packages = [pkgs.zathura];
files = {

View file

@ -8,9 +8,10 @@
inherit (lib) mkIf;
inherit (config.local.systemVars) username;
in {
config = mkIf (config.local.systemVars.desktop != "none") {
config = mkIf config.local.profiles.desktop.enable {
hjem.users.${username} = {
packages = with pkgs; [
devenv
entr
fractal
fzf

View file

@ -4,9 +4,10 @@
...
}: let
inherit (lib.modules) mkIf;
inherit (config.local.systemVars) desktop username;
inherit (config.local.profiles) desktop;
inherit (config.local.systemVars) username;
in {
config = mkIf (desktop != "none") {
config = mkIf desktop.enable {
programs.nh = {
enable = true;
clean = {
@ -15,6 +16,6 @@ in {
};
};
hjem.users.${username}.environment.sessionVariables.FLAKE = "${config.hjem.users.${username}.directory}/.dotfiles";
hjem.users.${username}.environment.sessionVariables.FLAKE = "/home/${username}/.dotfiles";
};
}

View file

@ -0,0 +1,35 @@
{
lib,
pkgs,
config,
...
}: let
inherit (lib) mkIf;
inherit (config.local.systemVars) username;
in {
config = mkIf config.local.profiles.desktop.enable {
hjem.users.${username} = {
packages = with pkgs; [
lxmenu-data
pcmanfm # builds with gtk3 by default, no need to override
shared-mime-info
];
};
services.gvfs.enable = true; # mount, trash, and other functionalities
systemd.user.services.pcmanfm = {
description = "PCManFM daemon";
documentation = ["https://github.com/lxde/pcmanfm"];
after = ["graphical-session.target"];
partOf = ["graphical-session.target"];
wantedBy = ["graphical-session.target"];
serviceConfig = {
Type = "simple";
ExecStart = "${pkgs.pcmanfm}/bin/pcmanfm --daemon-mode";
Restart = "on-failure";
Slice = "background-graphical.slice";
};
};
};
}

View file

@ -5,7 +5,6 @@
...
}: let
inherit (lib) optionalAttrs;
inherit (lib.modules) mkIf;
inherit (config.local.systemVars) username;
styleCfg = config.local.style;
@ -39,7 +38,7 @@
"21" = palette.base06;
};
in {
config = mkIf (config.local.systemVars.desktop != "none") {
config = lib.mkIf config.local.modules.hyprland.enable {
hjem.users.${username} = {
packages = [pkgs.foot];
files = {

View file

@ -6,95 +6,91 @@
}: let
inherit (lib) mapAttrs mkIf mkMerge optionalAttrs removePrefix;
inherit (config.local.systemVars) username;
toINI = lib.generators.toINIWithGlobalSection {listsAsDuplicateKeys = true;};
styleCfg = config.local.style;
prefix = "ctrl+a";
mkGhosttyTheme = palette: let
colors = mapAttrs (_: value: removePrefix "#" value) palette;
in {
palette = [
"0=#${colors.base00}"
"1=#${colors.base08}"
"2=#${colors.base0B}"
"3=#${colors.base0A}"
"4=#${colors.base0D}"
"5=#${colors.base0E}"
"6=#${colors.base0C}"
"7=#${colors.base05}"
"8=#${colors.base02}"
"9=#${colors.base08}"
"10=#${colors.base0B}"
"11=#${colors.base0A}"
"12=#${colors.base0D}"
"13=#${colors.base0E}"
"14=#${colors.base0C}"
"15=#${colors.base07}"
"16=#${colors.base09}"
"17=#${colors.base0F}"
"18=#${colors.base01}"
"19=#${colors.base02}"
"20=#${colors.base04}"
"21=#${colors.base06}"
];
background = colors.base00;
foreground = colors.base05;
cursor-color = colors.base06;
selection-background = colors.base02;
selection-foreground = colors.base05;
};
in
with colors; {
base16 = {
palette = {
"0" = "#${base00}";
"1" = "#${base08}";
"2" = "#${base0B}";
"3" = "#${base0A}";
"4" = "#${base0D}";
"5" = "#${base0E}";
"6" = "#${base0C}";
"7" = "#${base05}";
"8" = "#${base02}";
"9" = "#${base08}";
"10" = "#${base0B}";
"11" = "#${base0A}";
"12" = "#${base0D}";
"13" = "#${base0E}";
"14" = "#${base0C}";
"15" = "#${base07}";
"16" = "#${base09}";
"17" = "#${base0F}";
"18" = "#${base01}";
"19" = "#${base02}";
"20" = "#${base04}";
"21" = "#${base06}";
};
background = base00;
foreground = base05;
cursor-color = base06;
selection-background = base02;
selection-foreground = base05;
};
};
in {
config = mkIf (config.local.systemVars.desktop != "none") {
config = mkIf config.local.profiles.desktop.enable {
hjem.users.${username} = {
files = mkMerge [
programs.ghostty = mkMerge [
{
".config/ghostty/config".text =
toINI
{
globalSection = {
font-family = ["monospace" "Symbols Nerd Font"];
font-size = 14;
gtk-single-instance = true;
gtk-adwaita = false;
confirm-close-surface = false;
enable = true;
settings = {
font-family = ["monospace" "Symbols Nerd Font"];
font-size = 14;
gtk-single-instance = true;
gtk-adwaita = false;
confirm-close-surface = false;
keybind = [
"${prefix}>c=new_tab"
"${prefix}>p=move_tab:-1"
"${prefix}>n=move_tab:1"
keybind = {
"${prefix}>c" = "new_tab";
"${prefix}>p" = "move_tab:-1";
"${prefix}>n" = "move_tab:1";
"${prefix}>\\=new_split:right"
"${prefix}>-=new_split:down"
"${prefix}>h=goto_split:left"
"${prefix}>j=goto_split:bottom"
"${prefix}>k=goto_split:top"
"${prefix}>l=goto_split:right"
"${prefix}>shift+h=resize_split:left,10"
"${prefix}>shift+j=resize_split:down,10"
"${prefix}>shift+k=resize_split:up,10"
"${prefix}>shift+l=resize_split:right,11"
"${prefix}>z=toggle_split_zoom"
];
adw-toolbar-style = "flat";
gtk-tabs-location = "bottom";
gtk-wide-tabs = false;
window-decoration = false;
linux-cgroup = "always";
};
"${prefix}>\\" = "new_split:right";
"${prefix}>-" = "new_split:down";
"${prefix}>h" = "goto_split:left";
"${prefix}>j" = "goto_split:bottom";
"${prefix}>k" = "goto_split:top";
"${prefix}>l" = "goto_split:right";
"${prefix}>shift+h" = "resize_split:left,10";
"${prefix}>shift+j" = "resize_split:down,10";
"${prefix}>shift+k" = "resize_split:up,10";
"${prefix}>shift+l" = "resize_split:right,11";
"${prefix}>z" = "toggle_split_zoom";
};
adw-toolbar-style = "flat";
gtk-tabs-location = "bottom";
gtk-wide-tabs = false;
window-decoration = false;
linux-cgroup = "always";
};
}
(optionalAttrs styleCfg.enable
{
".config/ghostty/config".text = toINI {
globalSection.theme = "base16";
};
".config/ghostty/themes/base16".text = toINI {globalSection = mkGhosttyTheme styleCfg.scheme.palette;};
settings.theme = "base16";
themes.base16 = mkGhosttyTheme styleCfg.scheme.palette;
})
];
packages = [pkgs.ghostty];
};
systemd.user.services.ghostty = {
@ -108,8 +104,8 @@ in {
serviceConfig = {
Type = "simple";
ExecStart = "${pkgs.ghostty}/bin/ghostty --initial-window=false --quit-after-last-window-closed=false";
Slice = "background-graphical.slice";
Restart = "on-failure";
Slice = "background-graphical.slice";
};
};
};

View file

@ -9,7 +9,7 @@
builtins.concatStringsSep "\n"
(lib.mapAttrsToList (option: value: "--${option}=\"${value}\"") attrs);
in {
config = lib.mkIf (config.local.systemVars.desktop != "none") {
config = lib.mkIf config.local.profiles.desktop.enable {
hjem.users.${username} = {
packages = [
pkgs.bat

View file

@ -3,6 +3,7 @@
./bat.nix
./direnv.nix
./git.nix
./lsd.nix
./misc.nix
# ./tmux.nix
];

View file

@ -3,7 +3,7 @@
config,
...
}: {
config = lib.mkIf (config.local.systemVars.desktop != "none") {
config = lib.mkIf config.local.profiles.desktop.enable {
programs.direnv.enable = true;
};
}

View file

@ -8,7 +8,7 @@
inherit (config.local.homeVars) signingKey;
toINI = lib.generators.toINI {};
in {
config = lib.mkIf (config.local.systemVars.desktop != "none") {
config = lib.mkIf config.local.profiles.desktop.enable {
hjem.users.${username} = {
packages = with pkgs; [git lazygit];
files = {

View file

@ -0,0 +1,17 @@
{
lib,
config,
...
}: let
inherit (lib.modules) mkIf;
inherit (config.local.systemVars) username;
inherit (config.local.profiles) desktop;
in {
config = mkIf desktop.enable {
hjem.users.${username} = {
rum.programs.lsd = {
enable = true;
};
};
};
}

View file

@ -6,7 +6,7 @@
}: let
inherit (config.local.systemVars) username;
in {
config = lib.mkIf (config.local.systemVars.desktop != "none") {
config = lib.mkIf config.local.profiles.desktop.enable {
hjem.users.${username} = {
packages = with pkgs; [
# archives
@ -15,7 +15,6 @@ in {
unrar
# utils
comma
fd
file
ripgrep

View file

@ -4,7 +4,7 @@
osConfig,
...
}: {
config = lib.mkIf (osConfig.local.systemVars.desktop != "none") {
config = lib.mkIf osConfig.local.profiles.desktop.enable {
programs.tmux = {
enable = true;
prefix = "C-space";

View file

@ -14,7 +14,7 @@ in {
./zsh.nix
];
config = mkIf (config.local.systemVars.desktop != "none") {
config = mkIf config.local.profiles.desktop.enable {
users.users.${username}.shell = pkgs.zsh;
};
}

View file

@ -12,7 +12,7 @@
starshipCache = "${config.hjem.users.${username}.directory}/.cache/starship";
zoxideCache = "${config.hjem.users.${username}.directory}/.cache/zoxide";
in {
config = mkIf (config.local.systemVars.desktop != "none") {
config = mkIf config.local.profiles.desktop.enable {
hjem.users.${username} = {
packages = with pkgs; [carapace nushell];
files = {

View file

@ -4,14 +4,15 @@
config,
...
}: let
inherit (config.local.systemVars) username;
inherit (lib.strings) concatStrings;
toTOML = (pkgs.formats.toml {}).generate;
inherit (config.local.systemVars) username;
in {
config = lib.mkIf (config.local.systemVars.desktop != "none") {
config = lib.mkIf config.local.profiles.desktop.enable {
hjem.users.${username} = {
packages = [pkgs.starship];
files = {
".config/starship/config.toml".source = toTOML "starship config" {
".config/starship.toml".source = toTOML "starship config" {
add_newline = true;
directory = {
style = "bold yellow";
@ -25,6 +26,43 @@ in {
style = "yellow";
format = "[ $duration]($style)";
};
# https://github.com/llakala/nixos/blob/6e840f11d19e59b49e7ba9573f1398830799758a/apps/core/starship/git_status.nix
git_status = {
modified = "M";
staged = "S";
untracked = "A";
renamed = "R";
deleted = "D";
conflicted = "U";
ahead = "[+$count](green)";
behind = "[-$count](red)";
diverged = "[+$ahead_count](green),[-$behind_count](red)";
style = "white";
# referenced from https://github.com/clotodex/nix-config/blob/c878ff5d5ae674b49912387ea9253ce985cbd3cd/shell/starship.nix#L82
format =
concatStrings
[
"[("
"(\\["
"[($conflicted)](orange)"
"[($stashed)](white)"
"[($staged)](blue)"
"[($deleted)](red)"
"[($renamed)](yellow)"
"[($modified)](yellow)"
"[($untracked)](green)"
"\\])"
"( \\[$ahead_behind\\])"
" )]"
"($style)"
];
};
};
};
};

View file

@ -6,7 +6,7 @@
}: let
inherit (config.local.systemVars) username;
in {
config = lib.mkIf (config.local.systemVars.desktop != "none") {
config = lib.mkIf config.local.profiles.desktop.enable {
hjem.users.${username} = {
packages = [pkgs.zoxide];
};

View file

@ -7,25 +7,72 @@
inherit (lib) mkIf;
inherit (config.local.systemVars) username;
in {
config = mkIf (config.local.systemVars.desktop != "none") {
config = mkIf config.local.profiles.desktop.enable {
programs.zsh.enable = true;
hjem.users.${username} = {
packages = [pkgs.zsh];
files = {
".zshrc".text = ''
SAVEHIST=2000
HISTSIZE=2000
ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE="fg=8"
ZSH_HIGHLIGHT_HIGHLIGHTERS=(main brackets pattern)
# enable vi mode
bindkey -v
export KEYTIMEOUT=1
# history
SAVEHIST=2000
HISTSIZE=5000
# prompt
eval "$(starship init zsh)"
eval "$(zoxide init zsh)"
source <(fzf --zsh)
source ${pkgs.zsh-syntax-highlighting}/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
# aliases
alias ls=lsd
## git
alias lg='lazygit'
alias g='git'
alias gs='git status'
alias ga='git add'
alias gc='git commit'
alias gca='git commit --amend'
alias gcm='git commit --message'
alias gk='git checkout'
alias gd='git diff'
alias gf='git fetch'
alias gl='git log'
alias gp='git push'
alias gpf='git push --force-with-lease'
alias gr='git reset'
alias gt='git stash'
alias gtp='git stash pop'
alias gu='git pull'
## bat
alias man='batman'
alias -g -- --help='--help 2>&1 | bat --language=help --style=plain'
# add extra completions
fpath+=(${pkgs.zsh-completions}/share/zsh/site-functions)
fpath+=(${pkgs.nix-zsh-completions}/share/zsh/site-functions)
source ${pkgs.nix-zsh-completions}/share/zsh/plugins/nix/nix-zsh-completions.plugin.zsh
# fzf integration
source <(fzf --zsh)
source ${pkgs.zsh-fzf-tab}/share/fzf-tab/fzf-tab.plugin.zsh
# completion styling
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Za-z}'
zstyle ':completion:*' list-colors "\$\{s.:. LS_COLORS}"
zstyle ':completion:*' menu no
zstyle ':fzf-tab:complete:cd:*' fzf-preview 'lsd'
zstyle ':fzf-tab:complete:__zoxide_z:*' fzf-preview 'lsd'
# autosuggestions
ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE="fg=8"
source ${pkgs.zsh-autosuggestions}/share/zsh-autosuggestions/zsh-autosuggestions.zsh
# highlighting
source ${pkgs.zsh-syntax-highlighting}/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
ZSH_HIGHLIGHT_HIGHLIGHTERS=(main brackets pattern)
ZSH_HIGHLIGHT_STYLES[default]=none
ZSH_HIGHLIGHT_STYLES[unknown-token]=fg=red,underline
ZSH_HIGHLIGHT_STYLES[reserved-word]=fg=cyan,bold
@ -67,31 +114,6 @@ in {
ZSH_HIGHLIGHT_STYLES[bracket-level-4]=fg=yellow,bold
ZSH_HIGHLIGHT_STYLES[bracket-level-5]=fg=cyan,bold
ZSH_HIGHLIGHT_STYLES[cursor-matchingbracket]=standout
source ${pkgs.zsh-autosuggestions}/share/zsh-autosuggestions/zsh-autosuggestions.zsh
# aliases
## git
alias lg='lazygit'
alias g='git'
alias gs='git status'
alias ga='git add'
alias gc='git commit'
alias gca='git commit --amend'
alias gcm='git commit --message'
alias gk='git checkout'
alias gd='git diff'
alias gf='git fetch'
alias gl='git log'
alias gp='git push'
alias gpf='git push --force-with-lease'
alias gr='git reset'
alias gt='git stash'
alias gtp='git stash pop'
alias gu='git pull'
## bat
alias man='batman'
alias -g -- --help='--help 2>&1 | bat --language=help --style=plain'
'';
};
};

View file

@ -1,27 +0,0 @@
{
lib,
pkgs,
config,
...
}: let
inherit (lib) mkIf;
in {
config = mkIf (config.local.systemVars.desktop != "none") {
programs = {
thunar = {
enable = true;
plugins = with pkgs.xfce; [
thunar-archive-plugin
thunar-volman
exo
];
};
xfconf.enable = true;
file-roller.enable = true;
};
services.gvfs.enable = true; # Mount, trash, and other functionalities
services.tumbler.enable = true; # Thumbnail support for images
};
}

View file

@ -10,7 +10,7 @@
styleCfg = config.local.style;
betterTransition = "all 0.3s cubic-bezier(.55,-0.68,.48,1.682)";
in {
config = mkIf (config.local.systemVars.desktop == "Hyprland") {
config = mkIf config.local.modules.hyprland.enable {
hjem.users.${username} = {
packages = [
pkgs.waybar
@ -270,22 +270,26 @@ in {
}
'';
};
};
systemd.user.services.waybar = {
description = "Highly customizable Wayland bar for Sway and Wlroots based compositors.";
documentation = ["https://github.com/Alexays/Waybar/wiki/"];
after = ["graphical-session.target"];
partOf = ["graphical-session.target"];
requisite = ["graphical-session.target"];
wantedBy = ["graphical-session.target"];
systemd.services.waybar.settings = {
Unit = {
Description = "Highly customizable Wayland bar for Sway and Wlroots based compositors.";
Documentation = ["https://github.com/Alexays/Waybar/wiki/"];
After = ["graphical-session.target"];
PartOf = ["graphical-session.target"];
Requisite = ["graphical-session.target"];
};
reloadTriggers = ["${config.hjem.users.${username}.files.".config/waybar/config".text}"];
serviceConfig = {
ExecStart = "${pkgs.waybar}/bin/waybar";
ExecReload = "kill -SIGUSR2 $MAINPID";
Restart = "on-failure";
Slice = "app-graphical.slice";
Service = {
ExecStart = "${pkgs.waybar}/bin/waybar";
ExecReload = "kill -SIGUSR2 $MAINPID";
Restart = "on-failure";
Slice = "app-graphical.slice";
};
Install = {
WantedBy = ["graphical-session.target"];
};
};
};
};

View file

@ -17,7 +17,7 @@
in
builtins.concatStringsSep "\n" (map formatItem items);
in {
config = lib.mkIf (config.local.systemVars.desktop == "Hyprland") {
config = lib.mkIf config.local.modules.hyprland.enable {
hjem.users.${username} = {
packages = [pkgs.wlogout];
files = {

View file

@ -6,7 +6,7 @@
}: let
inherit (config.local.systemVars) username;
in {
config = lib.mkIf (config.local.systemVars.desktop != "none") {
config = lib.mkIf config.local.profiles.desktop.enable {
hjem.users.${username} = {
files = {
".config/mimeapps.list".text = ''
@ -17,7 +17,7 @@ in {
image/jpeg=org.gnome.gThumb.desktop
image/png=org.gnome.gThumb.desktop
image/svg= org.gnome.gThumb.desktop
inode/directory=thunar.desktop
inode/directory=pcmanfm.desktop
text/html=firefox.desktop
video/avi=io.github.celluloid_player.Celluloid.desktop
video/mkv=io.github.celluloid_player.Celluloid.desktop

View file

@ -4,7 +4,7 @@
config,
...
}: {
config = lib.mkIf (config.local.systemVars.desktop != "none") {
config = lib.mkIf config.local.profiles.desktop.enable {
virtualisation.podman = {
enable = true;
dockerCompat = true;

View file

@ -3,7 +3,7 @@
config,
...
}: {
config = lib.mkIf (config.local.systemVars.desktop != "none") {
config = lib.mkIf config.local.profiles.desktop.enable {
documentation = {
enable = true;

View file

@ -3,7 +3,7 @@
config,
...
}: {
config = lib.mkIf (config.local.systemVars.desktop != "none") {
config = lib.mkIf config.local.profiles.desktop.enable {
services.flatpak.enable = true;
};
}

View file

@ -7,7 +7,7 @@
inherit (config.local.systemVars) username;
toINI = lib.generators.toINI {};
in {
config = lib.mkIf (config.local.systemVars.desktop != "none") {
config = lib.mkIf config.local.profiles.desktop.enable {
hjem.users.${username} = {
packages = [pkgs.gammastep];
files = {
@ -27,6 +27,7 @@ in {
wants = ["geoclue-agent.service"];
wantedBy = ["graphical-session.target"];
serviceConfig = {
Type = "simple";
ExecStart = "${pkgs.gammastep}/bin/gammastep-indicator";
Restart = "on-failure";
RestartSec = 3;

View file

@ -4,7 +4,7 @@
config,
...
}: {
config = lib.mkIf (config.local.systemVars.desktop != "none") {
config = lib.mkIf config.local.profiles.desktop.enable {
services = {
# needed for GNOME services outside of GNOME Desktop
dbus.packages = with pkgs; [
@ -13,5 +13,6 @@
gnome.gnome-keyring.enable = true;
};
programs.seahorse.enable = true;
};
}

View file

@ -49,7 +49,8 @@ let
};
});
in {
config = lib.mkIf (config.local.systemVars.desktop == "Hyprland") {
# TODO: perhaps turn this into a more generic module if we wanna use other wayland compositors
config = lib.mkIf config.local.modules.hyprland.enable {
services.greetd = {
enable = true;
settings = {

View file

@ -6,6 +6,8 @@
lib',
...
}: let
inherit (lib.lists) singleton;
inherit (lib.gvariant) mkInt32;
inherit (lib'.generators.gtk) finalGtk2Text toGtk3Ini;
inherit (config.local.systemVars) username;
@ -25,12 +27,8 @@ in {
in {
files = {
".gtkrc-2.0".text = finalGtk2Text {attrs = gtkSettings;};
".config/gtk-3.0/settings.ini".text = toGtk3Ini {
Settings = gtkSettings;
};
".config/gtk-4.0/settings.ini".text = toGtk3Ini {
Settings = gtkSettings;
};
".config/gtk-3.0/settings.ini".text = toGtk3Ini {Settings = gtkSettings;};
".config/gtk-4.0/settings.ini".text = toGtk3Ini {Settings = gtkSettings;};
".config/gtk-3.0/gtk.css".source = gtkCss;
".config/gtk-4.0/gtk.css".source = gtkCss;
};
@ -38,24 +36,29 @@ in {
gtk.theme.package
cursorTheme.package
gtk.iconTheme.package
pkgs.adwaita-icon-theme # add as fallback
];
environment.sessionVariables = {
GTK2_RC_FILES = "${config.hjem.users.${username}.directory}/.gtkrc-2.0";
GTK_THEME = "${gtkSettings.gtk-theme-name}";
GTK2_RC_FILES = "/home/${username}/.gtkrc-2.0";
GTK_THEME = "${gtkSettings.gtk-theme-name}"; # force a GTK theme on libadwaita apps
};
};
programs.dconf.profiles.user.databases = [
{
lockAll = false;
programs.dconf = {
enable = true;
profiles.user.databases = singleton {
lockAll = true;
settings = {
"org/gnome/desktop/interface" = {
color-scheme = "prefer-${styleCfg.scheme.variant}";
gtk-theme = styleCfg.gtk.theme.name;
"org/gnome/desktop/interface" = with styleCfg; {
color-scheme = "prefer-${scheme.variant}";
cursor-size = mkInt32 cursorTheme.size;
cursor-theme = cursorTheme.name;
gtk-theme = gtk.theme.name;
icon-theme = gtk.iconTheme.name;
};
};
}
];
};
};
};
}

View file

@ -4,7 +4,7 @@
config,
...
}: {
config = lib.mkIf (config.local.systemVars.desktop != "none") {
config = lib.mkIf config.local.profiles.desktop.enable {
services.keyd = {
enable = true;
keyboards.default = {

View file

@ -4,7 +4,7 @@
config,
...
}: {
config = lib.mkIf (config.local.systemVars.desktop != "none") {
config = lib.mkIf config.local.profiles.desktop.enable {
services.kmscon = {
enable = true;
fonts = [

View file

@ -3,7 +3,7 @@
config,
...
}: {
config = lib.mkIf (config.local.systemVars.desktop == "Hyprland") {
config = lib.mkIf config.local.modules.hyprland.enable {
location.provider = "geoclue2";
services.geoclue2 = {

View file

@ -8,7 +8,7 @@
inputs.nix-gaming.nixosModules.pipewireLowLatency
];
config = lib.mkIf (config.local.systemVars.desktop != "none") {
config = lib.mkIf config.local.profiles.desktop.enable {
services = {
pulseaudio.enable = false;
pipewire = {

View file

@ -5,7 +5,7 @@
}: let
inherit (config.local.systemVars) username;
in {
config = lib.mkIf (config.local.systemVars.desktop != "none") {
config = lib.mkIf config.local.profiles.desktop.enable {
programs.ssh = {
startAgent = true;
};

View file

@ -9,7 +9,7 @@
inherit (config.local.systemVars) username;
inherit (lib') generateGtkColors;
in {
config = lib.mkIf (config.local.systemVars.desktop == "Hyprland") {
config = lib.mkIf config.local.modules.hyprland.enable {
hjem.users.${username} = {
files = {
".config/swaync/config.json".text = toJSON {
@ -42,10 +42,11 @@ in {
partOf = ["graphical-session.target"];
wantedBy = ["graphical-session.target"];
serviceConfig = {
Type = "dbus";
BusName = "org.freedesktop.Notifications";
ExecStart = "${pkgs.swaynotificationcenter}/bin/swaync";
Restart = "on-failure";
Type = "dbus";
Slice = "background-graphical.slice";
};
};
};

View file

@ -0,0 +1,45 @@
{
lib,
config,
...
}: let
inherit (lib.modules) mkIf;
inherit (lib.options) mkOption;
inherit (lib.types) listOf package;
cfg = config.autostart;
# stolen from https://github.com/nix-community/home-manager/issues/3447#issuecomment-1328294558
mkAutostartEntries = builtins.listToAttrs (map
(pkg: {
name = ".config/autostart/" + pkg.pname + ".desktop";
value =
if pkg ? desktopItem
then {
# Application has a desktopItem entry.
# Assume that it was made with makeDesktopEntry, which exposes a
# text attribute with the contents of the .desktop file
inherit (pkg.desktopItem) text;
}
else {
# Application does *not* have a desktopItem entry. Try to find a
# matching .desktop name in /share/apaplications
source = pkg + "/share/applications/" + pkg.pname + ".desktop";
};
})
cfg.programs);
in {
options.autostart = {
programs = mkOption {
type = listOf package;
default = [];
description = ''
A list of packages that will be started automatically,
according to the Desktop Application Autostart
Specification.
'';
};
};
config = mkIf (cfg.programs != []) {
files = mkAutostartEntries;
};
}

View file

@ -0,0 +1,74 @@
{
lib,
pkgs,
config,
...
}: let
inherit (lib.options) mkEnableOption mkOption;
inherit (lib.types) attrs lines package str;
toINI = lib.generators.toINI {};
cfg = config.programs.firefox;
firefox = pkgs.wrapFirefox cfg.package {
extraPolicies = cfg.policies;
};
in {
options.programs.firefox = {
enable = mkEnableOption "firefox module.";
package = mkOption {
type = package;
default = pkgs.firefox-esr-unwrapped;
example = pkgs.firefox-unwrapped;
description = ''
The Firefox package to use. As hjem's module implementation of Firefox uses wrapping, this package
is expected to be one of the unwrapped versions. Changing this is not recommended, as some policies
(i.e. SearchEngines) are only available on the ESR version of Firefox.
'';
};
policies = mkOption {
type = attrs;
default = {};
example = {
CaptivePortal = false;
DisableFirefoxStudies = true;
DisablePocket = true;
DisableTelemetry = true;
DisableFirefoxAccounts = true;
};
description = ''
An attribute set of policies to add to Firefox. The full list of policies can be found
[here](https://mozilla.github.io/policy-templates/).
'';
};
extraConfig = mkOption {
type = lines;
default = "";
description = ''
Extra preferences to add to user.js.
'';
};
username = mkOption {
type = str;
example = "user";
description = ''
Name of the Firefox profile to be created.
'';
};
};
config = lib.mkIf cfg.enable {
packages = [firefox];
files = {
".mozilla/firefox/profiles.ini".text = toINI {
Profile0 = {
Name = "${cfg.username}";
IsRelative = 1;
Path = "${cfg.username}";
Default = 1;
};
};
".mozilla/firefox/${cfg.username}/user.js".text = cfg.extraConfig;
};
};
}

View file

@ -0,0 +1,107 @@
{
config,
lib,
pkgs,
...
}: let
inherit (lib.attrsets) isAttrs mapAttrs' mapAttrsToList nameValuePair;
inherit (lib.generators) mkKeyValueDefault mkValueStringDefault toINIWithGlobalSection;
inherit (lib.options) mkEnableOption mkOption;
inherit (lib.types) attrs attrsOf package;
mkKeyValue = key: value:
if isAttrs value
# ghostty's configuration format supports (so far) one level of nested keys as key1=key2=value
then builtins.concatStringsSep "\n" (mapAttrsToList (k: v: "${key}=${k}=${v}") value)
else (mkKeyValueDefault {mkValueString = mkValueStringDefault {};} "=" key value);
toGhosttyConf = toINIWithGlobalSection {
listsAsDuplicateKeys = true;
inherit mkKeyValue;
};
cfg = config.programs.ghostty;
mkThemes = themes:
mapAttrs'
(name: value:
nameValuePair
".config/ghostty/themes/${name}"
{
text = toGhosttyConf {globalSection = value.${name};};
})
themes;
in {
options.programs.ghostty = {
enable = mkEnableOption "Ghostty";
package = mkOption {
type = package;
default = pkgs.ghostty;
description = ''
The Ghostty package to use.
'';
};
settings = mkOption {
type = attrs;
default = {};
example = {
theme = "example-theme";
font-size = 10;
keybind = {
"ctrl+h" = "goto_split:left";
"ctrl+l" = "goto_split:right";
};
};
description = ''
The configuration converted to INI and written to `${config.directory}/.config/ghostty/config`.
Please reference https://ghostty.org/docs/config/reference for config options.
'';
};
themes = mkOption {
type = attrsOf attrs;
default = {};
example = {
example-theme = {
palette = {
"0" = "#51576d";
"1" = "#e78284";
"2" = "#a6d189";
"3" = "#e5c890";
"4" = "#8caaee";
"5" = "#f4b8e4";
"6" = "#81c8be";
"7" = "#a5adce";
"8" = "#626880";
"9" = "#e67172";
"10" = "#8ec772";
"11" = "#d9ba73";
"12" = "#7b9ef0";
"13" = "#f2a4db";
"14" = "#5abfb5";
"15" = "#b5bfe2";
};
background = "#303446";
foreground = "#c6d0f5";
cursor-color = "#f2d5cf";
cursor-text = "#c6d0f5";
selection-background = "#626880";
selection-foreground = "#c6d0f5";
};
};
description = ''
An attribute set of themes, with the key as the theme name.
Please reference https://ghostty.org/docs/features/theme for config options.
'';
};
};
config = lib.mkIf cfg.enable {
packages = [cfg.package];
files =
{
".config/ghostty/config".text = toGhosttyConf {globalSection = cfg.settings;};
}
// mkThemes cfg.themes;
};
}

View file

@ -0,0 +1,57 @@
{
lib,
config,
...
}: let
inherit (builtins) toString;
inherit (lib.attrsets) nameValuePair mapAttrs';
inherit (lib.modules) mkIf;
inherit (lib.options) mkOption;
inherit (lib.types) attrs attrsOf submodule;
inherit (lib.trivial) isBool boolToString;
inherit (lib.generators) toINI;
cfg = config.systemd;
toSystemdUnitFiles = services: let
toSystemdUnit = arg:
toINI {
listsAsDuplicateKeys = true;
mkKeyValue = key: value: let
value' =
if isBool value
then boolToString value
else toString value;
in "${key}=${value'}";
}
arg;
in
mapAttrs' (name: service:
nameValuePair ".config/systemd/user/${name}.service" {text = toSystemdUnit service.settings;})
services;
in {
options.systemd = {
services = mkOption {
type = attrsOf (submodule {
options = {
settings = mkOption {
type = attrs;
default = {};
description = ''
The configuration of this unit. Each attribute in this set specifies an option
(documentation for available options can be found [here](https://www.freedesktop.org/software/systemd/man/latest/systemd.service.html)).
'';
};
};
});
default = {};
description = ''
Definition of systemd user service units.
'';
};
};
config = mkIf (cfg.services != {}) {
files = toSystemdUnitFiles cfg.services;
};
}

View file

@ -0,0 +1,11 @@
{lib}: let
inherit (lib.filesystem) listFilesRecursive;
in {
config = {
hjem.extraModules = [
{
imports = listFilesRecursive ./collection;
}
];
};
}

View file

@ -1,208 +0,0 @@
{
lib,
stdenv,
fetchFromGitHub,
makeWrapper,
cmake,
ninja,
libarchive,
libz,
jdk17,
libcef,
luajit,
xorg,
mesa,
glib,
nss,
nspr,
atk,
at-spi2-atk,
libdrm,
expat,
libxkbcommon,
gtk3,
pango,
cairo,
alsa-lib,
dbus,
at-spi2-core,
cups,
systemd,
buildFHSEnv,
copyDesktopItems,
makeDesktopItem,
}: let
cef = libcef.overrideAttrs (_: {
installPhase = let
gl_rpath = lib.makeLibraryPath [
stdenv.cc.cc.lib
];
rpath = lib.makeLibraryPath [
glib
nss
nspr
atk
at-spi2-atk
libdrm
expat
xorg.libxcb
libxkbcommon
xorg.libX11
xorg.libXcomposite
xorg.libXdamage
xorg.libXext
xorg.libXfixes
xorg.libXrandr
mesa
gtk3
pango
cairo
alsa-lib
dbus
at-spi2-core
cups
xorg.libxshmfence
systemd
];
in ''
mkdir -p $out/lib/ $out/share/cef/
cp libcef_dll_wrapper/libcef_dll_wrapper.a $out/lib/
cp -r ../Resources/* $out/lib/
cp -r ../Release/* $out/lib/
patchelf --set-rpath "${rpath}" $out/lib/libcef.so
patchelf --set-rpath "${gl_rpath}" $out/lib/libEGL.so
patchelf --set-rpath "${gl_rpath}" $out/lib/libGLESv2.so
cp ../Release/*.bin $out/share/cef/
cp -r ../Resources/* $out/share/cef/
cp -r ../include $out
cp -r ../libcef_dll $out
cp -r ../cmake $out
'';
});
bolt = stdenv.mkDerivation (finalAttrs: {
pname = "bolt-launcher";
version = "0.10.0";
src = fetchFromGitHub {
owner = "AdamCake";
repo = "bolt";
rev = finalAttrs.version;
fetchSubmodules = true;
hash = "sha256-2IoFzD+yhQv1Y7D+abeNUT23BC4P1xZTALF8Y+Zsg44=";
};
nativeBuildInputs = [
cmake
ninja
luajit
makeWrapper
copyDesktopItems
];
buildInputs = [
mesa
xorg.libX11
xorg.libxcb
libarchive
libz
cef
jdk17
];
desktopItems = [
(makeDesktopItem {
inherit (bolt) name;
desktopName = "Bolt Launcher";
keywords = [
"Game"
];
exec = "${bolt.name}";
terminal = false;
categories = ["Game"];
icon = "bolt-launcher";
})
];
cmakeFlags = [
"-D CMAKE_BUILD_TYPE=Release"
"-D BOLT_LUAJIT_INCLUDE_DIR=${luajit}/include"
"-G Ninja"
];
preConfigure = ''
ls -al
mkdir -p cef/dist/Release cef/dist/Resources cef/dist/include
ln -s ${cef}/lib/* cef/dist/Release
ln -s ${cef}/share/cef/*.pak cef/dist/Resources
ln -s ${cef}/share/cef/icudtl.dat cef/dist/Resources
ln -s ${cef}/share/cef/locales cef/dist/Resources
ln -s ${cef}/include/* cef/dist/include
ln -s ${cef}/libcef_dll cef/dist/libcef_dll
ln -s ${cef}/cmake cef/dist/cmake
ln -s ${cef}/CMakeLists.txt cef/dist
'';
postInstall = ''
for size in 16 32 64 128 256; do
size_dir="''${size}x''${size}"
ls -al $src/icon
mkdir -p $out/share/icons/hicolor/''${size_dir}/apps
cp $src/icon/$size.png $out/share/icons/hicolor/''${size_dir}/apps/bolt-launcher.png
done
mkdir -p $out/share/icons/hicolor/scalable/apps/
cp $src/icon/bolt.svg $out/share/icons/hicolor/scalable/apps/bolt-launcher.svg
'';
postFixup = ''
makeWrapper "$out/opt/bolt-launcher/bolt" "$out/bin/${finalAttrs.pname}-${finalAttrs.version}" \
--set JAVA_HOME "${jdk17}"
ls -al $out/bin
mkdir -p $out/lib
cp $out/usr/local/lib/libbolt-plugin.so $out/lib
'';
});
in
buildFHSEnv {
inherit (bolt) name version;
targetPkgs = pkgs:
[bolt]
++ (with pkgs; [
xorg.libSM
xorg.libXxf86vm
xorg.libX11
glib
pango
cairo
gdk-pixbuf
gtk2-x11
libz
libcap
libsecret
openssl_1_1
SDL2
libGL
]);
extraInstallCommands = ''
mkdir -p $out/share/applications $out/share/icons
ln -s ${bolt}/share/applications/*.desktop \
$out/share/applications/
ln -s ${bolt}/share/icons/hicolor \
$out/share/icons/hicolor
'';
runScript = "${bolt.name}";
meta = {
homepage = "https://github.com/Adamcake/Bolt";
description = "An alternative launcher for RuneScape";
license = lib.licenses.agpl3Plus;
maintainers = with lib.maintainers; [nezia];
platforms = lib.platforms.linux;
mainProgram = "${bolt.name}";
};
}