Compare commits
74 commits
main
...
add-cosmic
Author | SHA1 | Date | |
---|---|---|---|
fc876b2ea5 | |||
51e295caf2 | |||
76dbbd715b | |||
35f03cf90f | |||
559f99cfde | |||
d10986e1ac | |||
b819cfc631 | |||
4bd08afc91 | |||
2b573c28cd | |||
35f686107a | |||
151e85344d | |||
693471833c | |||
4fcc82722b | |||
a762326b79 | |||
d71cf19f63 | |||
2fb09d12d6 | |||
0599562807 | |||
69a2405840 | |||
d9b7345c88 | |||
45bb7fad8d | |||
a65a622d50 | |||
80f06b097f | |||
30548fd17e | |||
7f110e40fc | |||
a94fc434cd | |||
49c75ab62d | |||
2a2e3abdd3 | |||
4a38e90dfa | |||
b8e696e17b | |||
c1dab8459e | |||
909433b25c | |||
1f4f83a641 | |||
9506714dd0 | |||
c7fbdb2a3f | |||
b73a64cb52 | |||
e8473ec65e | |||
c277227e1a | |||
ce261b292d | |||
6aeca28f86 | |||
9cb997e662 | |||
317dfc0b4a | |||
a51ca01822 | |||
b47f0095f0 | |||
83f8c32991 | |||
6ea4799042 | |||
c8f87c05dc | |||
d4c8a0e93d | |||
ada02bd3ef | |||
c9419c8f9c | |||
30ed3a55e7 | |||
056968f086 | |||
62a748d571 | |||
84eeb6ef6c | |||
b2f958e681 | |||
38c387aade | |||
fb5ed25b58 | |||
080e3fb0db | |||
774b73ecfd | |||
5b40018e66 | |||
02ae326468 | |||
93d12da62b | |||
f1353b550c | |||
c2566571ab | |||
a9a07fea6d | |||
d0242089e2 | |||
01520df7ab | |||
250b8b0694 | |||
a28174f516 | |||
00b3302880 | |||
71d3ad25df | |||
439a837c9a | |||
feed3b7561 | |||
8df739598c | |||
6ab835555c |
83 changed files with 3956 additions and 1301 deletions
|
@ -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 (packages and NixOS modules) |
|
||||
| [shared](shared/) | Exported components (so far only packages) |
|
||||
|
||||
My configuration is structured based on the following principles:
|
||||
|
||||
|
|
|
@ -1,3 +0,0 @@
|
|||
<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>
|
Before Width: | Height: | Size: 376 B |
|
@ -1,3 +0,0 @@
|
|||
<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>
|
Before Width: | Height: | Size: 826 B |
3476
flake.lock
generated
3476
flake.lock
generated
File diff suppressed because it is too large
Load diff
72
flake.nix
72
flake.nix
|
@ -17,8 +17,6 @@
|
|||
(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 = [
|
||||
|
@ -31,14 +29,15 @@
|
|||
});
|
||||
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-database = {
|
||||
nix-index-db = {
|
||||
url = "github:nix-community/nix-index-database";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
@ -47,42 +46,32 @@
|
|||
agenix = {
|
||||
url = "github:ryantm/agenix";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
inputs.systems.follows = "systems";
|
||||
};
|
||||
anyrun = {
|
||||
url = "github:anyrun-org/anyrun";
|
||||
inputs = {
|
||||
nixpkgs.follows = "nixpkgs";
|
||||
systems.follows = "systems";
|
||||
flake-parts.follows = "flake-parts";
|
||||
};
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
basix = {
|
||||
url = "github:notashelf/basix";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
inputs.flake-parts.follows = "flake-parts";
|
||||
};
|
||||
nixos-cosmic = {
|
||||
url = "github:lilyinstarlight/nixos-cosmic";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
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";
|
||||
inputs.systems.follows = "systems";
|
||||
};
|
||||
hyprland.url = "github:hyprwm/Hyprland";
|
||||
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 = "systems";
|
||||
systems.follows = "hyprland/systems";
|
||||
};
|
||||
};
|
||||
hyprlock = {
|
||||
|
@ -90,11 +79,8 @@
|
|||
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 = "systems";
|
||||
systems.follows = "hyprland/systems";
|
||||
};
|
||||
};
|
||||
hyprpaper = {
|
||||
|
@ -102,45 +88,25 @@
|
|||
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 = "systems";
|
||||
systems.follows = "hyprland/systems";
|
||||
};
|
||||
};
|
||||
hyprwm-contrib = {
|
||||
url = "github:hyprwm/contrib";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
# TODO: change to upstream once https://github.com/feel-co/hjem/pull/16 gets merged
|
||||
hjem = {
|
||||
url = "github:nezia1/hjem/implement-environment-variables";
|
||||
url = "github:nezia1/hjem/implement-environment-variables"; # TODO: change to github:feel-co/hjem if env var PR gets in
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
# TODO: change to upstream 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";
|
||||
systems.follows = "systems";
|
||||
flake-utils.follows = "flake-utils";
|
||||
flake-parts.follows = "flake-parts";
|
||||
};
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
treefmt-nix = {
|
||||
url = "github:numtide/treefmt-nix";
|
||||
|
@ -150,14 +116,6 @@
|
|||
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 = [
|
||||
|
@ -167,6 +125,7 @@
|
|||
"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="
|
||||
|
@ -174,6 +133,7 @@
|
|||
"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="
|
||||
];
|
||||
};
|
||||
}
|
||||
|
|
|
@ -1,15 +1,14 @@
|
|||
{
|
||||
self,
|
||||
inputs,
|
||||
...
|
||||
}: let
|
||||
{inputs, ...}: let
|
||||
lib' = import ../lib inputs.nixpkgs.lib;
|
||||
mkSystem = args:
|
||||
inputs.nixpkgs.lib.nixosSystem {
|
||||
specialArgs = {inherit self inputs lib';};
|
||||
specialArgs = {inherit inputs lib';};
|
||||
modules =
|
||||
(args.modules or [])
|
||||
++ [../modules];
|
||||
++ [
|
||||
../modules
|
||||
inputs.hjem.nixosModules.default
|
||||
];
|
||||
};
|
||||
in {
|
||||
vamos = mkSystem {
|
||||
|
|
|
@ -5,6 +5,7 @@ _: {
|
|||
systemVars = {
|
||||
hostName = "solaire";
|
||||
username = "nezia";
|
||||
desktop = "Hyprland";
|
||||
};
|
||||
homeVars = {
|
||||
fullName = "Anthony Rodriguez";
|
||||
|
@ -13,12 +14,10 @@ _: {
|
|||
};
|
||||
|
||||
profiles = {
|
||||
desktop.enable = true;
|
||||
gaming.enable = true;
|
||||
};
|
||||
|
||||
modules = {
|
||||
hyprland.enable = true;
|
||||
nvidia.enable = true;
|
||||
};
|
||||
};
|
||||
|
|
|
@ -8,6 +8,7 @@ _: {
|
|||
systemVars = {
|
||||
hostName = "vamos";
|
||||
username = "nezia";
|
||||
desktop = "Hyprland";
|
||||
};
|
||||
|
||||
homeVars = {
|
||||
|
@ -17,12 +18,7 @@ _: {
|
|||
};
|
||||
|
||||
profiles = {
|
||||
desktop.enable = true;
|
||||
laptop.enable = true;
|
||||
};
|
||||
|
||||
modules = {
|
||||
hyprland.enable = true;
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
|
@ -1,12 +1,4 @@
|
|||
{
|
||||
lib,
|
||||
config,
|
||||
...
|
||||
}: let
|
||||
inherit (lib.modules) mkIf;
|
||||
inherit (config.local.profiles) server;
|
||||
in {
|
||||
config = mkIf (!server.enable) {
|
||||
{pkgs, ...}: {
|
||||
boot = {
|
||||
loader = {
|
||||
timeout = 0;
|
||||
|
@ -35,5 +27,4 @@ in {
|
|||
"rd.udev.log_level=3"
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
config,
|
||||
...
|
||||
}: {
|
||||
config = lib.mkIf config.local.profiles.desktop.enable {
|
||||
config = lib.mkIf (config.local.systemVars.desktop != "none") {
|
||||
fonts = {
|
||||
enableDefaultPackages = false;
|
||||
packages = [
|
||||
|
|
|
@ -1,13 +0,0 @@
|
|||
{
|
||||
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
|
||||
};
|
||||
}
|
|
@ -1,6 +1,5 @@
|
|||
{
|
||||
imports = [
|
||||
./bluetooth.nix
|
||||
./fprintd.nix
|
||||
./fwupd.nix
|
||||
./nvidia.nix
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
config,
|
||||
...
|
||||
}: {
|
||||
config = lib.mkIf config.local.profiles.desktop.enable {
|
||||
config = lib.mkIf (config.local.systemVars.desktop != "none") {
|
||||
services.fwupd.enable = true;
|
||||
};
|
||||
}
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
config,
|
||||
...
|
||||
}: {
|
||||
config = lib.mkIf config.local.profiles.desktop.enable {
|
||||
config = lib.mkIf (config.local.systemVars.desktop != "none") {
|
||||
services = {
|
||||
# setup printing service
|
||||
printing.enable = true;
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
{
|
||||
inputs,
|
||||
pkgs,
|
||||
config,
|
||||
...
|
||||
}: {
|
||||
nix = {
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
config,
|
||||
...
|
||||
}: {
|
||||
config = lib.mkIf config.local.profiles.desktop.enable {
|
||||
config = lib.mkIf (config.local.systemVars.desktop != "none") {
|
||||
security = {
|
||||
polkit.enable = true;
|
||||
polkit = {
|
||||
|
|
|
@ -1,24 +1,16 @@
|
|||
{
|
||||
self,
|
||||
inputs,
|
||||
lib,
|
||||
config,
|
||||
...
|
||||
}: let
|
||||
inherit (lib.modules) mkIf;
|
||||
inherit (config.local.systemVars) username;
|
||||
inherit (lib) mkIf;
|
||||
inherit (config.local.systemVars) desktop 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.enable [
|
||||
extraGroups = mkIf (desktop != "none") [
|
||||
"networkmanager"
|
||||
"audio"
|
||||
"video"
|
||||
|
@ -27,12 +19,15 @@ in {
|
|||
];
|
||||
};
|
||||
|
||||
hjem = mkIf desktop.enable {
|
||||
hjem = mkIf (desktop != "none") {
|
||||
clobberByDefault = true;
|
||||
users.${username} = {
|
||||
enable = true;
|
||||
directory = "/home/${username}";
|
||||
user = "${username}";
|
||||
environment = {
|
||||
forceOverride = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
|
@ -4,23 +4,30 @@
|
|||
options,
|
||||
...
|
||||
}: let
|
||||
inherit (lib) mkIf mkOption;
|
||||
inherit (lib) mkOption;
|
||||
inherit (lib.modules) mkIf;
|
||||
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)"
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
{
|
||||
imports = [
|
||||
./hyprland.nix
|
||||
./nvidia.nix
|
||||
];
|
||||
}
|
||||
|
|
|
@ -1,7 +0,0 @@
|
|||
{lib, ...}: let
|
||||
inherit (lib) mkEnableOption;
|
||||
in {
|
||||
options.local.modules.hyprland = {
|
||||
enable = mkEnableOption "Hyprland modules";
|
||||
};
|
||||
}
|
|
@ -1,6 +1,5 @@
|
|||
{
|
||||
imports = [
|
||||
./desktop.nix
|
||||
./gaming.nix
|
||||
./laptop.nix
|
||||
./server.nix
|
||||
|
|
|
@ -1,18 +0,0 @@
|
|||
{
|
||||
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.";
|
||||
}
|
||||
];
|
||||
}
|
|
@ -11,7 +11,7 @@ in {
|
|||
|
||||
config.assertions = lib.mkIf config.local.profiles.server.enable [
|
||||
{
|
||||
assertion = !config.local.profiles.desktop.enable;
|
||||
assertion = !(config.local.systemVars.desktop != "none");
|
||||
message = "The server profile cannot be enabled if `local.profiles.desktop.enable` is set to true.";
|
||||
}
|
||||
|
||||
|
|
|
@ -8,7 +8,6 @@
|
|||
}: 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 {
|
||||
|
@ -81,7 +80,7 @@ in {
|
|||
name = mkOption {
|
||||
type = str;
|
||||
description = "Name for the GTK theme";
|
||||
default = "adw-gtk3-dark";
|
||||
default = "adw-gtk3";
|
||||
};
|
||||
package = mkOption {
|
||||
type = package;
|
||||
|
@ -95,41 +94,15 @@ in {
|
|||
name = mkOption {
|
||||
type = str;
|
||||
description = "The name for the icon theme that will be used for GTK programs";
|
||||
default = "MoreWaita";
|
||||
default = "Papirus-Dark";
|
||||
};
|
||||
|
||||
package = mkOption {
|
||||
type = package;
|
||||
description = "The GTK icon theme to be used";
|
||||
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',
|
||||
'');
|
||||
default = pkgs.catppuccin-papirus-folders.override {
|
||||
flavor = "mocha";
|
||||
accent = "lavender";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
@ -146,20 +119,8 @@ in {
|
|||
${toString themePath} set by the GTK module does not exist!
|
||||
|
||||
To suppress this message, make sure that
|
||||
`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}`
|
||||
`config.modules.theme.gtk.theme.package` contains
|
||||
the path `${cfg.theme.name}`
|
||||
'';
|
||||
})
|
||||
{
|
||||
|
|
|
@ -4,19 +4,30 @@
|
|||
...
|
||||
}: let
|
||||
inherit (lib) mkOption;
|
||||
inherit (lib.types) str;
|
||||
inherit (lib.types) enum 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 = [
|
||||
|
@ -26,5 +37,8 @@ in {
|
|||
{
|
||||
assertion = options.local.systemVars.username.isDefined;
|
||||
}
|
||||
{
|
||||
assertion = options.local.systemVars.desktop.isDefined;
|
||||
}
|
||||
];
|
||||
}
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
inherit (lib) mkIf;
|
||||
inherit (config.local.systemVars) username;
|
||||
in {
|
||||
config = mkIf config.local.modules.hyprland.enable {
|
||||
config = mkIf (config.local.systemVars.desktop == "Hyprland") {
|
||||
hjem.users.${username} = {
|
||||
packages = [inputs.anyrun.packages.${pkgs.system}.anyrun-with-all-plugins];
|
||||
files = {
|
||||
|
|
|
@ -1,14 +0,0 @@
|
|||
{
|
||||
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;
|
||||
};
|
||||
}
|
|
@ -1,19 +1,18 @@
|
|||
{
|
||||
imports = [
|
||||
./anyrun
|
||||
./discord
|
||||
./editors
|
||||
./hypr
|
||||
./media
|
||||
./terminal
|
||||
|
||||
./comma.nix
|
||||
./discord.nix
|
||||
./fastfetch.nix
|
||||
./firefox.nix
|
||||
./games.nix
|
||||
./misc.nix
|
||||
./nh.nix
|
||||
./pcmanfm.nix
|
||||
./thunar.nix
|
||||
./waybar.nix
|
||||
./wlogout.nix
|
||||
./xdg.nix
|
||||
|
|
|
@ -7,16 +7,25 @@
|
|||
inherit (lib) mkIf;
|
||||
inherit (config.local.systemVars) username;
|
||||
styleCfg = config.local.style;
|
||||
# TODO remove override when https://github.com/NixOS/nixpkgs/issues/380429 gets merged
|
||||
discord = pkgs.vesktop.override {
|
||||
electron = pkgs.electron_33;
|
||||
discord = pkgs.discord-canary.override {
|
||||
withOpenASAR = true;
|
||||
withVencord = true;
|
||||
};
|
||||
|
||||
# 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.profiles.desktop.enable {
|
||||
config = mkIf (config.local.systemVars.desktop != "none") {
|
||||
hjem.users.${username} = {
|
||||
packages = [discord];
|
||||
autostart.programs = [discord];
|
||||
files.".config/vesktop/themes/midnight-base16.css".text = with styleCfg.scheme.palette;
|
||||
packages = [discord krisp-patcher];
|
||||
files.".config/Vencord/themes/midnight-base16.css".text = with styleCfg.scheme.palette;
|
||||
mkIf styleCfg.enable ''
|
||||
/**
|
||||
* @name Midnight-base16
|
91
modules/programs/discord/krisp-patcher.py
Normal file
91
modules/programs/discord/krisp-patcher.py
Normal file
|
@ -0,0 +1,91 @@
|
|||
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.")
|
|
@ -7,10 +7,10 @@
|
|||
inherit (config.local.systemVars) username;
|
||||
in {
|
||||
imports = [
|
||||
./neovim
|
||||
./neovim.nix
|
||||
];
|
||||
|
||||
config = mkIf config.local.profiles.desktop.enable {
|
||||
config = mkIf (config.local.systemVars.desktop != "none") {
|
||||
/*
|
||||
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:
|
||||
|
|
|
@ -53,21 +53,9 @@
|
|||
|
||||
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;
|
||||
|
@ -171,13 +159,11 @@
|
|||
};
|
||||
};
|
||||
|
||||
git = {
|
||||
enable = true;
|
||||
gitsigns.enable = true;
|
||||
};
|
||||
git.enable = true;
|
||||
|
||||
utility = {
|
||||
vim-wakatime.enable = true;
|
||||
surround.enable = true;
|
||||
motion.leap = {
|
||||
enable = true;
|
||||
};
|
||||
|
@ -218,10 +204,7 @@
|
|||
enableLSP = true;
|
||||
enableTreesitter = true;
|
||||
|
||||
nix = {
|
||||
enable = true;
|
||||
lsp.server = "nixd";
|
||||
};
|
||||
nix.enable = true;
|
||||
clang.enable = true;
|
||||
python.enable = true;
|
||||
ts.enable = true;
|
||||
|
@ -256,8 +239,7 @@
|
|||
};
|
||||
};
|
||||
in {
|
||||
imports = [./basedpyright-fix.nix];
|
||||
config = lib.mkIf config.local.profiles.desktop.enable {
|
||||
config = lib.mkIf (config.local.systemVars.desktop != "none") {
|
||||
hjem.users.${username} = {
|
||||
packages = [customNeovim.neovim];
|
||||
};
|
|
@ -1,15 +0,0 @@
|
|||
# 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
|
||||
'';
|
||||
});
|
||||
})
|
||||
];
|
||||
}
|
|
@ -10,7 +10,7 @@
|
|||
sha256 = "137k3i7z4va68v4rvrazy26szc7p2w59h7bc2h8japzjyj6xjs71";
|
||||
};
|
||||
in {
|
||||
config = lib.mkIf config.local.profiles.desktop.enable {
|
||||
config = lib.mkIf (config.local.systemVars.desktop != "none") {
|
||||
hjem.users.${username} = {
|
||||
packages = [pkgs.fastfetch];
|
||||
files = {
|
||||
|
|
|
@ -4,8 +4,8 @@
|
|||
config,
|
||||
...
|
||||
}: let
|
||||
inherit (builtins) readFile;
|
||||
inherit (config.local.systemVars) username;
|
||||
toINI = lib.generators.toINI {};
|
||||
|
||||
betterfox = pkgs.fetchFromGitHub {
|
||||
owner = "yokoffing";
|
||||
|
@ -13,27 +13,9 @@
|
|||
rev = "e026ed7d3a763c5d3f96c2680d7bc3340831af4f";
|
||||
hash = "sha256-hpkEO5BhMVtINQG8HN4xqfas/R6q5pYPZiFK8bilIDs=";
|
||||
};
|
||||
in {
|
||||
config = lib.mkIf config.local.profiles.desktop.enable {
|
||||
hjem.users.${username} = {
|
||||
programs.firefox = {
|
||||
enable = true;
|
||||
inherit username;
|
||||
|
||||
policies = {
|
||||
DisableTelemetry = true;
|
||||
DisablePocket = true;
|
||||
DisableFeedbackCommands = true;
|
||||
DisableFirefoxStudies = true;
|
||||
OfferToSaveLogins = false;
|
||||
OffertosaveloginsDefault = false;
|
||||
PasswordManagerEnabled = false;
|
||||
SearchSuggestEnabled = true;
|
||||
FirefoxHome = {
|
||||
Pocket = false;
|
||||
Snippets = false;
|
||||
};
|
||||
|
||||
firefox = pkgs.wrapFirefox pkgs.firefox-esr-128-unwrapped {
|
||||
extraPolicies = {
|
||||
SearchEngines.Default = "SearxNG";
|
||||
SearchEngines.Add = [
|
||||
{
|
||||
|
@ -83,6 +65,14 @@ in {
|
|||
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 = {
|
||||
|
@ -152,13 +142,27 @@ in {
|
|||
};
|
||||
};
|
||||
};
|
||||
|
||||
extraConfig = builtins.concatStringsSep "\n" [
|
||||
(readFile "${betterfox}/user.js")
|
||||
(readFile "${betterfox}/Securefox.js")
|
||||
(readFile "${betterfox}/Fastfox.js")
|
||||
(readFile "${betterfox}/Peskyfox.js")
|
||||
(readFile "${betterfox}/Smoothfox.js")
|
||||
};
|
||||
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")
|
||||
];
|
||||
};
|
||||
};
|
||||
|
|
|
@ -12,6 +12,7 @@ in {
|
|||
packages = [
|
||||
pkgs.mangohud
|
||||
pkgs.bolt-launcher
|
||||
pkgs.ankama-launcher
|
||||
pkgs.lutris
|
||||
pkgs.qbittorrent
|
||||
pkgs.protonplus
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
|
||||
hyprlock = "${inputs.hyprlock.packages.${pkgs.system}.hyprlock}/bin/hyprlock";
|
||||
in {
|
||||
config = lib.mkIf config.local.modules.hyprland.enable {
|
||||
config = lib.mkIf (config.local.systemVars.desktop == "Hyprland") {
|
||||
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 = "simple";
|
||||
Type = "exec";
|
||||
ExecStart = "${hypridle}/bin/hypridle";
|
||||
Restart = "on-failure";
|
||||
Slice = "background-graphical.slice";
|
||||
|
|
|
@ -8,17 +8,17 @@ lib: let
|
|||
in {
|
||||
"$mod" = "SUPER";
|
||||
bindr = [
|
||||
"$mod, SUPER_L, exec, ${toggle "anyrun" true}"
|
||||
"$mod, SUPER_L, exec, ${toggle "anyrun" false}"
|
||||
];
|
||||
bind = [
|
||||
"$mod, Return, exec, ${run "ghostty"}"
|
||||
"$mod, n, exec, ${run "neovide"}"
|
||||
"$mod, w, exec, ${run "firefox"}"
|
||||
", Print, exec, ${runOnce "grimblast"} --notify copysave output"
|
||||
", Print, exec, ${runOnce "grimblast"} --notify --cursor 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 --freeze copysave area"
|
||||
"CTRL, Print, exec, ${runOnce "grimblast"} --notify --cursor --freeze copysave area"
|
||||
|
||||
"$mod, h, movefocus, l"
|
||||
"$mod, j, movefocus, d"
|
||||
|
|
|
@ -11,7 +11,6 @@
|
|||
inherit (config.local.systemVars) username;
|
||||
|
||||
styleCfg = config.local.style;
|
||||
|
||||
gnomeControlCenter = pkgs.gnome-control-center.overrideAttrs (old: {
|
||||
postInstall =
|
||||
old.postInstall
|
||||
|
@ -30,7 +29,7 @@
|
|||
'';
|
||||
});
|
||||
in {
|
||||
config = mkIf config.local.modules.hyprland.enable {
|
||||
config = mkIf (config.local.systemVars.desktop == "Hyprland") {
|
||||
programs.hyprland = {
|
||||
enable = true;
|
||||
package = inputs.hyprland.packages.${pkgs.system}.hyprland;
|
||||
|
@ -59,10 +58,9 @@ in {
|
|||
inputs.hyprwm-contrib.packages.${pkgs.system}.grimblast
|
||||
gnomeControlCenter
|
||||
];
|
||||
|
||||
rum.programs.hyprland = {
|
||||
enable = true;
|
||||
settings =
|
||||
files = {
|
||||
".config/hypr/hyprland.conf".text = toHyprConf {
|
||||
attrs =
|
||||
{
|
||||
xwayland = {
|
||||
force_zero_scaling = true;
|
||||
|
@ -81,7 +79,7 @@ in {
|
|||
];
|
||||
workspace = [
|
||||
"special:terminal, on-created-empty:ghostty"
|
||||
"special:file_manager_gui, on-created-empty:pcmanfm"
|
||||
"special:file_manager_gui, on-created-empty:thunar"
|
||||
"special:file_manager_tui, on-created-empty:ghostty -e yazi"
|
||||
|
||||
"special:calculator_gui, on-created-empty:qalculate-gtk"
|
||||
|
@ -157,6 +155,7 @@ in {
|
|||
}
|
||||
// import ./binds.nix lib;
|
||||
};
|
||||
};
|
||||
|
||||
environment.sessionVariables = mkMerge [
|
||||
{
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
styleCfg = config.local.style;
|
||||
rgbaPalette = builtins.mapAttrs (_: c: (lib'.rgba c 1)) styleCfg.scheme.palette;
|
||||
in {
|
||||
config = mkIf config.local.modules.hyprland.enable {
|
||||
config = mkIf (config.local.systemVars.desktop == "Hyprland") {
|
||||
hjem.users.${username} = {
|
||||
packages = [hyprlock];
|
||||
files = {
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
inherit (config.local.style) wallpaper;
|
||||
inherit (inputs.hyprpaper.packages.${pkgs.system}) hyprpaper;
|
||||
in {
|
||||
config = lib.mkIf config.local.modules.hyprland.enable {
|
||||
config = lib.mkIf (config.local.systemVars.desktop == "Hyprland") {
|
||||
hjem.users.${username} = {
|
||||
packages = [hyprpaper];
|
||||
files = {
|
||||
|
|
|
@ -11,7 +11,7 @@ in {
|
|||
./zathura.nix
|
||||
];
|
||||
|
||||
config = lib.mkIf config.local.profiles.desktop.enable {
|
||||
config = lib.mkIf (config.local.systemVars.desktop != "none") {
|
||||
hjem.users.${username}.packages = [
|
||||
pkgs.gnome-calculator
|
||||
pkgs.gthumb
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
inherit (config.local.systemVars) username;
|
||||
styleCfg = config.local.style;
|
||||
in {
|
||||
config = lib.mkIf config.local.profiles.desktop.enable {
|
||||
config = lib.mkIf (config.local.systemVars.desktop != "none") {
|
||||
hjem.users.${username} = {
|
||||
packages = [pkgs.tidal-hifi];
|
||||
files = {
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
builtins.concatStringsSep "\n"
|
||||
(lib.mapAttrsToList (option: value: "set ${option} \"${toString value}\"") attrs);
|
||||
in {
|
||||
config = lib.mkIf config.local.profiles.desktop.enable {
|
||||
config = lib.mkIf (config.local.systemVars.desktop != "none") {
|
||||
hjem.users.${username} = {
|
||||
packages = [pkgs.zathura];
|
||||
files = {
|
||||
|
|
|
@ -8,10 +8,9 @@
|
|||
inherit (lib) mkIf;
|
||||
inherit (config.local.systemVars) username;
|
||||
in {
|
||||
config = mkIf config.local.profiles.desktop.enable {
|
||||
config = mkIf (config.local.systemVars.desktop != "none") {
|
||||
hjem.users.${username} = {
|
||||
packages = with pkgs; [
|
||||
devenv
|
||||
entr
|
||||
fractal
|
||||
fzf
|
||||
|
|
|
@ -4,10 +4,9 @@
|
|||
...
|
||||
}: let
|
||||
inherit (lib.modules) mkIf;
|
||||
inherit (config.local.profiles) desktop;
|
||||
inherit (config.local.systemVars) username;
|
||||
inherit (config.local.systemVars) desktop username;
|
||||
in {
|
||||
config = mkIf desktop.enable {
|
||||
config = mkIf (desktop != "none") {
|
||||
programs.nh = {
|
||||
enable = true;
|
||||
clean = {
|
||||
|
@ -16,6 +15,6 @@ in {
|
|||
};
|
||||
};
|
||||
|
||||
hjem.users.${username}.environment.sessionVariables.FLAKE = "/home/${username}/.dotfiles";
|
||||
hjem.users.${username}.environment.sessionVariables.FLAKE = "${config.hjem.users.${username}.directory}/.dotfiles";
|
||||
};
|
||||
}
|
||||
|
|
|
@ -1,35 +0,0 @@
|
|||
{
|
||||
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";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
|
@ -5,6 +5,7 @@
|
|||
...
|
||||
}: let
|
||||
inherit (lib) optionalAttrs;
|
||||
inherit (lib.modules) mkIf;
|
||||
inherit (config.local.systemVars) username;
|
||||
|
||||
styleCfg = config.local.style;
|
||||
|
@ -38,7 +39,7 @@
|
|||
"21" = palette.base06;
|
||||
};
|
||||
in {
|
||||
config = lib.mkIf config.local.modules.hyprland.enable {
|
||||
config = mkIf (config.local.systemVars.desktop != "none") {
|
||||
hjem.users.${username} = {
|
||||
packages = [pkgs.foot];
|
||||
files = {
|
||||
|
|
|
@ -6,76 +6,76 @@
|
|||
}: 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
|
||||
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 {
|
||||
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 {
|
||||
config = mkIf config.local.profiles.desktop.enable {
|
||||
config = mkIf (config.local.systemVars.desktop != "none") {
|
||||
hjem.users.${username} = {
|
||||
programs.ghostty = mkMerge [
|
||||
files = mkMerge [
|
||||
{
|
||||
enable = true;
|
||||
settings = {
|
||||
".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;
|
||||
|
||||
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";
|
||||
};
|
||||
"${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";
|
||||
|
@ -84,13 +84,17 @@ in {
|
|||
|
||||
linux-cgroup = "always";
|
||||
};
|
||||
};
|
||||
}
|
||||
(optionalAttrs styleCfg.enable
|
||||
{
|
||||
settings.theme = "base16";
|
||||
themes.base16 = mkGhosttyTheme styleCfg.scheme.palette;
|
||||
".config/ghostty/config".text = toINI {
|
||||
globalSection.theme = "base16";
|
||||
};
|
||||
".config/ghostty/themes/base16".text = toINI {globalSection = mkGhosttyTheme styleCfg.scheme.palette;};
|
||||
})
|
||||
];
|
||||
packages = [pkgs.ghostty];
|
||||
};
|
||||
|
||||
systemd.user.services.ghostty = {
|
||||
|
@ -104,8 +108,8 @@ in {
|
|||
serviceConfig = {
|
||||
Type = "simple";
|
||||
ExecStart = "${pkgs.ghostty}/bin/ghostty --initial-window=false --quit-after-last-window-closed=false";
|
||||
Restart = "on-failure";
|
||||
Slice = "background-graphical.slice";
|
||||
Restart = "on-failure";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
builtins.concatStringsSep "\n"
|
||||
(lib.mapAttrsToList (option: value: "--${option}=\"${value}\"") attrs);
|
||||
in {
|
||||
config = lib.mkIf config.local.profiles.desktop.enable {
|
||||
config = lib.mkIf (config.local.systemVars.desktop != "none") {
|
||||
hjem.users.${username} = {
|
||||
packages = [
|
||||
pkgs.bat
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
./bat.nix
|
||||
./direnv.nix
|
||||
./git.nix
|
||||
./lsd.nix
|
||||
./misc.nix
|
||||
# ./tmux.nix
|
||||
];
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
config,
|
||||
...
|
||||
}: {
|
||||
config = lib.mkIf config.local.profiles.desktop.enable {
|
||||
config = lib.mkIf (config.local.systemVars.desktop != "none") {
|
||||
programs.direnv.enable = true;
|
||||
};
|
||||
}
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
inherit (config.local.homeVars) signingKey;
|
||||
toINI = lib.generators.toINI {};
|
||||
in {
|
||||
config = lib.mkIf config.local.profiles.desktop.enable {
|
||||
config = lib.mkIf (config.local.systemVars.desktop != "none") {
|
||||
hjem.users.${username} = {
|
||||
packages = with pkgs; [git lazygit];
|
||||
files = {
|
||||
|
|
|
@ -1,17 +0,0 @@
|
|||
{
|
||||
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;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
|
@ -6,7 +6,7 @@
|
|||
}: let
|
||||
inherit (config.local.systemVars) username;
|
||||
in {
|
||||
config = lib.mkIf config.local.profiles.desktop.enable {
|
||||
config = lib.mkIf (config.local.systemVars.desktop != "none") {
|
||||
hjem.users.${username} = {
|
||||
packages = with pkgs; [
|
||||
# archives
|
||||
|
@ -15,6 +15,7 @@ in {
|
|||
unrar
|
||||
|
||||
# utils
|
||||
comma
|
||||
fd
|
||||
file
|
||||
ripgrep
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
osConfig,
|
||||
...
|
||||
}: {
|
||||
config = lib.mkIf osConfig.local.profiles.desktop.enable {
|
||||
config = lib.mkIf (osConfig.local.systemVars.desktop != "none") {
|
||||
programs.tmux = {
|
||||
enable = true;
|
||||
prefix = "C-space";
|
||||
|
|
|
@ -14,7 +14,7 @@ in {
|
|||
./zsh.nix
|
||||
];
|
||||
|
||||
config = mkIf config.local.profiles.desktop.enable {
|
||||
config = mkIf (config.local.systemVars.desktop != "none") {
|
||||
users.users.${username}.shell = pkgs.zsh;
|
||||
};
|
||||
}
|
||||
|
|
|
@ -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.profiles.desktop.enable {
|
||||
config = mkIf (config.local.systemVars.desktop != "none") {
|
||||
hjem.users.${username} = {
|
||||
packages = with pkgs; [carapace nushell];
|
||||
files = {
|
||||
|
|
|
@ -4,15 +4,14 @@
|
|||
config,
|
||||
...
|
||||
}: let
|
||||
inherit (lib.strings) concatStrings;
|
||||
toTOML = (pkgs.formats.toml {}).generate;
|
||||
inherit (config.local.systemVars) username;
|
||||
toTOML = (pkgs.formats.toml {}).generate;
|
||||
in {
|
||||
config = lib.mkIf config.local.profiles.desktop.enable {
|
||||
config = lib.mkIf (config.local.systemVars.desktop != "none") {
|
||||
hjem.users.${username} = {
|
||||
packages = [pkgs.starship];
|
||||
files = {
|
||||
".config/starship.toml".source = toTOML "starship config" {
|
||||
".config/starship/config.toml".source = toTOML "starship config" {
|
||||
add_newline = true;
|
||||
directory = {
|
||||
style = "bold yellow";
|
||||
|
@ -26,43 +25,6 @@ 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)"
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
}: let
|
||||
inherit (config.local.systemVars) username;
|
||||
in {
|
||||
config = lib.mkIf config.local.profiles.desktop.enable {
|
||||
config = lib.mkIf (config.local.systemVars.desktop != "none") {
|
||||
hjem.users.${username} = {
|
||||
packages = [pkgs.zoxide];
|
||||
};
|
||||
|
|
|
@ -7,72 +7,25 @@
|
|||
inherit (lib) mkIf;
|
||||
inherit (config.local.systemVars) username;
|
||||
in {
|
||||
config = mkIf config.local.profiles.desktop.enable {
|
||||
config = mkIf (config.local.systemVars.desktop != "none") {
|
||||
programs.zsh.enable = true;
|
||||
hjem.users.${username} = {
|
||||
packages = [pkgs.zsh];
|
||||
files = {
|
||||
".zshrc".text = ''
|
||||
# enable vi mode
|
||||
bindkey -v
|
||||
export KEYTIMEOUT=1
|
||||
|
||||
# history
|
||||
SAVEHIST=2000
|
||||
HISTSIZE=5000
|
||||
HISTSIZE=2000
|
||||
ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE="fg=8"
|
||||
|
||||
ZSH_HIGHLIGHT_HIGHLIGHTERS=(main brackets pattern)
|
||||
bindkey -v
|
||||
|
||||
# prompt
|
||||
eval "$(starship init zsh)"
|
||||
eval "$(zoxide init 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
|
||||
|
@ -114,6 +67,31 @@ 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'
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
|
27
modules/programs/thunar.nix
Normal file
27
modules/programs/thunar.nix
Normal file
|
@ -0,0 +1,27 @@
|
|||
{
|
||||
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
|
||||
};
|
||||
}
|
|
@ -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.modules.hyprland.enable {
|
||||
config = mkIf (config.local.systemVars.desktop == "Hyprland") {
|
||||
hjem.users.${username} = {
|
||||
packages = [
|
||||
pkgs.waybar
|
||||
|
@ -270,27 +270,23 @@ in {
|
|||
}
|
||||
'';
|
||||
};
|
||||
|
||||
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"];
|
||||
};
|
||||
|
||||
Service = {
|
||||
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"];
|
||||
|
||||
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";
|
||||
};
|
||||
|
||||
Install = {
|
||||
WantedBy = ["graphical-session.target"];
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
in
|
||||
builtins.concatStringsSep "\n" (map formatItem items);
|
||||
in {
|
||||
config = lib.mkIf config.local.modules.hyprland.enable {
|
||||
config = lib.mkIf (config.local.systemVars.desktop == "Hyprland") {
|
||||
hjem.users.${username} = {
|
||||
packages = [pkgs.wlogout];
|
||||
files = {
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
}: let
|
||||
inherit (config.local.systemVars) username;
|
||||
in {
|
||||
config = lib.mkIf config.local.profiles.desktop.enable {
|
||||
config = lib.mkIf (config.local.systemVars.desktop != "none") {
|
||||
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=pcmanfm.desktop
|
||||
inode/directory=thunar.desktop
|
||||
text/html=firefox.desktop
|
||||
video/avi=io.github.celluloid_player.Celluloid.desktop
|
||||
video/mkv=io.github.celluloid_player.Celluloid.desktop
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
config,
|
||||
...
|
||||
}: {
|
||||
config = lib.mkIf config.local.profiles.desktop.enable {
|
||||
config = lib.mkIf (config.local.systemVars.desktop != "none") {
|
||||
virtualisation.podman = {
|
||||
enable = true;
|
||||
dockerCompat = true;
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
config,
|
||||
...
|
||||
}: {
|
||||
config = lib.mkIf config.local.profiles.desktop.enable {
|
||||
config = lib.mkIf (config.local.systemVars.desktop != "none") {
|
||||
documentation = {
|
||||
enable = true;
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
config,
|
||||
...
|
||||
}: {
|
||||
config = lib.mkIf config.local.profiles.desktop.enable {
|
||||
config = lib.mkIf (config.local.systemVars.desktop != "none") {
|
||||
services.flatpak.enable = true;
|
||||
};
|
||||
}
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
inherit (config.local.systemVars) username;
|
||||
toINI = lib.generators.toINI {};
|
||||
in {
|
||||
config = lib.mkIf config.local.profiles.desktop.enable {
|
||||
config = lib.mkIf (config.local.systemVars.desktop != "none") {
|
||||
hjem.users.${username} = {
|
||||
packages = [pkgs.gammastep];
|
||||
files = {
|
||||
|
@ -27,7 +27,6 @@ in {
|
|||
wants = ["geoclue-agent.service"];
|
||||
wantedBy = ["graphical-session.target"];
|
||||
serviceConfig = {
|
||||
Type = "simple";
|
||||
ExecStart = "${pkgs.gammastep}/bin/gammastep-indicator";
|
||||
Restart = "on-failure";
|
||||
RestartSec = 3;
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
config,
|
||||
...
|
||||
}: {
|
||||
config = lib.mkIf config.local.profiles.desktop.enable {
|
||||
config = lib.mkIf (config.local.systemVars.desktop != "none") {
|
||||
services = {
|
||||
# needed for GNOME services outside of GNOME Desktop
|
||||
dbus.packages = with pkgs; [
|
||||
|
@ -13,6 +13,5 @@
|
|||
|
||||
gnome.gnome-keyring.enable = true;
|
||||
};
|
||||
programs.seahorse.enable = true;
|
||||
};
|
||||
}
|
||||
|
|
|
@ -49,8 +49,7 @@ let
|
|||
};
|
||||
});
|
||||
in {
|
||||
# TODO: perhaps turn this into a more generic module if we wanna use other wayland compositors
|
||||
config = lib.mkIf config.local.modules.hyprland.enable {
|
||||
config = lib.mkIf (config.local.systemVars.desktop == "Hyprland") {
|
||||
services.greetd = {
|
||||
enable = true;
|
||||
settings = {
|
||||
|
|
|
@ -6,8 +6,6 @@
|
|||
lib',
|
||||
...
|
||||
}: let
|
||||
inherit (lib.lists) singleton;
|
||||
inherit (lib.gvariant) mkInt32;
|
||||
inherit (lib'.generators.gtk) finalGtk2Text toGtk3Ini;
|
||||
inherit (config.local.systemVars) username;
|
||||
|
||||
|
@ -27,8 +25,12 @@ 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;
|
||||
};
|
||||
|
@ -36,29 +38,24 @@ in {
|
|||
gtk.theme.package
|
||||
cursorTheme.package
|
||||
gtk.iconTheme.package
|
||||
pkgs.adwaita-icon-theme # add as fallback
|
||||
];
|
||||
|
||||
environment.sessionVariables = {
|
||||
GTK2_RC_FILES = "/home/${username}/.gtkrc-2.0";
|
||||
GTK_THEME = "${gtkSettings.gtk-theme-name}"; # force a GTK theme on libadwaita apps
|
||||
GTK2_RC_FILES = "${config.hjem.users.${username}.directory}/.gtkrc-2.0";
|
||||
GTK_THEME = "${gtkSettings.gtk-theme-name}";
|
||||
};
|
||||
};
|
||||
|
||||
programs.dconf = {
|
||||
enable = true;
|
||||
profiles.user.databases = singleton {
|
||||
lockAll = true;
|
||||
programs.dconf.profiles.user.databases = [
|
||||
{
|
||||
lockAll = false;
|
||||
settings = {
|
||||
"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;
|
||||
};
|
||||
};
|
||||
"org/gnome/desktop/interface" = {
|
||||
color-scheme = "prefer-${styleCfg.scheme.variant}";
|
||||
gtk-theme = styleCfg.gtk.theme.name;
|
||||
};
|
||||
};
|
||||
}
|
||||
];
|
||||
};
|
||||
}
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
config,
|
||||
...
|
||||
}: {
|
||||
config = lib.mkIf config.local.profiles.desktop.enable {
|
||||
config = lib.mkIf (config.local.systemVars.desktop != "none") {
|
||||
services.keyd = {
|
||||
enable = true;
|
||||
keyboards.default = {
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
config,
|
||||
...
|
||||
}: {
|
||||
config = lib.mkIf config.local.profiles.desktop.enable {
|
||||
config = lib.mkIf (config.local.systemVars.desktop != "none") {
|
||||
services.kmscon = {
|
||||
enable = true;
|
||||
fonts = [
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
config,
|
||||
...
|
||||
}: {
|
||||
config = lib.mkIf config.local.modules.hyprland.enable {
|
||||
config = lib.mkIf (config.local.systemVars.desktop == "Hyprland") {
|
||||
location.provider = "geoclue2";
|
||||
|
||||
services.geoclue2 = {
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
inputs.nix-gaming.nixosModules.pipewireLowLatency
|
||||
];
|
||||
|
||||
config = lib.mkIf config.local.profiles.desktop.enable {
|
||||
config = lib.mkIf (config.local.systemVars.desktop != "none") {
|
||||
services = {
|
||||
pulseaudio.enable = false;
|
||||
pipewire = {
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
}: let
|
||||
inherit (config.local.systemVars) username;
|
||||
in {
|
||||
config = lib.mkIf config.local.profiles.desktop.enable {
|
||||
config = lib.mkIf (config.local.systemVars.desktop != "none") {
|
||||
programs.ssh = {
|
||||
startAgent = true;
|
||||
};
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
inherit (config.local.systemVars) username;
|
||||
inherit (lib') generateGtkColors;
|
||||
in {
|
||||
config = lib.mkIf config.local.modules.hyprland.enable {
|
||||
config = lib.mkIf (config.local.systemVars.desktop == "Hyprland") {
|
||||
hjem.users.${username} = {
|
||||
files = {
|
||||
".config/swaync/config.json".text = toJSON {
|
||||
|
@ -42,11 +42,10 @@ in {
|
|||
partOf = ["graphical-session.target"];
|
||||
wantedBy = ["graphical-session.target"];
|
||||
serviceConfig = {
|
||||
Type = "dbus";
|
||||
BusName = "org.freedesktop.Notifications";
|
||||
ExecStart = "${pkgs.swaynotificationcenter}/bin/swaync";
|
||||
Restart = "on-failure";
|
||||
Slice = "background-graphical.slice";
|
||||
Type = "dbus";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
|
|
@ -1,45 +0,0 @@
|
|||
{
|
||||
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;
|
||||
};
|
||||
}
|
|
@ -1,74 +0,0 @@
|
|||
{
|
||||
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;
|
||||
};
|
||||
};
|
||||
}
|
|
@ -1,107 +0,0 @@
|
|||
{
|
||||
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;
|
||||
};
|
||||
}
|
|
@ -1,57 +0,0 @@
|
|||
{
|
||||
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;
|
||||
};
|
||||
}
|
|
@ -1,11 +0,0 @@
|
|||
{lib}: let
|
||||
inherit (lib.filesystem) listFilesRecursive;
|
||||
in {
|
||||
config = {
|
||||
hjem.extraModules = [
|
||||
{
|
||||
imports = listFilesRecursive ./collection;
|
||||
}
|
||||
];
|
||||
};
|
||||
}
|
Loading…
Add table
Reference in a new issue