Compare commits

..

5 Commits

32 changed files with 1314 additions and 2740 deletions

6
.envrc
View File

@@ -1,7 +1,11 @@
# -*- mode: sh; -*- # -*- mode: sh; -*-
if ! has nix_direnv_version || ! nix_direnv_version 2.2.1; then
source_url "https://raw.githubusercontent.com/nix-community/nix-direnv/2.2.1/direnvrc" "sha256-zelF0vLbEl5uaqrfIzbgNzJWGmLzCmYAkInj/LNxvKs="
fi
watch_file flake.nix watch_file flake.nix
watch_file flake.lock watch_file flake.lock
if ! use flake . --no-pure-eval if ! use flake . --no-pure-eval
then then
echo "dev shell could not be built. The environment was not loaded. Make the necessary changes to flake.nix and hit enter to try again." >&2 echo "devenv could not be built. The devenv environment was not loaded. Make the necessary changes to devenv.nix and hit enter to try again." >&2
fi fi

907
flake.lock generated

File diff suppressed because it is too large Load Diff

226
flake.nix
View File

@@ -3,7 +3,11 @@
inputs = { inputs = {
nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable"; nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";
flake-utils.url = "github:numtide/flake-utils";
devenv = {
url = "github:cachix/devenv";
inputs.nixpkgs.follows = "nixpkgs";
};
home-manager = { home-manager = {
url = "github:nix-community/home-manager"; url = "github:nix-community/home-manager";
@@ -26,12 +30,7 @@
}; };
jj-cz = { jj-cz = {
url = "git+https://labs.phundrak.com/phundrak/jj-cz?ref=develop"; url = "git+https://labs.phundrak.com/phundrak/jj-cz";
inputs.nixpkgs.follows = "nixpkgs";
};
opencode = {
url = "github:anomalyco/opencode/v1.3.15";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
@@ -63,15 +62,14 @@
nixConfig = { nixConfig = {
extra-trusted-public-keys = [ extra-trusted-public-keys = [
"marpa-local:XoO+dFN4PeauF52pYuy3Vh4Sdtl2qIdxu5aUasWKv6Q=" "devenv.cachix.org-1:w1cLUi8dv3hnoSPGAuibQv+f9TZLr6cv/Hm9XgU50cw="
"phundrak.cachix.org-1:osJAkYO0ioTOPqaQCIXMfIRz1/+YYlVFkup3R2KSexk=" "phundrak.cachix.org-1:osJAkYO0ioTOPqaQCIXMfIRz1/+YYlVFkup3R2KSexk="
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=" "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
"cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY="
]; ];
extra-substituters = [ extra-substituters = [
"http://marpa:5000?priority=5" "https://nix-community.cachix.org?priority=10"
"https://phundrak.cachix.org?priority=10" "https://devenv.cachix.org?priority=20"
"https://nix-community.cachix.org?priority=20" "https://phundrak.cachix.org?priority=30"
"https://cache.nixos.org?priority=40" "https://cache.nixos.org?priority=40"
]; ];
extra-experimental-features = [ extra-experimental-features = [
@@ -84,105 +82,119 @@
outputs = { outputs = {
self, self,
nixpkgs, nixpkgs,
flake-utils,
home-manager, home-manager,
devenv,
srvos, srvos,
... ...
} @ inputs: } @ inputs: let
flake-utils.lib.eachDefaultSystem ( inherit (self) outputs;
system: let system = "x86_64-linux";
inherit (self) outputs; pkgs = nixpkgs.legacyPackages.${system};
pkgs = nixpkgs.legacyPackages.${system}; in {
in { formatter.${system} = pkgs.alejandra;
formatter = pkgs.alejandra;
devShells.default = pkgs.mkShell {
buildInputs = [
pkgs.nh
pkgs.jujutsu
pkgs.git
];
};
packages = { packages.${system} = {
homeConfigurations = let devenv-up = self.devShells.${system}.default.config.procfileScript;
extraSpecialArgs = {inherit inputs outputs system;}; devenv-test = self.devShells.${system}.default.config.test;
pkgs = nixpkgs.legacyPackages.x86_64-linux; };
defaultUserModules = [
inputs.sops-nix.homeManagerModules.sops
inputs.spicetify.homeManagerModules.default
inputs.caelestia-shell.homeManagerModules.default
];
withUserModules = modules: nixpkgs.lib.lists.flatten (defaultUserModules ++ [modules]);
in {
"phundrak@alys" = home-manager.lib.homeManagerConfiguration {
inherit extraSpecialArgs pkgs;
modules = withUserModules ./users/phundrak/host/alys.nix;
};
"creug@elcafe" = home-manager.lib.homeManagerConfiguration {
inherit extraSpecialArgs pkgs;
modules = withUserModules ./users/creug/host/elcafe.nix;
};
"phundrak@elcafe" = home-manager.lib.homeManagerConfiguration {
inherit extraSpecialArgs pkgs;
modules = withUserModules ./users/phundrak/host/elcafe.nix;
};
"phundrak@gampo" = home-manager.lib.homeManagerConfiguration {
inherit extraSpecialArgs pkgs;
modules = withUserModules ./users/phundrak/host/gampo.nix;
};
"phundrak@marpa" = home-manager.lib.homeManagerConfiguration {
inherit extraSpecialArgs pkgs;
modules = withUserModules ./users/phundrak/host/marpa.nix;
};
"phundrak@NaroMk3" = home-manager.lib.homeManagerConfiguration {
inherit extraSpecialArgs pkgs;
modules = withUserModules ./users/phundrak/host/naromk3.nix;
};
"phundrak@tilo" = home-manager.lib.homeManagerConfiguration {
inherit extraSpecialArgs pkgs;
modules = withUserModules ./users/phundrak/host/tilo.nix;
};
};
nixosConfigurations = let devShells.${system}.default = devenv.lib.mkShell {
specialArgs = {inherit inputs outputs;}; inherit inputs pkgs;
defaultSystemModules = [ modules = [
inputs.sops-nix.nixosModules.sops (
inputs.copyparty.nixosModules.default {pkgs, ...}: {
]; packages = [pkgs.nh];
withSystemModules = modules: nixpkgs.lib.lists.flatten (defaultSystemModules ++ [modules]); git-hooks.hooks = {
in { alejandra.enable = true;
alys = nixpkgs.lib.nixosSystem { commitizen.enable = true;
inherit specialArgs; detect-private-keys.enable = true;
modules = withSystemModules ./hosts/alys/configuration.nix; end-of-file-fixer.enable = true;
deadnix.enable = true;
ripsecrets.enable = true;
statix.enable = true;
}; };
elcafe = nixpkgs.lib.nixosSystem { }
inherit specialArgs; )
modules = withSystemModules ./hosts/elcafe/configuration.nix; ];
}; };
gampo = nixpkgs.lib.nixosSystem {
inherit specialArgs; homeConfigurations = let
modules = withSystemModules ./hosts/gampo/configuration.nix; extraSpecialArgs = {inherit inputs outputs system;};
}; pkgs = nixpkgs.legacyPackages.x86_64-linux;
marpa = nixpkgs.lib.nixosSystem { defaultUserModules = [
inherit specialArgs; inputs.sops-nix.homeManagerModules.sops
modules = withSystemModules ./hosts/marpa; inputs.spicetify.homeManagerModules.default
}; inputs.caelestia-shell.homeManagerModules.default
NaroMk3 = nixpkgs.lib.nixosSystem { ];
inherit specialArgs; withUserModules = modules: nixpkgs.lib.lists.flatten (defaultUserModules ++ [modules]);
modules = withSystemModules [ in {
srvos.nixosModules.server "phundrak@alys" = home-manager.lib.homeManagerConfiguration {
srvos.nixosModules.hardware-hetzner-cloud inherit extraSpecialArgs pkgs;
srvos.nixosModules.mixins-terminfo modules = withUserModules ./users/phundrak/host/alys.nix;
./hosts/naromk3/configuration.nix };
]; "creug@elcafe" = home-manager.lib.homeManagerConfiguration {
}; inherit extraSpecialArgs pkgs;
tilo = nixpkgs.lib.nixosSystem { modules = withUserModules ./users/creug/host/elcafe.nix;
inherit specialArgs; };
modules = withSystemModules ./hosts/tilo/configuration.nix; "phundrak@elcafe" = home-manager.lib.homeManagerConfiguration {
}; inherit extraSpecialArgs pkgs;
}; modules = withUserModules ./users/phundrak/host/elcafe.nix;
}; };
} "phundrak@gampo" = home-manager.lib.homeManagerConfiguration {
); inherit extraSpecialArgs pkgs;
modules = withUserModules ./users/phundrak/host/marpa.nix;
};
"phundrak@marpa" = home-manager.lib.homeManagerConfiguration {
inherit extraSpecialArgs pkgs;
modules = withUserModules ./users/phundrak/host/marpa.nix;
};
"phundrak@NaroMk3" = home-manager.lib.homeManagerConfiguration {
inherit extraSpecialArgs pkgs;
modules = withUserModules ./users/phundrak/host/naromk3.nix;
};
"phundrak@tilo" = home-manager.lib.homeManagerConfiguration {
inherit extraSpecialArgs pkgs;
modules = withUserModules ./users/phundrak/host/tilo.nix;
};
};
nixosConfigurations = let
specialArgs = {inherit inputs outputs;};
defaultSystemModules = [
inputs.sops-nix.nixosModules.sops
inputs.copyparty.nixosModules.default
];
withSystemModules = modules: nixpkgs.lib.lists.flatten (defaultSystemModules ++ [modules]);
in {
alys = nixpkgs.lib.nixosSystem {
inherit specialArgs;
modules = withSystemModules ./hosts/alys/configuration.nix;
};
elcafe = nixpkgs.lib.nixosSystem {
inherit specialArgs;
modules = withSystemModules ./hosts/elcafe/configuration.nix;
};
gampo = nixpkgs.lib.nixosSystem {
inherit specialArgs;
modules = withSystemModules ./hosts/gampo/configuration.nix;
};
marpa = nixpkgs.lib.nixosSystem {
inherit specialArgs;
modules = withSystemModules ./hosts/marpa/configuration.nix;
};
NaroMk3 = nixpkgs.lib.nixosSystem {
inherit specialArgs;
modules = withSystemModules [
srvos.nixosModules.server
srvos.nixosModules.hardware-hetzner-cloud
srvos.nixosModules.mixins-terminfo
./hosts/naromk3/configuration.nix
];
};
tilo = nixpkgs.lib.nixosSystem {
inherit specialArgs;
modules = withSystemModules ./hosts/tilo/configuration.nix;
};
};
};
} }

View File

@@ -12,14 +12,14 @@
sops.secrets = { sops.secrets = {
"elcafe/traefik/env".restartUnits = ["traefik.service"]; "elcafe/traefik/env".restartUnits = ["traefik.service"];
"elcafe/traefik/dynamic".restartUnits = ["traefik.service"]; "elcafe/traefik/dynamic".restartUnits = ["traefik.service"];
# "elcafe/copyparty/passwords/creug" = { "elcafe/copyparty/passwords/creug" = {
# restartUnits = ["copyparty.service"]; restartUnits = ["copyparty.service"];
# owner = "creug"; owner = "creug";
# }; };
# "elcafe/copyparty/passwords/phundrak" = { "elcafe/copyparty/passwords/phundrak" = {
# restartUnits = ["copyparty.service"]; restartUnits = ["copyparty.service"];
# owner = "phundrak"; owner = "phundrak";
# }; };
}; };
mySystem = { mySystem = {
@@ -73,12 +73,12 @@
}; };
}; };
# services.copyparty = import ./copyparty.nix { services.copyparty = import ./copyparty.nix {
# passwordFiles = { passwordFiles = {
# creug = config.sops.secrets."elcafe/copyparty/passwords/creug".path; creug = config.sops.secrets."elcafe/copyparty/passwords/creug".path;
# phundrak = config.sops.secrets."elcafe/copyparty/passwords/phundrak".path; phundrak = config.sops.secrets."elcafe/copyparty/passwords/phundrak".path;
# }; };
# }; };
# This value determines the NixOS release from which the default # This value determines the NixOS release from which the default
# settings for stateful data, like file locations and database versions # settings for stateful data, like file locations and database versions

View File

@@ -41,7 +41,6 @@
}; };
sound.enable = true; sound.enable = true;
}; };
i18n.input.enable = true;
misc.keymap = "fr-bepo"; misc.keymap = "fr-bepo";
networking = { networking = {
hostname = "gampo"; hostname = "gampo";

View File

@@ -86,7 +86,6 @@
scarlett.enable = true; scarlett.enable = true;
}; };
}; };
i18n.input.enable = true;
misc.keymap = "fr-bepo"; misc.keymap = "fr-bepo";
networking = { networking = {
hostname = "marpa"; hostname = "marpa";
@@ -107,10 +106,6 @@
programs.steam.enable = true; programs.steam.enable = true;
services = { services = {
fwupd.enable = true; fwupd.enable = true;
harmonia = {
enable = true;
signKeyPaths = [config.sops.secrets."marpa/nix-cache-priv-key".path];
};
languagetool.enable = true; languagetool.enable = true;
printing.enable = true; printing.enable = true;
ssh.enable = true; ssh.enable = true;
@@ -128,13 +123,10 @@
}; };
}; };
sops.secrets = { sops.secrets.extraHosts = {
"marpa/nix-cache-priv-key" = {}; inherit (config.users.users.root) group;
extraHosts = { owner = config.users.users.phundrak.name;
inherit (config.users.users.root) group; mode = "0440";
owner = config.users.users.phundrak.name;
mode = "0440";
};
}; };
services.udev.extraHwdb = '' services.udev.extraHwdb = ''

View File

@@ -6,8 +6,6 @@ elcafe:
traefik: traefik:
env: ENC[AES256_GCM,data:HUdWGYoEPp2v8dnDuVsl7YmPxuBfHmXzGrvKWeiqPlmAwMqVZrZ1j8on/7QKvYDJoTJ40XY2qNynSA==,iv:Vgc/fZERnNp7hSMeRd9EgB3IenKAFTAhwC0bk8CX4DE=,tag:SdfhOST/o29Lt1zRdXXRyQ==,type:str] env: ENC[AES256_GCM,data:HUdWGYoEPp2v8dnDuVsl7YmPxuBfHmXzGrvKWeiqPlmAwMqVZrZ1j8on/7QKvYDJoTJ40XY2qNynSA==,iv:Vgc/fZERnNp7hSMeRd9EgB3IenKAFTAhwC0bk8CX4DE=,tag:SdfhOST/o29Lt1zRdXXRyQ==,type:str]
dynamic: ENC[AES256_GCM,data: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,iv:3G3geSZRziwGiKcUMVNZ7j5s/4YA6Uk7wCSb4aFNSMo=,tag:FxARskR9+wdV7/xCKP8UdA==,type:str] dynamic: ENC[AES256_GCM,data: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,iv:3G3geSZRziwGiKcUMVNZ7j5s/4YA6Uk7wCSb4aFNSMo=,tag:FxARskR9+wdV7/xCKP8UdA==,type:str]
marpa:
nix-cache-priv-key: ENC[AES256_GCM,data:H5VsN0nOogvgxWHXHF66BbzJe17zelZCG6mU4vmVJqBoi7a5cQxzU7WnV4k1EOpMJPDj6floVmrsG4DM86FthxcTwixCNDINmaemwAXQnUkgWXFKYY7Ovzten81UVKrtkN4n1S8=,iv:pxnHD5YqyTeNZnxyEJeXAUixZEz8Uq9b2HFZZBsMOzk=,tag:xI+4tFG+Q4Z5IVxlATayJA==,type:str]
extraHosts: ENC[AES256_GCM,data:4lp7w0snYle7vGVLJq3zlTxoC8eVpaSreW3P8Aq+O6oRJoWo3IASpwi7zSx6nxmLo5LGPeupVXfy3xOkG9d5QFNU2uU6vXKvOnnm6wrpS+UcYp/4U/z+R3rFnFsI5PsCgmlL1bSUFCFkXlrLDIyoW50Q/DLXDS8QaUYAtto1DcRUXc9j8RnunYF38HFlAOD/Xa4DY048pvZu8TMsmLQjM5txZnZBq4+P8aBjY3SF+K9cqZ+SgQkU+gdGo0/S/N5OUZJ3ATJ6mglPl/Nplw/Dh9HvC7jEMJZKrVzWiYquTOn0/IytqOCS2SkhsmVMRqf06hpvhlz6sFXzkDfxKMIRTULEkjZDkZ7QioSbLeqmQePSg7xs28SvToiVKSpg0PxeH5LvJE73hgX3ATUXA2BmRvqQuqBwLaDU6TPm8xkYe7qbabaN5oFtXCI/XydZTao5Glqw/BZQRTise/qGgn3Bfl/ieMYQOqCMEdHzR0Beipur6spliGFC4YnwL3Nh4CO6qOB/j61a7rqY6nLyo54jWtjvHX42pTuGWhvhGH1z4NRZqcKks+KCMB4PcCXgul1hrb04wLXYVu7R/7QqOACp4SZBUFZCj+izcsnB1sKdKliL87VBUkwOSF+1JUCY,iv:5A3jCWLkooCkuOMiybbeQ9+TRA7CoiW3qbzmJLVarSc=,tag:qLsGhrFHs65Vesj4Ot4I/g==,type:str] extraHosts: ENC[AES256_GCM,data:4lp7w0snYle7vGVLJq3zlTxoC8eVpaSreW3P8Aq+O6oRJoWo3IASpwi7zSx6nxmLo5LGPeupVXfy3xOkG9d5QFNU2uU6vXKvOnnm6wrpS+UcYp/4U/z+R3rFnFsI5PsCgmlL1bSUFCFkXlrLDIyoW50Q/DLXDS8QaUYAtto1DcRUXc9j8RnunYF38HFlAOD/Xa4DY048pvZu8TMsmLQjM5txZnZBq4+P8aBjY3SF+K9cqZ+SgQkU+gdGo0/S/N5OUZJ3ATJ6mglPl/Nplw/Dh9HvC7jEMJZKrVzWiYquTOn0/IytqOCS2SkhsmVMRqf06hpvhlz6sFXzkDfxKMIRTULEkjZDkZ7QioSbLeqmQePSg7xs28SvToiVKSpg0PxeH5LvJE73hgX3ATUXA2BmRvqQuqBwLaDU6TPm8xkYe7qbabaN5oFtXCI/XydZTao5Glqw/BZQRTise/qGgn3Bfl/ieMYQOqCMEdHzR0Beipur6spliGFC4YnwL3Nh4CO6qOB/j61a7rqY6nLyo54jWtjvHX42pTuGWhvhGH1z4NRZqcKks+KCMB4PcCXgul1hrb04wLXYVu7R/7QqOACp4SZBUFZCj+izcsnB1sKdKliL87VBUkwOSF+1JUCY,iv:5A3jCWLkooCkuOMiybbeQ9+TRA7CoiW3qbzmJLVarSc=,tag:qLsGhrFHs65Vesj4Ot4I/g==,type:str]
mopidy: mopidy:
spotify: ENC[AES256_GCM,data:6i9BzQmlndnROuT1H2zgN/3I6hBiFf14BlcS+XL2PbTiiEQZe2yE3tnZo3KXU9S5CjS3MwxsVdytKOFMQt2s1bVjcibBhJzoKEQByaapdzn1mK3kQLdJfhPf4Hf9YZV9Dlc60ngS7ESLZakdFVlj4rlbV5XReLhK,iv:fYd78r4U0kTyq1TZjBVXkjdNiOQ29gLJ53kwTXsi8W0=,tag:oWaeOuzdHWS4joZAdeA2pg==,type:str] spotify: ENC[AES256_GCM,data:6i9BzQmlndnROuT1H2zgN/3I6hBiFf14BlcS+XL2PbTiiEQZe2yE3tnZo3KXU9S5CjS3MwxsVdytKOFMQt2s1bVjcibBhJzoKEQByaapdzn1mK3kQLdJfhPf4Hf9YZV9Dlc60ngS7ESLZakdFVlj4rlbV5XReLhK,iv:fYd78r4U0kTyq1TZjBVXkjdNiOQ29gLJ53kwTXsi8W0=,tag:oWaeOuzdHWS4joZAdeA2pg==,type:str]
@@ -107,7 +105,7 @@ sops:
dUpXZis2N2VyN0ZFbjlPRXdwRFQ1aHMKm1Mk6MPKxFmwdATCYUANRSY5rHKgmQer dUpXZis2N2VyN0ZFbjlPRXdwRFQ1aHMKm1Mk6MPKxFmwdATCYUANRSY5rHKgmQer
LBlqqWKt1JiIUAYtazQeQ6KYxmjVlQPY7AZw2t+EhBEPrqbTL3vOiw== LBlqqWKt1JiIUAYtazQeQ6KYxmjVlQPY7AZw2t+EhBEPrqbTL3vOiw==
-----END AGE ENCRYPTED FILE----- -----END AGE ENCRYPTED FILE-----
lastmodified: "2026-05-01T13:20:34Z" lastmodified: "2026-03-07T17:19:05Z"
mac: ENC[AES256_GCM,data:OueL0eHYmFKWfSyCZxburRJ2FS1xkowx7ha/Zv7r++26D85GSHDeIL9HdfByI5a1OhH90rH3WLxZrJgT3FiwBw27HhhHtS7Fs6MBFvTuPmSA7ZtMeGMWBRVjwbGAWN17BZAhJzMlZHq2nPX0xXIKT0HuTLVRPLuVCSlvDzMXsTE=,iv:+JN4Vzs8o8PJAam/uKBbUXt3ArxC88D6xR7rMeeGglg=,tag:S+OtbxLhVKFnqBZtyKDGyA==,type:str] mac: ENC[AES256_GCM,data:hT4mPKLcIuAFmllJBYFXL5sGyMn95mYEv+eGVA+KQYm629YKSncgvn5g8elau/8HXR1O/bwQlkGmGr8VPeR/0KRb6TPCA4MrCwox38fy3ZLx2e0movVi/xIgKXIo5wYUq4Qm/pSo715limxGChxUxKtdEK/lmMkSnxyGmlkQtwM=,iv:XoOfhdK/CK6shUXhH4h14gtyqZqcqmTV6/R2jkynFr8=,tag:q3V0xcWQxjFi2drk5fLJoQ==,type:str]
unencrypted_suffix: _unencrypted unencrypted_suffix: _unencrypted
version: 3.12.2 version: 3.11.0

View File

@@ -73,7 +73,10 @@ in {
}; };
supportedFilesystems = mkIf cfg.zfs.enable ["zfs"]; supportedFilesystems = mkIf cfg.zfs.enable ["zfs"];
zfs.extraPools = mkIf cfg.zfs.enable cfg.zfs.pools; zfs.extraPools = mkIf cfg.zfs.enable cfg.zfs.pools;
kernelPackages = cfg.kernel.package; kernelPackages =
if cfg.kernel.hardened
then pkgs.linuxPackages_hardened
else cfg.kernel.package;
kernelModules = kernelModules =
cfg.kernel.modules cfg.kernel.modules
++ ["kvm-${cfg.kernel.cpuVendor}"] ++ ["kvm-${cfg.kernel.cpuVendor}"]

View File

@@ -47,16 +47,16 @@ in {
nix.settings = { nix.settings = {
substituters = [ substituters = [
"http://marpa:5000?priority=5" "https://nix-community.cachix.org?priority=10"
"https://phundrak.cachix.org?priority=10" "https://devenv.cachix.org?priority=20"
"https://nix-community.cachix.org?priority=20" "https://phundrak.cachix.org?priority=30"
"https://cache.nixos.org?priority=40" "https://cache.nixos.org?priority=40"
]; ];
trusted-public-keys = [ trusted-public-keys = [
"marpa-local:XoO+dFN4PeauF52pYuy3Vh4Sdtl2qIdxu5aUasWKv6Q="
"phundrak.cachix.org-1:osJAkYO0ioTOPqaQCIXMfIRz1/+YYlVFkup3R2KSexk="
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
"cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=" "cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY="
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
"devenv.cachix.org-1:w1cLUi8dv3hnoSPGAuibQv+f9TZLr6cv/Hm9XgU50cw="
"phundrak.cachix.org-1:osJAkYO0ioTOPqaQCIXMfIRz1/+YYlVFkup3R2KSexk="
]; ];
http-connections = 128; http-connections = 128;
experimental-features = [ experimental-features = [

View File

@@ -9,10 +9,7 @@ with lib; let
in { in {
options.mySystem.desktop.waydroid.enable = mkEnableOption "Enables Waydroid"; options.mySystem.desktop.waydroid.enable = mkEnableOption "Enables Waydroid";
config = mkIf cfg.enable { config = mkIf cfg.enable {
virtualisation.waydroid = { virtualisation.waydroid.enable = cfg.enable;
enable = cfg.enable;
package = pkgs.waydroid-nftables;
};
environment.systemPackages = [pkgs.waydroid-helper]; environment.systemPackages = [pkgs.waydroid-helper];
}; };
} }

View File

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

View File

@@ -1,25 +0,0 @@
{
lib,
config,
pkgs,
...
}:
with lib; let
cfg = config.mySystem.i18n.input;
in {
options.mySystem.i18n.input.enable = mkEnableOption "Enable i18n input with fcitx5";
config.i18n.inputMethod = mkIf cfg.enable {
enable = true;
type = "fcitx5";
fcitx5.addons = with pkgs; [
fcitx5-gtk
fcitx5-mozc-ut # Japanese input support
fcitx5-nord
fcitx5-table-other # X-SAMPA to IPA support
qt6Packages.fcitx5-chinese-addons # allow to load table addons
qt6Packages.fcitx5-configtool
qt6Packages.fcitx5-with-addons
];
};
}

View File

@@ -3,7 +3,6 @@
./calibre.nix ./calibre.nix
./endlessh.nix ./endlessh.nix
./fwupd.nix ./fwupd.nix
./harmonia.nix
./jellyfin.nix ./jellyfin.nix
./languagetool.nix ./languagetool.nix
./plex.nix ./plex.nix

View File

@@ -1,36 +0,0 @@
{
config,
lib,
...
}:
with lib; let
cfg = config.mySystem.services.harmonia;
in {
options.mySystem.services.harmonia = {
enable = mkEnableOption "Harmonia Nix binary cache server";
port = mkOption {
type = types.port;
default = 5000;
description = "Port to listen on";
};
priority = mkOption {
type = types.ints.between 0 100;
default = 50;
description = "Cache priority (lower = higher priority, 0-100)";
};
signKeyPaths = mkOption {
type = types.listOf types.path;
description = "Paths to the signing keys to use for signing the cache.";
};
};
config = mkIf cfg.enable {
services.harmonia.cache = {
enable = true;
inherit (cfg) signKeyPaths;
settings = {
inherit (cfg) priority;
bind = "[::]:${toString cfg.port}";
};
};
};
}

View File

@@ -34,16 +34,7 @@ in {
creug.sshKey.file = "${config.home.homeDirectory}/.ssh/id_ed25519.pub"; creug.sshKey.file = "${config.home.homeDirectory}/.ssh/id_ed25519.pub";
dev.vcs = { dev.vcs = {
name = "Creug"; jj.enable = false;
email = "gregory.foulachon@gmail.com";
editor = "${pkgs.nano}/bin/nano";
jj = {
enable = true;
cz = {
enable = true;
alias = true;
};
};
git.enable = true; git.enable = true;
publicKey = cfg.sshKey; publicKey = cfg.sshKey;
}; };

View File

@@ -27,10 +27,9 @@ in {
explorer = ["${pkgs.nemo-with-extensions}/bin/nemo"]; explorer = ["${pkgs.nemo-with-extensions}/bin/nemo"];
}; };
idle = { idle = {
inhibitWhenAudio = true;
timeouts = [ timeouts = [
{ {
timeout = 3600; timeout = 300;
idleAction = "lock"; idleAction = "lock";
} }
]; ];

View File

@@ -9,7 +9,6 @@ in {
imports = [ imports = [
./caelestia.nix ./caelestia.nix
./eww.nix ./eww.nix
./firefox.nix
./hyprland.nix ./hyprland.nix
./kdeconnect.nix ./kdeconnect.nix
./kitty.nix ./kitty.nix
@@ -19,7 +18,6 @@ in {
./swaync.nix ./swaync.nix
./theme.nix ./theme.nix
./waybar.nix ./waybar.nix
./wl-kbptr.nix
./wlr-which-key.nix ./wlr-which-key.nix
./wlsunset.nix ./wlsunset.nix
]; ];
@@ -27,7 +25,6 @@ in {
options.home.desktop.fullDesktop = mkEnableOption "Enable options for graphical environments"; options.home.desktop.fullDesktop = mkEnableOption "Enable options for graphical environments";
config.home.desktop = { config.home.desktop = {
eww.enable = mkDefault cfg.fullDesktop; eww.enable = mkDefault cfg.fullDesktop;
firefox.enable = mkDefault cfg.fullDesktop;
hyprland.enable = mkDefault cfg.fullDesktop; hyprland.enable = mkDefault cfg.fullDesktop;
kdeconnect.enable = mkDefault cfg.fullDesktop; kdeconnect.enable = mkDefault cfg.fullDesktop;
kitty.enable = mkDefault cfg.fullDesktop; kitty.enable = mkDefault cfg.fullDesktop;

View File

@@ -1,70 +0,0 @@
{
config,
lib,
inputs,
pkgs,
...
}:
with lib; let
cfg = config.home.desktop.firefox;
inherit (pkgs.stdenv.hostPlatform) system;
zen = inputs.zen-browser.packages.${system}.default;
settingsToLines = settings:
concatStringsSep "\n" (mapAttrsToList (name: value: "set ${name} ${toString value}") settings);
in {
options.home.desktop.firefox = {
enable = mkEnableOption "enable Firefox";
useZen = mkEnableOption "use Zen instead of Firefox";
tridactyl = {
enable = mkEnableOption "enable Tridactyl";
preConfig = mkOption {
description = "Lines to add to the beginning of tridactylrc";
type = types.lines;
default = "";
};
config = mkOption {
type = with types;
attrsOf (oneOf [
int
str
bool
]);
description = "Tridactyl settings (converted to 'set key value' lines)";
default = {};
example = {
smoothscroll = true;
history = 1000;
};
};
extraConfig = mkOption {
description = "Extra lines to add to tridactylrc (for bindings, autocmds, etc)";
type = types.lines;
default = "";
};
};
};
config = mkIf cfg.enable {
programs.firefox = {
inherit (cfg) enable;
package =
if cfg.useZen
then zen
else pkgs.firefox;
nativeMessagingHosts = lists.optional cfg.tridactyl.enable pkgs.tridactyl-native;
};
xdg.configFile."tridactyl/tridactylrc" = mkIf cfg.tridactyl.enable {
text = concatStringsSep "\n" (filter (s: s != "") [
cfg.tridactyl.preConfig
(settingsToLines (cfg.tridactyl.config
// {
browser =
if cfg.useZen
then "zen"
else "firefox";
}))
cfg.tridactyl.extraConfig
]);
};
};
}

View File

@@ -50,13 +50,10 @@ in {
systemd.enable = false; systemd.enable = false;
importantPrefixes = ["$left" "$right" "$up" "$down" "$menu"]; importantPrefixes = ["$left" "$right" "$up" "$down" "$menu"];
settings = { settings = {
env = [
"XMODIFIERS,@im=fcitx"
"XCURSOR_SIZE,12"
];
input = { input = {
kb_layout = "fr,us"; kb_layout = "fr,us";
kb_variant = "bepo_afnor,"; kb_variant = "bepo_afnor,";
# kb_options = "caps:ctrl_modifier";
numlock_by_default = true; numlock_by_default = true;
follow_mouse = 1; follow_mouse = 1;
touchpad.natural_scroll = false; touchpad.natural_scroll = false;
@@ -109,8 +106,6 @@ in {
"pactl load-module module-switch-on-connect" "pactl load-module module-switch-on-connect"
"${pkgs.mpc}/bin/mpc stop" "${pkgs.mpc}/bin/mpc stop"
"${pkgs.polkit_gnome}/libexec/polkit-gnome-authentication-agent-1" "${pkgs.polkit_gnome}/libexec/polkit-gnome-authentication-agent-1"
"${pkgs.mozc}/lib/mozc/mozc_server"
"${pkgs.fcitx5}/bin/fcitx5 -d"
] ]
++ lib.lists.optional (! caelestiaEnabled) "${pkgs.networkmanagerapplet}/bin/nm-applet"; ++ lib.lists.optional (! caelestiaEnabled) "${pkgs.networkmanagerapplet}/bin/nm-applet";
}; };
@@ -175,6 +170,8 @@ in {
bind = SUPER_SHIFT, minus, movetoworkspace, 8 bind = SUPER_SHIFT, minus, movetoworkspace, 8
bind = SUPER_SHIFT, slash, movetoworkspace, 9 bind = SUPER_SHIFT, slash, movetoworkspace, 9
bind = SUPER_SHIFT, asterisk, movetoworkspace, 10 bind = SUPER_SHIFT, asterisk, movetoworkspace, 10
env = XCURSOR_SIZE,12
''; '';
}; };
}; };

View File

@@ -20,7 +20,6 @@ in {
package = pkgs.nordic; package = pkgs.nordic;
name = "Nordic"; name = "Nordic";
}; };
gtk4.theme = config.gtk.theme;
}; };
home.pointerCursor = { home.pointerCursor = {
enable = true; enable = true;

View File

@@ -1,37 +0,0 @@
{
config,
lib,
pkgs,
...
}:
with lib; let
configDir = config.xdg.configHome;
cfg = config.home.desktop.wl-kbptr;
iniFormat = pkgs.formats.ini {};
in {
options.home.desktop.wl-kbptr = {
enable = mkEnableOption "enable wl-kbptr";
config = mkOption {
inherit (iniFormat) type;
default = {};
description = ''
Options to add to the {file}`config` file. See
<https://github.com/moverest/wl-kbptr/blob/main/config.example>
for options.
'';
example = {
general = {
home_row_keys = "abcd";
};
};
};
};
config = mkIf cfg.enable {
home = {
packages = [pkgs.wl-kbptr];
file."${configDir}/wl-kbptr/config" = mkIf (cfg.config != {}) {
source = iniFormat.generate "wl-kbptr-config" cfg.config;
};
};
};
}

View File

@@ -6,23 +6,16 @@
}: }:
with lib; let with lib; let
cfg = config.home.dev.ai.claude; cfg = config.home.dev.ai.claude;
jsonFormat = pkgs.formats.json {};
in { in {
options.home.dev.ai.claude = { options.home.dev.ai.claude.enable = mkEnableOption "Enables Claude-related packages";
enable = mkEnableOption "Enables Claude-related packages";
mcpServers = mkOption {
inherit (jsonFormat) type;
default = {};
};
};
config = mkIf cfg.enable { config = mkIf cfg.enable {
home.packages = let home.packages = let
claude-jj = pkgs.writeShellScriptBin "claude-jj" '' claude-jj = pkgs.writeShellScriptBin "claude-jj" ''
${pkgs.claude-code}/bin/claude --append-system-prompt 'CRITICAL: This repository uses Jujutsu (jj), NOT git. Never use git commands. Use jj equivalents.' "$@" ${pkgs.claude-code}/bin/claude --append-system-prompt 'CRITICAL: This repository uses Jujutsu (jj), NOT git. Never use git commands. Use jj equivalents. See CLAUDE.md.' "$@"
''; '';
in [claude-jj pkgs.sox]; in [claude-jj];
programs.claude-code = { programs.claude-code = {
inherit (cfg) enable mcpServers; inherit (cfg) enable;
}; };
}; };
} }

View File

@@ -2,42 +2,22 @@
config, config,
lib, lib,
pkgs, pkgs,
inputs,
... ...
}: }:
with lib; let with lib; let
cfg = config.home.dev.ai; cfg = config.home.dev.ai;
jsonFormat = pkgs.formats.json {};
in { in {
imports = [ imports = [
./claude.nix ./claude.nix
./ollama.nix ./ollama.nix
]; ];
options.home.dev.ai = { options.home.dev.ai.enable = mkEnableOption "Enables AI features";
enable = mkEnableOption "Enables AI features"; config.home = mkIf cfg.enable {
mcpServers = mkOption { dev.ai = {
inherit (jsonFormat) type; claude.enable = mkDefault cfg.enable;
default = {}; ollama.enable = mkDefault cfg.enable;
};
};
config = {
home = mkIf cfg.enable {
dev.ai = {
claude = {
enable = mkDefault cfg.enable;
mcpServers = mkDefault cfg.mcpServers;
};
ollama.enable = mkDefault cfg.enable;
};
packages = let
inherit (pkgs.stdenv.hostPlatform) system;
inherit (inputs.opencode.packages.${system}) opencode;
in [pkgs.lmstudio opencode];
};
programs.mcp = mkIf (cfg.mcpServers != {}) {
enable = true;
servers = cfg.mcpServers;
}; };
packages = [pkgs.lmstudio];
}; };
} }

View File

@@ -127,14 +127,6 @@ in {
"dist/" "dist/"
]; ];
signing = {
format =
if cfg.publicKeyFile != null
then "ssh"
else "openpgp";
key = cfg.publicKeyFile;
signByDefault = true;
};
settings = { settings = {
user = { user = {
inherit (cfg) name email; inherit (cfg) name email;
@@ -159,6 +151,8 @@ in {
renames = "copy"; renames = "copy";
interHunkContext = 10; interHunkContext = 10;
}; };
commit.gpgsign = cfg.publicKeyFile != null;
gpg.format = "ssh";
gpg.ssh.allowedSignersFile = "${config.home.homeDirectory}/.ssh/allowed_signers"; gpg.ssh.allowedSignersFile = "${config.home.homeDirectory}/.ssh/allowed_signers";
init.defaultBranch = "main"; init.defaultBranch = "main";
pull.rebase = true; pull.rebase = true;
@@ -174,6 +168,7 @@ in {
updateRefs = true; updateRefs = true;
}; };
help.autocorrect = "prompt"; help.autocorrect = "prompt";
user.signingkey = mkIf (cfg.publicKeyFile != null) cfg.publicKeyFile;
web.browser = mkIf (cfg.browser != null) cfg.browser; web.browser = mkIf (cfg.browser != null) cfg.browser;
sendemail = mkIf cfg.sendmail.enable { sendemail = mkIf cfg.sendmail.enable {
smtpserver = cfg.sendmail.server; smtpserver = cfg.sendmail.server;

View File

@@ -6,42 +6,8 @@
}: }:
with lib; let with lib; let
cfg = config.home.shell.tmux; cfg = config.home.shell.tmux;
keyType = types.submodule {
options = {
key = mkOption {
type = types.str;
example = "C-b";
};
action = mkOption {
type = types.str;
example = "resize-pane -Z";
};
};
};
in { in {
options.home.shell.tmux = with types; { options.home.shell.tmux.enable = mkEnableOption "Enable tmux";
enable = mkEnableOption "Enable tmux";
bind = mkOption {
type = attrsOf (listOf keyType);
default = {};
example = {
"prefix" = [
{
key = "C-r";
action = "resize-pane -R";
}
];
};
};
unbind = mkOption {
type = listOf (either str (attrsOf (listOf str)));
default = [];
};
extraConfig = mkOption {
type = types.lines;
default = "";
};
};
config.programs.tmux = mkIf cfg.enable { config.programs.tmux = mkIf cfg.enable {
inherit (cfg) enable; inherit (cfg) enable;
baseIndex = 1; baseIndex = 1;
@@ -59,23 +25,71 @@ in {
sensible sensible
yank yank
]; ];
extraConfig = let extraConfig = ''
generateBinds = concatLines ( set-option -sa terminal-overrides ",xterm*:Tc"
mapAttrsToList (table: keys: concatMapStrings (key: "bind -T ${table} ${key.key} ${key.action}\n") keys) cfg.bind
);
generateUnbind =
concatMapStrings (
entry:
if builtins.isString entry
then "unbind ${entry}\n"
else concatStrings (mapAttrsToList (table: keys: concatMapStrings (key: "unbind -T ${table} ${key}\n") keys) entry)
)
cfg.unbind;
in ''
${cfg.extraConfig}
${generateUnbind} unbind C-b
${generateBinds}
bind-key -T prefix « select-window -p
bind-key -T prefix » select-window -n
bind-key -T prefix Tab switch-client -T windows
bind-key -T prefix w switch-client -T pane
bind-key -T prefix y switch-client -T copy-mode
bind-key -T pane / split-window -h -c "#{pane-current_path}"
bind-key -T pane - split-window -v -c "#{pane-current_path}"
bind-key -T pane c select-pane -L
bind-key -T pane t select-pane -D
bind-key -T pane s select-pane -U
bind-key -T pane r select-pane -R
bind-key -T pane f resize-pane -Z
bind-key -T pane . switch-client -T pane-resize
bind-key -T pane-resize c resize-pane -L 5\; switch-client -T pane-resize
bind-key -T pane-resize t resize-pane -D 5\; switch-client -T pane-resize
bind-key -T pane-resize s resize-pane -U 5\; switch-client -T pane-resize
bind-key -T pane-resize r resize-pane -R 5\; switch-client -T pane-resize
bind-key -T pane-resize C resize-pane -L\; switch-client -T pane-resize
bind-key -T pane-resize T resize-pane -D\; switch-client -T pane-resize
bind-key -T pane-resize S resize-pane -U\; switch-client -T pane-resize
bind-key -T pane-resize R resize-pane -R\; switch-client -T pane-resize
bind-key -T windows c new-window
bind-key -T windows n next-window
bind-key -T windows p previous-window
bind-key -T windows \" select-window -t :=1
bind-key -T windows « select-window -t :=2
bind-key -T windows » select-window -t :=3
bind-key -T windows ( select-window -t :=4
bind-key -T windows ) select-window -t :=5
bind-key -T windows @ select-window -t :=6
bind-key -T windows + select-window -t :=7
bind-key -T windows - select-window -t :=8
bind-key -T windows / select-window -t :=9
bind-key -T windows * select-window -t :=10
unbind -T copy-mode-vi H
unbind -T copy-mode-vi J
unbind -T copy-mode-vi K
unbind -T copy-mode-vi L
unbind -T copy-mode-vi h
unbind -T copy-mode-vi j
unbind -T copy-mode-vi k
unbind -T copy-mode-vi l
bind-key -T copy-mode-vi v send-keys -X begin-selection
bind-key -T copy-mode-vi C-v send-keys -X rectangle-toggle
bind-key -T copy-mode-vi y send-keys -X copy-selection-and-cancel
bind-key -T copy-mode-vi C send-keys -X top-line
bind-key -T copy-mode-vi J send-keys -X jump-to-backward
bind-key -T copy-mode-vi S send-keys -X scroll-up
bind-key -T copy-mode-vi R send-keys -X bottom-line
bind-key -T copy-mode-vi T send-keys -X scroll-down
bind-key -T copy-mode-vi c send-keys -X cursor-left
bind-key -T copy-mode-vi t send-keys -X cursor-down
bind-key -T copy-mode-vi s send-keys -X cursor-up
bind-key -T copy-mode-vi r send-keys -X cursor-right
''; '';
}; };
} }

View File

@@ -7,6 +7,33 @@
with lib; let with lib; let
cfg = config.home.shell.zellij; cfg = config.home.shell.zellij;
isEmpty = list: list == []; isEmpty = list: list == [];
plugin = {
options = {
name = mkOption {
type = types.str;
example = "filepicket";
};
location = mkOption {
type = types.nullOr types.str;
example = "zellij:strider";
description = ''
When null, defaults to zellij:`name`
'';
};
config = mkOption {
type = types.nullOr types.attrs;
default = null;
};
};
};
pluginToLines = plugin: let
location =
if plugin ? location
then plugin.location
else "location=\"${plugin.name}\"";
in ''
${plugin.name} ${location}
'';
keybind = { keybind = {
options = { options = {
bind = mkOption { bind = mkOption {
@@ -99,17 +126,15 @@ with lib; let
keybinds = values; keybinds = values;
}; };
in { in {
options.home.shell.zellij = let options.home.shell.zellij = {
jsonFormat = pkgs.formats.yaml {};
in {
enable = mkEnableOption "Enable Zellij"; enable = mkEnableOption "Enable Zellij";
clearDefaultKeybinds = mkEnableOption "Clear default keybinds"; clearDefaultKeybinds = mkEnableOption "Clear default keybinds";
settings = mkOption { settings = mkOption {
inherit (jsonFormat) type; type = (pkgs.formats.yaml {}).type;
default = {}; default = {};
}; };
layouts = mkOption { layouts = mkOption {
inherit (jsonFormat) type; type = (pkgs.formats.yaml {}).type;
default = {}; default = {};
}; };
extraSettings = mkOption { extraSettings = mkOption {

File diff suppressed because it is too large Load Diff

View File

@@ -1,77 +0,0 @@
{
config.home.desktop.firefox = {
enable = true;
useZen = true;
tridactyl = {
enable = true;
preConfig = "sanitise tridactyllocal tridactylsync";
config = {
editorcmd = "emacsclient -c";
keyboardlayoutbase = "bepo";
keyboardlayoutforce = "true";
hintchars = "auiectsr";
smothscroll = "true";
};
extraConfig = ''
unbind h
unbind j
unbind k
unbind l
unbind c
unbind t
unbind s
unbind r
unbind H
unbind J
unbind K
unbind L
unbind C
unbind T
unbind S
unbind R
" === Bépo layout scrolling (ctsr = hjkl) ===
bind c scrollpx -300 0
bind t scrollline 5
bind s scrollline -5
bind r scrollpx 300 0
" Half/full page scroll (replacing C-f/C-b/C-d/C-u)
bind <C-t> scrollpage 0.5
bind <C-s> scrollpage -0.5
" === History navigation (C/R = H/L) ===
bind C back
bind R forward
" === Tab navigation ===
bind T tabnext
bind S tabprev
" === Displaced commands ===
" reload was on r move to h (bépo's 'replace' position)
bind h reload
bind H reloadhard
" tabopen was on t move to j (bépo's 'find char to' position)
bind j fillcmdline tabopen
unbind ^http(s?)://youtube\.com f
unbind ^http(s?)://youtube\.com t
unbind ^http(s?)://youtube\.com l
unbind ^http(s?)://youtube\.com j
unbind ^http(s?)://twitch\.tv f
bind n findnext
bind N findnext -f
bind p findnext --reverse
bind P findnext -f --reverse
bind < urlincrement -1
bind > urlincrement 1
bind ypv js tri.native.run(`mpv --ytdl-format="[height >=? 480]" --ontop --fs "''${document.location.href}"`)
bind ypm hint -JF e => tri.native.run(`mpv --ytdl-format="[height >=? 480]" --ontop --fs "''${e.href}"`)
'';
};
};
}

View File

@@ -8,8 +8,6 @@
./light-home.nix ./light-home.nix
./packages.nix ./packages.nix
./email.nix ./email.nix
./firefox.nix
./tmux.nix
./wlr-which-key ./wlr-which-key
../modules ../modules
]; ];
@@ -71,17 +69,6 @@
enable = true; enable = true;
spicetify.enable = true; spicetify.enable = true;
}; };
wl-kbptr = {
enable = true;
config = {
general = {
# first eight chars to select areas, last three chars
# for left, right, middle click
home_row_keys = "auiectsrtsr";
modes = "tile,bisect";
};
};
};
}; };
dev = { dev = {
ai.claude.enable = true; ai.claude.enable = true;
@@ -89,19 +76,16 @@
vcs.jj.signing.enable = true; vcs.jj.signing.enable = true;
}; };
fullDesktop = true; fullDesktop = true;
file = { file."${config.home.homeDirectory}/.ssh/allowed_signers" = {
".XCompose".source = ./XCompose; enable = true;
"${config.home.homeDirectory}/.ssh/allowed_signers" = { text = lib.strings.join "\n" (
enable = true; map (file: let
text = lib.strings.join "\n" ( content = lib.strings.trim (builtins.readFile file);
map (file: let parts = lib.strings.splitString " " content;
content = lib.strings.trim (builtins.readFile file); email = lib.lists.last parts;
parts = lib.strings.splitString " " content; in "${email} namespaces=\"git\" ${content}")
email = lib.lists.last parts; (lib.filesystem.listFilesRecursive ./keys)
in "${email} namespaces=\"git\" ${content}") );
(lib.filesystem.listFilesRecursive ./keys)
);
};
}; };
}; };

View File

@@ -9,6 +9,7 @@ with lib; let
handy = pkgs.callPackage ../../packages/handy.nix {}; handy = pkgs.callPackage ../../packages/handy.nix {};
inkdrop = pkgs.callPackage ../../packages/inkdrop.nix {}; inkdrop = pkgs.callPackage ../../packages/inkdrop.nix {};
pumo-system-info = inputs.pumo-system-info.packages.${system}.default; pumo-system-info = inputs.pumo-system-info.packages.${system}.default;
zen = inputs.zen-browser.packages.${system}.default;
in { in {
programs.bun.enable = true; programs.bun.enable = true;
home.packages = with pkgs; [ home.packages = with pkgs; [
@@ -32,16 +33,17 @@ in {
audacity audacity
plexamp plexamp
plex-desktop plex-desktop
spicetify-cli
pavucontrol # Volume control pavucontrol # Volume control
# Social # Social
vesktop # Discord alternative that works well with wayland vesktop # Discord alternative that works well with wayland
element-desktop
signal-desktop signal-desktop
# Misc # Misc
bitwarden-desktop
# gplates # gplates
kicad-small
qgis
handy handy
libnotify libnotify
nextcloud-client nextcloud-client
@@ -50,6 +52,7 @@ in {
scrcpy scrcpy
syncthing syncthing
watchmate watchmate
zen
# Games # Games
atlauncher atlauncher

View File

@@ -1,210 +0,0 @@
{
home.shell.tmux = {
enable = true;
extraConfig = "set-option -sa terminal-overrides \",xterm*:Tc\"";
unbind = [
"C-b"
{"copy-mode-vi" = ["H" "J" "K" "L" "h" "j" "k" "l"];}
];
bind = {
prefix = [
{
key = "«";
action = "select-window -p";
}
{
key = "»";
action = "select-window -n";
}
{
key = "Tab";
action = "switch-client -T windows";
}
{
key = "w";
action = "switch-client -T pane";
}
{
key = "y";
action = "switch-client -T copy-mode";
}
];
pane = [
{
key = "/";
action = "split-window -h -c \"#{pane-current_path}\"";
}
{
key = "-";
action = "split-window -v -c \"#{pane-current_path}\"";
}
{
key = "c";
action = "select-pane -L";
}
{
key = "t";
action = "select-pane -D";
}
{
key = "s";
action = "select-pane -U";
}
{
key = "r";
action = "select-pane -R";
}
{
key = "f";
action = "resize-pane -Z";
}
{
key = ".";
action = "switch-client -T pane-resize";
}
];
"pane-resize" = [
{
key = "c";
action = "resize-pane -L 5\\; switch-client -T pane-resize";
}
{
key = "t";
action = "resize-pane -D 5\\; switch-client -T pane-resize";
}
{
key = "s";
action = "resize-pane -U 5\\; switch-client -T pane-resize";
}
{
key = "r";
action = "resize-pane -R 5\\; switch-client -T pane-resize";
}
{
key = "C";
action = "resize-pane -L\\; switch-client -T pane-resize";
}
{
key = "T";
action = "resize-pane -D\\; switch-client -T pane-resize";
}
{
key = "S";
action = "resize-pane -U\\; switch-client -T pane-resize";
}
{
key = "R";
action = "resize-pane -R\\; switch-client -T pane-resize";
}
];
windows = [
{
key = "c";
action = "new-window";
}
{
key = "n";
action = "next-window";
}
{
key = "p";
action = "previous-window";
}
{
key = "r";
action = "command-prompt \"rename-window '%%'\"";
}
{
key = "\\\"";
action = "select-window -t :=1";
}
{
key = "«";
action = "select-window -t :=2";
}
{
key = "»";
action = "select-window -t :=3";
}
{
key = "(";
action = "select-window -t :=4";
}
{
key = ")";
action = "select-window -t :=5";
}
{
key = "@";
action = "select-window -t :=6";
}
{
key = "+";
action = "select-window -t :=7";
}
{
key = "-";
action = "select-window -t :=8";
}
{
key = "/";
action = "select-window -t :=9";
}
{
key = "*";
action = "select-window -t :=10";
}
];
"copy-mode-vi" = [
{
key = "v";
action = "send-keys -X begin-selection";
}
{
key = "C-v";
action = "send-keys -X rectangle-toggle";
}
{
key = "y";
action = "send-keys -X copy-selection-and-cancel";
}
{
key = "C";
action = "send-keys -X top-line";
}
{
key = "J";
action = "send-keys -X jump-to-backward";
}
{
key = "S";
action = "send-keys -X scroll-up";
}
{
key = "R";
action = "send-keys -X bottom-line";
}
{
key = "T";
action = "send-keys -X scroll-down";
}
{
key = "c";
action = "send-keys -X cursor-left";
}
{
key = "t";
action = "send-keys -X cursor-down";
}
{
key = "s";
action = "send-keys -X cursor-up";
}
{
key = "r";
action = "send-keys -X cursor-right";
}
];
};
};
}

View File

@@ -1,7 +1,6 @@
{ {
config, config,
pkgs, pkgs,
lib,
... ...
}: { }: {
config.home.desktop.wlr-which-key.settings = { config.home.desktop.wlr-which-key.settings = {
@@ -28,223 +27,217 @@
logout = import ./logout.nix {inherit pkgs;}; logout = import ./logout.nix {inherit pkgs;};
ytplay = import ../../modules/cli/scripts/ytplay.nix {inherit pkgs;}; ytplay = import ../../modules/cli/scripts/ytplay.nix {inherit pkgs;};
plock = import ../../modules/cli/scripts/plock.nix {inherit pkgs;}; plock = import ../../modules/cli/scripts/plock.nix {inherit pkgs;};
in in [
[ {
{ key = "a";
key = "a"; desc = "Apps";
desc = "Apps"; submenu = [
submenu = [ {
{ key = "b";
key = "b"; desc = "Browser";
desc = "Browser"; cmd = "zen";
cmd = "zen"; }
} {
{ key = "B";
key = "B"; desc = "Qutebrowser";
desc = "Qutebrowser"; cmd = "${pkgs.qutebrowser}/bin/qutebrowser";
cmd = "${pkgs.qutebrowser}/bin/qutebrowser"; }
} {
{ key = "d";
key = "d"; desc = "Discord";
desc = "Discord"; cmd = "${pkgs.vesktop}/bin/vesktop";
cmd = "${pkgs.vesktop}/bin/vesktop"; }
} {
{ key = "e";
key = "e"; desc = "Emacs";
desc = "Emacs"; cmd = "${config.home.dev.editors.emacs.package}/bin/emacsclient -c -n";
cmd = "${config.home.dev.editors.emacs.package}/bin/emacsclient -c -n"; }
} {
{ key = "g";
key = "g"; desc = "Gimp";
desc = "Gimp"; cmd = "${pkgs.gimp}/bin/gimp";
cmd = "${pkgs.gimp}/bin/gimp"; }
} {
{ key = "h";
key = "h"; desc = "Handy";
desc = "Handy"; cmd = "pkill -USR2 -n handy";
cmd = "pkill -USR2 -n handy"; }
} {
{ key = "n";
key = "n"; desc = "Nemo";
desc = "Nemo"; cmd = "${pkgs.nemo-with-extensions}/bin/nemo";
cmd = "${pkgs.nemo-with-extensions}/bin/nemo"; }
} {
{ key = "N";
key = "N"; desc = "Nextcloud";
desc = "Nextcloud"; cmd = "${pkgs.nextcloud-client}/bin/nextcloud";
cmd = "${pkgs.nextcloud-client}/bin/nextcloud"; }
} {
{ key = "r";
key = "r"; desc = "Rofi";
desc = "Rofi"; submenu = [
submenu = [ {
{ key = "b";
key = "b"; desc = "Bluetooth";
desc = "Bluetooth"; cmd = "${pkgs.rofi-bluetooth}/bin/rofi-bluetooth";
cmd = "${pkgs.rofi-bluetooth}/bin/rofi-bluetooth"; }
} {
{ key = "c";
key = "c"; desc = "calc";
desc = "calc"; cmd = "rofi -show calc";
cmd = "rofi -show calc"; }
} {
{ key = "e";
key = "e"; desc = "Emoji";
desc = "Emoji"; cmd = "rofi -show emoji";
cmd = "rofi -show emoji"; }
} {
{ key = "r";
key = "r"; desc = "App Menu";
desc = "App Menu"; cmd = "rofi -show drun";
cmd = "rofi -show drun"; }
} {
{ key = "s";
key = "s"; desc = "SSH";
desc = "SSH"; cmd = "rofi -show ssh";
cmd = "rofi -show ssh"; }
} {
{ key = "y";
key = "y"; desc = "YouTube";
desc = "YouTube"; cmd = "${ytplay}/bin/ytplay";
cmd = "${ytplay}/bin/ytplay"; }
} ];
]; }
} ];
]; }
} {
{ key = "b";
key = "b"; desc = "Buffers";
desc = "Buffers"; submenu = [
submenu = [ {
{ key = "c";
key = "c"; desc = "Center";
desc = "Center"; cmd = "${center-window}/bin/center-window";
cmd = "${center-window}/bin/center-window"; }
} {
{ key = "d";
key = "d"; desc = "Close";
desc = "Close"; cmd = "${close-window}/bin/close-window";
cmd = "${close-window}/bin/close-window"; }
} {
{ key = "f";
key = "f"; desc = "Fullscreen";
desc = "Fullscreen"; cmd = "${fullscreen}/bin/fullscreen";
cmd = "${fullscreen}/bin/fullscreen"; }
} {
{ key = "F";
key = "F"; desc = "Float";
desc = "Float"; cmd = "${float-window}/bin/float-window";
cmd = "${float-window}/bin/float-window"; }
} {
{ key = "u";
key = "u"; desc = "Urgent";
desc = "Urgent"; cmd = "${focus-urgent}/bin/focus-urgent";
cmd = "${focus-urgent}/bin/focus-urgent"; }
} {
{ key = ".";
key = "."; desc = "Resize";
desc = "Resize"; submenu = [
submenu = [ {
{ key = left;
key = left; desc = "Decrease Width";
desc = "Decrease Width"; cmd = "echo decrease width";
cmd = "echo decrease width"; keep-open = true;
keep-open = true; }
} {
{ key = down;
key = down; desc = "Increase Height";
desc = "Increase Height"; cmd = "echo decrease height";
cmd = "echo decrease height"; keep-open = true;
keep-open = true; }
} {
{ key = up;
key = up; desc = "Decrease Height";
desc = "Decrease Height"; cmd = "echo decrease height";
cmd = "echo decrease height"; keep-open = true;
keep-open = true; }
} {
{ key = right;
key = right; desc = "Increase Width";
desc = "Increase Width"; cmd = "echo increase width";
cmd = "echo increase width"; keep-open = true;
keep-open = true; }
} ];
]; }
} ];
]; }
} {
{ key = "l";
key = "l"; desc = "Lock session";
desc = "Lock session"; cmd = "${plock}/bin/plock";
cmd = "${plock}/bin/plock"; }
} {
{ key = "p";
key = "p"; desc = "Power";
desc = "Power"; submenu = [
submenu = [ {
{ key = "l";
key = "l"; desc = "Logout";
desc = "Logout"; cmd = "${logout}/bin/logout";
cmd = "${logout}/bin/logout"; }
} {
{ key = "s";
key = "s"; desc = "Suspend";
desc = "Suspend"; cmd = "systemctl suspend";
cmd = "systemctl suspend"; }
} {
{ key = "r";
key = "r"; desc = "Reboot";
desc = "Reboot"; cmd = "systemctl reboot";
cmd = "systemctl reboot"; }
} {
{ key = "o";
key = "o"; desc = "Poweroff";
desc = "Poweroff"; cmd = "systemctl poweroff";
cmd = "systemctl poweroff"; }
} ];
]; }
} {
{ key = "s";
key = "s"; desc = "Screenshots";
desc = "Screenshots"; submenu = [
submenu = [ {
{ key = "Print";
key = "Print"; desc = "Screenshot";
desc = "Screenshot"; cmd = "screenshot";
cmd = "screenshot"; }
} {
{ key = "d";
key = "d"; desc = "Delayed";
desc = "Delayed"; cmd = "screenshot -d 3";
cmd = "screenshot -d 3"; }
} {
{ key = "D";
key = "D"; desc = "Select, Delay, Edit, and Copy";
desc = "Select, Delay, Edit, and Copy"; cmd = "screenshot -secd 3";
cmd = "screenshot -secd 3"; }
} {
{ key = "e";
key = "e"; desc = "Select, Edit, and Copy";
desc = "Select, Edit, and Copy"; cmd = "screenshot -sec";
cmd = "screenshot -sec"; }
} {
{ key = "g";
key = "g"; desc = "Select, Gimp, and Copy";
desc = "Select, Gimp, and Copy"; cmd = "screenshot -sgc";
cmd = "screenshot -sgc"; }
} {
{ key = "s";
key = "s"; desc = "Select and Copy";
desc = "Select and Copy"; cmd = "screenshot -sc";
cmd = "screenshot -sc"; }
} ];
]; }
} ];
]
++ lib.lists.optional config.home.desktop.wl-kbptr.enable {
key = "m";
desc = "Mouse Warp";
cmd = "wl-kbptr";
};
}; };
} }