Compare commits
184 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| ad713a6b30 | |||
| aff278fdc4 | |||
| 03809d747e | |||
| c7a6cf88c9 | |||
| 285aa4ff11 | |||
| 6c0268114e | |||
| 02b0ae92a7 | |||
| 7feb92dec2 | |||
| ff376490a2 | |||
| d87d2a8921 | |||
| a6d71eca88 | |||
| 2c8582f4f7 | |||
| 5e3ae7214c | |||
| af6eeb27b7 | |||
| 05cc99f79d | |||
| f5322aca30 | |||
| 85aa41b17f | |||
| f1c1755c41 | |||
| 32ca15da8c | |||
| 8435b11b51 | |||
| 76dc9c093c | |||
| 8944beaa77 | |||
| d9fbf84a68 | |||
| e022f056de | |||
| 499e4764d8 | |||
| 07e33212e2 | |||
| 323ad0d11f | |||
| 3acfff47ca | |||
| 015e3714c3 | |||
| 2ed4e02749 | |||
| 1150987e0f | |||
| afd266fbda | |||
| 1356513a7a | |||
| eb25a2ed70 | |||
| d765f1295f | |||
| e2d16c17b9 | |||
| c98c0e6719 | |||
| 99cc802565 | |||
| 4bc97efe7a | |||
| 6260c56bbd | |||
| 0b5d298bc4 | |||
| f7ae712471 | |||
| 5601b1339c | |||
| 2b30fc1a4d | |||
| cd0e4479f7 | |||
| 8ed9ed7b51 | |||
| 42be5edaf1 | |||
| 3040914409 | |||
| c623efd959 | |||
| 002106286a | |||
| 0439a3a70c | |||
| d7fd96b4ae | |||
| 1cc47bea5c | |||
| 2ddb17e9dd | |||
| 9de557705a | |||
| 27f2604ed4 | |||
| c51feeac8a | |||
| 27154a2ad8 | |||
| fc05eb7824 | |||
| dab57c7754 | |||
| 2907927036 | |||
| 3945bc3204 | |||
| f7a84f0531 | |||
| 327ceed460 | |||
| 0c1df548a2 | |||
| 948ac61d8b | |||
| c0d6d4483d | |||
| f6c123e3bf | |||
| 5ecb1594d1 | |||
| 8ce210ad1f | |||
| 2526cc4d63 | |||
| 59ecf03ecf | |||
| 7f6910098d | |||
| 1015048fc5 | |||
| 831f49e8bd | |||
| 8acb99770c | |||
| 7488da102e | |||
| be5e9cce07 | |||
| 0eddfbef58 | |||
| bdb85b6161 | |||
| 64392b695e | |||
| 8896788bfd | |||
| eec600d1d0 | |||
| b31791b9ef | |||
| 8de280d7e5 | |||
| 8c8a6121bc | |||
| f1296e7675 | |||
| ba56618049 | |||
| 349181f35b | |||
| 0b8b7564a1 | |||
| 54e0f94af5 | |||
| 977aa539a3 | |||
| d56605e37a | |||
| 7d013c83bc | |||
| d42f38531d | |||
| af54219f5f | |||
| b6f59055d8 | |||
| cb990c0cd4 | |||
| c896e02bf1 | |||
| c1e031efa9 | |||
| 19f213ca8c | |||
| a0ebb3f259 | |||
| 3a994a3b8d | |||
| 3b4c0e4a63 | |||
| b15dd4ce86 | |||
| db5514062c | |||
| 7b500ee994 | |||
| 07eb4664f9 | |||
| 872f80e92c | |||
| 562f873f97 | |||
| 2f5868fcca | |||
| e1c1f6e104 | |||
| 3bdf73557b | |||
| bb9988245a | |||
| 713f5bfe8c | |||
| c26f4ccd9a | |||
| d84bfd4628 | |||
| fb6ac408e1 | |||
| f01b079931 | |||
| 78990e6414 | |||
| cef602d758 | |||
| 368e741211 | |||
| fec13e08b9 | |||
| a540ca622d | |||
| 7fb0bcdac0 | |||
| b7726fce94 | |||
| 30c987bd9b | |||
| 539e9a0b8e | |||
| 1e4593ea17 | |||
| ec8a71de95 | |||
| 0c39388b21 | |||
| ebb043b589 | |||
| fcfc9f6450 | |||
| fe3cd057cd | |||
| b9cdb9299e | |||
| 8b6ba76848 | |||
| 2e79bd9e00 | |||
| cfdc9f7001 | |||
| a12b50edfa | |||
| 194d4bcec0 | |||
| 5badb000be | |||
| 08b3f2c194 | |||
| 5f9a110464 | |||
| bcd041484d | |||
| fd3b9f20f0 | |||
| bc160af26a | |||
| a34abd0f05 | |||
| 2fd1f5ee53 | |||
| 88547dc82c | |||
| ccf38c2da2 | |||
| b1107ae904 | |||
| 48f53b3884 | |||
| 9bcca96597 | |||
| 78e219a6cb | |||
| 8b958d6a56 | |||
| 1a1aa20690 | |||
| 54952923f3 | |||
| ca20fa6c35 | |||
| c1b2b51d13 | |||
| 28f78bb67e | |||
| 114647aa96 | |||
| 64ae389f27 | |||
| fd39dbfcd4 | |||
| b13cca7173 | |||
| 7807091b83 | |||
| d3026afb97 | |||
| 152daf1230 | |||
| ffda398f8d | |||
| 3e179960de | |||
| 93e655ed27 | |||
| 710c1dedb8 | |||
| 28ec5c73d4 | |||
| fc7285bd5c | |||
| 11ee156b29 | |||
| 2dba549787 | |||
| d28c7d870c | |||
| 8bf17e74ef | |||
| 08cf457aa3 | |||
| 448002ebf4 | |||
| 9735d3f0c0 | |||
| 8f1b0ade4d | |||
| db05024dc6 | |||
| 21053dac8c | |||
| 1ab0bf54fa |
+4
-5
@@ -1,17 +1,15 @@
|
||||
keys:
|
||||
- &primary age1ee5udznhadk6m7jtglu4709rep080yjyd2ukzdl8jma4mm92y3psv0slpg
|
||||
- &aspi-ssh age1q8lc5340gz5xw2f57nglrss68wv0j0hf36py2pdtrl6ky3yrq9qqk0njr4
|
||||
- &pianonix-ssh age1hsmfz8fjxu83sax9lr487h8xr6cyge0apdq4zpge4c8jpcjj2cksj825ct
|
||||
- &builder-ssh age1kw4kmdm45zprvdkrrpvgq966l7585vhusmum083qlwnr0xxgd3uqatcyja
|
||||
- &kardorf-ssh age15lxw97z03q40xrdscnxqqugh5ky5aqrerg2t2rphkcqm6rnllurq8v98q5
|
||||
|
||||
creation_rules:
|
||||
- path_regex: hosts/common/secrets.yaml$
|
||||
- path_regex: hosts/secrets-common.yaml$
|
||||
key_groups:
|
||||
- age:
|
||||
- *primary
|
||||
- *aspi-ssh
|
||||
- *pianonix-ssh
|
||||
- *kardorf-ssh
|
||||
|
||||
- path_regex: hosts/builder/secrets.yaml$
|
||||
@@ -20,8 +18,9 @@ creation_rules:
|
||||
- *primary
|
||||
- *builder-ssh
|
||||
|
||||
- path_regex: hosts/pianonix/secrets.yaml$
|
||||
- path_regex: features-nixos/optional/k9s/kubeconfig.secret.yaml$
|
||||
key_groups:
|
||||
- age:
|
||||
- *primary
|
||||
- *pianonix-ssh
|
||||
- *aspi-ssh
|
||||
- *kardorf-ssh
|
||||
|
||||
+8
-3
@@ -1,7 +1,12 @@
|
||||
#+title: My dotfiles
|
||||
|
||||
My dotfiles for which I am using =nix=.
|
||||
The structure is managed by [[https://snowfall.org/guides/lib/quickstart/][Snowfall lib]]
|
||||
* Quick start for home-manger only (no need to pull this repo)
|
||||
- Install nix using the https://github.com/DeterminateSystems/nix-installer
|
||||
- Then run
|
||||
#+begin_src shell
|
||||
nix run nixpkgs#home-manager -- switch --flake git+https://gitlab.julian-mutter.de/julian/dotfiles.git#julian@quickstart
|
||||
#+end_src
|
||||
- Done
|
||||
|
||||
* Machine selection
|
||||
=home-manager= automatically searches for =user= or =user@hostname= config in the flake, so specify one of those or you will have to manually specify them:
|
||||
@@ -24,7 +29,7 @@ sops edit secrets/secrets.yaml
|
||||
** Authorize new device
|
||||
- Generate public key from ssh -> Private age key generation not needed
|
||||
#+begin_src sh
|
||||
ssh-to-age < /etc/ssh/ssh_host_ed25519_key
|
||||
ssh-to-age < /etc/ssh/ssh_host_ed25519_key.pub
|
||||
#+end_src
|
||||
- Add age public key to file:.sops.yaml
|
||||
- Update keys
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
inputs,
|
||||
outputs,
|
||||
pkgs,
|
||||
lib,
|
||||
...
|
||||
}: {
|
||||
imports =
|
||||
@@ -12,6 +13,7 @@
|
||||
./nix.nix
|
||||
./sops.nix
|
||||
./root.nix
|
||||
./stylix.nix
|
||||
]
|
||||
++ [
|
||||
inputs.home-manager.nixosModules.home-manager
|
||||
@@ -29,12 +31,17 @@
|
||||
networkmanager-openconnect
|
||||
];
|
||||
};
|
||||
services.resolved.enable = true;
|
||||
services.resolved.enable = false;
|
||||
# MDNS Taken by avahi
|
||||
# networking.networkmanager.dns = "none";
|
||||
networking.nameservers = lib.mkDefault [
|
||||
"1.1.1.1"
|
||||
"8.8.8.8"
|
||||
];
|
||||
|
||||
programs.dconf.enable = true;
|
||||
|
||||
# HM
|
||||
home-manager.useGlobalPkgs = true;
|
||||
# HM module
|
||||
home-manager.useGlobalPkgs = true; # hm module uses the pkgs of the nixos config
|
||||
home-manager.backupFileExtension = "hm-backup"; # backup conflicting files. So hm activation never fails
|
||||
home-manager.extraSpecialArgs = {
|
||||
inherit inputs outputs;
|
||||
};
|
||||
@@ -1,11 +1,6 @@
|
||||
{
|
||||
lib,
|
||||
outputs,
|
||||
...
|
||||
}: {
|
||||
{outputs, ...}: {
|
||||
# Apply overlays
|
||||
nixpkgs = {
|
||||
# TODO: apply this to hm and nixos without duplicate code
|
||||
overlays = builtins.attrValues outputs.overlays;
|
||||
config = {
|
||||
nvidia.acceptLicense = true;
|
||||
@@ -18,7 +13,9 @@
|
||||
};
|
||||
};
|
||||
|
||||
nix.settings.auto-optimise-store = lib.mkDefault true;
|
||||
# optimize at every build, slows down builds
|
||||
# better to do optimise.automatic for regular optimising
|
||||
# nix.settings.auto-optimise-store = lib.mkDefault true;
|
||||
nix.settings.experimental-features = [
|
||||
"nix-command"
|
||||
"flakes"
|
||||
@@ -29,8 +26,13 @@
|
||||
nix.gc = {
|
||||
automatic = true;
|
||||
dates = "weekly";
|
||||
# Keep the last 3 generations
|
||||
options = "--delete-older-than +3";
|
||||
options = "--delete-older-than 30d";
|
||||
persistent = true;
|
||||
};
|
||||
nix.optimise = {
|
||||
automatic = true;
|
||||
dates = ["weekly"]; # Optional; allows customizing optimisation schedule
|
||||
persistent = true;
|
||||
};
|
||||
|
||||
programs.nix-ld.enable = true;
|
||||
@@ -1,4 +1,5 @@
|
||||
{
|
||||
pwd,
|
||||
inputs,
|
||||
config,
|
||||
...
|
||||
@@ -13,10 +14,10 @@ in {
|
||||
sshKeyPaths = map getKeyPath keys;
|
||||
|
||||
# TODO: remove? only rely on ssh or pgp keys (e.g. ubikey like misterio is using!!!)
|
||||
keyFile = "/home/julian/.config/sops/age/keys.txt";
|
||||
# keyFile = "/home/julian/.config/sops/age/keys.txt";
|
||||
# Generate key if none of the above worked. With this, building will still work, just without secrets
|
||||
generateKey = false; # TODO: building should not work without secrets!?
|
||||
};
|
||||
|
||||
sops.defaultSopsFile = ../secrets.yaml;
|
||||
sops.defaultSopsFile = "${pwd}/hosts/secrets-common.yaml";
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
{
|
||||
pkgs,
|
||||
inputs,
|
||||
...
|
||||
}: {
|
||||
imports = [inputs.stylix.nixosModules.stylix];
|
||||
|
||||
stylix.enable = true;
|
||||
stylix.base16Scheme = "${pkgs.base16-schemes}/share/themes/catppuccin-mocha.yaml";
|
||||
|
||||
stylix.fonts = {
|
||||
serif = {
|
||||
package = pkgs.dejavu_fonts;
|
||||
name = "DejaVu Serif";
|
||||
};
|
||||
|
||||
sansSerif = {
|
||||
package = pkgs.dejavu_fonts;
|
||||
name = "DejaVu Sans";
|
||||
};
|
||||
|
||||
monospace = {
|
||||
package = pkgs.dejavu_fonts;
|
||||
name = "DejaVu Sans Mono";
|
||||
};
|
||||
|
||||
emoji = {
|
||||
package = pkgs.noto-fonts-color-emoji;
|
||||
name = "Noto Color Emoji";
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -3,7 +3,10 @@
|
||||
services.avahi = {
|
||||
enable = true;
|
||||
nssmdns4 = true;
|
||||
nssmdns6 = true;
|
||||
publish.enable = true;
|
||||
publish.addresses = true;
|
||||
ipv4 = true;
|
||||
ipv6 = true;
|
||||
};
|
||||
}
|
||||
@@ -9,12 +9,17 @@
|
||||
"https://nix-community.cachix.org"
|
||||
"https://cache.nixos.org/"
|
||||
"https://hyprland.cachix.org"
|
||||
"http://binarycache.julian-mutter.de"
|
||||
# "http://binarycache.julian-mutter.de"
|
||||
"https://devenv.cachix.org"
|
||||
"https://noctalia.cachix.org"
|
||||
];
|
||||
trusted-public-keys = [
|
||||
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
|
||||
"hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="
|
||||
"binarycache.julian-mutter.de:oJ67uRFwRhNPKL58CHzy3QQLv38Kx7OA1K+6xlEPu7E="
|
||||
"cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY="
|
||||
"devenv.cachix.org-1:w1cLUi8dv3hnoSPGAuibQv+f9TZLr6cv/Hm9XgU50cw="
|
||||
"noctalia.cachix.org-1:pCOR47nnMEo5thcxNDtzWpOxNFQsBRglJzxWPp3dkU4="
|
||||
];
|
||||
|
||||
trusted-users = [
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
users.extraUsers.greeter = {
|
||||
# For caching
|
||||
home = "/tmp/greeter-home";
|
||||
createHome = true;
|
||||
};
|
||||
|
||||
programs.regreet = {
|
||||
enable = true;
|
||||
cageArgs = [
|
||||
"-s"
|
||||
"-m"
|
||||
"last"
|
||||
]; # multimonitor use last monitor
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
{
|
||||
config,
|
||||
pkgs,
|
||||
...
|
||||
}: {
|
||||
environment.systemPackages = with pkgs; [
|
||||
kubectl
|
||||
k9s
|
||||
];
|
||||
|
||||
sops.secrets.kubeconfig = {
|
||||
sopsFile = ./kubeconfig.secret.yaml;
|
||||
format = "binary";
|
||||
owner = config.users.users.julian.name;
|
||||
group = config.users.users.julian.group;
|
||||
};
|
||||
environment.variables.KUBECONFIG = config.sops.secrets."kubeconfig".path;
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"data": "ENC[AES256_GCM,data:nq2czkXqOhjRECF9kASPiBCiz1I7LQLljTV+LkrBp4+BH92YTV6ywRyerNoTDmaBmnY+fuhdnPkN7Q9jjT1SNGLIxBG4b6gOpzgr3amhfNAW3MAUUcPuqNsk0EZ4ZJiUluPCvRtAKHyXsrQpN8P04Rg0OjHoxCrOgKjmODr14QNiQH4RAONSai76dRgRBMQs0PIzcAiMSkwKc0OgBYTccSspV7DlulA3ngv0LuUavKS6QoJ4DuCnFgOu5KHGLQS0ww+Ijp1wAx/4/tq8Iimdn968uvzFjrZATb3bHVjHSR/cbNRCJn6GrpqFCNdpI5OPw3P9f9rodXZKai/bESu2aC8Dlya2by29lCPHkg5lp6atZA8ksnj9brYsFUb6xKPUAPGDElBaUEf+LidsZlI6hAz98/uf3bwyqq22+gMkfKUM1pX1YOtyTq+5eMSn0kBuSVupvEDJaO/G/YlTUDvJL0CzwO0hLzzotLrGcqhvYqjHCr2XhIER+YgYA7D22iml5YOLRxp5RQd3sj74hUGWJkGq1p/uhniaOvrjF0zmQsqHFC4+jUNBKVMVVTLBX/AdL45Lv+HDM4jYCvtNIKAGtTGT71cplhBI2xP1s607NiIbUsSY+2qayh3INOP7qGWwpYquYe/xAk6KZMu1/UuvneVqOjqlcJFOpLqydPnP0oQRy1dtCcJsvT5nv0QEI+Tr24Dbn3tX8fmc8EzZwpmEyHto7nYzHFicgvmYavmTHkmbzySDMI03ktZ7EdM0unlNe9EmR8YyGeg7tmG4bKx9K+7qs0Piqq03gHwN9L92O80J8jiKu8MDURWywYPYHUmCKYbkHh5en1qvyFTU7dDI7L+gdp9+VSqJrkQqPbWAouMBlLE0664lTpzmYQOXWo8riwjYPllkd8EqCaKxrMMHp4Y46X69lsZS1mImuHac3xJV57r6A+mMJajGW92KI13416rwG9sXS1ynNdBTi9+P/1f3Sy8B6ypYa1BP/6+tHqghNAuz5aaKZJnsCWYMAk6y5AuFaZ2ZkO1ruSfdPmyjKoMcp/qO5nmHxF+0h+teSuvLeCb7KrL80IlKElgDINlPYHDVtaoYVv4sZAWhSNJSOUWRbue3bJaqhKz3xOdq5lJy7H3P+MQF8YFgoY7Po4EcXqTP8Upm3tIehPr7BJXNIv6beDPwpMZrvVKqVIgsXD85DqyA1Mh7k5gQpB4uAhZfRUQ8T4reVumjOnGakXh+1DcFPYJumScCP1/68btIYGYJiPJTJhL7/U+12siGzzXXZeaJ7NpCzpvpgmFvoMfV+gFgrAUkb2+eSeEI6BNRjfXWc5NM03RQqotqW4E3Ui+gYbwU0D9/8b5UsRc4IiujnZFSKbCZGGHm79Yrm8IhtTuVyQV67/NeuRfIcJuPPmYGS8nnX8v7pymlagm/43sFHpupsrgeVStsLl1asKJanA6Njus/YA3zrdmgKb1kMK6ALBc73WaT9S+4aZeKB8A6jA5PD2GAgW/T5jaHxi0VPisg0eChKtJfhJVFoZFE+U2fx2YrTeC/joSdS4jqTKaqwDgJ19d5Wvs8ZDQDjHo5I8uUArWODTW/H8An9zp8jsEN6bS1mBeta8qhkz2v9diBUFwmDvmGNX5REirrm3bkqWF2xx6NEiDARTUVAf+fh9VQaQQKK2sQ35zjaAbI4aXmDTI9vy8aFs+6MvJ/iiIwKkjVgZYmyiUVtHy6ZRGwdzgpuOAcoYRxGHaDYIEL33nDQclLmgUwWAfbc0bTI1rvaIzZ25nZ6n4aFFtpANJHTtYeMrAAl1Sho0dio6clM7/k4XST5GA4BqDlRs/Oze4yNjjQb5WoYrBCFEuVcypvRBmLEbM3XOK1sHdQAEAqey/ZfhfNhAVeapVw3ir4E2jsX9pAqlTjH4YkrIURhG05yPb2D3+WMKGAoC4yyusd7siz6tJ4uXvFXkTeOjXMM/Xo/dBnm2J1FPHr9msELIxhtG046/m+I/MEaF6Hg9XC2CZrlxi5OsH61PGBOLLNVFiQ8NaPChHRppQEH1y1GSN+5FinxTK0R5GS3PxN15NZXjmMsj+ixYmbWjkJJXn2bDM7Muv7PRetpcMhU0UIr75+6MWbwPy6v62IsDoQCOslnQVbGc/oHY47EoZ7lKbuulP0ZvQOQxGNvcOtbVc0dJHdFUTgrPxpkCyOQ4NGSLSah1qzDP5j4Fq4ag+OdITPQpDdX6TkiufGfFqq7C5GNHDK8olYKGwH3D0GCGT8o9pFx+FIeRapaWJHkcPibDMyu3KumRy04HF1ih2Z6IoWFHa532pgsK9FlAMGHeqtL/LXWZKtLONR6wNU8DxfbIhV+lUlvbbs27VMj0VHXMXdYnbvGvXOPkb4iP4Pm+HQU4AF3ROA7rtWtrL401Qpdbln5qLEWz9hKCXbM1MbvpGvNvHKckKAWpKmCsVWY8oPCNOqqWAZF5sfrlLb4fULOXg0YQCeobo3O9DZjPf/D/ki6OX5KEgYlqikKdd9hR1d5koyt0bunuFHty2guh8oaUsPjJbcuSCLz80HND9j12msuG13qFWvf77rUiE3WZ5aTSGWh7VB/lUofuEn+aTaGBK7iLAj2PU+/YQUmEFAWaIXOdq7fumHgVdsBRThXvqf7RHD+ZkpMq3D0wsnCwIgCGvxH76ah1wZzPm0lg/tecL294e8ICDuQw+pyOVj96vMdiNF31ADd1BZCO505Y7jsEFdJCJvCGXNNvTr+ir4Vh9RdwBOXxxpX9DcQaaruVQ9nCty/ikBJ04Qok6ZVV8XXbN+HNu8iGVpLNrj1E1rRAJmeqfKiDuiG6ABqLDtq9beMS9K2xhKvwjG/z+AD3v6djipkdYjjlDOV6WNxWWv74LlzjSC9Se9ERATZfCj5U06LHO1yg8y+uIvRyoWIEaAFG7aFrEvfDH6OfzbhutGDMoxBThzKhxPDq9pm/N4cBcoRwGKgrlYmjLIl5Full/ArbLN1C6EXABn9Bu6lL7VrhwSj+HC0sp1vJb3ECmvtD7lzZsqejf4p6P/FPKLHUBNVr6sTJ9fHtOaYFi7DxQONqM/yoPBLB/TeZnB0KFFfKkCNM7YDOZjQ/UZscOZxztcYc7TeQ8dA0ZUfto=,iv:ZgZWZAQZmYUs0EqZuoTCTWQ52CnuSTS+zdIuIA1UNOM=,tag:vbI3RDpvU+X1xQo+lT7WbA==,type:str]",
|
||||
"sops": {
|
||||
"age": [
|
||||
{
|
||||
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAvMVNBZDd4VndET2pMVjVr\nNkw4aW9HckJXYU0yREoyZ09oZ3JKSVlsQ3c4CkFRWURVN2tmOXNTZHhOdS91QW5a\nRlhhSDI3c2dHVVlTLzB3NjA4c1J2UncKLS0tIHFaL21rRWNpeGlqd0pIaXU5WFRP\neTZSOHpBTTE3ZjFIbXRuSnJjdlEwSXcKqWIxCnWJvE058ojm2RrwzXkTWQLZbE7L\nXPisgwudwY+vFaTziubbPp/U9P3LXs3oFhPSqgiuCkDNLETFkpw1ng==\n-----END AGE ENCRYPTED FILE-----\n",
|
||||
"recipient": "age1ee5udznhadk6m7jtglu4709rep080yjyd2ukzdl8jma4mm92y3psv0slpg"
|
||||
},
|
||||
{
|
||||
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBHZHc0TzJKNzBUSG9GajVr\nazFWSS96Z3VXdDZOM2hPdVB4QTRhOEtVNDNRCmJkWm1TUGRwb0hpS1BBWm5WcURx\nQ21idzVZZzR5U0o3eDM1NmwySFpGQzAKLS0tIG51ZndsSDI1N2M4b280SW53eEF0\nMStNSU9odzRhY05SL05RYWlpaUlFQUkKoxVqeqZ9xAR4+JMcJXdEq0cq2CkZz63/\nSjwNDdCHjePc62yj5Qyw15zLrL2t7jvLUG44kPUbDuOIVwMH2KV2hQ==\n-----END AGE ENCRYPTED FILE-----\n",
|
||||
"recipient": "age1q8lc5340gz5xw2f57nglrss68wv0j0hf36py2pdtrl6ky3yrq9qqk0njr4"
|
||||
},
|
||||
{
|
||||
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBYd1ZJTUtLbzY4d1hSRDA1\ndHdRQnhhUHVFMDJVOUQ0VFZCeW40S0lFODBJCmFvRSsyRkI3MDFGeDdkeGRSTVh5\nTEdwQTBWVVlwSjZHWXpoN0xzb0tuR1kKLS0tIEpvVU0rVTRWQUxLNW9zMFo3cVBr\ncGYxemF6MHlBS1dqSXM3aXRTZmdHQWMKjEcJJXRKCber6afB11j1VmWM3dObm45u\nkZ+E3bK1zd/L6YoLr1jF7GP9b62GjTG9Qv1M/JdKM4qlY//GmW6IIQ==\n-----END AGE ENCRYPTED FILE-----\n",
|
||||
"recipient": "age15lxw97z03q40xrdscnxqqugh5ky5aqrerg2t2rphkcqm6rnllurq8v98q5"
|
||||
}
|
||||
],
|
||||
"lastmodified": "2026-06-18T18:37:59Z",
|
||||
"mac": "ENC[AES256_GCM,data:UXFXrUrbmyp+MnBNDKKr4FP0WFhWH97W68KXlE/UzEvBVpeHste92UPzdX4FMk2rEd7ldsMcTV9hmRavWI5v/Y/y/hzuhdCkqsYfnixS15Z9PrfuFX6YjrpeoJ84s1itmhjimKe4mmXt/aND8DLJ49rQ/A1hebJ2UndBlsRIGmc=,iv:YJPVWuajQ0tzhuoIBcWw8Wy5IBy+HC0JcR69gelGzGM=,tag:YW0STCsswNaqjKBta1OwyQ==,type:str]",
|
||||
"version": "3.13.1"
|
||||
}
|
||||
}
|
||||
@@ -15,7 +15,7 @@ in {
|
||||
|
||||
# TODO: what does this do
|
||||
# Let WAYLAND_DISPLAY be forwarded
|
||||
AcceptEnv = "WAYLAND_DISPLAY";
|
||||
# AcceptEnv = "WAYLAND_DISPLAY";
|
||||
X11Forwarding = true;
|
||||
};
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{pkgs, ...}: {
|
||||
environment.systemPackages = with pkgs; [
|
||||
shared-mime-info # extended mimetype support
|
||||
lxde.lxmenu-data # open with "Installed Applications"
|
||||
lxmenu-data # open with "Installed Applications"
|
||||
pcmanfm
|
||||
];
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
services.pulseaudio.enable = false;
|
||||
services.pipewire = {
|
||||
enable = true;
|
||||
wireplumber.enable = true;
|
||||
alsa.enable = true;
|
||||
alsa.support32Bit = true;
|
||||
pulse.enable = true;
|
||||
@@ -14,6 +15,14 @@
|
||||
"module.x11.bell" = false;
|
||||
};
|
||||
};
|
||||
"10-increase-buffer" = {
|
||||
"context.properties" = {
|
||||
"default.clock.rate" = 48000;
|
||||
"default.clock.quantum" = 1024;
|
||||
"default.clock.min-quantum" = 1024;
|
||||
"default.clock.max-quantum" = 2048;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
programs.wireshark = {
|
||||
enable = true;
|
||||
dumpcap.enable = true;
|
||||
usbmon.enable = true;
|
||||
};
|
||||
|
||||
users.users.julian.extraGroups = ["wireshark"];
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
{
|
||||
pwd,
|
||||
pkgs,
|
||||
config,
|
||||
lib,
|
||||
@@ -17,6 +18,8 @@ in {
|
||||
"networkmanager"
|
||||
"wheel"
|
||||
"audio"
|
||||
"realtime"
|
||||
"rtkit"
|
||||
"network"
|
||||
"video"
|
||||
"podman"
|
||||
@@ -27,7 +30,7 @@ in {
|
||||
];
|
||||
|
||||
openssh.authorizedKeys.keys = lib.splitString "\n" (
|
||||
builtins.readFile ../../../../homes/julian/ssh.pub
|
||||
builtins.readFile ./ssh.pub
|
||||
);
|
||||
# hashedPasswordFile = config.sops.secrets.julian-password.path;
|
||||
hashedPassword = "$y$j9T$N33kLJQbV8soUoCbDkpwA1$r/yahJDgOPo4GGOrAi6BUG5zLTzmaBrA5NQ4nno561A";
|
||||
@@ -38,11 +41,11 @@ in {
|
||||
};
|
||||
|
||||
sops.secrets.julian-password = {
|
||||
sopsFile = ../../secrets.yaml;
|
||||
sopsFile = "${pwd}/hosts/secrets-common.yaml";
|
||||
neededForUsers = true;
|
||||
};
|
||||
|
||||
home-manager.users.julian = import ../../../../homes/julian/${config.networking.hostName}.nix;
|
||||
home-manager.users.julian = import "${pwd}/homes/julian/${config.networking.hostName}.nix";
|
||||
|
||||
security.pam.services.swaylock = {}; # Make swaylock unlocking work
|
||||
}
|
||||
Generated
+1062
-125
File diff suppressed because it is too large
Load Diff
@@ -2,16 +2,34 @@
|
||||
description = "Home Manager configuration of julian";
|
||||
|
||||
inputs = {
|
||||
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
|
||||
nixpkgs-stable.url = "github:nixos/nixpkgs/nixos-24.11";
|
||||
nixpkgs-unstable.url = "github:nixos/nixpkgs/nixos-unstable";
|
||||
nixpkgs.url = "github:nixos/nixpkgs/nixos-26.05";
|
||||
systems.url = "github:nix-systems/default-linux";
|
||||
nixos-hardware.url = "github:nixos/nixos-hardware";
|
||||
impermanence.url = "github:nix-community/impermanence";
|
||||
nix-colors.url = "github:misterio77/nix-colors";
|
||||
deploy-rs.url = "github:serokell/deploy-rs";
|
||||
|
||||
noctalia = {
|
||||
url = "github:noctalia-dev/noctalia-shell";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
stylix = {
|
||||
url = "github:nix-community/stylix/release-26.05";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
nixos-generators = {
|
||||
url = "github:nix-community/nixos-generators";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
home-manager = {
|
||||
url = "github:nix-community/home-manager";
|
||||
url = "github:nix-community/home-manager/release-26.05";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
nix-index-database = {
|
||||
url = "github:nix-community/nix-index-database";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
sops-nix = {
|
||||
@@ -33,7 +51,7 @@
|
||||
flake = false;
|
||||
};
|
||||
nixvim = {
|
||||
url = "github:nix-community/nixvim";
|
||||
url = "github:nix-community/nixvim/nixos-26.05";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
nix-matlab = {
|
||||
@@ -67,10 +85,6 @@
|
||||
import nixpkgs {
|
||||
inherit system;
|
||||
config.allowUnfree = true;
|
||||
config.permittedInsecurePackages = [
|
||||
"olm-3.2.16"
|
||||
];
|
||||
warn-dirty = false;
|
||||
}
|
||||
);
|
||||
in {
|
||||
@@ -80,75 +94,40 @@
|
||||
homeManagerModules = import ./modules/home-manager;
|
||||
|
||||
overlays = import ./overlays {inherit inputs outputs;};
|
||||
# hydraJobs = import ./hydra.nix { inherit inputs outputs; }; # TODO add hydra jobs here?
|
||||
|
||||
packages = forEachSystem (pkgs: import ./pkgs {inherit pkgs;});
|
||||
packages = forEachSystem (pkgs: import ./packages {inherit pkgs;});
|
||||
devShells = forEachSystem (pkgs: import ./shell.nix {inherit pkgs;});
|
||||
formatter = forEachSystem (pkgs: pkgs.alejandra);
|
||||
formatter = forEachSystem (pkgs: pkgs.alejandra); # nix fmt *
|
||||
|
||||
nixosConfigurations = {
|
||||
# Main laptop
|
||||
aspi = lib.nixosSystem {
|
||||
modules = [./hosts/aspi];
|
||||
specialArgs = {
|
||||
inherit inputs outputs;
|
||||
};
|
||||
};
|
||||
# Piano raspberry pi
|
||||
pianonix = lib.nixosSystem {
|
||||
modules = [./hosts/pianonix];
|
||||
modules = [
|
||||
./hosts/aspi
|
||||
];
|
||||
specialArgs = {
|
||||
inherit inputs outputs;
|
||||
pwd = "${self}";
|
||||
};
|
||||
};
|
||||
kardorf = lib.nixosSystem {
|
||||
modules = [./hosts/kardorf];
|
||||
specialArgs = {
|
||||
inherit inputs outputs;
|
||||
pwd = "${self}";
|
||||
};
|
||||
};
|
||||
builder = lib.nixosSystem {
|
||||
modules = [./hosts/builder];
|
||||
specialArgs = {
|
||||
inherit inputs outputs;
|
||||
pwd = "${self}";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
# Standalone HM
|
||||
homeConfigurations = {
|
||||
# Main laptop
|
||||
"julian@aspi" = lib.homeManagerConfiguration {
|
||||
modules = [
|
||||
./homes/julian/aspi.nix
|
||||
./homes/julian/hm-standalone-config.nix
|
||||
];
|
||||
pkgs = pkgsFor.x86_64-linux;
|
||||
extraSpecialArgs = {
|
||||
inherit inputs outputs;
|
||||
};
|
||||
};
|
||||
# Media server (RPi)
|
||||
"julian@pianonix" = lib.homeManagerConfiguration {
|
||||
modules = [
|
||||
./homes/julian/pianonix.nix
|
||||
./homes/julian/hm-standalone-config.nix
|
||||
];
|
||||
pkgs = pkgsFor.aarch64-linux;
|
||||
extraSpecialArgs = {
|
||||
inherit inputs outputs;
|
||||
};
|
||||
};
|
||||
"julian@kardorf" = lib.homeManagerConfiguration {
|
||||
modules = [
|
||||
./homes/julian/kardorf.nix
|
||||
./homes/julian/hm-standalone-config.nix
|
||||
];
|
||||
pkgs = pkgsFor.x86_64-linux;
|
||||
extraSpecialArgs = {
|
||||
inherit inputs outputs;
|
||||
};
|
||||
};
|
||||
"julian@v3ms" = lib.homeManagerConfiguration {
|
||||
modules = [
|
||||
./homes/julian/v3ms
|
||||
@@ -157,22 +136,24 @@
|
||||
pkgs = pkgsFor.x86_64-linux;
|
||||
extraSpecialArgs = {
|
||||
inherit inputs outputs;
|
||||
pwd = "${self}";
|
||||
};
|
||||
};
|
||||
"julian@quickstart" = lib.homeManagerConfiguration {
|
||||
modules = [
|
||||
./homes/julian/quickstart.nix
|
||||
./homes/julian/hm-standalone-config.nix
|
||||
];
|
||||
pkgs = pkgsFor.x86_64-linux;
|
||||
extraSpecialArgs = {
|
||||
inherit inputs outputs;
|
||||
pwd = "${self}";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
# deploy-rs node configuration
|
||||
deploy.nodes = {
|
||||
pianonix = {
|
||||
hostname = "pianonix.local";
|
||||
profiles.system = {
|
||||
sshUser = "root";
|
||||
user = "root";
|
||||
path = inputs.deploy-rs.lib.aarch64-linux.activate.nixos self.nixosConfigurations.pianonix;
|
||||
confirmTimeout = 90; # default: 30s; raspberrypi takes a little longer restarting services
|
||||
};
|
||||
};
|
||||
|
||||
builder = {
|
||||
hostname = "builder.julian-mutter.de";
|
||||
profiles.system = {
|
||||
|
||||
@@ -11,6 +11,8 @@
|
||||
./features/alacritty
|
||||
./features/yazi
|
||||
./features/emacs
|
||||
./features/tmux
|
||||
./features/qt-distrobox
|
||||
|
||||
./features/hyprland
|
||||
|
||||
|
||||
@@ -2,5 +2,6 @@
|
||||
programs.direnv = {
|
||||
enable = true;
|
||||
nix-direnv.enable = true;
|
||||
mise.enable = true;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -41,7 +41,7 @@ in {
|
||||
sqlite
|
||||
|
||||
# Code formatters for use with doom emacs
|
||||
nixfmt-rfc-style # nix
|
||||
nixfmt # nix
|
||||
alejandra # nix
|
||||
|
||||
nixd # nix lsp
|
||||
@@ -52,6 +52,14 @@ in {
|
||||
shfmt
|
||||
pyright
|
||||
clang-tools # c++ lsp etc
|
||||
ccls # alternative c++ lsp
|
||||
cmake
|
||||
bear
|
||||
cmake-language-server
|
||||
|
||||
# qt6.full # qt tools and libs including lsp
|
||||
tinymist # typst lsp
|
||||
|
||||
ltex-ls # latex languagetool
|
||||
|
||||
graphviz
|
||||
@@ -59,6 +67,27 @@ in {
|
||||
# neocmakelsp # cmake
|
||||
|
||||
emacs-all-the-icons-fonts
|
||||
frajul.typst-languagetool
|
||||
ltex-ls-plus
|
||||
|
||||
(texlive.combine {
|
||||
inherit
|
||||
(texlive)
|
||||
scheme-basic
|
||||
# for rendering latex in inkscape
|
||||
standalone
|
||||
amsmath
|
||||
preview
|
||||
# needed for org mode preview
|
||||
dvisvgm
|
||||
dvipng # for preview and export as html
|
||||
wrapfig
|
||||
# amsmath
|
||||
ulem
|
||||
hyperref
|
||||
capt-of
|
||||
;
|
||||
})
|
||||
]
|
||||
++ lib.optional config.is-nixos emacs;
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
}:
|
||||
with lib; {
|
||||
home.file = {
|
||||
".config/starship.toml".source = ./starship.toml;
|
||||
# ".config/starship.toml".source = ./starship.toml;
|
||||
".config/fish/conf.d/last-working-dir.fish".source = ./last-working-dir.fish;
|
||||
};
|
||||
|
||||
@@ -27,6 +27,11 @@ with lib; {
|
||||
enableFishIntegration = true;
|
||||
};
|
||||
|
||||
programs.zoxide = {
|
||||
enable = true;
|
||||
enableFishIntegration = true;
|
||||
};
|
||||
|
||||
programs.fish = {
|
||||
enable = true;
|
||||
|
||||
@@ -38,14 +43,18 @@ with lib; {
|
||||
cd $argv
|
||||
'';
|
||||
run = ''
|
||||
nix run nixpkgs#"$argv[1]" -- $argv[2..-1]
|
||||
nix run --impure nixpkgs#"$argv[1]" -- $argv[2..-1]
|
||||
'';
|
||||
shell = ''
|
||||
set args
|
||||
for arg in $argv
|
||||
set args $args nixpkgs#$arg
|
||||
end
|
||||
nix shell $args
|
||||
nix shell --impure $args
|
||||
'';
|
||||
fish_user_key_bindings = ''
|
||||
bind ctrl-space 'zi; commandline -f repaint'
|
||||
bind -M insert ctrl-space 'zi; commandline -f repaint'
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
@@ -1,21 +1,24 @@
|
||||
{
|
||||
lib,
|
||||
pkgs,
|
||||
config,
|
||||
...
|
||||
}:
|
||||
with lib; {
|
||||
fonts.fontconfig.enable = true; # required to autoload fonts from packages
|
||||
home.packages = with pkgs; [
|
||||
nerd-fonts.fira-code
|
||||
nerd-fonts.jetbrains-mono
|
||||
|
||||
font-awesome
|
||||
dejavu_fonts
|
||||
noto-fonts
|
||||
noto-fonts-cjk-sans
|
||||
noto-fonts-emoji
|
||||
noto-fonts-color-emoji
|
||||
liberation_ttf
|
||||
fira-code
|
||||
fira-code-symbols
|
||||
source-code-pro
|
||||
source-sans
|
||||
roboto
|
||||
];
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
enable = true;
|
||||
enableFishIntegration = true;
|
||||
settings = {
|
||||
theme = "catppuccin-mocha";
|
||||
# theme = "catppuccin-mocha";
|
||||
font-size = 12;
|
||||
};
|
||||
};
|
||||
|
||||
@@ -1,33 +0,0 @@
|
||||
{
|
||||
config,
|
||||
pkgs,
|
||||
inputs,
|
||||
...
|
||||
}: let
|
||||
inherit (inputs.nix-colors.lib-contrib {inherit pkgs;}) gtkThemeFromScheme;
|
||||
in {
|
||||
# Do not make conditional, just toggle things on and off
|
||||
imports = [inputs.nix-colors.homeManagerModules.default]; # TODO: what does this do
|
||||
|
||||
# home.sessionVariables.GTK_THEME = "Catppuccin-Mocha-Compact-Blue-dark";
|
||||
gtk = {
|
||||
enable = true;
|
||||
theme = {
|
||||
name = inputs.nix-colors.colorschemes.${config.colorscheme.name}.slug;
|
||||
package = gtkThemeFromScheme {
|
||||
scheme = inputs.nix-colors.colorschemes.${config.colorscheme.name};
|
||||
};
|
||||
};
|
||||
iconTheme = {
|
||||
name = "Papirus-Dark";
|
||||
package = pkgs.papirus-icon-theme;
|
||||
};
|
||||
cursorTheme = {
|
||||
package = pkgs.apple-cursor;
|
||||
name = "macOS";
|
||||
size = 24;
|
||||
};
|
||||
};
|
||||
|
||||
xdg.portal.extraPortals = [pkgs.xdg-desktop-portal-gtk];
|
||||
}
|
||||
@@ -5,26 +5,29 @@
|
||||
lib,
|
||||
...
|
||||
}: let
|
||||
inherit
|
||||
(inputs.nix-colors.colorschemes.${builtins.toString config.colorscheme.name})
|
||||
palette
|
||||
;
|
||||
# Apply lib.mkDefault to a whole attrset recursively, used for the noctalia config
|
||||
mkDefaultsRec = value:
|
||||
if builtins.isAttrs value
|
||||
then lib.mapAttrs (_: mkDefaultsRec) value
|
||||
else if builtins.isList value
|
||||
then map mkDefaultsRec value
|
||||
else lib.mkDefault value;
|
||||
in {
|
||||
imports = [
|
||||
# inputs.hyprland.homeManagerModules.default
|
||||
./waybar
|
||||
./wofi
|
||||
./mako
|
||||
# ./waybar
|
||||
# ./wofi
|
||||
# ./mako
|
||||
# ./hyprlock
|
||||
./wlogout
|
||||
../gammastep
|
||||
# ../gammastep
|
||||
|
||||
./swayidle.nix
|
||||
# ./swayidle.nix
|
||||
./swaylock.nix
|
||||
./zathura.nix
|
||||
./waypipe.nix
|
||||
|
||||
./hyprbars.nix
|
||||
# ./hyprbars.nix
|
||||
inputs.noctalia.homeModules.default
|
||||
];
|
||||
|
||||
xdg.portal = {
|
||||
@@ -37,11 +40,27 @@ in {
|
||||
};
|
||||
};
|
||||
|
||||
home.pointerCursor = {
|
||||
hyprcursor.enable = true;
|
||||
package = pkgs.bibata-cursors;
|
||||
name = "Bibata-Modern-Classic";
|
||||
size = 24;
|
||||
};
|
||||
|
||||
programs.imv.enable = true; # TODO: what is that
|
||||
|
||||
programs.noctalia-shell = {
|
||||
enable = true;
|
||||
# noctalia-shell ipc call state all | jq .settings | xclip
|
||||
# mkDefaultsRec used so that stylix can overwrite style options
|
||||
settings = mkDefaultsRec (builtins.fromJSON (builtins.readFile ./noctalia.json));
|
||||
};
|
||||
|
||||
home.packages = with pkgs; [
|
||||
hyprpicker
|
||||
hyprcursor
|
||||
brightnessctl
|
||||
playerctl
|
||||
frajul.hyprshot-gui
|
||||
frajul.wl-ocr
|
||||
|
||||
@@ -57,7 +76,7 @@ in {
|
||||
builtins.concatLists (
|
||||
map (
|
||||
monitor:
|
||||
map (ws: "hyprctl dispatch moveworkspacetomonitor ${ws} ${monitor.name}") monitor.workspaces
|
||||
map (ws: "hyprctl dispatch 'hl.dsp.workspace.move({workspace=\"${ws}\", monitor=\"${monitor.name}\"})'") monitor.workspaces
|
||||
)
|
||||
config.monitors
|
||||
)
|
||||
@@ -75,49 +94,36 @@ in {
|
||||
LIBSEAT_BACKEND = "logind";
|
||||
};
|
||||
|
||||
# services.hypridle = {
|
||||
# enable = true;
|
||||
# settings = {
|
||||
# general = {
|
||||
# after_sleep_cmd = "hyprctl dispatch dpms on";
|
||||
# ignore_dbus_inhibit = false;
|
||||
# lock_cmd = "hyprlock";
|
||||
# };
|
||||
|
||||
# listener = [
|
||||
# {
|
||||
# timeout = 300; # 5min
|
||||
# on-timeout = "brightnessctl -s set 10"; # set monitor backlight to minimum, avoid 0 on OLED monitor.
|
||||
# on-resume = "brightnessctl -r"; # monitor backlight restore.
|
||||
# }
|
||||
|
||||
# {
|
||||
# timeout = 360; # 6min
|
||||
# on-timeout = "hyprlock"; # lock screen when timeout has passed
|
||||
# }
|
||||
|
||||
# {
|
||||
# timeout = 600; # 10min
|
||||
# on-timeout = "hyprctl dispatch dpms off"; # screen off when timeout has passed
|
||||
# on-resume = "hyprctl dispatch dpms on"; # screen on when activity is detected after timeout has fired.
|
||||
# }
|
||||
# ];
|
||||
# };
|
||||
# };
|
||||
|
||||
# services.hypridle.enable = true; # can be configured
|
||||
|
||||
services.network-manager-applet.enable = true;
|
||||
|
||||
wayland.windowManager.hyprland = {
|
||||
# Whether to enable Hyprland wayland compositor
|
||||
enable = true;
|
||||
# package = config.lib.nixGL.wrap (
|
||||
# pkgs.hyprland.override {
|
||||
# # nixgl needed?
|
||||
# wrapRuntimeDeps = false;
|
||||
# }
|
||||
# );
|
||||
|
||||
configType = "lua";
|
||||
extraConfig =
|
||||
# Variables controllable by nix
|
||||
''
|
||||
-- Nix controlled variables
|
||||
local terminal = "${config.terminal}"
|
||||
local fileManager = "pcmanfm"
|
||||
-- local menu = "wofi --show drun,run"
|
||||
local menu = "noctalia-shell ipc call launcher toggle"
|
||||
local calculator = "qalculate-gtk"
|
||||
local browser = "firefox"
|
||||
local editor = "emacs"
|
||||
''
|
||||
+ "-- Main config from `hyprland.lua`\n"
|
||||
+ builtins.readFile ./hyprland.lua
|
||||
+ "-- Assign workspaces to monitors\n"
|
||||
+ lib.concatStringsSep "\n" (
|
||||
builtins.concatLists (
|
||||
map (
|
||||
monitor:
|
||||
map (ws: "hl.workspace_rule({ workspace = \"${ws}\", monitor = \"${monitor.name}\"})") monitor.workspaces
|
||||
)
|
||||
config.monitors
|
||||
)
|
||||
);
|
||||
|
||||
systemd = {
|
||||
enable = true;
|
||||
@@ -134,275 +140,10 @@ in {
|
||||
];
|
||||
};
|
||||
|
||||
# package = inputs.hyprland.packages."${pkgs.system}".hyprland; # does only work with nixos-unstable
|
||||
|
||||
# The hyprland package to use (simplifies use of plugins)
|
||||
# package = inputs.hyprland.packages.${pkgs.system}.hyprland;
|
||||
# Whether to enable XWayland
|
||||
xwayland.enable = true;
|
||||
|
||||
# Optional
|
||||
# Whether to enable hyprland-session.target on hyprland startup
|
||||
# systemd.enable = true;
|
||||
# Make PATH available to systemd services
|
||||
# systemd.variables = [ "--all" ];
|
||||
|
||||
plugins = [
|
||||
# inputs.hyprland-plugins.packages.${pkgs.system}.hyprbars # does only work with nixos-unstable
|
||||
# hyprlandPlugins.hyprbars
|
||||
];
|
||||
|
||||
settings = {
|
||||
"$mod" = "SUPER";
|
||||
|
||||
# Environment variables programs like emacs have access to
|
||||
env = "TERMINAL,${config.terminal}";
|
||||
|
||||
# Monitors
|
||||
monitor = ",preferred,auto,1";
|
||||
|
||||
# Autostart
|
||||
exec-once = [
|
||||
(lib.getExe pkgs.firefox)
|
||||
(lib.getExe pkgs.waybar)
|
||||
];
|
||||
|
||||
# Look and Feel
|
||||
general = {
|
||||
gaps_in = 5;
|
||||
gaps_out = 5;
|
||||
|
||||
layout = "dwindle";
|
||||
|
||||
# "col.active_border" = "0xff${palette.base0C} 0xff${palette.base0D} 270deg";
|
||||
# "col.inactive_border" = "0xff${palette.base00}";
|
||||
};
|
||||
|
||||
decoration = {
|
||||
# power saving
|
||||
blur.enabled = false;
|
||||
# power saving
|
||||
shadow.enabled = false;
|
||||
};
|
||||
|
||||
# Dwindle layout
|
||||
dwindle = {
|
||||
pseudotile = true; # Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below
|
||||
preserve_split = true; # You probably want this
|
||||
smart_split = false;
|
||||
smart_resizing = false;
|
||||
force_split = 2;
|
||||
# no_gaps_when_only = 2; # with border
|
||||
};
|
||||
|
||||
# Master layout
|
||||
master = {
|
||||
new_status = "slave";
|
||||
# no_gaps_when_only = 2; # with border
|
||||
mfact = 0.5; # Do not make master bigger
|
||||
};
|
||||
|
||||
animations = {
|
||||
enabled = true;
|
||||
|
||||
animation = [
|
||||
"windows,1,3,default,slide"
|
||||
"fade,1,3,default"
|
||||
"layers,1,3,default,slide"
|
||||
"border,1,3,default"
|
||||
"workspaces,1,3,default,slide"
|
||||
];
|
||||
};
|
||||
|
||||
exec = [
|
||||
"hyprctl setcursor ${config.gtk.cursorTheme.name} ${toString config.gtk.cursorTheme.size}"
|
||||
"correct-workspace-locations"
|
||||
];
|
||||
|
||||
misc = {
|
||||
# disable auto polling for config file changes
|
||||
disable_autoreload = true;
|
||||
|
||||
force_default_wallpaper = 0;
|
||||
|
||||
vfr = true; # power saving
|
||||
};
|
||||
|
||||
render = {
|
||||
# we do, in fact, want direct scanout
|
||||
direct_scanout = true;
|
||||
};
|
||||
|
||||
# Input
|
||||
input = {
|
||||
kb_layout = "de";
|
||||
natural_scroll = false;
|
||||
follow_mouse = 1;
|
||||
};
|
||||
|
||||
# Window rules
|
||||
windowrulev2 = [
|
||||
"suppressevent maximize, class:.*"
|
||||
"workspace 1, class:firefox"
|
||||
"workspace 9, class:nheko"
|
||||
"workspace 9, class:org.telegram.desktop"
|
||||
"workspace 10, class:thunderbird"
|
||||
"float, class:qalculate-gtk"
|
||||
"tile, class:MATLAB, title:MATLAB"
|
||||
];
|
||||
|
||||
# Workspace rules
|
||||
workspace =
|
||||
[
|
||||
# smart gaps (none when only one window in workspace)
|
||||
"w[t1], gapsin:0, gapsout:0, border:1"
|
||||
"w[tg1], gapsin:0, gapsout:0, border:1"
|
||||
"f[1], gapsin:0, gapsout:0, border:1"
|
||||
]
|
||||
# builds like "1, e-DP1" "2, HDMI-1" etc.
|
||||
++ builtins.concatLists (
|
||||
map (monitor: map (ws: "${ws}, monitor:${monitor.name}") monitor.workspaces) config.monitors
|
||||
);
|
||||
|
||||
# Mouse binds
|
||||
bindm = [
|
||||
"$mod, mouse:272, movewindow" # leftclick
|
||||
"$mod, mouse:273, resizewindow" # rightclick
|
||||
];
|
||||
|
||||
# binds
|
||||
bind =
|
||||
[
|
||||
# compositor commands
|
||||
"$mod, Space, focuswindow, floating"
|
||||
"$mod SHIFT, Space, togglefloating,"
|
||||
"$mod, F, fullscreen,"
|
||||
"$mod, X, killactive,"
|
||||
|
||||
"$mod, O, togglesplit," # dwindle
|
||||
|
||||
# opening applications
|
||||
"$mod, D, exec, wofi --show drun,run"
|
||||
"$mod, E, exec, pcmanfm"
|
||||
"$mod, Return, exec, ${config.terminal}"
|
||||
"$mod, B, exec, firefox"
|
||||
"$mod, C, exec, qalculate-gtk"
|
||||
|
||||
# other commands
|
||||
"$mod SHIFT, E, exec, wlogout -p layer-shell"
|
||||
"$mod, Escape, exec, wlogout -p layer-shell"
|
||||
"$mod SHIFT, R, exec, hyprctl reload"
|
||||
"$mod, Print, exec, hyprshot-gui"
|
||||
", Print, exec, hyprshot-gui"
|
||||
"$mod, P, exec, toggle-screen-mirroring; correct-workspace-locations"
|
||||
|
||||
# "$mod SHIFT, E, exec, pkill Hyprland"
|
||||
# "$mod, G, togglegroup,"
|
||||
# "$mod SHIFT, N, changegroupactive, f"
|
||||
# "$mod SHIFT, P, changegroupactive, b"
|
||||
# "$mod ALT, ,resizeactive,"
|
||||
|
||||
# media keys
|
||||
", XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+"
|
||||
", XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-"
|
||||
", XF86AudioPlay, exec, playerctl play-pause"
|
||||
", XF86AudioPause, exec, playerctl pause"
|
||||
", XF86AudioStop, exec, playerctl stop"
|
||||
", XF86AudioNext, exec, playerctl next"
|
||||
", XF86AudioPrev, exec, playerctl previous"
|
||||
", XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"
|
||||
", XF86MonBrightnessUp, exec, brightnessctl --class backlight set 5%+"
|
||||
", XF86MonBrightnessDown, exec, brightnessctl --class backlight set 5%-"
|
||||
|
||||
# move focus
|
||||
"$mod, left, movefocus, l"
|
||||
"$mod, H, movefocus, l"
|
||||
"$mod, right, movefocus, r"
|
||||
"$mod, L, movefocus, r"
|
||||
"$mod, up, movefocus, u"
|
||||
"$mod, K, movefocus, u"
|
||||
"$mod, down, movefocus, d"
|
||||
"$mod, J, movefocus, d"
|
||||
|
||||
# move window
|
||||
"$mod SHIFT, left, movewindow, l"
|
||||
"$mod SHIFT, H, movewindow, l"
|
||||
"$mod SHIFT, right, movewindow, r"
|
||||
"$mod SHIFT, L, movewindow, r"
|
||||
"$mod SHIFT, up, movewindow, u"
|
||||
"$mod SHIFT, K, movewindow, u"
|
||||
"$mod SHIFT, down, movewindow, d"
|
||||
"$mod SHIFT, J, movewindow, d"
|
||||
|
||||
# Switch workspaces with mainMod + [0-9]
|
||||
"$mod, 1, workspace, 1"
|
||||
"$mod, 2, workspace, 2"
|
||||
"$mod, 3, workspace, 3"
|
||||
"$mod, 4, workspace, 4"
|
||||
"$mod, 5, workspace, 5"
|
||||
"$mod, 6, workspace, 6"
|
||||
"$mod, 7, workspace, 7"
|
||||
"$mod, 8, workspace, 8"
|
||||
"$mod, 9, workspace, 9"
|
||||
"$mod, 0, workspace, 10"
|
||||
|
||||
# Move active window to a workspace with mainMod + SHIFT + [0-9]
|
||||
"$mod SHIFT, 1, movetoworkspace, 1"
|
||||
"$mod SHIFT, 2, movetoworkspace, 2"
|
||||
"$mod SHIFT, 3, movetoworkspace, 3"
|
||||
"$mod SHIFT, 4, movetoworkspace, 4"
|
||||
"$mod SHIFT, 5, movetoworkspace, 5"
|
||||
"$mod SHIFT, 6, movetoworkspace, 6"
|
||||
"$mod SHIFT, 7, movetoworkspace, 7"
|
||||
"$mod SHIFT, 8, movetoworkspace, 8"
|
||||
"$mod SHIFT, 9, movetoworkspace, 9"
|
||||
"$mod SHIFT, 0, movetoworkspace, 10"
|
||||
|
||||
# Move active window to a workspace without following with mainMod + CTRL + [0-9]
|
||||
"$mod CTRL, 1, movetoworkspacesilent, 1"
|
||||
"$mod CTRL, 2, movetoworkspacesilent, 2"
|
||||
"$mod CTRL, 3, movetoworkspacesilent, 3"
|
||||
"$mod CTRL, 4, movetoworkspacesilent, 4"
|
||||
"$mod CTRL, 5, movetoworkspacesilent, 5"
|
||||
"$mod CTRL, 6, movetoworkspacesilent, 6"
|
||||
"$mod CTRL, 7, movetoworkspacesilent, 7"
|
||||
"$mod CTRL, 8, movetoworkspacesilent, 8"
|
||||
"$mod CTRL, 9, movetoworkspacesilent, 9"
|
||||
"$mod CTRL, 0, movetoworkspacesilent, 10"
|
||||
]
|
||||
++
|
||||
# Screen lock
|
||||
(
|
||||
let
|
||||
swaylock = lib.getExe config.programs.swaylock.package;
|
||||
in
|
||||
lib.optionals config.programs.swaylock.enable [
|
||||
"$mod,TAB,exec,${swaylock} --daemonize"
|
||||
]
|
||||
)
|
||||
++
|
||||
# Notification manager
|
||||
(
|
||||
let
|
||||
makoctl = lib.getExe' config.services.mako.package "makoctl";
|
||||
in
|
||||
lib.optionals config.services.mako.enable [
|
||||
"$mod,w,exec,${makoctl} dismiss"
|
||||
"$mod SHIFT,W,exec,${makoctl} restore"
|
||||
]
|
||||
);
|
||||
|
||||
# plugin = {
|
||||
# hyprbars = {
|
||||
# bar_text_size = 10;
|
||||
# bar_height = 16;
|
||||
# bar_text_font = "Ubuntu Nerd Font";
|
||||
# bar_precedence_over_border = true;
|
||||
# bar_color = "rgb(${palette.base01})";
|
||||
|
||||
# hyprbars-button = [ "rgb(${palette.base03}), 14, , hyprctl dispatch killactive" ];
|
||||
# };
|
||||
# };
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
@@ -0,0 +1,348 @@
|
||||
------------------
|
||||
---- MONITORS ----
|
||||
------------------
|
||||
|
||||
-- See https://wiki.hypr.land/Configuring/Basics/Monitors/
|
||||
hl.monitor({
|
||||
output = "",
|
||||
mode = "preferred",
|
||||
position = "auto",
|
||||
scale = "auto",
|
||||
mirror = "",
|
||||
})
|
||||
|
||||
-------------------
|
||||
---- AUTOSTART ----
|
||||
-------------------
|
||||
|
||||
-- See https://wiki.hypr.land/Configuring/Basics/Autostart/
|
||||
hl.on("hyprland.start", function()
|
||||
-- hl.exec_cmd("waybar")
|
||||
hl.exec_cmd("noctalia-shell")
|
||||
hl.exec_cmd("firefox")
|
||||
end)
|
||||
hl.on("config.reloaded", function()
|
||||
hl.exec_cmd("correct-workspace-locations")
|
||||
end)
|
||||
|
||||
-------------------------------
|
||||
---- ENVIRONMENT VARIABLES ----
|
||||
-------------------------------
|
||||
|
||||
-- See https://wiki.hypr.land/Configuring/Advanced-and-Cool/Environment-variables/
|
||||
hl.env("TERMINAL", terminal) -- e.g. for emacs
|
||||
|
||||
-----------------------
|
||||
----- PERMISSIONS -----
|
||||
-----------------------
|
||||
|
||||
-- See https://wiki.hypr.land/Configuring/Advanced-and-Cool/Permissions/
|
||||
-- Please note permission changes here require a Hyprland restart and are not applied on-the-fly
|
||||
-- for security reasons
|
||||
|
||||
-- hl.config({
|
||||
-- ecosystem = {
|
||||
-- enforce_permissions = true,
|
||||
-- },
|
||||
-- })
|
||||
|
||||
-- hl.permission("/usr/(bin|local/bin)/grim", "screencopy", "allow")
|
||||
-- hl.permission("/usr/(lib|libexec|lib64)/xdg-desktop-portal-hyprland", "screencopy", "allow")
|
||||
-- hl.permission("/usr/(bin|local/bin)/hyprpm", "plugin", "allow")
|
||||
|
||||
-----------------------
|
||||
---- LOOK AND FEEL ----
|
||||
-----------------------
|
||||
|
||||
-- Refer to https://wiki.hypr.land/Configuring/Basics/Variables/
|
||||
hl.config({
|
||||
general = {
|
||||
gaps_in = 5,
|
||||
gaps_out = 5,
|
||||
|
||||
border_size = 2,
|
||||
|
||||
-- Set to true to enable resizing windows by clicking and dragging on borders and gaps
|
||||
resize_on_border = false,
|
||||
|
||||
-- Please see https://wiki.hypr.land/Configuring/Advanced-and-Cool/Tearing/ before you turn this on
|
||||
allow_tearing = false,
|
||||
|
||||
layout = "dwindle",
|
||||
},
|
||||
|
||||
decoration = {
|
||||
-- power saving
|
||||
shadow = {
|
||||
enabled = false,
|
||||
},
|
||||
|
||||
-- power saving
|
||||
blur = {
|
||||
enabled = false,
|
||||
},
|
||||
},
|
||||
|
||||
animations = {
|
||||
enabled = true,
|
||||
},
|
||||
|
||||
misc = {
|
||||
disable_autoreload = true,
|
||||
},
|
||||
cursor = {
|
||||
no_hardware_cursors = 1, -- disable hardware cursors to fix tearing on kardorf
|
||||
},
|
||||
render = {
|
||||
direct_scanout = 1,
|
||||
},
|
||||
})
|
||||
|
||||
-- Default curves and animations, see https://wiki.hypr.land/Configuring/Advanced-and-Cool/Animations/
|
||||
hl.curve("easeOutQuint", { type = "bezier", points = { { 0.23, 1 }, { 0.32, 1 } } })
|
||||
hl.curve("easeInOutCubic", { type = "bezier", points = { { 0.65, 0.05 }, { 0.36, 1 } } })
|
||||
hl.curve("linear", { type = "bezier", points = { { 0, 0 }, { 1, 1 } } })
|
||||
hl.curve("almostLinear", { type = "bezier", points = { { 0.5, 0.5 }, { 0.75, 1 } } })
|
||||
hl.curve("quick", { type = "bezier", points = { { 0.15, 0 }, { 0.1, 1 } } })
|
||||
|
||||
-- Default springs
|
||||
hl.curve("easy", { type = "spring", mass = 1, stiffness = 71.2633, dampening = 15.8273644 })
|
||||
|
||||
hl.animation({ leaf = "global", enabled = false })
|
||||
hl.animation({ leaf = "border", enabled = true, speed = 5.39, bezier = "easeOutQuint" })
|
||||
hl.animation({ leaf = "windows", enabled = true, speed = 4.79, spring = "easy" })
|
||||
hl.animation({ leaf = "windowsIn", enabled = true, speed = 4.1, spring = "easy", style = "popin 87%" })
|
||||
hl.animation({ leaf = "windowsOut", enabled = true, speed = 1.49, bezier = "linear", style = "popin 87%" })
|
||||
hl.animation({ leaf = "fadeIn", enabled = true, speed = 1.73, bezier = "almostLinear" })
|
||||
hl.animation({ leaf = "fadeOut", enabled = true, speed = 1.46, bezier = "almostLinear" })
|
||||
hl.animation({ leaf = "fade", enabled = true, speed = 3.03, bezier = "quick" })
|
||||
hl.animation({ leaf = "layers", enabled = true, speed = 3.81, bezier = "easeOutQuint" })
|
||||
hl.animation({ leaf = "layersIn", enabled = true, speed = 4, bezier = "easeOutQuint", style = "fade" })
|
||||
hl.animation({ leaf = "layersOut", enabled = true, speed = 1.5, bezier = "linear", style = "fade" })
|
||||
hl.animation({ leaf = "fadeLayersIn", enabled = true, speed = 1.79, bezier = "almostLinear" })
|
||||
hl.animation({ leaf = "fadeLayersOut", enabled = true, speed = 1.39, bezier = "almostLinear" })
|
||||
hl.animation({ leaf = "workspaces", enabled = true, speed = 1.94, bezier = "almostLinear", style = "fade" })
|
||||
hl.animation({ leaf = "workspacesIn", enabled = true, speed = 1.21, bezier = "almostLinear", style = "fade" })
|
||||
hl.animation({ leaf = "workspacesOut", enabled = true, speed = 1.94, bezier = "almostLinear", style = "fade" })
|
||||
hl.animation({ leaf = "zoomFactor", enabled = true, speed = 7, bezier = "quick" })
|
||||
|
||||
-- Ref https://wiki.hypr.land/Configuring/Basics/Workspace-Rules/
|
||||
-- "Smart gaps" / "No gaps when only"
|
||||
hl.workspace_rule({ workspace = "w[tv1]", gaps_out = 0, gaps_in = 0 })
|
||||
hl.workspace_rule({ workspace = "f[1]", gaps_out = 0, gaps_in = 0 })
|
||||
|
||||
-- See https://wiki.hypr.land/Configuring/Layouts/Dwindle-Layout/ for more
|
||||
hl.config({
|
||||
dwindle = {
|
||||
preserve_split = false,
|
||||
smart_split = false,
|
||||
smart_resizing = true,
|
||||
force_split = 2,
|
||||
},
|
||||
})
|
||||
|
||||
----------------
|
||||
---- MISC ----
|
||||
----------------
|
||||
|
||||
hl.config({
|
||||
misc = {
|
||||
force_default_wallpaper = -1, -- Set to 0 or 1 to disable the anime mascot wallpapers
|
||||
disable_hyprland_logo = false, -- If true disables the random hyprland logo / anime girl background. :(
|
||||
},
|
||||
})
|
||||
|
||||
---------------
|
||||
---- INPUT ----
|
||||
---------------
|
||||
|
||||
hl.config({
|
||||
input = {
|
||||
kb_layout = "de",
|
||||
follow_mouse = 1,
|
||||
touchpad = {
|
||||
natural_scroll = false,
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
---------------------
|
||||
---- KEYBINDINGS ----
|
||||
---------------------
|
||||
|
||||
local mainMod = "SUPER"
|
||||
|
||||
-- Example binds, see https://wiki.hypr.land/Configuring/Basics/Binds/ for more
|
||||
hl.bind(mainMod .. " + RETURN", hl.dsp.exec_cmd(terminal))
|
||||
hl.bind(mainMod .. " + E", hl.dsp.exec_cmd(fileManager))
|
||||
hl.bind(mainMod .. " + D", hl.dsp.exec_cmd(menu))
|
||||
hl.bind(mainMod .. " + B", hl.dsp.exec_cmd(browser))
|
||||
hl.bind(mainMod .. " + C", hl.dsp.exec_cmd(calculator))
|
||||
hl.bind(mainMod .. " + V", hl.dsp.exec_cmd(editor))
|
||||
|
||||
hl.bind(mainMod .. " + X", hl.dsp.window.close())
|
||||
hl.bind(mainMod .. " + SHIFT + E", hl.dsp.exec_cmd("wlogout -p layer-shell"))
|
||||
hl.bind(mainMod .. " + ESCAPE", hl.dsp.exec_cmd("wlogout -p layer-shell"))
|
||||
hl.bind(mainMod .. " + SHIFT + R", hl.dsp.exec_cmd("hyprctl reload"))
|
||||
hl.bind(mainMod .. " + PRINT", hl.dsp.exec_cmd("hyprshot-gui"))
|
||||
hl.bind("PRINT", hl.dsp.exec_cmd("hyprshot-gui"))
|
||||
hl.bind(mainMod .. " + P", hl.dsp.exec_cmd("toggle-screen-mirroring; correct-workspace-locations"))
|
||||
hl.bind(mainMod .. " + TAB", hl.dsp.exec_cmd("swaylock --daemonize"))
|
||||
hl.bind(mainMod .. " + W", hl.dsp.exec_cmd("makoctl dismiss"))
|
||||
hl.bind(mainMod .. " + SHIFT + W", hl.dsp.exec_cmd("makoctl restore"))
|
||||
hl.bind(mainMod .. " + R", hl.dsp.submap("resize"))
|
||||
hl.bind(mainMod .. " + O", hl.dsp.submap("open"))
|
||||
|
||||
-- hl.bind(mainMod .. " + P", hl.dsp.window.pseudo())
|
||||
-- hl.bind(mainMod .. " + J", hl.dsp.layout("togglesplit")) -- dwindle only
|
||||
|
||||
hl.bind(mainMod .. " + SHIFT + SPACE", hl.dsp.window.float({ action = "toggle" }))
|
||||
hl.bind(mainMod .. " + SPACE", hl.dsp.focus({ window = "floating" }))
|
||||
hl.bind(mainMod .. " + F", hl.dsp.window.fullscreen({ action = "toggle" }))
|
||||
|
||||
-- Move focus with mainMod + arrow keys
|
||||
hl.bind(mainMod .. " + left", hl.dsp.focus({ direction = "left" }))
|
||||
hl.bind(mainMod .. " + right", hl.dsp.focus({ direction = "right" }))
|
||||
hl.bind(mainMod .. " + up", hl.dsp.focus({ direction = "up" }))
|
||||
hl.bind(mainMod .. " + down", hl.dsp.focus({ direction = "down" }))
|
||||
hl.bind(mainMod .. " + H", hl.dsp.focus({ direction = "left" }))
|
||||
hl.bind(mainMod .. " + L", hl.dsp.focus({ direction = "right" }))
|
||||
hl.bind(mainMod .. " + K", hl.dsp.focus({ direction = "up" }))
|
||||
hl.bind(mainMod .. " + J", hl.dsp.focus({ direction = "down" }))
|
||||
|
||||
-- Move window with mainMod + SHIFT + arrow keys
|
||||
hl.bind(mainMod .. " + SHIFT + left", hl.dsp.window.move({ direction = "left" }))
|
||||
hl.bind(mainMod .. " + SHIFT + right", hl.dsp.window.move({ direction = "right" }))
|
||||
hl.bind(mainMod .. " + SHIFT + up", hl.dsp.window.move({ direction = "up" }))
|
||||
hl.bind(mainMod .. " + SHIFT + down", hl.dsp.window.move({ direction = "down" }))
|
||||
hl.bind(mainMod .. " + SHIFT + H", hl.dsp.window.move({ direction = "left" }))
|
||||
hl.bind(mainMod .. " + SHIFT + L", hl.dsp.window.move({ direction = "right" }))
|
||||
hl.bind(mainMod .. " + SHIFT + K", hl.dsp.window.move({ direction = "up" }))
|
||||
hl.bind(mainMod .. " + SHIFT + J", hl.dsp.window.move({ direction = "down" }))
|
||||
|
||||
for i = 1, 10 do
|
||||
local key = i % 10 -- 10 maps to key 0
|
||||
-- Switch workspaces
|
||||
hl.bind(mainMod .. " + " .. key, hl.dsp.focus({ workspace = i }))
|
||||
-- Move active window to a workspace
|
||||
hl.bind(mainMod .. " + SHIFT + " .. key, hl.dsp.window.move({ workspace = i }))
|
||||
-- Move active window to a workspace without following
|
||||
hl.bind(mainMod .. " + CTRL + " .. key, hl.dsp.window.move({ workspace = i }))
|
||||
end
|
||||
|
||||
-- Example special workspace (scratchpad)
|
||||
-- hl.bind(mainMod .. " + S", hl.dsp.workspace.toggle_special("magic"))
|
||||
-- hl.bind(mainMod .. " + SHIFT + S", hl.dsp.window.move({ workspace = "special:magic" }))
|
||||
|
||||
-- Scroll through existing workspaces with mainMod + scroll
|
||||
hl.bind(mainMod .. " + mouse_down", hl.dsp.focus({ workspace = "e+1" }))
|
||||
hl.bind(mainMod .. " + mouse_up", hl.dsp.focus({ workspace = "e-1" }))
|
||||
|
||||
-- Move/resize windows with mainMod + LMB/RMB and dragging
|
||||
hl.bind(mainMod .. " + mouse:272", hl.dsp.window.drag(), { mouse = true }) -- leftclick
|
||||
hl.bind(mainMod .. " + mouse:273", hl.dsp.window.resize(), { mouse = true }) -- rightclick
|
||||
|
||||
-- Laptop multimedia keys for volume and LCD brightness
|
||||
hl.bind(
|
||||
"XF86AudioRaiseVolume",
|
||||
hl.dsp.exec_cmd("wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+"),
|
||||
{ locked = true, repeating = true }
|
||||
)
|
||||
hl.bind(
|
||||
"XF86AudioLowerVolume",
|
||||
hl.dsp.exec_cmd("wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-"),
|
||||
{ locked = true, repeating = true }
|
||||
)
|
||||
hl.bind(
|
||||
"XF86AudioMute",
|
||||
hl.dsp.exec_cmd("wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"),
|
||||
{ locked = true, repeating = true }
|
||||
)
|
||||
hl.bind(
|
||||
"XF86AudioMicMute",
|
||||
hl.dsp.exec_cmd("wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"),
|
||||
{ locked = true, repeating = true }
|
||||
)
|
||||
hl.bind("XF86MonBrightnessUp", hl.dsp.exec_cmd("brightnessctl -e4 -n2 set 5%+"), { locked = true, repeating = true })
|
||||
hl.bind("XF86MonBrightnessDown", hl.dsp.exec_cmd("brightnessctl -e4 -n2 set 5%-"), { locked = true, repeating = true })
|
||||
|
||||
-- Requires playerctl
|
||||
hl.bind("XF86AudioNext", hl.dsp.exec_cmd("playerctl next"), { locked = true })
|
||||
hl.bind("XF86AudioPause", hl.dsp.exec_cmd("playerctl play-pause"), { locked = true })
|
||||
hl.bind("XF86AudioPlay", hl.dsp.exec_cmd("playerctl play-pause"), { locked = true })
|
||||
hl.bind("XF86AudioPrev", hl.dsp.exec_cmd("playerctl previous"), { locked = true })
|
||||
|
||||
hl.define_submap("resize", function()
|
||||
-- Set repeating binds for resizing the active window.
|
||||
hl.bind("right", hl.dsp.window.resize({ x = 20, y = 0, relative = true }), { repeating = true })
|
||||
hl.bind("left", hl.dsp.window.resize({ x = -20, y = 0, relative = true }), { repeating = true })
|
||||
hl.bind("up", hl.dsp.window.resize({ x = 0, y = 20, relative = true }), { repeating = true })
|
||||
hl.bind("down", hl.dsp.window.resize({ x = 0, y = -20, relative = true }), { repeating = true })
|
||||
hl.bind("H", hl.dsp.window.resize({ x = 20, y = 0, relative = true }), { repeating = true })
|
||||
hl.bind("L", hl.dsp.window.resize({ x = -20, y = 0, relative = true }), { repeating = true })
|
||||
hl.bind("K", hl.dsp.window.resize({ x = 0, y = 20, relative = true }), { repeating = true })
|
||||
hl.bind("J", hl.dsp.window.resize({ x = 0, y = -20, relative = true }), { repeating = true })
|
||||
|
||||
-- Use `reset` to go back to the global submap
|
||||
hl.bind("escape", hl.dsp.submap("reset"))
|
||||
end)
|
||||
|
||||
hl.define_submap("open", "reset", function()
|
||||
hl.bind("E", hl.dsp.exec_cmd("emacs"))
|
||||
hl.bind("M", hl.dsp.exec_cmd("open-messaging"))
|
||||
hl.bind("B", hl.dsp.exec_cmd("firefox"))
|
||||
|
||||
-- Use `reset` to go back to the global submap
|
||||
hl.bind("escape", hl.dsp.submap("reset"))
|
||||
end)
|
||||
|
||||
--------------------------------
|
||||
---- WINDOWS AND WORKSPACES ----
|
||||
--------------------------------
|
||||
|
||||
-- See https://wiki.hypr.land/Configuring/Basics/Window-Rules/
|
||||
-- and https://wiki.hypr.land/Configuring/Basics/Workspace-Rules/
|
||||
|
||||
-- Default workspaces for certain windows
|
||||
hl.window_rule({ match = { class = "firefox" }, workspace = "1" })
|
||||
hl.window_rule({ match = { class = "Zotero" }, workspace = "8" })
|
||||
hl.window_rule({ match = { class = "nheko" }, workspace = "9" })
|
||||
hl.window_rule({ match = { class = "element" }, workspace = "9" })
|
||||
hl.window_rule({ match = { class = "discord" }, workspace = "9" })
|
||||
hl.window_rule({ match = { class = "org.telegram.desktop" }, workspace = "9" })
|
||||
hl.window_rule({ match = { class = "thunderbird" }, workspace = "10" })
|
||||
|
||||
-- Float calculator
|
||||
hl.window_rule({ match = { class = "qalculate-gtk" }, float = true })
|
||||
|
||||
-- Example window rules that are useful
|
||||
|
||||
hl.window_rule({
|
||||
-- Ignore maximize requests from all apps.
|
||||
name = "suppress-maximize-events",
|
||||
match = { class = ".*" },
|
||||
|
||||
suppress_event = "maximize",
|
||||
})
|
||||
|
||||
hl.window_rule({
|
||||
-- Fix some dragging issues with XWayland
|
||||
name = "fix-xwayland-drags",
|
||||
match = {
|
||||
class = "^$",
|
||||
title = "^$",
|
||||
xwayland = true,
|
||||
float = true,
|
||||
fullscreen = false,
|
||||
pin = false,
|
||||
},
|
||||
|
||||
no_focus = true,
|
||||
})
|
||||
|
||||
-- Disable animations for selection, fixes screenshots
|
||||
hl.layer_rule({
|
||||
name = "no-anim-overlay",
|
||||
match = { namespace = "^my-overlay$" }, -- selection
|
||||
no_anim = true,
|
||||
})
|
||||
@@ -1,16 +1,4 @@
|
||||
{
|
||||
options,
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
inputs,
|
||||
...
|
||||
}: let
|
||||
inherit
|
||||
(inputs.nix-colors.colorschemes.${builtins.toString config.colorscheme.name})
|
||||
palette
|
||||
;
|
||||
in {
|
||||
programs.hyprlock.enable = true;
|
||||
programs.hyprlock.settings = {
|
||||
general = {
|
||||
@@ -19,15 +7,6 @@ in {
|
||||
ignore_empty_input = true;
|
||||
};
|
||||
|
||||
background = [
|
||||
{
|
||||
color = "#${palette.base00}";
|
||||
# path = "screenshot";
|
||||
# blur_passes = 3;
|
||||
# blur_size = 8;
|
||||
}
|
||||
];
|
||||
|
||||
input-field = [
|
||||
{
|
||||
size = "200, 50";
|
||||
@@ -35,9 +14,6 @@ in {
|
||||
monitor = "";
|
||||
dots_center = true;
|
||||
fade_on_empty = false;
|
||||
font_color = "#${palette.base0B}";
|
||||
inner_color = "#${palette.base01}";
|
||||
outer_color = "#${palette.base05}";
|
||||
outline_thickness = 5;
|
||||
placeholder_text = "Password...";
|
||||
}
|
||||
|
||||
@@ -1,30 +1,10 @@
|
||||
{
|
||||
options,
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
inputs,
|
||||
...
|
||||
}: let
|
||||
inherit
|
||||
(inputs.nix-colors.colorschemes.${builtins.toString config.colorscheme.name})
|
||||
palette
|
||||
;
|
||||
in {
|
||||
{pkgs, ...}: {
|
||||
home.packages = with pkgs; [libnotify];
|
||||
|
||||
services.mako = {
|
||||
enable = true;
|
||||
settings = {
|
||||
defaultTimeout = "5000"; # milliseconds, can be overwritten by notification sender
|
||||
backgroundColor = "#${palette.base00}";
|
||||
textColor = "#${palette.base05}";
|
||||
borderColor = "#${palette.base0D}";
|
||||
progressColor = "over #${palette.base02}";
|
||||
extraConfig = ''
|
||||
[urgency=high]
|
||||
border-color=#${palette.base09}
|
||||
# '';
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
@@ -0,0 +1,646 @@
|
||||
{
|
||||
"settingsVersion": 59,
|
||||
"bar": {
|
||||
"barType": "simple",
|
||||
"position": "bottom",
|
||||
"monitors": [],
|
||||
"density": "default",
|
||||
"showOutline": false,
|
||||
"showCapsule": false,
|
||||
"capsuleOpacity": 1,
|
||||
"capsuleColorKey": "none",
|
||||
"widgetSpacing": 6,
|
||||
"contentPadding": 2,
|
||||
"fontScale": 1,
|
||||
"enableExclusionZoneInset": false,
|
||||
"backgroundOpacity": 1,
|
||||
"useSeparateOpacity": false,
|
||||
"marginVertical": 4,
|
||||
"marginHorizontal": 4,
|
||||
"frameThickness": 8,
|
||||
"frameRadius": 12,
|
||||
"outerCorners": false,
|
||||
"hideOnOverview": false,
|
||||
"displayMode": "always_visible",
|
||||
"autoHideDelay": 500,
|
||||
"autoShowDelay": 150,
|
||||
"showOnWorkspaceSwitch": true,
|
||||
"widgets": {
|
||||
"left": [
|
||||
{
|
||||
"characterCount": 2,
|
||||
"colorizeIcons": false,
|
||||
"emptyColor": "secondary",
|
||||
"enableScrollWheel": true,
|
||||
"focusedColor": "primary",
|
||||
"followFocusedScreen": false,
|
||||
"fontWeight": "bold",
|
||||
"groupedBorderOpacity": 1,
|
||||
"hideUnoccupied": false,
|
||||
"iconScale": 0.8,
|
||||
"id": "Workspace",
|
||||
"labelMode": "index",
|
||||
"occupiedColor": "secondary",
|
||||
"pillSize": 0.8,
|
||||
"showApplications": false,
|
||||
"showApplicationsHover": false,
|
||||
"showBadge": true,
|
||||
"showLabelsOnlyWhenOccupied": false,
|
||||
"unfocusedIconsOpacity": 1
|
||||
}
|
||||
],
|
||||
"center": [],
|
||||
"right": [
|
||||
{
|
||||
"compactMode": false,
|
||||
"diskPath": "/",
|
||||
"iconColor": "none",
|
||||
"id": "SystemMonitor",
|
||||
"showCpuCores": false,
|
||||
"showCpuFreq": false,
|
||||
"showCpuTemp": false,
|
||||
"showCpuUsage": true,
|
||||
"showDiskAvailable": true,
|
||||
"showDiskUsage": true,
|
||||
"showDiskUsageAsPercent": false,
|
||||
"showGpuTemp": false,
|
||||
"showLoadAverage": false,
|
||||
"showMemoryAsPercent": true,
|
||||
"showMemoryUsage": true,
|
||||
"showNetworkStats": false,
|
||||
"showSwapUsage": false,
|
||||
"textColor": "none",
|
||||
"useMonospaceFont": true,
|
||||
"usePadding": false
|
||||
},
|
||||
{
|
||||
"compactMode": false,
|
||||
"diskPath": "/",
|
||||
"iconColor": "none",
|
||||
"id": "SystemMonitor",
|
||||
"showCpuCores": false,
|
||||
"showCpuFreq": false,
|
||||
"showCpuTemp": false,
|
||||
"showCpuUsage": false,
|
||||
"showDiskAvailable": false,
|
||||
"showDiskUsage": false,
|
||||
"showDiskUsageAsPercent": false,
|
||||
"showGpuTemp": false,
|
||||
"showLoadAverage": false,
|
||||
"showMemoryAsPercent": false,
|
||||
"showMemoryUsage": false,
|
||||
"showNetworkStats": true,
|
||||
"showSwapUsage": false,
|
||||
"textColor": "none",
|
||||
"useMonospaceFont": true,
|
||||
"usePadding": false
|
||||
},
|
||||
{
|
||||
"displayMode": "alwaysShow",
|
||||
"iconColor": "none",
|
||||
"id": "Volume",
|
||||
"middleClickCommand": "pwvucontrol || pavucontrol",
|
||||
"textColor": "none"
|
||||
},
|
||||
{
|
||||
"deviceNativePath": "__default__",
|
||||
"displayMode": "graphic-clean",
|
||||
"hideIfIdle": false,
|
||||
"hideIfNotDetected": true,
|
||||
"id": "Battery",
|
||||
"showNoctaliaPerformance": false,
|
||||
"showPowerProfiles": false
|
||||
},
|
||||
{
|
||||
"clockColor": "none",
|
||||
"customFont": "",
|
||||
"formatHorizontal": "ddd, dd.MM. HH:mm:ss",
|
||||
"formatVertical": "HH mm - dd MM",
|
||||
"id": "Clock",
|
||||
"tooltipFormat": "HH:mm ddd, MMM dd",
|
||||
"useCustomFont": false
|
||||
},
|
||||
{
|
||||
"blacklist": [],
|
||||
"chevronColor": "none",
|
||||
"colorizeIcons": false,
|
||||
"drawerEnabled": false,
|
||||
"hidePassive": false,
|
||||
"id": "Tray",
|
||||
"pinned": []
|
||||
}
|
||||
]
|
||||
},
|
||||
"mouseWheelAction": "workspace",
|
||||
"reverseScroll": false,
|
||||
"mouseWheelWrap": true,
|
||||
"middleClickAction": "launcherPanel",
|
||||
"middleClickFollowMouse": false,
|
||||
"middleClickCommand": "",
|
||||
"rightClickAction": "controlCenter",
|
||||
"rightClickFollowMouse": true,
|
||||
"rightClickCommand": "",
|
||||
"screenOverrides": []
|
||||
},
|
||||
"general": {
|
||||
"avatarImage": "/home/julian/.face",
|
||||
"dimmerOpacity": 0.2,
|
||||
"showScreenCorners": false,
|
||||
"forceBlackScreenCorners": false,
|
||||
"scaleRatio": 1,
|
||||
"radiusRatio": 1,
|
||||
"iRadiusRatio": 1,
|
||||
"boxRadiusRatio": 1,
|
||||
"screenRadiusRatio": 1,
|
||||
"animationSpeed": 1,
|
||||
"animationDisabled": false,
|
||||
"compactLockScreen": false,
|
||||
"lockScreenAnimations": false,
|
||||
"lockOnSuspend": true,
|
||||
"showSessionButtonsOnLockScreen": true,
|
||||
"showHibernateOnLockScreen": false,
|
||||
"enableLockScreenMediaControls": false,
|
||||
"enableShadows": true,
|
||||
"enableBlurBehind": true,
|
||||
"shadowDirection": "bottom_right",
|
||||
"shadowOffsetX": 2,
|
||||
"shadowOffsetY": 3,
|
||||
"language": "",
|
||||
"allowPanelsOnScreenWithoutBar": true,
|
||||
"showChangelogOnStartup": true,
|
||||
"telemetryEnabled": false,
|
||||
"enableLockScreenCountdown": false,
|
||||
"lockScreenCountdownDuration": 10000,
|
||||
"autoStartAuth": false,
|
||||
"allowPasswordWithFprintd": false,
|
||||
"clockStyle": "custom",
|
||||
"clockFormat": "hh\\nmm",
|
||||
"passwordChars": false,
|
||||
"lockScreenMonitors": [],
|
||||
"lockScreenBlur": 0,
|
||||
"lockScreenTint": 0,
|
||||
"keybinds": {
|
||||
"keyUp": [
|
||||
"Up"
|
||||
],
|
||||
"keyDown": [
|
||||
"Down"
|
||||
],
|
||||
"keyLeft": [
|
||||
"Left"
|
||||
],
|
||||
"keyRight": [
|
||||
"Right"
|
||||
],
|
||||
"keyEnter": [
|
||||
"Return",
|
||||
"Enter"
|
||||
],
|
||||
"keyEscape": [
|
||||
"Esc"
|
||||
],
|
||||
"keyRemove": [
|
||||
"Del"
|
||||
]
|
||||
},
|
||||
"reverseScroll": false,
|
||||
"smoothScrollEnabled": true
|
||||
},
|
||||
"ui": {
|
||||
"fontDefault": "DejaVu Sans",
|
||||
"fontFixed": "DejaVu Sans Mono",
|
||||
"fontDefaultScale": 1,
|
||||
"fontFixedScale": 1,
|
||||
"tooltipsEnabled": true,
|
||||
"scrollbarAlwaysVisible": true,
|
||||
"boxBorderEnabled": false,
|
||||
"panelBackgroundOpacity": 1,
|
||||
"translucentWidgets": false,
|
||||
"panelsAttachedToBar": true,
|
||||
"settingsPanelMode": "attached",
|
||||
"settingsPanelSideBarCardStyle": false
|
||||
},
|
||||
"location": {
|
||||
"name": "",
|
||||
"weatherEnabled": true,
|
||||
"weatherShowEffects": true,
|
||||
"weatherTaliaMascotAlways": false,
|
||||
"useFahrenheit": false,
|
||||
"use12hourFormat": false,
|
||||
"showWeekNumberInCalendar": false,
|
||||
"showCalendarEvents": true,
|
||||
"showCalendarWeather": true,
|
||||
"analogClockInCalendar": false,
|
||||
"firstDayOfWeek": -1,
|
||||
"hideWeatherTimezone": false,
|
||||
"hideWeatherCityName": false,
|
||||
"autoLocate": false
|
||||
},
|
||||
"calendar": {
|
||||
"cards": [
|
||||
{
|
||||
"enabled": true,
|
||||
"id": "calendar-header-card"
|
||||
},
|
||||
{
|
||||
"enabled": true,
|
||||
"id": "calendar-month-card"
|
||||
},
|
||||
{
|
||||
"enabled": true,
|
||||
"id": "weather-card"
|
||||
}
|
||||
]
|
||||
},
|
||||
"wallpaper": {
|
||||
"enabled": false,
|
||||
"overviewEnabled": false,
|
||||
"directory": "/home/julian/Pictures/Wallpapers",
|
||||
"monitorDirectories": [],
|
||||
"enableMultiMonitorDirectories": false,
|
||||
"showHiddenFiles": false,
|
||||
"viewMode": "single",
|
||||
"setWallpaperOnAllMonitors": true,
|
||||
"linkLightAndDarkWallpapers": true,
|
||||
"fillMode": "crop",
|
||||
"fillColor": "#000000",
|
||||
"useSolidColor": false,
|
||||
"solidColor": "#1a1a2e",
|
||||
"automationEnabled": false,
|
||||
"wallpaperChangeMode": "random",
|
||||
"randomIntervalSec": 300,
|
||||
"transitionDuration": 1500,
|
||||
"transitionType": [
|
||||
"fade",
|
||||
"disc",
|
||||
"stripes",
|
||||
"wipe",
|
||||
"pixelate",
|
||||
"honeycomb"
|
||||
],
|
||||
"skipStartupTransition": false,
|
||||
"transitionEdgeSmoothness": 0.05,
|
||||
"panelPosition": "follow_bar",
|
||||
"hideWallpaperFilenames": false,
|
||||
"useOriginalImages": false,
|
||||
"overviewBlur": 0.4,
|
||||
"overviewTint": 0.6,
|
||||
"useWallhaven": false,
|
||||
"wallhavenQuery": "",
|
||||
"wallhavenSorting": "relevance",
|
||||
"wallhavenOrder": "desc",
|
||||
"wallhavenCategories": "111",
|
||||
"wallhavenPurity": "100",
|
||||
"wallhavenRatios": "",
|
||||
"wallhavenApiKey": "",
|
||||
"wallhavenResolutionMode": "atleast",
|
||||
"wallhavenResolutionWidth": "",
|
||||
"wallhavenResolutionHeight": "",
|
||||
"sortOrder": "name",
|
||||
"favorites": []
|
||||
},
|
||||
"appLauncher": {
|
||||
"enableClipboardHistory": false,
|
||||
"autoPasteClipboard": false,
|
||||
"enableClipPreview": true,
|
||||
"clipboardWrapText": true,
|
||||
"enableClipboardSmartIcons": true,
|
||||
"enableClipboardChips": true,
|
||||
"clipboardWatchTextCommand": "wl-paste --type text --watch cliphist store",
|
||||
"clipboardWatchImageCommand": "wl-paste --type image --watch cliphist store",
|
||||
"position": "center",
|
||||
"pinnedApps": [],
|
||||
"sortByMostUsed": true,
|
||||
"terminalCommand": "alacritty -e",
|
||||
"customLaunchPrefixEnabled": false,
|
||||
"customLaunchPrefix": "",
|
||||
"viewMode": "list",
|
||||
"showCategories": true,
|
||||
"iconMode": "tabler",
|
||||
"showIconBackground": false,
|
||||
"enableSettingsSearch": true,
|
||||
"enableWindowsSearch": true,
|
||||
"enableSessionSearch": true,
|
||||
"ignoreMouseInput": false,
|
||||
"screenshotAnnotationTool": "",
|
||||
"overviewLayer": false,
|
||||
"density": "default"
|
||||
},
|
||||
"controlCenter": {
|
||||
"position": "close_to_bar_button",
|
||||
"diskPath": "/",
|
||||
"shortcuts": {
|
||||
"left": [
|
||||
{
|
||||
"id": "Network"
|
||||
},
|
||||
{
|
||||
"id": "Bluetooth"
|
||||
},
|
||||
{
|
||||
"id": "WallpaperSelector"
|
||||
},
|
||||
{
|
||||
"id": "NoctaliaPerformance"
|
||||
}
|
||||
],
|
||||
"right": [
|
||||
{
|
||||
"id": "Notifications"
|
||||
},
|
||||
{
|
||||
"id": "PowerProfile"
|
||||
},
|
||||
{
|
||||
"id": "KeepAwake"
|
||||
},
|
||||
{
|
||||
"id": "NightLight"
|
||||
}
|
||||
]
|
||||
},
|
||||
"cards": [
|
||||
{
|
||||
"enabled": true,
|
||||
"id": "profile-card"
|
||||
},
|
||||
{
|
||||
"enabled": true,
|
||||
"id": "shortcuts-card"
|
||||
},
|
||||
{
|
||||
"enabled": true,
|
||||
"id": "audio-card"
|
||||
},
|
||||
{
|
||||
"enabled": false,
|
||||
"id": "brightness-card"
|
||||
},
|
||||
{
|
||||
"enabled": true,
|
||||
"id": "weather-card"
|
||||
},
|
||||
{
|
||||
"enabled": false,
|
||||
"id": "media-sysmon-card"
|
||||
}
|
||||
]
|
||||
},
|
||||
"systemMonitor": {
|
||||
"cpuWarningThreshold": 80,
|
||||
"cpuCriticalThreshold": 90,
|
||||
"tempWarningThreshold": 80,
|
||||
"tempCriticalThreshold": 90,
|
||||
"gpuWarningThreshold": 80,
|
||||
"gpuCriticalThreshold": 90,
|
||||
"memWarningThreshold": 80,
|
||||
"memCriticalThreshold": 90,
|
||||
"swapWarningThreshold": 80,
|
||||
"swapCriticalThreshold": 90,
|
||||
"diskWarningThreshold": 80,
|
||||
"diskCriticalThreshold": 90,
|
||||
"diskAvailWarningThreshold": 20,
|
||||
"diskAvailCriticalThreshold": 10,
|
||||
"batteryWarningThreshold": 20,
|
||||
"batteryCriticalThreshold": 5,
|
||||
"enableDgpuMonitoring": false,
|
||||
"useCustomColors": false,
|
||||
"warningColor": "",
|
||||
"criticalColor": "",
|
||||
"externalMonitor": "resources || missioncenter || jdsystemmonitor || corestats || system-monitoring-center || gnome-system-monitor || plasma-systemmonitor || mate-system-monitor || ukui-system-monitor || deepin-system-monitor || pantheon-system-monitor"
|
||||
},
|
||||
"noctaliaPerformance": {
|
||||
"disableWallpaper": true,
|
||||
"disableDesktopWidgets": true
|
||||
},
|
||||
"dock": {
|
||||
"enabled": false,
|
||||
"position": "bottom",
|
||||
"displayMode": "auto_hide",
|
||||
"dockType": "floating",
|
||||
"backgroundOpacity": 1,
|
||||
"floatingRatio": 1,
|
||||
"size": 1,
|
||||
"onlySameOutput": true,
|
||||
"monitors": [],
|
||||
"pinnedApps": [],
|
||||
"colorizeIcons": false,
|
||||
"showLauncherIcon": false,
|
||||
"launcherPosition": "end",
|
||||
"launcherUseDistroLogo": false,
|
||||
"launcherIcon": "",
|
||||
"launcherIconColor": "none",
|
||||
"pinnedStatic": false,
|
||||
"inactiveIndicators": false,
|
||||
"groupApps": false,
|
||||
"groupContextMenuMode": "extended",
|
||||
"groupClickAction": "cycle",
|
||||
"groupIndicatorStyle": "dots",
|
||||
"deadOpacity": 0.6,
|
||||
"animationSpeed": 1,
|
||||
"sitOnFrame": false,
|
||||
"showDockIndicator": false,
|
||||
"indicatorThickness": 3,
|
||||
"indicatorColor": "primary",
|
||||
"indicatorOpacity": 0.6
|
||||
},
|
||||
"network": {
|
||||
"bluetoothRssiPollingEnabled": false,
|
||||
"bluetoothRssiPollIntervalMs": 60000,
|
||||
"networkPanelView": "wifi",
|
||||
"wifiDetailsViewMode": "grid",
|
||||
"bluetoothDetailsViewMode": "grid",
|
||||
"bluetoothHideUnnamedDevices": false,
|
||||
"disableDiscoverability": false,
|
||||
"bluetoothAutoConnect": true
|
||||
},
|
||||
"sessionMenu": {
|
||||
"enableCountdown": false,
|
||||
"countdownDuration": 10000,
|
||||
"position": "center",
|
||||
"showHeader": true,
|
||||
"showKeybinds": true,
|
||||
"largeButtonsStyle": false,
|
||||
"largeButtonsLayout": "single-row",
|
||||
"powerOptions": [
|
||||
{
|
||||
"action": "lock",
|
||||
"command": "",
|
||||
"countdownEnabled": true,
|
||||
"enabled": true,
|
||||
"keybind": "1"
|
||||
},
|
||||
{
|
||||
"action": "suspend",
|
||||
"command": "",
|
||||
"countdownEnabled": true,
|
||||
"enabled": false,
|
||||
"keybind": ""
|
||||
},
|
||||
{
|
||||
"action": "hibernate",
|
||||
"command": "",
|
||||
"countdownEnabled": true,
|
||||
"enabled": false,
|
||||
"keybind": ""
|
||||
},
|
||||
{
|
||||
"action": "reboot",
|
||||
"command": "",
|
||||
"countdownEnabled": true,
|
||||
"enabled": true,
|
||||
"keybind": "2"
|
||||
},
|
||||
{
|
||||
"action": "logout",
|
||||
"command": "",
|
||||
"countdownEnabled": true,
|
||||
"enabled": true,
|
||||
"keybind": "3"
|
||||
},
|
||||
{
|
||||
"action": "shutdown",
|
||||
"command": "",
|
||||
"countdownEnabled": true,
|
||||
"enabled": true,
|
||||
"keybind": "4"
|
||||
},
|
||||
{
|
||||
"action": "rebootToUefi",
|
||||
"command": "",
|
||||
"countdownEnabled": true,
|
||||
"enabled": false,
|
||||
"keybind": ""
|
||||
},
|
||||
{
|
||||
"action": "userspaceReboot",
|
||||
"command": "",
|
||||
"countdownEnabled": true,
|
||||
"enabled": false,
|
||||
"keybind": ""
|
||||
}
|
||||
]
|
||||
},
|
||||
"notifications": {
|
||||
"enabled": false,
|
||||
"enableMarkdown": false,
|
||||
"density": "default",
|
||||
"monitors": [],
|
||||
"location": "top_right",
|
||||
"overlayLayer": true,
|
||||
"backgroundOpacity": 1,
|
||||
"respectExpireTimeout": false,
|
||||
"lowUrgencyDuration": 3,
|
||||
"normalUrgencyDuration": 8,
|
||||
"criticalUrgencyDuration": 15,
|
||||
"clearDismissed": true,
|
||||
"saveToHistory": {
|
||||
"low": true,
|
||||
"normal": true,
|
||||
"critical": true
|
||||
},
|
||||
"sounds": {
|
||||
"enabled": false,
|
||||
"volume": 0.5,
|
||||
"separateSounds": false,
|
||||
"criticalSoundFile": "",
|
||||
"normalSoundFile": "",
|
||||
"lowSoundFile": "",
|
||||
"excludedApps": "discord,firefox,chrome,chromium,edge"
|
||||
},
|
||||
"enableMediaToast": false,
|
||||
"enableKeyboardLayoutToast": true,
|
||||
"enableBatteryToast": true
|
||||
},
|
||||
"osd": {
|
||||
"enabled": true,
|
||||
"location": "top_right",
|
||||
"autoHideMs": 2000,
|
||||
"overlayLayer": true,
|
||||
"backgroundOpacity": 1,
|
||||
"enabledTypes": [
|
||||
0,
|
||||
1,
|
||||
2
|
||||
],
|
||||
"monitors": []
|
||||
},
|
||||
"audio": {
|
||||
"volumeStep": 5,
|
||||
"volumeOverdrive": false,
|
||||
"spectrumFrameRate": 30,
|
||||
"visualizerType": "linear",
|
||||
"spectrumMirrored": true,
|
||||
"mprisBlacklist": [],
|
||||
"preferredPlayer": "",
|
||||
"volumeFeedback": false,
|
||||
"volumeFeedbackSoundFile": ""
|
||||
},
|
||||
"brightness": {
|
||||
"brightnessStep": 5,
|
||||
"enforceMinimum": true,
|
||||
"enableDdcSupport": false,
|
||||
"backlightDeviceMappings": []
|
||||
},
|
||||
"colorSchemes": {
|
||||
"useWallpaperColors": false,
|
||||
"predefinedScheme": "Noctalia (default)",
|
||||
"darkMode": true,
|
||||
"schedulingMode": "off",
|
||||
"manualSunrise": "06:30",
|
||||
"manualSunset": "18:30",
|
||||
"generationMethod": "tonal-spot",
|
||||
"monitorForColors": "",
|
||||
"syncGsettings": true
|
||||
},
|
||||
"templates": {
|
||||
"activeTemplates": [],
|
||||
"enableUserTheming": false
|
||||
},
|
||||
"nightLight": {
|
||||
"enabled": true,
|
||||
"forced": false,
|
||||
"autoSchedule": true,
|
||||
"nightTemp": "4000",
|
||||
"dayTemp": "6500",
|
||||
"manualSunrise": "06:30",
|
||||
"manualSunset": "18:30"
|
||||
},
|
||||
"hooks": {
|
||||
"enabled": false,
|
||||
"wallpaperChange": "",
|
||||
"darkModeChange": "",
|
||||
"screenLock": "",
|
||||
"screenUnlock": "",
|
||||
"performanceModeEnabled": "",
|
||||
"performanceModeDisabled": "",
|
||||
"startup": "",
|
||||
"session": "",
|
||||
"colorGeneration": ""
|
||||
},
|
||||
"plugins": {
|
||||
"autoUpdate": false,
|
||||
"notifyUpdates": true
|
||||
},
|
||||
"idle": {
|
||||
"enabled": false,
|
||||
"screenOffTimeout": 600,
|
||||
"lockTimeout": 660,
|
||||
"suspendTimeout": 1800,
|
||||
"fadeDuration": 5,
|
||||
"screenOffCommand": "",
|
||||
"lockCommand": "",
|
||||
"suspendCommand": "",
|
||||
"resumeScreenOffCommand": "",
|
||||
"resumeLockCommand": "",
|
||||
"resumeSuspendCommand": "",
|
||||
"customCommands": "[]"
|
||||
},
|
||||
"desktopWidgets": {
|
||||
"enabled": false,
|
||||
"overviewEnabled": true,
|
||||
"gridSnap": false,
|
||||
"gridSnapScale": false,
|
||||
"monitorWidgets": []
|
||||
}
|
||||
}
|
||||
@@ -31,7 +31,7 @@
|
||||
in {
|
||||
services.swayidle = {
|
||||
enable = true;
|
||||
systemdTarget = "graphical-session.target";
|
||||
systemdTargets = ["graphical-session.target"];
|
||||
timeouts =
|
||||
# Lock screen
|
||||
[
|
||||
|
||||
@@ -1,14 +1,7 @@
|
||||
{
|
||||
config,
|
||||
pkgs,
|
||||
...
|
||||
}: let
|
||||
inherit (config.colorscheme) colors;
|
||||
in {
|
||||
programs.swaylock = {
|
||||
enable = true;
|
||||
settings = {
|
||||
color = "000000";
|
||||
ignore-empty-password = true;
|
||||
indicator-idle-visible = false;
|
||||
};
|
||||
|
||||
@@ -2,66 +2,18 @@
|
||||
|
||||
# A hyprland script for a laptop-external-monitor setup, toggling between which is in use
|
||||
|
||||
# Launch at startup to make hyprland disable the internal monitor if an external monitor is detected and enabled
|
||||
# Additionally it's called with a keybind to switch between a laptop monitor and an external display
|
||||
# Ideally the conditional monitor behaviour was instead done directly in hyprland.conf, but I'm not sure whether that's possible
|
||||
#
|
||||
# Relevant info:
|
||||
# - hyprctl monitors: identifies currently enabled monitors
|
||||
# - hyprctl monitors all: identifies ALL connected monitors - including those not in use
|
||||
#
|
||||
# Suggested use:
|
||||
# Add this line somewhere after the regular monitor configuration in hyprland.conf:
|
||||
# exec = /path/to/hyprland-monitors-toggle.sh
|
||||
# Add a keybind to run this script on demand:
|
||||
# bind =,SomeKeyHere, exec, /path/to/hyprland-monitors-toggle.sh
|
||||
|
||||
#move_all_workspaces_to_monitor() {
|
||||
# TARGET_MONITOR="$1"
|
||||
|
||||
# hyprctl workspaces | grep ^workspace | cut --delimiter ' ' --fields 3 | xargs -I '{}' hyprctl dispatch moveworkspacetomonitor '{}' "$TARGET_MONITOR"
|
||||
|
||||
# # Previous approach
|
||||
# #hyprctl swapactiveworkspaces $EXTERNAL_MONITOR $INTERNAL_MONITOR
|
||||
#}
|
||||
|
||||
# TODO: Detect these instead of hardcoding them
|
||||
INTERNAL_MONITOR="eDP-1"
|
||||
EXTERNAL_MONITOR="HDMI-A-1"
|
||||
|
||||
# NUM_MONITORS=$(hyprctl monitors all | grep --count Monitor)
|
||||
# NUM_MONITORS_ACTIVE=$(hyprctl monitors | grep --count Monitor)
|
||||
|
||||
# Make sure all
|
||||
# if [ "$NUM_MONITORS_ACTIVE" -eq 1 ]; then
|
||||
# move_all_workspaces_to_monitor $INTERNAL_MONITOR
|
||||
# exit
|
||||
# fi
|
||||
|
||||
MIRROR_SETTING=$(hyprctl monitors all -j | jq -r '.[] | select(.name == "HDMI-A-1") | .mirrorOf')
|
||||
|
||||
# # For dynamically toggling which monitor is active later via a keybind
|
||||
# if [ "$NUM_MONITORS" -gt 1 ]; then # Handling multiple monitors
|
||||
# if hyprctl monitors | cut --delimiter ' ' --fields 2 | grep --quiet ^$EXTERNAL_MONITOR; then
|
||||
# hyprctl keyword monitor $INTERNAL_MONITOR,preferred,0x0,1
|
||||
# move_all_workspaces_to_monitor $INTERNAL_MONITOR
|
||||
# hyprctl keyword monitor "$EXTERNAL_MONITOR, disable"
|
||||
# else
|
||||
# hyprctl keyword monitor $EXTERNAL_MONITOR,preferred,0x0,1
|
||||
# move_all_workspaces_to_monitor $EXTERNAL_MONITOR
|
||||
# hyprctl keyword monitor "$INTERNAL_MONITOR, disable"
|
||||
# fi
|
||||
# else # If the external monitor is disconnected without running this script first, it might become the case that no monitor is on - therefore turn on the laptop monitor!
|
||||
# hyprctl keyword monitor $INTERNAL_MONITOR,preferred,0x0,1
|
||||
# move_all_workspaces_to_monitor $INTERNAL_MONITOR
|
||||
# fi
|
||||
|
||||
echo setting:
|
||||
echo "current setting: "
|
||||
echo $MIRROR_SETTING
|
||||
if [ "$MIRROR_SETTING" = "none" ]; then
|
||||
echo "mirroring..."
|
||||
hyprctl keyword monitor "$EXTERNAL_MONITOR, preferred, auto, 1, mirror, $INTERNAL_MONITOR"
|
||||
hyprctl eval "hl.monitor({output=\"$EXTERNAL_MONITOR\", mode=\"preferred\", position=\"auto\", scale=\"auto\", mirror=\"$INTERNAL_MONITOR\"})"
|
||||
else
|
||||
hyprctl keyword monitor "$EXTERNAL_MONITOR, disable" # shortly disable monitor so waybar recognizes the new monitor again # TODO: find better solution
|
||||
hyprctl keyword monitor "$EXTERNAL_MONITOR, preferred, auto, 1"
|
||||
# hyprctl keyword monitor "$EXTERNAL_MONITOR, disable" # shortly disable monitor so waybar recognizes the new monitor again # TODO: find better solution
|
||||
hyprctl eval "hl.monitor({output=\"$EXTERNAL_MONITOR\", mode=\"preferred\", position=\"auto\", scale=\"auto\", mirror=\"\"})"
|
||||
fi
|
||||
|
||||
@@ -1,13 +1,8 @@
|
||||
{
|
||||
options,
|
||||
config,
|
||||
pkgs,
|
||||
lib,
|
||||
inputs,
|
||||
...
|
||||
}: let
|
||||
palette = (inputs.nix-colors.colorschemes.${builtins.toString config.colorscheme.name}).palette;
|
||||
{config, ...}: let
|
||||
palette = config.lib.stylix.colors;
|
||||
in {
|
||||
stylix.targets.waybar.enable = false;
|
||||
|
||||
programs.waybar = {
|
||||
enable = true;
|
||||
# systemd.enable = true;
|
||||
|
||||
@@ -1,39 +1,3 @@
|
||||
{
|
||||
options,
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
inputs,
|
||||
...
|
||||
}: let
|
||||
inherit
|
||||
(inputs.nix-colors.colorschemes.${builtins.toString config.colorscheme.name})
|
||||
palette
|
||||
;
|
||||
in {
|
||||
{pkgs, ...}: {
|
||||
home.packages = with pkgs; [wlogout];
|
||||
|
||||
# xdg.configFile."wlogout/style.css".text = ''
|
||||
# * {
|
||||
# all: unset;
|
||||
# font-family: JetBrains Mono Nerd Font;
|
||||
# }
|
||||
|
||||
# window {
|
||||
# background-color: #${palette.base00};
|
||||
# }
|
||||
|
||||
# button {
|
||||
# color: #${palette.base01};
|
||||
# font-size: 64px;
|
||||
# background-color: rgba(0,0,0,0);
|
||||
# outline-style: none;
|
||||
# margin: 5px;
|
||||
# }
|
||||
|
||||
# button:focus, button:active, button:hover {
|
||||
# color: #${palette.base0D};
|
||||
# transition: ease 0.4s;
|
||||
# }
|
||||
# '';
|
||||
}
|
||||
|
||||
@@ -1,86 +1,5 @@
|
||||
{
|
||||
options,
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
inputs,
|
||||
...
|
||||
}: let
|
||||
inherit
|
||||
(inputs.nix-colors.colorschemes.${builtins.toString config.colorscheme.name})
|
||||
palette
|
||||
;
|
||||
in {
|
||||
{pkgs, ...}: {
|
||||
home.packages = with pkgs; [wofi];
|
||||
|
||||
xdg.configFile."wofi/config".source = ./config;
|
||||
xdg.configFile."wofi/style.css".text = ''
|
||||
window {
|
||||
margin: 5px;
|
||||
border: 5px solid #181926;
|
||||
background-color: #${palette.base00};
|
||||
border-radius: 15px;
|
||||
font-family: "JetBrainsMono";
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
#input {
|
||||
all: unset;
|
||||
min-height: 36px;
|
||||
padding: 4px 10px;
|
||||
margin: 4px;
|
||||
border: none;
|
||||
color: #${palette.base05};
|
||||
font-weight: bold;
|
||||
background-color: #${palette.base01};
|
||||
outline: none;
|
||||
border-radius: 15px;
|
||||
margin: 10px;
|
||||
margin-bottom: 2px;
|
||||
}
|
||||
|
||||
#inner-box {
|
||||
margin: 4px;
|
||||
padding: 10px;
|
||||
font-weight: bold;
|
||||
border-radius: 15px;
|
||||
}
|
||||
|
||||
#outer-box {
|
||||
margin: 0px;
|
||||
padding: 3px;
|
||||
border: none;
|
||||
border-radius: 15px;
|
||||
border: 5px solid #${palette.base01};
|
||||
}
|
||||
|
||||
#scroll {
|
||||
margin-top: 5px;
|
||||
border: none;
|
||||
border-radius: 15px;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
#text:selected {
|
||||
color: #${palette.base01};
|
||||
margin: 0px 0px;
|
||||
border: none;
|
||||
border-radius: 15px;
|
||||
}
|
||||
|
||||
#entry {
|
||||
margin: 0px 0px;
|
||||
border: none;
|
||||
border-radius: 15px;
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
#entry:selected {
|
||||
margin: 0px 0px;
|
||||
border: none;
|
||||
border-radius: 15px;
|
||||
background: #${palette.base0D};
|
||||
background-size: 400% 400%;
|
||||
}
|
||||
'';
|
||||
}
|
||||
|
||||
@@ -1,33 +0,0 @@
|
||||
{config, ...}: let
|
||||
inherit (config.colorscheme) colors;
|
||||
in {
|
||||
programs.zathura = {
|
||||
enable = true;
|
||||
options = {
|
||||
selection-clipboard = "clipboard";
|
||||
# TODO fix
|
||||
# font = "${config.fontProfiles.regular.name} ${toString config.fontProfiles.regular.size}";
|
||||
# recolor = true;
|
||||
# default-bg = "${colors.surface}";
|
||||
# default-fg = "${colors.surface_bright}";
|
||||
# statusbar-bg = "${colors.surface_container}";
|
||||
# statusbar-fg = "${colors.on_surface_variant}";
|
||||
# inputbar-bg = "${colors.surface}";
|
||||
# inputbar-fg = "${colors.on_secondary}";
|
||||
# notification-bg = "${colors.surface}";
|
||||
# notification-fg = "${colors.on_secondary}";
|
||||
# notification-error-bg = "${colors.error}";
|
||||
# notification-error-fg = "${colors.on_error}";
|
||||
# notification-warning-bg = "${colors.error}";
|
||||
# notification-warning-fg = "${colors.on_error}";
|
||||
# highlight-color = "${colors.tertiary}";
|
||||
# highlight-active-color = "${colors.secondary}";
|
||||
# completion-bg = "${colors.surface_bright}";
|
||||
# completion-fg = "${colors.on_surface}";
|
||||
# completions-highlight-bg = "${colors.secondary}";
|
||||
# completions-highlight-fg = "${colors.on_secondary}";
|
||||
# recolor-lightcolor = "${colors.surface}";
|
||||
# recolor-darkcolor = "${colors.inverse_surface}";
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -22,9 +22,9 @@
|
||||
# Prevent screen from going blank (check these settings with `xset q`)
|
||||
# And disable bell sound (b)
|
||||
xsession.initExtra = ''
|
||||
${pkgs.xorg.xset}/bin/xset s off
|
||||
${pkgs.xorg.xset}/bin/xset -dpms
|
||||
${pkgs.xorg.xset}/bin/xset b off
|
||||
${pkgs.xset}/bin/xset s off
|
||||
${pkgs.xset}/bin/xset -dpms
|
||||
${pkgs.xset}/bin/xset b off
|
||||
'';
|
||||
xsession.windowManager.i3 = {
|
||||
enable = true;
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
{
|
||||
lib,
|
||||
pkgs,
|
||||
inputs,
|
||||
...
|
||||
}: {
|
||||
imports = [inputs.nixvim.homeManagerModules.nixvim];
|
||||
imports = [inputs.nixvim.homeModules.nixvim];
|
||||
|
||||
home.sessionVariables = {
|
||||
EDITOR = "nvim";
|
||||
@@ -19,7 +18,7 @@
|
||||
fd
|
||||
stylua
|
||||
black
|
||||
nixfmt-rfc-style # nixfmt
|
||||
nixfmt # nixfmt
|
||||
];
|
||||
|
||||
programs.nixvim = {
|
||||
@@ -36,6 +35,8 @@
|
||||
opts = {
|
||||
number = false;
|
||||
relativenumber = false;
|
||||
ignorecase = true;
|
||||
smartcase = true;
|
||||
};
|
||||
clipboard.register = "unnamedplus"; # Use system clipboard
|
||||
|
||||
@@ -49,7 +50,7 @@
|
||||
key = "<leader><space>";
|
||||
}
|
||||
{
|
||||
action = "<cmd>Telescope file_browser<cr>";
|
||||
action = "<cmd>Telescope file_browser path=%:p:h<cr>";
|
||||
key = "<leader>.";
|
||||
}
|
||||
{
|
||||
@@ -76,6 +77,7 @@
|
||||
neogit.enable = true; # like magit
|
||||
trouble.enable = true;
|
||||
web-devicons.enable = true;
|
||||
orgmode.enable = true; # org-mode support
|
||||
|
||||
# Shows file trees
|
||||
oil = {
|
||||
@@ -88,7 +90,7 @@
|
||||
# Code formatting
|
||||
conform-nvim = {
|
||||
enable = true;
|
||||
settings.formatters_by_ft = with pkgs; {
|
||||
settings.formatters_by_ft = {
|
||||
lua = ["stylua"];
|
||||
python = ["black"];
|
||||
nix = ["nixfmt"];
|
||||
@@ -140,18 +142,21 @@
|
||||
};
|
||||
|
||||
lsp = {
|
||||
enable = true;
|
||||
enable = true; # includes lsp-config, default settings for the lsps
|
||||
servers = {
|
||||
rust_analyzer = {
|
||||
enable = true;
|
||||
installCargo = true;
|
||||
installRustc = true;
|
||||
};
|
||||
nixd.enable = true;
|
||||
pyright.enable = true;
|
||||
dockerls.enable = true;
|
||||
lua_ls.enable = true;
|
||||
clangd.enable = true;
|
||||
nixd.enable = true; # nix
|
||||
pyright.enable = true; # python
|
||||
dockerls.enable = true; # docker
|
||||
lua_ls.enable = true; # lua
|
||||
clangd.enable = true; # c, c++
|
||||
dartls.enable = true; # dart, flutter
|
||||
digestif.enable = true; # latex
|
||||
tinymist.enable = true; # typst
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
{
|
||||
programs.distrobox = {
|
||||
enable = true;
|
||||
containers."qt-distrobox" = {
|
||||
image = "debian:12.2";
|
||||
exported_apps = "qtcreator";
|
||||
enableSystemdUnit = false; # fails in creating and does not recreate. Do distrobox-assemble create --replace --file ~/.config/distrobox/containers.ini instead
|
||||
additional_packages = [
|
||||
"qtcreator"
|
||||
"qt6-base-dev"
|
||||
"qt6-wayland"
|
||||
"qt6-tools-dev-tools"
|
||||
"qt6-tools-dev"
|
||||
"qt6-serialbus-dev"
|
||||
"qt6-websockets-dev"
|
||||
"libgl1-mesa-dev"
|
||||
"build-essential"
|
||||
"cmake"
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
{pkgs, ...}: {
|
||||
home.packages = with pkgs; [
|
||||
bat
|
||||
du-dust # Like du tree but better
|
||||
dust # Like du tree but better
|
||||
fd # better find
|
||||
fdupes # find and delete duplicate files
|
||||
ffmpeg
|
||||
@@ -19,12 +19,11 @@
|
||||
links2 # Tui web-browser
|
||||
lnav # log analyzing tool
|
||||
mc # Tui file browser
|
||||
# nix-index
|
||||
nmap
|
||||
p7zip # unzip 7zip archives
|
||||
parted
|
||||
pciutils # lspci
|
||||
poppler_utils # Pdf utils including pdfimages
|
||||
poppler-utils # Pdf utils including pdfimages
|
||||
libqalculate # Nice tui calculator (qalc)
|
||||
ripgrep # better grep
|
||||
rnr # renaming tool
|
||||
@@ -38,8 +37,9 @@
|
||||
usbutils # lsusb
|
||||
wget
|
||||
wireguard-tools # wg-quick
|
||||
xorg.xkill
|
||||
xkill
|
||||
zip
|
||||
dig
|
||||
|
||||
## My scripts
|
||||
frajul.edit-config
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{pkgs, ...}: {
|
||||
imports = [../../gtk];
|
||||
# imports = [./stylix.nix];
|
||||
|
||||
services.blueman-applet.enable = true;
|
||||
services.nextcloud-client.enable = true;
|
||||
@@ -9,6 +9,8 @@
|
||||
services.syncthing.tray.enable = true;
|
||||
services.syncthing.tray.command = "syncthingtray --wait"; # Wait for tray to become available
|
||||
|
||||
gtk.gtk4.theme = null; # Fix evaluation warning since using old home manager version
|
||||
|
||||
programs.chromium = {
|
||||
enable = true;
|
||||
extensions = [
|
||||
@@ -22,13 +24,15 @@
|
||||
calibre # ebook manager and viewer
|
||||
# digikam
|
||||
discord
|
||||
discord-ptb # in case discord updates take their time
|
||||
# dvdisaster
|
||||
# element-desktop
|
||||
# rocketchat-desktop
|
||||
thunderbird
|
||||
tdesktop # telegram
|
||||
telegram-desktop # telegram
|
||||
# schildichat-desktop # not updated regularly
|
||||
nheko
|
||||
element-desktop
|
||||
evince # Simple pdf reader, good for focusing on document content
|
||||
firefox
|
||||
# geogebra
|
||||
@@ -37,7 +41,7 @@
|
||||
# kitty # Terminal, already available as feature
|
||||
libnotify
|
||||
libreoffice
|
||||
mate.engrampa
|
||||
engrampa
|
||||
nomacs # Image viewer
|
||||
kdePackages.okular # Pdf reader with many features, good for commenting documents
|
||||
pavucontrol
|
||||
@@ -46,21 +50,23 @@
|
||||
qpdfview
|
||||
# qutebrowser
|
||||
# realvnc-vnc-viewer
|
||||
rpi-imager # make isos
|
||||
# rpi-imager # make isos
|
||||
# rustdesk
|
||||
tor-browser
|
||||
unstable.path-of-building # Path of Building
|
||||
# frajul.pob-dev-version # Path of Building
|
||||
rusty-path-of-building # Path of Building for poe1 and poe2
|
||||
vlc
|
||||
wineWowPackages.stable # 32-bit and 64-bit wine
|
||||
wineWow64Packages.stable # 32-bit and 64-bit wine
|
||||
winetricks
|
||||
xclip # x11 clipboard access from terminal
|
||||
xfce.mousepad # simple text editor
|
||||
mousepad # simple text editor
|
||||
xournalpp # Edit pdf files
|
||||
zoom-us # Video conferencing
|
||||
zotero # Manage papers and other sources
|
||||
pdfpc # Present slides in pdf form
|
||||
|
||||
networkmanager-openvpn
|
||||
keepassxc
|
||||
|
||||
## My scripts
|
||||
frajul.open-messaging
|
||||
frajul.xwacomcalibrate
|
||||
|
||||
@@ -1,4 +1,9 @@
|
||||
{pkgs, ...}: {
|
||||
programs.opencode = {
|
||||
enable = true;
|
||||
package = pkgs.unstable.opencode;
|
||||
};
|
||||
|
||||
home.packages = with pkgs; [
|
||||
watchexec # Run command when any file in current dir changes
|
||||
android-tools # adb
|
||||
@@ -9,7 +14,7 @@
|
||||
clippy
|
||||
cntr # nix debugger
|
||||
conda
|
||||
micromamba # a better, faster conda
|
||||
# micromamba # a better, faster conda
|
||||
devcontainer # development container
|
||||
devenv # devbox alternative
|
||||
dbeaver-bin
|
||||
@@ -21,20 +26,21 @@
|
||||
unstable.zed-editor
|
||||
jdk
|
||||
julia-bin
|
||||
(texlive.combine {
|
||||
# for rendering latex in inkscape
|
||||
inherit
|
||||
(texlive)
|
||||
scheme-medium
|
||||
standalone
|
||||
amsmath
|
||||
preview
|
||||
# needed for org mode export
|
||||
wrapfig
|
||||
capt-of
|
||||
biblatex
|
||||
;
|
||||
})
|
||||
# (texlive.combine {
|
||||
# # for rendering latex in inkscape
|
||||
# inherit
|
||||
# (texlive)
|
||||
# scheme-medium
|
||||
# standalone
|
||||
# amsmath
|
||||
# preview
|
||||
# # needed for org mode export
|
||||
# wrapfig
|
||||
# capt-of
|
||||
# biblatex
|
||||
# ;
|
||||
# })
|
||||
vagrant
|
||||
matlab # Using nix-matlab overlay defined in flake
|
||||
maven
|
||||
nodejs
|
||||
@@ -59,10 +65,14 @@
|
||||
sops
|
||||
pandoc # markdown preview
|
||||
docker-compose
|
||||
mise
|
||||
|
||||
mise
|
||||
|
||||
## My scripts
|
||||
frajul.deploy-to-pianopi
|
||||
frajul.rtklib
|
||||
frajul.smath-studio
|
||||
# frajul.rtklib
|
||||
|
||||
(pkgs.writeShellScriptBin "matlab-rsp" ''
|
||||
matlab -desktop -sd "/home/julian/git/uwa-channel-model" -softwareopengl
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
programs.tmux = {
|
||||
enable = true;
|
||||
clock24 = true;
|
||||
keyMode = "vi";
|
||||
customPaneNavigationAndResize = true; # use hjkl
|
||||
mouse = true;
|
||||
prefix = "C-Space"; # use instead of C-b
|
||||
};
|
||||
}
|
||||
@@ -3,14 +3,11 @@
|
||||
inputs,
|
||||
...
|
||||
}: {
|
||||
programs.zoxide.enable = true;
|
||||
programs.zoxide.enableFishIntegration = true;
|
||||
|
||||
home.packages = with pkgs; [
|
||||
exiftool
|
||||
unar # extract archives
|
||||
xdragon # dragndrop
|
||||
poppler_utils # pdf preview
|
||||
dragon-drop # dragndrop
|
||||
poppler-utils # pdf preview
|
||||
fd
|
||||
ripgrep
|
||||
fzf
|
||||
@@ -19,11 +16,8 @@
|
||||
xclip
|
||||
];
|
||||
|
||||
home.shellAliases = {
|
||||
y = "yy"; # Yazi shell wrapper (cd on quit)
|
||||
};
|
||||
|
||||
programs.yazi.enable = true;
|
||||
programs.yazi.shellWrapperName = "y";
|
||||
programs.yazi.enableFishIntegration = true;
|
||||
programs.yazi.settings.manager = {
|
||||
sort_by = "mtime";
|
||||
|
||||
@@ -3,9 +3,9 @@
|
||||
pkgs,
|
||||
...
|
||||
}: {
|
||||
home.file = {
|
||||
".config/starship.toml".source = ./starship.toml;
|
||||
};
|
||||
# home.file = {
|
||||
# ".config/starship.toml".source = ./starship.toml;
|
||||
# };
|
||||
|
||||
home.packages = with pkgs; [starship];
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
lib,
|
||||
pkgs,
|
||||
config,
|
||||
inputs,
|
||||
outputs,
|
||||
...
|
||||
}: {
|
||||
@@ -9,6 +10,7 @@
|
||||
[
|
||||
../features/fonts
|
||||
../features/nix-helper
|
||||
inputs.nix-index-database.homeModules.default # nix-locate
|
||||
]
|
||||
++ (builtins.attrValues outputs.homeManagerModules);
|
||||
|
||||
@@ -24,13 +26,28 @@
|
||||
};
|
||||
};
|
||||
|
||||
# To allow unfree with 'nix run'
|
||||
xdg.configFile."nixpkgs/config.nix".text = ''
|
||||
{ allowUnfree = true; }
|
||||
'';
|
||||
|
||||
colorscheme.name = "catppuccin-mocha";
|
||||
|
||||
# systemd.user.startServices = "sd-switch"; # TODO: what is this
|
||||
|
||||
# Expire old hm generations
|
||||
hm-expire = {
|
||||
enable = true;
|
||||
dates = "weekly";
|
||||
expire = "-30 days";
|
||||
};
|
||||
|
||||
programs = {
|
||||
home-manager.enable = true;
|
||||
git.enable = true;
|
||||
|
||||
nix-index.enable = true; # allows command-not-found
|
||||
nix-index-database.comma.enable = true;
|
||||
};
|
||||
|
||||
home = {
|
||||
@@ -40,14 +57,4 @@
|
||||
|
||||
sessionPath = ["$HOME/.local/bin"];
|
||||
};
|
||||
|
||||
# TODO: colorscheme
|
||||
# colorscheme.mode = lib.mkOverride 1499 "dark";
|
||||
# specialisation = {
|
||||
# dark.configuration.colorscheme.mode = lib.mkOverride 1498 "dark";
|
||||
# light.configuration.colorscheme.mode = lib.mkOverride 1498 "light";
|
||||
# };
|
||||
# home.file = {
|
||||
# ".colorscheme.json".text = builtins.toJSON config.colorscheme;
|
||||
# };
|
||||
}
|
||||
|
||||
@@ -20,8 +20,8 @@
|
||||
"text/calendar" = thunderbird;
|
||||
"application/x-extension-ics" = thunderbird;
|
||||
"x-scheme-handler/webcals" = thunderbird;
|
||||
"application/zip" = mate.engrampa;
|
||||
"text/plain" = xfce.mousepad;
|
||||
"application/zip" = engrampa;
|
||||
"text/plain" = mousepad;
|
||||
"image/jpeg" = nomacs;
|
||||
"application/pdf" = evince;
|
||||
"text/html" = firefox;
|
||||
|
||||
@@ -1,14 +1,35 @@
|
||||
# Only apply this to home-manager standalone
|
||||
{outputs, ...}: {
|
||||
# Apply overlays
|
||||
{
|
||||
inputs,
|
||||
outputs,
|
||||
pkgs,
|
||||
...
|
||||
}: {
|
||||
imports = [inputs.stylix.homeModules.stylix];
|
||||
|
||||
stylix.enable = true;
|
||||
stylix.base16Scheme = "${pkgs.base16-schemes}/share/themes/catppuccin-mocha.yaml";
|
||||
|
||||
# Expire old hm generations
|
||||
hm-expire = {
|
||||
enable = true;
|
||||
dates = "weekly";
|
||||
expire = "-30 days";
|
||||
};
|
||||
|
||||
# Remove unused packets
|
||||
nix.gc = {
|
||||
automatic = true;
|
||||
dates = "weekly";
|
||||
persistent = true;
|
||||
};
|
||||
|
||||
nixpkgs = {
|
||||
# Apply overlays
|
||||
overlays = builtins.attrValues outputs.overlays;
|
||||
config = {
|
||||
allowUnfree = true;
|
||||
allowUnfreePredicate = _: true; # TODO: what is this
|
||||
permittedInsecurePackages = [
|
||||
"olm-3.2.16"
|
||||
];
|
||||
warn-dirty = false;
|
||||
};
|
||||
};
|
||||
@@ -19,12 +40,13 @@
|
||||
"https://nix-community.cachix.org"
|
||||
"https://cache.nixos.org/"
|
||||
"https://hyprland.cachix.org"
|
||||
"http://binarycache.julian-mutter.de"
|
||||
"https://devenv.cachix.org"
|
||||
];
|
||||
trusted-public-keys = [
|
||||
"cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY="
|
||||
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
|
||||
"hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="
|
||||
"binarycache.julian-mutter.de:oJ67uRFwRhNPKL58CHzy3QQLv38Kx7OA1K+6xlEPu7E="
|
||||
"devenv.cachix.org-1:w1cLUi8dv3hnoSPGAuibQv+f9TZLr6cv/Hm9XgU50cw="
|
||||
];
|
||||
|
||||
trusted-users = [
|
||||
|
||||
@@ -8,11 +8,14 @@
|
||||
./features/neovim
|
||||
./features/ghostty
|
||||
./features/wezterm
|
||||
./features/alacritty
|
||||
./features/yazi
|
||||
./features/emacs
|
||||
|
||||
# ./features/hyprland
|
||||
./features/i3
|
||||
./features/tmux
|
||||
./features/qt-distrobox
|
||||
./features/hyprland
|
||||
# ./features/i3
|
||||
|
||||
./features/suites/cli
|
||||
./features/suites/desktop
|
||||
@@ -21,7 +24,7 @@
|
||||
|
||||
hostName = "kardorf";
|
||||
is-nixos = true;
|
||||
terminal = "ghostty";
|
||||
terminal = "alacritty";
|
||||
|
||||
# --------- ---------
|
||||
# | DVI-D-1 | | DVI-D-2 |
|
||||
|
||||
@@ -1,37 +0,0 @@
|
||||
{pkgs, ...}: {
|
||||
imports = [
|
||||
./global
|
||||
|
||||
./features/fish
|
||||
./features/topgrade
|
||||
./features/neovim
|
||||
./features/wezterm
|
||||
./features/yazi
|
||||
./features/gtk
|
||||
];
|
||||
|
||||
hostName = "pianonix";
|
||||
is-nixos = true;
|
||||
terminal = "wezterm";
|
||||
|
||||
services.syncthing.tray.enable = true;
|
||||
services.syncthing.tray.command = "syncthingtray --wait"; # Wait for tray to become available
|
||||
|
||||
home.packages = with pkgs; [
|
||||
music-reader
|
||||
sheet-organizer
|
||||
|
||||
xournalpp
|
||||
musescore
|
||||
|
||||
onboard
|
||||
];
|
||||
|
||||
# Autostart link
|
||||
home.file = {
|
||||
".config/autostart/sheet-organizer.desktop".source = "${pkgs.sheet-organizer}/share/applications/sheet-organizer.desktop";
|
||||
".config/sheet-organizer/config.toml".text = ''
|
||||
working_directory = "/home/julian/Klavier"
|
||||
'';
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
# Quick configuration for setting up basic things on a standalone home-manager device
|
||||
# If you want to adapt it to a specific device, copy this file with the correct hostname
|
||||
{pkgs, ...}: {
|
||||
imports = [
|
||||
./global
|
||||
|
||||
./features/fish
|
||||
./features/direnv
|
||||
./features/neovim
|
||||
./features/yazi
|
||||
./features/emacs
|
||||
./features/nix-helper
|
||||
./features/tmux
|
||||
];
|
||||
|
||||
is-nixos = false;
|
||||
|
||||
home.sessionPath = ["/snap/bin"];
|
||||
|
||||
# Essential packages
|
||||
home.packages = with pkgs; [
|
||||
bat
|
||||
dust
|
||||
fd
|
||||
ripgrep
|
||||
fzf
|
||||
lazygit
|
||||
mc
|
||||
tree
|
||||
wget
|
||||
];
|
||||
}
|
||||
@@ -13,6 +13,8 @@
|
||||
../features/yazi
|
||||
../features/emacs
|
||||
../features/nix-helper
|
||||
../features/qt-distrobox
|
||||
../features/tmux
|
||||
];
|
||||
|
||||
hostName = "aspi";
|
||||
|
||||
@@ -5,7 +5,7 @@ with pkgs; [
|
||||
dejavu_fonts
|
||||
noto-fonts
|
||||
noto-fonts-cjk-sans
|
||||
noto-fonts-emoji
|
||||
noto-fonts-color-emoji
|
||||
liberation_ttf
|
||||
fira-code
|
||||
fira-code-symbols
|
||||
|
||||
@@ -31,12 +31,12 @@ with pkgs; [
|
||||
ffmpeg
|
||||
julia-bin
|
||||
|
||||
poppler_utils # Pdf utils including pdfimages
|
||||
poppler-utils # Pdf utils including pdfimages
|
||||
sage
|
||||
|
||||
pkg-config # Often needed to build something
|
||||
|
||||
devbox # reproducible dev envs based on nix
|
||||
|
||||
mysql80
|
||||
devenv
|
||||
]
|
||||
|
||||
+23
-20
@@ -1,33 +1,36 @@
|
||||
{
|
||||
{pwd, ...}: {
|
||||
imports = [
|
||||
./hardware-configuration.nix
|
||||
|
||||
../common/global
|
||||
../common/users/julian
|
||||
../common/users/yukari
|
||||
../common/optional/binarycaches.nix
|
||||
"${pwd}/features-nixos/global"
|
||||
"${pwd}/features-nixos/users/julian"
|
||||
"${pwd}/features-nixos/optional/binarycaches.nix"
|
||||
|
||||
../common/optional/remote-builder.nix
|
||||
../common/optional/boot-efi.nix
|
||||
"${pwd}/features-nixos/optional/remote-builder.nix"
|
||||
"${pwd}/features-nixos/optional/boot-efi.nix"
|
||||
|
||||
../common/optional/greetd.nix
|
||||
../common/optional/authentication.nix
|
||||
../common/optional/pcmanfm.nix
|
||||
../common/optional/pipewire.nix
|
||||
"${pwd}/features-nixos/optional/greetd.nix"
|
||||
"${pwd}/features-nixos/optional/authentication.nix"
|
||||
"${pwd}/features-nixos/optional/pcmanfm.nix"
|
||||
"${pwd}/features-nixos/optional/pipewire.nix"
|
||||
|
||||
../common/optional/gamemode.nix
|
||||
../common/optional/virtualbox.nix
|
||||
"${pwd}/features-nixos/optional/gamemode.nix"
|
||||
"${pwd}/features-nixos/optional/virtualbox.nix"
|
||||
|
||||
../common/optional/podman.nix
|
||||
../common/optional/wireguard.nix
|
||||
../common/optional/flatpak.nix
|
||||
"${pwd}/features-nixos/optional/podman.nix"
|
||||
"${pwd}/features-nixos/optional/wireguard.nix"
|
||||
"${pwd}/features-nixos/optional/wireshark.nix"
|
||||
"${pwd}/features-nixos/optional/flatpak.nix"
|
||||
"${pwd}/features-nixos/optional/k9s"
|
||||
|
||||
../common/optional/avahi.nix
|
||||
"${pwd}/features-nixos/optional/avahi.nix"
|
||||
];
|
||||
|
||||
networking.hostName = "aspi";
|
||||
system.stateVersion = "24.05";
|
||||
|
||||
# networking.firewall.checkReversePath = false; # Makes wg interface with all ips work
|
||||
|
||||
modules = {
|
||||
syncthing = {
|
||||
enable = true;
|
||||
@@ -39,7 +42,7 @@
|
||||
};
|
||||
};
|
||||
|
||||
services.desktopManager.plasma6.enable = true;
|
||||
programs.hyprland.enable = true;
|
||||
|
||||
services.blueman.enable = true;
|
||||
services.upower.enable = true;
|
||||
@@ -47,8 +50,8 @@
|
||||
programs.steam.enable = true;
|
||||
|
||||
# TODO: not working
|
||||
services.logind.lidSwitch = "lock";
|
||||
services.logind.lidSwitchDocked = "lock";
|
||||
# services.logind.lidSwitch = "lock";
|
||||
# services.logind.lidSwitchDocked = "lock";
|
||||
|
||||
programs.kdeconnect.enable = true;
|
||||
|
||||
|
||||
@@ -75,4 +75,9 @@
|
||||
powerManagement.cpuFreqGovernor = lib.mkDefault "powersave";
|
||||
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
||||
hardware.nvidia.open = false;
|
||||
|
||||
hardware.bluetooth = {
|
||||
enable = true;
|
||||
powerOnBoot = true;
|
||||
};
|
||||
}
|
||||
|
||||
+109
-13
@@ -1,16 +1,33 @@
|
||||
# sudo nixos-rebuild switch --flake .#builder --target-host root@192.168.3.118
|
||||
# or
|
||||
# deploy .#builder
|
||||
{config, ...}: {
|
||||
{
|
||||
pwd,
|
||||
config,
|
||||
pkgs,
|
||||
...
|
||||
}: {
|
||||
imports = [
|
||||
./hardware-configuration.nix
|
||||
|
||||
../common/global
|
||||
"${pwd}/features-nixos/global/fish.nix" # fish for admin
|
||||
"${pwd}/features-nixos/global/locale.nix"
|
||||
"${pwd}/features-nixos/global/nix.nix"
|
||||
"${pwd}/features-nixos/global/sops.nix"
|
||||
"${pwd}/features-nixos/global/root.nix"
|
||||
];
|
||||
|
||||
networking.hostName = "builder";
|
||||
system.stateVersion = "23.11";
|
||||
|
||||
networking.networkmanager.enable = true;
|
||||
networking.nameservers = [
|
||||
"192.168.3.252"
|
||||
"172.30.20.10"
|
||||
"1.1.1.1"
|
||||
];
|
||||
|
||||
users.mutableUsers = false;
|
||||
users.users.nix = {
|
||||
isNormalUser = true;
|
||||
description = "Nix";
|
||||
@@ -32,25 +49,31 @@
|
||||
"https://nix-community.cachix.org"
|
||||
"https://cache.nixos.org/"
|
||||
"https://hyprland.cachix.org"
|
||||
"https://devenv.cachix.org"
|
||||
];
|
||||
trusted-public-keys = [
|
||||
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
|
||||
"hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="
|
||||
"cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY="
|
||||
"devenv.cachix.org-1:w1cLUi8dv3hnoSPGAuibQv+f9TZLr6cv/Hm9XgU50cw="
|
||||
];
|
||||
|
||||
trusted-users = ["nix"];
|
||||
max-jobs = "auto";
|
||||
cores = 0;
|
||||
|
||||
# Ensure we can still build when missing-server is not accessible
|
||||
fallback = true;
|
||||
};
|
||||
|
||||
system.autoUpgrade = {
|
||||
enable = true;
|
||||
flake = "git+https://gitlab.julian-mutter.de/julian/dotfiles";
|
||||
flags = [
|
||||
"--recreate-lock-file" # update lock file
|
||||
];
|
||||
dates = "02:13";
|
||||
};
|
||||
# system.autoUpgrade = {
|
||||
# enable = true;
|
||||
# flake = "git+https://gitlab.julian-mutter.de/julian/dotfiles";
|
||||
# flags = [
|
||||
# "--recreate-lock-file" # update lock file
|
||||
# ];
|
||||
# dates = "02:13";
|
||||
# };
|
||||
|
||||
# optimize store by hardlinking store files
|
||||
nix.optimise.automatic = true;
|
||||
@@ -82,6 +105,13 @@
|
||||
# services.ollama = {
|
||||
# enable = true;
|
||||
# # acceleration = "rocm";
|
||||
# openFirewall = true;
|
||||
# };
|
||||
|
||||
# services.nextjs-ollama-llm-ui = {
|
||||
# enable = true;
|
||||
# hostname = "192.168.3.118";
|
||||
# port = 3001;
|
||||
# };
|
||||
# services.open-webui = {
|
||||
# enable = true;
|
||||
@@ -92,14 +122,34 @@
|
||||
|
||||
networking.firewall.allowedTCPPorts = [
|
||||
80
|
||||
3001 # ollama-ui
|
||||
];
|
||||
|
||||
services.openssh = {
|
||||
enable = true;
|
||||
# require public key authentication for better security
|
||||
settings.PasswordAuthentication = true;
|
||||
settings.PasswordAuthentication = false;
|
||||
settings.KbdInteractiveAuthentication = false;
|
||||
settings.PermitRootLogin = "yes";
|
||||
# Add older algorithms for jenkins ssh-agents-plugin to be compatible
|
||||
settings.Macs = [
|
||||
"hmac-sha2-512-etm@openssh.com"
|
||||
"hmac-sha2-256-etm@openssh.com"
|
||||
"umac-128-etm@openssh.com"
|
||||
"hmac-sha2-512"
|
||||
"hmac-sha2-256"
|
||||
"umac-128@openssh.com"
|
||||
];
|
||||
settings.KexAlgorithms = [
|
||||
"diffie-hellman-group-exchange-sha1"
|
||||
"diffie-hellman-group14-sha1"
|
||||
"mlkem768x25519-sha256"
|
||||
"sntrup761x25519-sha512"
|
||||
"sntrup761x25519-sha512@openssh.com"
|
||||
"curve25519-sha256"
|
||||
"curve25519-sha256@libssh.org"
|
||||
"diffie-hellman-group-exchange-sha256"
|
||||
];
|
||||
};
|
||||
users.users."root".openssh.authorizedKeys.keys = [
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFjSZYdoF/51F+ykcBAYVCzCPTF5EEigWBL1APiR0h+H julian@aspi"
|
||||
@@ -127,7 +177,7 @@
|
||||
minimumDiskFreeEvaluator = 4; # in GB
|
||||
};
|
||||
|
||||
# add builder itself as build machine so system emulation is properly supported
|
||||
# add builder itpwd as build machine so system emulation is properly supported
|
||||
# nix.distributedBuilds = true;
|
||||
nix.buildMachines = [
|
||||
{
|
||||
@@ -197,7 +247,29 @@
|
||||
url = "https://gitlab.julian-mutter.de";
|
||||
name = "builder";
|
||||
tokenFile = config.sops.secrets."gitea_token".path;
|
||||
labels = []; # use default labels
|
||||
labels = [
|
||||
# fake the ubuntu name, because node provides no ubuntu builds
|
||||
"ubuntu-latest:docker://docker.gitea.com/runner-images:ubuntu-latest"
|
||||
# my custom nix+devenv ci container
|
||||
"nix-ci:docker://gitlab.julian-mutter.de/julian/nix-ci-container:latest"
|
||||
# devenv
|
||||
"devenv:docker://ghcr.io/cachix/devenv/devenv:latest"
|
||||
# provide native execution on the host
|
||||
"nixos:host"
|
||||
];
|
||||
# Packages are intjected into PATH for "nixos:host"
|
||||
hostPackages = with pkgs; [
|
||||
bash
|
||||
coreutils
|
||||
curl
|
||||
gawk
|
||||
gitMinimal
|
||||
nodejs # Required by many standard actions (like actions/checkout)
|
||||
docker
|
||||
devenv
|
||||
wget
|
||||
nix
|
||||
];
|
||||
};
|
||||
|
||||
virtualisation.docker.enable = true;
|
||||
@@ -268,4 +340,28 @@
|
||||
"/var/run/docker.sock:/var/run/docker.sock"
|
||||
];
|
||||
};
|
||||
|
||||
### Jenkins node
|
||||
users.users.jenkins = {
|
||||
createHome = true;
|
||||
home = "/var/lib/jenkins";
|
||||
group = "jenkins";
|
||||
isNormalUser = true;
|
||||
openssh.authorizedKeys.keys = [
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJ36sQhVz3kUEi8754G7r3rboihhG4iqFK/UvQm6SING jenkins@home"
|
||||
];
|
||||
packages = with pkgs; [
|
||||
git
|
||||
devenv
|
||||
];
|
||||
extraGroups = [
|
||||
"docker"
|
||||
];
|
||||
};
|
||||
|
||||
users.groups.jenkins = {};
|
||||
programs.java = {
|
||||
enable = true;
|
||||
package = pkgs.jdk21; # Same as jenkins version on home
|
||||
};
|
||||
}
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -1,45 +0,0 @@
|
||||
{
|
||||
pkgs,
|
||||
lib,
|
||||
config,
|
||||
...
|
||||
}: let
|
||||
homeCfgs = config.home-manager.users;
|
||||
homeSharePaths = lib.mapAttrsToList (_: v: "${v.home.path}/share") homeCfgs;
|
||||
vars = ''XDG_DATA_DIRS="$XDG_DATA_DIRS:${lib.concatStringsSep ":" homeSharePaths}" GTK_USE_PORTAL=0'';
|
||||
|
||||
julianCfg = homeCfgs.julian;
|
||||
|
||||
sway-kiosk = command: "${lib.getExe pkgs.sway} --unsupported-gpu --config ${pkgs.writeText "kiosk.config" ''
|
||||
output * bg #000000 solid_color
|
||||
xwayland disable
|
||||
input "type:touchpad" {
|
||||
tap enabled
|
||||
}
|
||||
exec '${vars} ${command}; ${pkgs.sway}/bin/swaymsg exit'
|
||||
''}";
|
||||
in {
|
||||
users.extraUsers.greeter = {
|
||||
# For caching and such
|
||||
home = "/tmp/greeter-home";
|
||||
createHome = true;
|
||||
};
|
||||
|
||||
programs.regreet = {
|
||||
enable = true;
|
||||
iconTheme = julianCfg.gtk.iconTheme;
|
||||
theme = julianCfg.gtk.theme;
|
||||
# font = julianCfg.fontProfiles.regular; # TODO: do
|
||||
cursorTheme = {
|
||||
inherit (julianCfg.gtk.cursorTheme) name package;
|
||||
};
|
||||
# settings.background = {
|
||||
# path = julianCfg.wallpaper;
|
||||
# fit = "Cover";
|
||||
# }; # TODO: fix
|
||||
};
|
||||
services.greetd = {
|
||||
enable = true;
|
||||
settings.default_session.command = sway-kiosk (lib.getExe config.programs.regreet.package);
|
||||
};
|
||||
}
|
||||
@@ -1,53 +0,0 @@
|
||||
#ENC[AES256_GCM,data:NSxfTl2hTXEoGl23aQnElG+df/1YzA==,iv:+oy9oITMGzdM2muDUPjwxJqUu1Bdyregl65/0hiulZ0=,tag:VKjforpyahKj0ktIN36gNw==,type:comment]
|
||||
julian-password: ENC[AES256_GCM,data:tgeu4uVI91j34+Gfzy2Uckmopj9bJNWiu65W0cdA76Kly3LH7RqXCq4rNM4DCwrsX3k9WdOlGX6T9edIjJgmbbe6MkeH7oQwiA==,iv:GE6zfSHymkAewjry7fofURz70az608+hja385LLeCIY=,tag:FqTopL5DyM3DTpa7AoGPDg==,type:str]
|
||||
wifi:
|
||||
pianonix: ENC[AES256_GCM,data:Ty1wElfVj+CU9bTbpuYIk2dA4fgFm59PkQGqvODn51Q=,iv:bLomyTlOW2Z4rPbue7Klo6Jt5lR+44AuL+dIMFgDNAE=,tag:DuH2ayeb19dkPi9xmbAu3A==,type:str]
|
||||
syncthing:
|
||||
public-keys:
|
||||
aspi-nix: ENC[AES256_GCM,data:ZTykdQCyh4DMuQUCy1DSKsGNxxn1dinaqztpDdJY53pkWcW4YcWRHk94iGJQZgG1oLfr3AB2S3J6b9w2WuV3,iv:9z2ovHzq6JjRtHzNMIQtcUCinIjG/ImSGqqC7KPhpuw=,tag:No2LCjD+XXB77Su+s98MIA==,type:str]
|
||||
pianonix: ENC[AES256_GCM,data:pUJPXH47VG363aIoxZwmbVe3uBoO7EO2TflK4f761C7PwD0tFNthZt9HRE6gQXAMQMF6qWzNK3CNGspSzKsE,iv:E89oz8BG5iQW/mRzdxSrYewGeVLiCrTcAF+c9ny6gPc=,tag:rLqwUmFDsaOMClR1tbE1sA==,type:str]
|
||||
pianonix:
|
||||
key: ENC[AES256_GCM,data:IaCXIRDMWCHj3lTKpkLg1Nd3pX4bktWg4WjZPGKgTBCLVkMi/SDtlaoNhDz+a+Vt6jYTXHS4exFnIVJ878nWSrA1sD2NHXmfsMh1kkLhub68qv0M33dBXvgX0vQ51Z1WMoti73yDUjJH8Ym5yF/SCg2+RbkVf+4pe2hSlAzwkGP6YC2rbCE5sZG31C55MkaGC6zwo2ZpZXdVhCW845SqAc11cF/OeEHb9B1FS3rd+El7rlJHrIEVQTkomNLshcspb13H0z3vNhtfu9pPkGxee8Hp/hEhFQ+waWBAg4w15yKihjHJmhzdjhDHCilvwYaceb7b5OwARuuiruQ+cJ40bdnStDpi2ouP8QJjEi7tmKWeplZ0X70PVZJFH/e/mTH5,iv:3hQMB4ka31w3chXXwjl/1IHF8ES/RobZVeugMC3ddlU=,tag:j8wwrNQUQbCEGtcriSpc4g==,type:str]
|
||||
cert: ENC[AES256_GCM,data:v9LO8qpeGDDV6I+AJU5iTYKKBV6qgr1ddwLvBVEOYyvmtPNeqaatYaK6vMBCabBIhxQu2NC96pREvWu1UHbxaMWvSCT1TzrIPrcFm+gKCH6PIPhqcnQpdGa3OYn01ohThpLp8hEmVUpJ0FO/AnE1QHK0VfPqJ3S0uHLjSCBJtxLmcBWNVvlcTU/P68QIQkrYAQRAtz9aDS+JNpUKhwCJBgjpY1Thj8Lj/fpc1t0qWo3BKIL3eW5iSlUW0iEriFS0bkMr4Bi9mNqpO26l1eZ3IXFJy/7pkqhmXXW83qOaF9AFXgg41p1Kjw4G6isB/obuhR7Z4oQ/AtkSU0wxHP4mF0AWrvC7/YGlrDG9aPYUEWOexTTBHkm89PhgEa69sekbzac7mYYFi/MIdU34ks4oc8ZIChWpT+V66mbo4f+3mn7raih5SLnyEMS7ENBes9cQC7SghSpB7D8c/2+q74A5aEZHUWRhqiDEx9IggP43SiWuNnb/HyZw16RUB7xnQKPs7LzAVlLC6M7ZETUmyEDEWWOsDY8+0Li4wuD3z4WXLAD9nP43TMx4GNoafjG+0Gu05hSR8fWv8strRCtIWjzK3wMaD9VT/cbt2oqOBkJcaqIW8+lM+ktk1WsD4Kc1DQ4q5O2oMrdPOWI9xZOs7DQTFshLHuvxutN05vgEUovI1vbMOl7SIzUW8YUY9PN0ofC7zwQlEJxfOdqT0nwv9vmqikSMP6V3jXgP5OnPb4KVx8G27X0oCjN++dJgDxdkh2JiLR9JaJHNmYPtLlP7hU4NsBpRpd9ObxRlv+uIbF2o0I8PGXMo3IVnRjrFDrRyoth2UJ+YUMGCVuonoS+nZLMCNz1xwRMaZBYjSEESmxc2Ilwdu3XTzd1KF282UvumBpRwcNxvsmPhI84v/XV8TJE8Z7YxyO3RYBQHD5+OuHOHKTtlajnKpSp/m0p0QR7rrGFoDuDKp+Z81MKz8wz3/8GG+sDh0pgniUfNyrmLroLPdT6nj0brvSVWYmOIJHDHKqM+6HZok5PyS+uHlb5dzwnmrd9OmhmwPVdkP5s=,iv:X9VNz2nsN4ywu3E0c+agwZCl43I4bt6jHz0jMoMFTJQ=,tag:RZUWa4h5JoIiZaDrYgcAeg==,type:str]
|
||||
sops:
|
||||
age:
|
||||
- recipient: age1ee5udznhadk6m7jtglu4709rep080yjyd2ukzdl8jma4mm92y3psv0slpg
|
||||
enc: |
|
||||
-----BEGIN AGE ENCRYPTED FILE-----
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBxV2IzcEZ6eGYxbXAvaEta
|
||||
c3RLbmZubnVEL1EwSlNNY3ZNbkVSUXN5ZDBZClRTYWwzbHhDK1VsMzVVL0VMVzZF
|
||||
SEQ0ZHVMdytrY0xXUEppQkpNZEZ3VFkKLS0tIG95ZkJLWTZBWWpIOEQ4bHpBNWEx
|
||||
QXVpMTNSNzU1dTBPYjlsc1BvNHZ3dDgKMHrT9DCC5W6UwC1Mfq6YCwkvZtDs3I7j
|
||||
vKlnanFp8hMMyYONRVlkvh+vOGQdbgXco4Z5nr02LQDu6Rwm4jSp9g==
|
||||
-----END AGE ENCRYPTED FILE-----
|
||||
- recipient: age1q8lc5340gz5xw2f57nglrss68wv0j0hf36py2pdtrl6ky3yrq9qqk0njr4
|
||||
enc: |
|
||||
-----BEGIN AGE ENCRYPTED FILE-----
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBKTnpqclVmVHR3M1ZvMDZ0
|
||||
eEtrbnhpTW5uZlhOYWFxbktxcTJ3bXZISkhzClpud2tNVzUvT2N2SkRadWk5aVpE
|
||||
S2VkTFlIVUhFclA0WEh5cEp0Qjg3ejgKLS0tIDNXY0lpKys4Q3NBRFcya2RoSG1F
|
||||
YW0raHlNekdWT3p0WHpGMk9xMmgzWFUKCue4GvgmH3nJBa7ny7rqft5MuSWHqAsP
|
||||
5HnaAudL+rh2j1swm635QUrf9UnpUznE5NSOGrQDmA6RCBypNM4rsw==
|
||||
-----END AGE ENCRYPTED FILE-----
|
||||
- recipient: age1hsmfz8fjxu83sax9lr487h8xr6cyge0apdq4zpge4c8jpcjj2cksj825ct
|
||||
enc: |
|
||||
-----BEGIN AGE ENCRYPTED FILE-----
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBESlZOeHY0T01ra0gwMS8z
|
||||
R3c1eW45WVkyeTBuRlFMRngrb2NFL1hkcmhRCitwZ3lweXM0di9EdEdQZmF4ZUZr
|
||||
M1hqNkM3Q1Jrb09Kb2M0ZkhTcFZPYkkKLS0tIHpCTEFCV0JlRzQwK3hndDJ4aHVC
|
||||
S1o0QVlXSVl0dmlpWUQ3ZXdqUU5maTgKY4UJPx37CU5OUgkqYWlz9+0rA+dQkrH9
|
||||
+/kTT/2qZ2Op67WKtlas7arC7BjU8uygM208q+nr48Lic5n1fMtnXA==
|
||||
-----END AGE ENCRYPTED FILE-----
|
||||
- recipient: age15lxw97z03q40xrdscnxqqugh5ky5aqrerg2t2rphkcqm6rnllurq8v98q5
|
||||
enc: |
|
||||
-----BEGIN AGE ENCRYPTED FILE-----
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAvYkdwSy9vc0lEWXJIdWRw
|
||||
VmJ2NStaZDVxaG1LNU1NQlErdElPdkQvY3pjCkJyL1BRR2w1dmpqYnk5Tys3eHpX
|
||||
c0FJdzA1bU5GWWhrUWhOK1Jqa2lTaU0KLS0tIDMzMEQwL3I0ckVyYWFubU9VNlAr
|
||||
NlBud3VHczNnMm5wOGhHdEoxTG5CNDgK4s7cFGvUCeztjjIAWtMW7TUqFP+YEQIg
|
||||
So5A7DGxVsUcqarTUPazpIBBlO4n9zj79Qe+eQd6ti0EZG6sYX6+2Q==
|
||||
-----END AGE ENCRYPTED FILE-----
|
||||
lastmodified: "2025-04-23T07:00:17Z"
|
||||
mac: ENC[AES256_GCM,data:JgaTIRbzD0hs2o86xUlQrPN2cPXvsuTH/zKG5xbQIDaYcEvD/mkuVa3hfnYKrA91kWg2Y1DgEi9583+o6UCl/+ldY4ptu+xpnYfyQFdhM4rB+KoP/pDt8vQKQ3zAX8fpAkugCgTTbuvm3TfQ1nt98V8boyhCn4JHNC1T0j7ZtZI=,iv:G3YJOLeDWDKuANo2mxS2JAdrRaonD87CU9BpCZZrlRs=,tag:mcKIdP5cSQUwNL2tcv/o6g==,type:str]
|
||||
unencrypted_suffix: _unencrypted
|
||||
version: 3.10.1
|
||||
@@ -1,100 +0,0 @@
|
||||
{
|
||||
pkgs,
|
||||
config,
|
||||
lib,
|
||||
outputs,
|
||||
...
|
||||
}: let
|
||||
ifTheyExist = groups: builtins.filter (group: builtins.hasAttr group config.users.groups) groups;
|
||||
in {
|
||||
users.mutableUsers = false;
|
||||
users.users.yukari = {
|
||||
description = "Yukari";
|
||||
group = "yukari";
|
||||
isNormalUser = true;
|
||||
shell = pkgs.fish;
|
||||
extraGroups = ifTheyExist [
|
||||
"networkmanager"
|
||||
"audio"
|
||||
"network"
|
||||
"video"
|
||||
"podman"
|
||||
"docker"
|
||||
"git"
|
||||
"gamemode"
|
||||
];
|
||||
|
||||
createHome = true;
|
||||
hashedPassword = "$y$j9T$rGuTL0rfiy7ht8L58BGCw0$fN.KwHjYlIitFEPHndKvV06ezgeWzP3/58o1kkviZwB";
|
||||
packages = [pkgs.home-manager];
|
||||
};
|
||||
users.groups.yukari = {};
|
||||
|
||||
home-manager.users.yukari = {
|
||||
imports =
|
||||
[
|
||||
../../../../homes/julian/features/fonts
|
||||
../../../../homes/julian/features/suites/cli
|
||||
]
|
||||
++ (builtins.attrValues outputs.homeManagerModules);
|
||||
|
||||
home = {
|
||||
username = lib.mkDefault "yukari";
|
||||
homeDirectory = lib.mkDefault "/home/${config.home.username}";
|
||||
stateVersion = lib.mkDefault "23.11";
|
||||
|
||||
sessionPath = ["$HOME/.local/bin"];
|
||||
|
||||
packages = with pkgs; [
|
||||
arandr
|
||||
calibre # ebook manager and viewer
|
||||
# digikam
|
||||
discord
|
||||
discord-ptb # in case discord updates take their time
|
||||
# dvdisaster
|
||||
# element-desktop
|
||||
# rocketchat-desktop
|
||||
thunderbird
|
||||
tdesktop # telegram
|
||||
# schildichat-desktop # not updated regularly
|
||||
nheko
|
||||
evince # Simple pdf reader, good for focusing on document content
|
||||
firefox
|
||||
vivaldi
|
||||
# geogebra
|
||||
cheese
|
||||
handbrake
|
||||
# kitty # Terminal, already available as feature
|
||||
libnotify
|
||||
libreoffice
|
||||
mate.engrampa
|
||||
nomacs # Image viewer
|
||||
kdePackages.okular # Pdf reader with many features, good for commenting documents
|
||||
pavucontrol
|
||||
pdfsam-basic # Split, merge, etc for pdfs
|
||||
qalculate-gtk # Nice gui calculator
|
||||
qpdfview
|
||||
# qutebrowser
|
||||
# realvnc-vnc-viewer
|
||||
rpi-imager # make isos
|
||||
# rustdesk
|
||||
tor-browser
|
||||
unstable.path-of-building # Path of Building
|
||||
# frajul.pob-dev-version # Path of Building
|
||||
vlc
|
||||
wineWowPackages.stable # 32-bit and 64-bit wine
|
||||
winetricks
|
||||
xclip # x11 clipboard access from terminal
|
||||
xfce.mousepad # simple text editor
|
||||
xournalpp # Edit pdf files
|
||||
zoom-us # Video conferencing
|
||||
zotero # Manage papers and other sources
|
||||
pdfpc # Present slides in pdf form
|
||||
];
|
||||
};
|
||||
programs = {
|
||||
home-manager.enable = true;
|
||||
git.enable = true;
|
||||
};
|
||||
};
|
||||
}
|
||||
+25
-19
@@ -1,29 +1,31 @@
|
||||
{pkgs, ...}: {
|
||||
{
|
||||
pwd,
|
||||
pkgs,
|
||||
...
|
||||
}: {
|
||||
imports = [
|
||||
./hardware-configuration.nix
|
||||
|
||||
../common/global
|
||||
../common/users/julian
|
||||
../common/users/wolfi
|
||||
../common/optional/binarycaches.nix
|
||||
"${pwd}/features-nixos/global"
|
||||
"${pwd}/features-nixos/users/julian"
|
||||
"${pwd}/features-nixos/users/wolfi"
|
||||
"${pwd}/features-nixos/optional/binarycaches.nix"
|
||||
|
||||
../common/optional/xserver.nix
|
||||
../common/optional/remote-builder.nix
|
||||
../common/optional/boot-efi.nix
|
||||
"${pwd}/features-nixos/optional/remote-builder.nix"
|
||||
"${pwd}/features-nixos/optional/boot-efi.nix"
|
||||
|
||||
# ../common/optional/greetd.nix
|
||||
"${pwd}/features-nixos/optional/greetd.nix"
|
||||
"${pwd}/features-nixos/optional/authentication.nix"
|
||||
"${pwd}/features-nixos/optional/pcmanfm.nix"
|
||||
"${pwd}/features-nixos/optional/pipewire.nix"
|
||||
|
||||
../common/optional/gdm.nix
|
||||
../common/optional/i3.nix
|
||||
"${pwd}/features-nixos/optional/openssh.nix"
|
||||
|
||||
../common/optional/openssh.nix
|
||||
"${pwd}/features-nixos/optional/virtualbox.nix"
|
||||
|
||||
../common/optional/authentication.nix
|
||||
../common/optional/pcmanfm.nix
|
||||
../common/optional/pipewire.nix
|
||||
|
||||
../common/optional/podman.nix
|
||||
../common/optional/flatpak.nix
|
||||
"${pwd}/features-nixos/optional/podman.nix"
|
||||
"${pwd}/features-nixos/optional/wireshark.nix"
|
||||
"${pwd}/features-nixos/optional/flatpak.nix"
|
||||
];
|
||||
|
||||
networking.hostName = "kardorf";
|
||||
@@ -32,8 +34,12 @@
|
||||
# Not using the drivers leads to way better results
|
||||
# services.xserver.videoDrivers = [ "nvidia" ];
|
||||
|
||||
programs.kdeconnect.enable = true;
|
||||
networking.networkmanager.insertNameservers = ["192.168.3.252"];
|
||||
|
||||
programs.kdeconnect.enable = true;
|
||||
programs.steam.enable = true;
|
||||
|
||||
programs.hyprland.enable = true;
|
||||
services.desktopManager.plasma6.enable = true;
|
||||
|
||||
# Enable CUPS to print documents.
|
||||
|
||||
@@ -1,159 +0,0 @@
|
||||
# Edit this configuration file to define what should be installed on
|
||||
# your system. Help is available in the configuration.nix(5) man page
|
||||
# and in the NixOS manual (accessible by running ‘nixos-help’).
|
||||
{
|
||||
lib,
|
||||
inputs,
|
||||
config,
|
||||
pkgs,
|
||||
...
|
||||
}: {
|
||||
imports = [
|
||||
inputs.nixos-hardware.nixosModules.raspberry-pi-4
|
||||
|
||||
./hardware-configuration.nix
|
||||
|
||||
../common/global
|
||||
../common/users/julian
|
||||
../common/optional/binarycaches.nix
|
||||
|
||||
../common/optional/pipewire.nix
|
||||
../common/optional/remote-builder.nix
|
||||
../common/optional/pcmanfm.nix
|
||||
../common/optional/redshift.nix
|
||||
../common/optional/authentication.nix
|
||||
];
|
||||
|
||||
# disko.devices.disk.main.device = "/dev/mmcblk1";
|
||||
|
||||
# networking.wireless.enable = true;
|
||||
# networking.wireless.environmentFile = config.sops.secrets."wifi/pianonix".path;
|
||||
# networking.wireless.networks = {
|
||||
# "@SSID@".psk = "@PSK@";
|
||||
# };
|
||||
networking.hostName = "pianonix";
|
||||
system.stateVersion = "22.11";
|
||||
|
||||
sops.secrets."vnc-passwd" = {
|
||||
owner = config.users.users.julian.name;
|
||||
sopsFile = ./vnc-passwd;
|
||||
format = "binary";
|
||||
};
|
||||
sops.secrets."wifi/pianonix" = {};
|
||||
sops.secrets."syncthing/pianonix/key" = {};
|
||||
sops.secrets."syncthing/pianonix/cert" = {};
|
||||
# sops.secrets."syncthing/public-keys/aspi-nix" = { };
|
||||
# sops.secrets."syncthing/public-keys/pianonix" = { };
|
||||
|
||||
modules = {
|
||||
syncthing = {
|
||||
enable = true;
|
||||
overrideSettings = true;
|
||||
};
|
||||
};
|
||||
|
||||
# Enable the Desktop Environment.
|
||||
# services.xserver.displayManager.lightdm.enable = true;
|
||||
services.displayManager.autoLogin = {
|
||||
enable = true;
|
||||
user = "julian";
|
||||
};
|
||||
|
||||
systemd.services.x11vnc = {
|
||||
description = "Run x11vnc server";
|
||||
after = ["display-manager.service"];
|
||||
wantedBy = ["multi-user.target"];
|
||||
serviceConfig = {
|
||||
ExecStart = "${pkgs.x11vnc}/bin/x11vnc -rfbauth ${
|
||||
config.sops.secrets."vnc-passwd".path
|
||||
} -forever -loop -noxdamage -repeat -rfbport 5900 -shared";
|
||||
User = config.users.users.julian.name;
|
||||
Restart = "on-failure";
|
||||
Environment = "DISPLAY=:0";
|
||||
};
|
||||
};
|
||||
|
||||
boot.loader.timeout = 1; # Set boot loader timeout to 1s
|
||||
|
||||
# De-facto disable network manager, which is enabled by gnome
|
||||
# networking.networkmanager.unmanaged = [ "*" ];
|
||||
services.xserver.desktopManager = {
|
||||
xfce = {
|
||||
enable = true;
|
||||
};
|
||||
};
|
||||
|
||||
services.xserver.displayManager.sessionCommands = ''
|
||||
# Prevent screen from going blank or turning off (values in min)
|
||||
${pkgs.xfce.xfconf}/bin/xfconf-query -c xfce4-power-manager -p /xfce4-power-manager/blank-on-ac -s 0
|
||||
${pkgs.xfce.xfconf}/bin/xfconf-query -c xfce4-power-manager -p /xfce4-power-manager/dpms-on-ac-sleep -s 0
|
||||
${pkgs.xfce.xfconf}/bin/xfconf-query -c xfce4-power-manager -p /xfce4-power-manager/dpms-on-ac-off -s 0
|
||||
'';
|
||||
|
||||
services.xserver.xautolock.enable = false;
|
||||
services.xserver.desktopManager.xfce.enableScreensaver = false;
|
||||
|
||||
# xdg.portal.lxqt.enable = true;
|
||||
|
||||
services.openssh = {
|
||||
enable = true;
|
||||
# require public key authentication for better security
|
||||
settings.PasswordAuthentication = false;
|
||||
settings.KbdInteractiveAuthentication = false;
|
||||
settings.PermitRootLogin = "yes";
|
||||
};
|
||||
users.users."root".openssh.authorizedKeys.keys = [
|
||||
"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDVk/m4ydcYXzHxTWeNw2MlwxKU+JirTVOeHsYR4wdTokwYyNWZ3/zPcU4+XekSRatwJW1LJYrZ1Y5IJkobzgnOvYVI7SXZ1Tbzb1kAcnChSt+Dp/pKdMPZ8yY3PTFZh+R5F3rWFA/YZqTRhh0vuxPIVbLl7zOPExWwYGn9crkZaYZvKHVvgE5660hXo9pxbUKsSs+DIy/AE7gfKiZLusY95nk9T/jZ7Vmhl0UsF0RiDsfxgE664/vEKe8b+82kKCDt5nJVe8THSrjaw4+NUhef6R8UoUO1/Pn4TKq3Gil3Z36wPEPdkw2lYzX+d1EFyaC3hZJedSUfdFliPOejIbNvvhPBBD1wAGxxyuJZB5KLwWN7/efwCgw45buLbVfUuwwug7K7GK84A3yzqClbZKKv8rYdO04UG64A+Taq2LeyxQIDjygTgGk/1j/0Neb1RO0FbjlbTeNMZ54P+u7BTEcikJCsbFeseWDtYzupQtLt96KMbcdRgHy0CTGqFHE+my8= julian@julian-aspi"
|
||||
];
|
||||
|
||||
services.syncthing.key = config.sops.secrets."syncthing/pianonix/key".path;
|
||||
services.syncthing.cert = config.sops.secrets."syncthing/pianonix/cert".path;
|
||||
services.syncthing.settings = {
|
||||
devices = {
|
||||
"aspi-nix" = {
|
||||
id = "DM5QRYU-ILJ4XYB-4V6NZDG-RAMVOND-3RSDSYR-52TW6RW-3XIU333-T7FNAA3";
|
||||
};
|
||||
"pianonix" = {
|
||||
id = "FD3XSFW-7LQSCIQ-KHZPLNQ-7VZYGKH-RJ2ZKTJ-BG67NRH-36TQIZM-CXDYWAH";
|
||||
};
|
||||
};
|
||||
folders = {
|
||||
"Klavier" = {
|
||||
path = "/home/julian/Klavier";
|
||||
id = "flc3m-q4gp2";
|
||||
devices = [
|
||||
"aspi-nix"
|
||||
"pianonix"
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
networking.firewall.enable = true;
|
||||
networking.firewall.allowedTCPPorts = [
|
||||
5900 # for vnc
|
||||
];
|
||||
|
||||
# Disable the GNOME3/GDM auto-suspend feature that cannot be disabled in GUI!
|
||||
# If no user is logged in, the machine will power down after 20 minutes.
|
||||
systemd.targets.sleep.enable = false;
|
||||
systemd.targets.suspend.enable = false;
|
||||
systemd.targets.hibernate.enable = false;
|
||||
systemd.targets.hybrid-sleep.enable = false;
|
||||
|
||||
## Raspberry pi specific config
|
||||
# hardware.raspberry-pi."4" = {
|
||||
# fkms-3d.enable = true;
|
||||
# touch-ft5406.enable = true;
|
||||
# };
|
||||
# Prevent host becoming unreachable on wifi after some time (for raspberry pi)
|
||||
networking.networkmanager.wifi.powersave = false;
|
||||
# Enable audio devices on raspberry pi
|
||||
# boot.kernelParams = [
|
||||
# "snd_bcm2835.enable_hdmi=1"
|
||||
# "snd_bcm2835.enable_headphones=1"
|
||||
# ];
|
||||
# boot.loader.raspberryPi.firmwareConfig = ''
|
||||
# dtparam=audio=on
|
||||
# '';
|
||||
}
|
||||
@@ -1,34 +0,0 @@
|
||||
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
||||
# and may be overwritten by future invocations. Please make changes
|
||||
# to /etc/nixos/configuration.nix instead.
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
modulesPath,
|
||||
...
|
||||
}: {
|
||||
imports = [(modulesPath + "/installer/scan/not-detected.nix")];
|
||||
|
||||
boot.initrd.availableKernelModules = ["xhci_pci"];
|
||||
boot.initrd.kernelModules = [];
|
||||
boot.kernelModules = [];
|
||||
boot.extraModulePackages = [];
|
||||
|
||||
fileSystems."/" = {
|
||||
device = "/dev/disk/by-uuid/44444444-4444-4444-8888-888888888888";
|
||||
fsType = "ext4";
|
||||
};
|
||||
|
||||
swapDevices = [];
|
||||
|
||||
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
|
||||
# (the default) this is the recommended approach. When using systemd-networkd it's
|
||||
# still possible to use this option, but it's recommended to use it in conjunction
|
||||
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
|
||||
networking.useDHCP = lib.mkDefault true;
|
||||
# networking.interfaces.end0.useDHCP = lib.mkDefault true;
|
||||
# networking.interfaces.wlan0.useDHCP = lib.mkDefault true;
|
||||
|
||||
nixpkgs.hostPlatform = lib.mkDefault "aarch64-linux";
|
||||
}
|
||||
@@ -1,28 +0,0 @@
|
||||
{
|
||||
"data": "ENC[AES256_GCM,data:13hToequR4A=,iv:U7a6mIOYanQjozPrL92edFrhdyuSJj14pqVa2tGE/zA=,tag:uyeE3dj7NTKPi0jNLkFMLA==,type:str]",
|
||||
"sops": {
|
||||
"kms": null,
|
||||
"gcp_kms": null,
|
||||
"azure_kv": null,
|
||||
"hc_vault": null,
|
||||
"age": [
|
||||
{
|
||||
"recipient": "age1ee5udznhadk6m7jtglu4709rep080yjyd2ukzdl8jma4mm92y3psv0slpg",
|
||||
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBWWUp5TU9kWTNpa0s5TFRC\nK1hoc0d0K3JQYWN3VVVWM2JvemtieGo2UGpVCit5MUcvZldBZkNNZ3ZWTWRtd0Zx\nT3I4aTdUcitPRmhhV0htZlhEYjhRakUKLS0tIEdmYUI4N1g1Nkp3YzdtaHJybVcz\neFNwUnd0Vyt2MTBpRTZlMzZnNHJGd1EKy/0zXv9CPf5k0ky7TBGY9GbcIeQyPk1L\nKmMCuWMLX0yTGqB3M3/UNdoc4L0q//7keUZH5PlkxJbnu6IN3fE5qg==\n-----END AGE ENCRYPTED FILE-----\n"
|
||||
},
|
||||
{
|
||||
"recipient": "age1q8lc5340gz5xw2f57nglrss68wv0j0hf36py2pdtrl6ky3yrq9qqk0njr4",
|
||||
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBMdy9tZlZtNFJPRFNUUUNI\nUWtPZmZOY1V5SHc5bTZOZVluTUV6N3dlQWprClVqK2tKNFlBWHdyNDF1Q0d2bi9z\naldTTDdWYzZ6WmgrNHlZSDlTSU9SbmsKLS0tIDJZM2Y4ZDVmZk54eTZLOTU4Ui9X\nR3l3WDkwRWUyakFLdGZXeDJxRUJsaHMK6hgZ1KYe9qx4tO7RervEAKGjNHg4mi0E\nxx3I9P8MFzPiCVKG5ZNxRx25y7H4bQSRRtxIlXIhqzf2+5Q6U7/Hrw==\n-----END AGE ENCRYPTED FILE-----\n"
|
||||
},
|
||||
{
|
||||
"recipient": "age1hsmfz8fjxu83sax9lr487h8xr6cyge0apdq4zpge4c8jpcjj2cksj825ct",
|
||||
"enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA2cUg4dUlCY0IwS3pPeTF5\nZTVkRTkzaVBYTmh0MmYyaHlOaFRHSnk5dWs4CmhvaTlSOTFDQzZmbHVudXpwQitV\nQjhRQWl3OHNLVGJYMm1ObVEyQmhxS0kKLS0tIDJsZnN4K2pUOEdIYVg4ZlQ5Ujhn\nNlpGL1hMVXd5cWR2YkdIVmJiblMzR1EKJYS51sKQ/tBV7dv88pOxJhzHQGckoF8q\nwIioVjs9sm4JBgQqSIbVhXwnKl05IUkyAgw6LfsbSJz3nKe7lmmRpg==\n-----END AGE ENCRYPTED FILE-----\n"
|
||||
}
|
||||
],
|
||||
"lastmodified": "2024-12-01T16:14:57Z",
|
||||
"mac": "ENC[AES256_GCM,data:zKz8OX1yi68Qn3X6HwdbgTCr/3ZVBh5Wz4KUACmWG3XhOEVi8uoDEdAxfKMDBqNzXLeDmxxTKj6TMLkk68ozDYJqu0OevVritnZqvBTr9VKGpMPBFN3DuaeqSZ6wjHGbce1iqO0kusnwopRbEWHmr/lZxiXTNgLPdN+p5Aszi54=,iv:resppfGPecKvKwqNwqecDBcXGhcTWSGZis8hf1jT0Us=,tag:V80P25Pr4HD9pUUrQHZSQg==,type:str]",
|
||||
"pgp": null,
|
||||
"unencrypted_suffix": "_unencrypted",
|
||||
"version": "3.8.1"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
#ENC[AES256_GCM,data:NSxfTl2hTXEoGl23aQnElG+df/1YzA==,iv:+oy9oITMGzdM2muDUPjwxJqUu1Bdyregl65/0hiulZ0=,tag:VKjforpyahKj0ktIN36gNw==,type:comment]
|
||||
julian-password: ENC[AES256_GCM,data:tgeu4uVI91j34+Gfzy2Uckmopj9bJNWiu65W0cdA76Kly3LH7RqXCq4rNM4DCwrsX3k9WdOlGX6T9edIjJgmbbe6MkeH7oQwiA==,iv:GE6zfSHymkAewjry7fofURz70az608+hja385LLeCIY=,tag:FqTopL5DyM3DTpa7AoGPDg==,type:str]
|
||||
syncthing:
|
||||
public-keys:
|
||||
aspi-nix: ENC[AES256_GCM,data:ZTykdQCyh4DMuQUCy1DSKsGNxxn1dinaqztpDdJY53pkWcW4YcWRHk94iGJQZgG1oLfr3AB2S3J6b9w2WuV3,iv:9z2ovHzq6JjRtHzNMIQtcUCinIjG/ImSGqqC7KPhpuw=,tag:No2LCjD+XXB77Su+s98MIA==,type:str]
|
||||
sops:
|
||||
age:
|
||||
- recipient: age1ee5udznhadk6m7jtglu4709rep080yjyd2ukzdl8jma4mm92y3psv0slpg
|
||||
enc: |
|
||||
-----BEGIN AGE ENCRYPTED FILE-----
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBualdnWmtBTThhZDFVdDRP
|
||||
WHlMamk1MFhUYUwwa0hyQmpobGNocC9VR0ZVCmc3N1FjcUZCNUdTTm91OVpwZDhP
|
||||
bTNXekp2bDd3Tjh6a2ZVTVNTSW9RTU0KLS0tIGJpcUVHb2ZlODgvelhwQ0JFU3l5
|
||||
WU5VanhYMTUvNklYazJxOXVveXhpM2cKCo+4FhhcbRylASEbQb9rAQUzEO1D+0AR
|
||||
52Jzc9s9rSdypeBRE7SaSOI4eVnkEjPfyhNFvMdxiBzBj7GdocpmCw==
|
||||
-----END AGE ENCRYPTED FILE-----
|
||||
- recipient: age1q8lc5340gz5xw2f57nglrss68wv0j0hf36py2pdtrl6ky3yrq9qqk0njr4
|
||||
enc: |
|
||||
-----BEGIN AGE ENCRYPTED FILE-----
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB4STZpU0ZnRzVVOFFRUXZG
|
||||
akcwS2Z5V3lmQzRTSGNHT2hDME5JMks2QTNNClpkZzNMc0wyRjVEaVlBRFlyNFhs
|
||||
M1pyeW1XdnZubnRxMzEzMFJoK0lkVVEKLS0tIENhRExzUWRWMUlObmhxazM5cU9y
|
||||
aDFyaDJackFoaEZOYWdTbWt0ODB1bm8Kg1VDAj5/i8ZbYxspIdXrI474YN5YkV4H
|
||||
86maCRDfUxO5lvu4zBa9pOmFtJ2iuJ2MxDnmCSHTl+GOk8yyUT8JhA==
|
||||
-----END AGE ENCRYPTED FILE-----
|
||||
- recipient: age1tguyu2yd5xv8rgjjl50cq6dq5rr7umqgv098dgre4u9wyj30ea7sexw62c
|
||||
enc: |
|
||||
-----BEGIN AGE ENCRYPTED FILE-----
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAveE9NV2JCOW9odlN6Wmkw
|
||||
WFEvU2pka3htV2FTTFlpc05ES2JjbGxTaFJZCjhYdG1sRVBFaEF3YjNkWEw3Ny8x
|
||||
MlYyTjJBMHA2YVpHRkkwWW5hNDdrS1UKLS0tIFZXTFNVbkd6VFExc0dSVU4vd3JF
|
||||
ajlFY2pvWW13VGxOZ0hEc3dMbU9IeUUKNSf7ycj+1XHhsoghmY2iR1BwIySqfIOF
|
||||
zawE+MQcQg0u+fy6Aik26eUGvQG3rya2Fx2+3VlAbKB+rbiP0fwsgg==
|
||||
-----END AGE ENCRYPTED FILE-----
|
||||
- recipient: age15lxw97z03q40xrdscnxqqugh5ky5aqrerg2t2rphkcqm6rnllurq8v98q5
|
||||
enc: |
|
||||
-----BEGIN AGE ENCRYPTED FILE-----
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBxaTNJNkJ0RVJiYlRzcmlX
|
||||
TmEweVdLaGpoVXMxZEFDU3dOZTJCRjdiNENBCkZ3bjJUNm1vcmY1ZUpZcEo4OGxa
|
||||
UWJKSjNKL002UDhmTmJER2M0MjJ3aG8KLS0tIFMvZjBkOS83T3NDUE82M3kweVNw
|
||||
VXhoN0VyWkVxMEJPQ3orVUNDK21rRU0KvnmuFxcCpP+LZg7v5jaStw9F0owVrQl9
|
||||
AkIq7GUJh7xewLxcVZfiBRpXMhw/mM8LYnd2KGP8R/TfYg+v0//+5A==
|
||||
-----END AGE ENCRYPTED FILE-----
|
||||
lastmodified: "2026-03-23T19:37:41Z"
|
||||
mac: ENC[AES256_GCM,data:nd4HHv/KfoLj5qGINngvWZX9XdYqtmJnUREo0BOO2JZgYR3AVw0ppmGhj1RFy1bVKdfll/fMoD5tGNc3UQJPB0j2g/1pj47AF44V0d1J79RP6dwov30rr0QnsXVt7P9EOFL/W6TRugYO9J7LZs+tpsSALfwNPTfnulSJQtaJdG4=,iv:EKfq4eKyv1HeMy/zS+V3OKpdL9IVjE5mg8iuz8OPgso=,tag:W8+CZLnYuNbnKRS1kqhY0w==,type:str]
|
||||
unencrypted_suffix: _unencrypted
|
||||
version: 3.11.0
|
||||
@@ -5,4 +5,5 @@
|
||||
colors = import ./colors.nix;
|
||||
hostname = import ./hostname.nix;
|
||||
non-nixos = import ./non-nixos.nix;
|
||||
hm-expire = import ./hm-expire.nix;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}: let
|
||||
cfg = config.hm-expire;
|
||||
in {
|
||||
options.hm-expire = {
|
||||
enable = lib.mkEnableOption "Whether to enable hm-expire";
|
||||
dates = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = "weekly";
|
||||
};
|
||||
expire = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = "-30 days";
|
||||
};
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
# This creates a user-level systemd service
|
||||
systemd.user.services.cleanup-home-manager = {
|
||||
Unit = {
|
||||
Description = "Cleanup old Home Manager generations";
|
||||
};
|
||||
Service = {
|
||||
Type = "oneshot";
|
||||
ExecStart = "${pkgs.bash}/bin/bash -c '${pkgs.home-manager}/bin/home-manager expire-generations \"${cfg.expire}\"'";
|
||||
};
|
||||
};
|
||||
|
||||
systemd.user.timers.cleanup-home-manager = {
|
||||
Unit = {
|
||||
Description = "Weekly cleanup of Home Manager generations";
|
||||
};
|
||||
Timer = {
|
||||
OnCalendar = cfg.dates;
|
||||
Persistent = true;
|
||||
};
|
||||
Install = {
|
||||
WantedBy = ["timers.target"];
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -2,4 +2,5 @@
|
||||
# hydra-auto-upgrade = import ./hydra-auto-upgrade.nix;
|
||||
syncthing = import ./syncthing.nix;
|
||||
frajulAutoUpgrade = import ./frajul-auto-upgrade.nix;
|
||||
pianoLEDVisualizer = import ./piano-led-visualizer.nix;
|
||||
}
|
||||
|
||||
@@ -27,6 +27,10 @@ in {
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
security.sudo.extraConfig = ''
|
||||
root ALL=(julian) NOPASSWD: ${pkgs.git}/bin/git -C "${cfg.flakePath}" commit -m *
|
||||
'';
|
||||
|
||||
# Ensure the flag directory exists
|
||||
systemd.tmpfiles.rules = [
|
||||
"d /var/lib/frajul-auto-upgrade 0755 root root -"
|
||||
@@ -67,10 +71,16 @@ in {
|
||||
echo $$ > "$LOCK_FILE"
|
||||
trap 'rm -f "$LOCK_FILE"' EXIT
|
||||
|
||||
if /run/current-system/sw/bin/nix flake update --flake "${cfg.flakePath}" && /run/current-system/sw/bin/nixos-rebuild switch --flake "${cfg.flakePath}"; then
|
||||
# Back up flake.lock
|
||||
cp -f "${cfg.flakePath}/flake.lock" /var/lib/frajul-auto-upgrade/flake.lock.bak
|
||||
|
||||
# Try updating
|
||||
if /run/current-system/sw/bin/nix flake update --flake "${cfg.flakePath}" && /run/current-system/sw/bin/nixos-rebuild switch --flake "${cfg.flakePath}" && ${pkgs.sudo}/bin/sudo -u julian git -C "${cfg.flakePath}" commit -m "Auto-update flake.lock" -- flake.lock; then
|
||||
echo "success" > "$LAST_STATUS_FILE"
|
||||
else
|
||||
echo "failure" > "$LAST_STATUS_FILE"
|
||||
# Restore flake.lock
|
||||
cp -f /var/lib/frajul-auto-upgrade/flake.lock.bak "${cfg.flakePath}/flake.lock"
|
||||
fi
|
||||
|
||||
# Write full timestamp
|
||||
|
||||
@@ -11,7 +11,10 @@ in {
|
||||
system.hydraAutoUpgrade = {
|
||||
enable = lib.mkEnableOption "periodic hydra-based auto upgrade";
|
||||
operation = lib.mkOption {
|
||||
type = lib.types.enum ["switch" "boot"];
|
||||
type = lib.types.enum [
|
||||
"switch"
|
||||
"boot"
|
||||
];
|
||||
default = "switch";
|
||||
};
|
||||
dates = lib.mkOption {
|
||||
|
||||
@@ -0,0 +1,51 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}: let
|
||||
cfg = config.services.piano-led-visualizer;
|
||||
in {
|
||||
options.services.piano-led-visualizer = {
|
||||
enable = lib.mkEnableOption "Enable Piano LED Visualizer";
|
||||
|
||||
user = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = "plv";
|
||||
description = "User to run the Piano LED Visualizer service.";
|
||||
};
|
||||
|
||||
group = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = "plv";
|
||||
description = "Group to run the Piano LED Visualizer service.";
|
||||
};
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
users.users.${cfg.user} = {
|
||||
isSystemUser = true;
|
||||
group = cfg.group;
|
||||
createHome = true;
|
||||
home = "/home/${cfg.user}";
|
||||
extraGroups = ["wheel" "gpio"];
|
||||
};
|
||||
users.groups.${cfg.group} = {};
|
||||
|
||||
systemd.services.piano-led-visualizer = {
|
||||
description = "Piano LED Visualizer";
|
||||
after = ["network-online.target"];
|
||||
wants = ["network-online.target"];
|
||||
wantedBy = ["multi-user.target"];
|
||||
|
||||
serviceConfig = {
|
||||
WorkingDirectory = "/home/${cfg.user}/Piano-LED-Visualizer";
|
||||
ExecStart = "${pkgs.frajul.piano-led-visualizer}/bin/piano-led-visualizer";
|
||||
Restart = "always";
|
||||
Type = "simple";
|
||||
# User = cfg.user;
|
||||
# Group = cfg.group;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
+18
-18
@@ -2,19 +2,19 @@
|
||||
# For every flake input, aliases 'pkgs.inputs.${flake}' to
|
||||
# 'inputs.${flake}.packages.${pkgs.system}' or
|
||||
# 'inputs.${flake}.legacyPackages.${pkgs.system}'
|
||||
flake-inputs = final: _: {
|
||||
inputs =
|
||||
builtins.mapAttrs (
|
||||
_: flake: let
|
||||
legacyPackages = (flake.legacyPackages or {}).${final.system} or {};
|
||||
packages = (flake.packages or {}).${final.system} or {};
|
||||
in
|
||||
if legacyPackages != {}
|
||||
then legacyPackages
|
||||
else packages
|
||||
)
|
||||
inputs;
|
||||
};
|
||||
# flake-inputs = final: _: {
|
||||
# inputs =
|
||||
# builtins.mapAttrs (
|
||||
# _: flake: let
|
||||
# legacyPackages = (flake.legacyPackages or {}).${final.system} or {};
|
||||
# packages = (flake.packages or {}).${final.system} or {};
|
||||
# in
|
||||
# if legacyPackages != {}
|
||||
# then legacyPackages
|
||||
# else packages
|
||||
# )
|
||||
# inputs;
|
||||
# };
|
||||
|
||||
input-flake-packages = final: prev: {
|
||||
sheet-organizer = inputs.sheet-organizer.packages.${prev.system}.default; # TODO: change sheet-organizer package output
|
||||
@@ -22,15 +22,15 @@
|
||||
};
|
||||
|
||||
# Adds my custom packages, available as pkgs.frajul.xyz
|
||||
my-pkgs = final: prev: {frajul = import ../pkgs {pkgs = final;};};
|
||||
frajul-pkgs = final: prev: {frajul = import ../packages {pkgs = final;};};
|
||||
|
||||
nixpkgs-stable-unstable = final: prev: {
|
||||
unstable = import inputs.nixpkgs {
|
||||
system = prev.system;
|
||||
unstable = import inputs.nixpkgs-unstable {
|
||||
system = prev.stdenv.hostPlatform.system;
|
||||
config.allowUnfree = true;
|
||||
};
|
||||
stable = import inputs.nixpkgs-stable {
|
||||
system = prev.system;
|
||||
stable = import inputs.nixpkgs {
|
||||
system = prev.stdenv.hostPlatform.system;
|
||||
config.allowUnfree = true;
|
||||
};
|
||||
};
|
||||
|
||||
@@ -10,7 +10,11 @@
|
||||
sos = pkgs.callPackage ./sos {};
|
||||
xwacomcalibrate = pkgs.callPackage ./xwacomcalibrate {};
|
||||
acer-battery-health-mode = pkgs.callPackage ./acer-battery-health-mode {};
|
||||
pob2 = pkgs.callPackage ./pob2 {};
|
||||
wl-ocr = pkgs.callPackage ./wl-ocr {};
|
||||
rtklib = pkgs.qt6Packages.callPackage ./rtklib {};
|
||||
typst-languagetool = pkgs.callPackage ./typst-languagetool {};
|
||||
smath-studio = pkgs.callPackage ./smath-studio.nix {};
|
||||
|
||||
# rpi-ws281x-python = pkgs.callPackage ./rpi-ws281x-python {};
|
||||
# piano-led-visualizer = pkgs.callPackage ./piano-led-visualizer {};
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user