Compare commits

..

22 Commits

Author SHA1 Message Date
808e2ce408 feat(hosts): add PineTab2 config 2026-05-13 14:14:47 +02:00
673b32c33b feat(wlr-which-key): use caelestia launcher when available 2026-05-13 00:10:38 +02:00
d27f63a0f7 feat(caelestia): increase timeout from 5m to 1h 2026-05-06 23:50:55 +02:00
90f6102481 feat(packages): add KiCad to phundrak packages 2026-05-06 23:50:19 +02:00
e44acd9b06 refactor(firefox): move phundrak firefox config to separate file
For better readability
2026-05-06 23:49:40 +02:00
177ce475a9 refactor(tmux): declare keybinds with Nix syntax 2026-05-06 23:49:23 +02:00
1411f6c47e feat(jj-cz): use develop branch for jj-cz 2026-05-06 23:49:23 +02:00
d1bee6c14d fix(waydroid): use package that won’t error out 2026-05-03 15:37:16 +02:00
5514d347c7 feat(nix): add marpa as binary cache for Nix 2026-05-01 16:27:56 +02:00
06519d555b feat(packages): add QGIS 2026-05-01 15:24:44 +02:00
ce94f09dd4 feat(i18n): proper multilingual input
Use fcitx5 to switch between different inputs. Installed mozc-ut for
Japanese input with the bepo layout, as well as fcitx5-chinese to load
table-defined layouts for the IPA/X-SAMPA input method.

Currently, mozc_server and fcitx5 need to be launched by the
compositor (only Hyprland for now), auto-launching from module options
needs to be implemented in the future.
2026-05-01 15:24:44 +02:00
171d635b72 fix(gampo): refer to proper home config 2026-04-28 10:47:38 +02:00
3bc4e3dd15 feat(vcs): jj config for Creug 2026-04-12 18:07:33 +02:00
4b7a64c8ac fix(copyparty): disable copyparty for elcafe for now 2026-04-12 15:18:38 +02:00
9024d2c744 fix(kernel): remove reference to deprecated hardened kernel 2026-04-12 15:09:52 +02:00
d13d81c60a feat(devshell): add jj and git to dev environment 2026-04-12 15:02:17 +02:00
88cf103332 chore(lockfile): update lockfile 2026-04-12 15:00:14 +02:00
9431a71539 feat(ai): add opencode to AI packages 2026-04-12 15:00:14 +02:00
6fa865644a feat(wl-kbptr): package wl-kbptr for NixOS as home module 2026-04-12 14:58:02 +02:00
154d0e4ddb chore(flake): update flake lock, remove devenv input 2026-04-12 14:58:02 +02:00
cae0357dbe feat(claude-code): add sox for voice mode 2026-04-12 14:58:02 +02:00
477a0b7372 feat(firefox): dedicated module and tridactyl config 2026-04-12 14:57:58 +02:00
45 changed files with 2554 additions and 310 deletions

123
flake.lock generated
View File

@@ -72,11 +72,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1772764582, "lastModified": 1778125502,
"narHash": "sha256-hSwjmpXHFqzSXrndVekA0IheKrbC7wi0IbfZTYwlmXw=", "narHash": "sha256-QAAO9RCR6byVJi50l8RMVJWzrsNYbXonfR6tqU93vIQ=",
"owner": "caelestia-dots", "owner": "caelestia-dots",
"repo": "cli", "repo": "cli",
"rev": "4bcd42f482d038b98145b0b03388244b68b7d35d", "rev": "7b8a4281aa8b2b12745de531cce0c65d87aea2e5",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -94,11 +94,11 @@
"quickshell": "quickshell" "quickshell": "quickshell"
}, },
"locked": { "locked": {
"lastModified": 1774758352, "lastModified": 1778381004,
"narHash": "sha256-zrv2EjkiGT5BYyg9kOXfo48V6bUf0nyTjis/40ca+7s=", "narHash": "sha256-JwIlrajiY74obxyTMu/Ym6wOEQaCjpHwfziPK+E5u3Q=",
"owner": "caelestia-dots", "owner": "caelestia-dots",
"repo": "shell", "repo": "shell",
"rev": "5c59e4490a43eb38b39133d80c47490f0963f216", "rev": "2ca4ad4a434e91e73504debd5225e66dc5ebb2b6",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -115,11 +115,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1774411715, "lastModified": 1778198574,
"narHash": "sha256-mceIHtVMXpLAfr1W0VK9ceTBX5yKu4gGWpVbThWTsAA=", "narHash": "sha256-XzgYoibIH6diZoZ2GzoGeyV2xdXAwBtXdAze+Qu2kR0=",
"owner": "9001", "owner": "9001",
"repo": "copyparty", "repo": "copyparty",
"rev": "26e663d111e39ca96c63702ad27a05b6736607cf", "rev": "139ef1851e5d698521a5c2078c56f951d6e54d00",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -374,11 +374,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1774738535, "lastModified": 1778609305,
"narHash": "sha256-2jfBEZUC67IlnxO5KItFCAd7Oc+1TvyV/jQlR+2ykGQ=", "narHash": "sha256-muTc+WME6k3sfTr/Pvmw8hrK7zXrbl961TEF9wPeAnk=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "769e07ef8f4cf7b1ec3b96ef015abec9bc6b1e2a", "rev": "5878fdadfe2cfe1b3383b38d66117f7b80696b68",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -398,15 +398,16 @@
"rust-overlay": "rust-overlay" "rust-overlay": "rust-overlay"
}, },
"locked": { "locked": {
"lastModified": 1774451186, "lastModified": 1777830987,
"narHash": "sha256-5IYhofBilDXbM6MWAZLTKxuThjtL3lGNTXdBGsbgRek=", "narHash": "sha256-fPsv7qZHb9EO04IoQ6cGAj+6/y1pSMEFWmvLCULOEuM=",
"ref": "refs/heads/develop", "ref": "develop",
"rev": "a5b2bc41aafd203203b4eba4f247a670dd9cb252", "rev": "bd6892d91e1a04f9b092b22831a977f08a36cbe0",
"revCount": 29, "revCount": 40,
"type": "git", "type": "git",
"url": "https://labs.phundrak.com/phundrak/jj-cz" "url": "https://labs.phundrak.com/phundrak/jj-cz"
}, },
"original": { "original": {
"ref": "develop",
"type": "git", "type": "git",
"url": "https://labs.phundrak.com/phundrak/jj-cz" "url": "https://labs.phundrak.com/phundrak/jj-cz"
} }
@@ -464,11 +465,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1774762074, "lastModified": 1778393439,
"narHash": "sha256-89Mh4Eb/5stVJX6kGagVMijcU2FmfeD8Qv7UXc5d92o=", "narHash": "sha256-mOtQxUjtKaPHLeoLOY/YEDctmud1X9KwJr4kE1MJ3Wc=",
"owner": "nix-community", "owner": "nix-community",
"repo": "nix-index-database", "repo": "nix-index-database",
"rev": "bc13aeaed568be76eab84df88ff39261bb52ff70", "rev": "01466c414c7357ae2ce32be4a272a7c69e94ab5f",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -508,11 +509,11 @@
}, },
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1774386573, "lastModified": 1778443072,
"narHash": "sha256-4hAV26quOxdC6iyG7kYaZcM3VOskcPUrdCQd/nx8obc=", "narHash": "sha256-zi7/fsqM/kFdNuED//4WOCUtezGtKKqRNORjMvfwjnA=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "46db2e09e1d3f113a13c0d7b81e2f221c63b8ce9", "rev": "da5ad661ba4e5ef59ba743f0d112cbc30e474f32",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -522,6 +523,21 @@
"type": "github" "type": "github"
} }
}, },
"nixpkgsStable": {
"locked": {
"lastModified": 1778430510,
"narHash": "sha256-Ti+ZBvW6yrWWAg2szExVTwCd4qOJ3KlVr1tFHfyfi8Q=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "8fd9daa3db09ced9700431c5b7ad0e8ba199b575",
"type": "github"
},
"original": {
"id": "nixpkgs",
"ref": "nixos-25.11",
"type": "indirect"
}
},
"pumo-system-info": { "pumo-system-info": {
"inputs": { "inputs": {
"flake-utils": "flake-utils_4", "flake-utils": "flake-utils_4",
@@ -552,11 +568,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1772925576, "lastModified": 1778222427,
"narHash": "sha256-mMoiXABDtkSJxCYDrkhJ/TrrJf5M46oUfIlJvv2gkZ0=", "narHash": "sha256-6GFiP611nEJvtm+m03sMyfaVIJ9QOCi//hS+PPKyyPA=",
"ref": "refs/heads/master", "ref": "refs/heads/master",
"rev": "15a84097653593dd15fad59a56befc2b7bdc270d", "rev": "d1760ed1f31c02a95b37a9bf4084129c829ebe7f",
"revCount": 750, "revCount": 817,
"type": "git", "type": "git",
"url": "https://git.outfoxxed.me/outfoxxed/quickshell" "url": "https://git.outfoxxed.me/outfoxxed/quickshell"
}, },
@@ -565,6 +581,33 @@
"url": "https://git.outfoxxed.me/outfoxxed/quickshell" "url": "https://git.outfoxxed.me/outfoxxed/quickshell"
} }
}, },
"rockchip": {
"inputs": {
"nixpkgsStable": [
"nixpkgsStable"
],
"nixpkgsUnstable": [
"nixpkgs"
],
"utils": [
"flake-utils"
]
},
"locked": {
"lastModified": 1778273074,
"narHash": "sha256-gPbn0KjsgS2cJa/ENSMtjN0h8dIEy+2N6g8tw9915pM=",
"owner": "raboof",
"repo": "nixos-rockchip",
"rev": "2aab433a41cc9ba862ae73012acdd2eec3547667",
"type": "github"
},
"original": {
"owner": "raboof",
"ref": "pinetab-linux-7.0",
"repo": "nixos-rockchip",
"type": "github"
}
},
"root": { "root": {
"inputs": { "inputs": {
"caelestia-shell": "caelestia-shell", "caelestia-shell": "caelestia-shell",
@@ -574,7 +617,9 @@
"jj-cz": "jj-cz", "jj-cz": "jj-cz",
"nix-index-database": "nix-index-database", "nix-index-database": "nix-index-database",
"nixpkgs": "nixpkgs", "nixpkgs": "nixpkgs",
"nixpkgsStable": "nixpkgsStable",
"pumo-system-info": "pumo-system-info", "pumo-system-info": "pumo-system-info",
"rockchip": "rockchip",
"sops-nix": "sops-nix", "sops-nix": "sops-nix",
"spicetify": "spicetify", "spicetify": "spicetify",
"srvos": "srvos", "srvos": "srvos",
@@ -647,11 +692,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1774760784, "lastModified": 1777944972,
"narHash": "sha256-D+tgywBHldTc0klWCIC49+6Zlp57Y4GGwxP1CqfxZrY=", "narHash": "sha256-VfGRo1qTBKOe3s2gOv8LSoA6Fk19PvBlwQ1ECN0Evn8=",
"owner": "Mic92", "owner": "Mic92",
"repo": "sops-nix", "repo": "sops-nix",
"rev": "8adb84861fe70e131d44e1e33c426a51e2e0bfa5", "rev": "c591bf665727040c6cc5cb409079acb22dcce33c",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -668,11 +713,11 @@
"systems": "systems_4" "systems": "systems_4"
}, },
"locked": { "locked": {
"lastModified": 1774157037, "lastModified": 1778540809,
"narHash": "sha256-kJpgEIF0sxMW0vx543m3AwyqptJOxPoOJY1DfJ4jQas=", "narHash": "sha256-FNXls2QZTcxY0Dem3QtSewnr8vUKMDsTw9m8pLOnhTc=",
"owner": "Gerg-L", "owner": "Gerg-L",
"repo": "spicetify-nix", "repo": "spicetify-nix",
"rev": "2e2234c2932a3aff5f845cda33cb1972a9e889aa", "rev": "83939d7df4c0f1b8ee88cabde112223280a48554",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -688,11 +733,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1774517972, "lastModified": 1778468351,
"narHash": "sha256-oPIVzGlMmfWuJlRbr87yU3cnV8NxtwTG92GqpQczlkw=", "narHash": "sha256-A5ZdpWN5d+OmKln2EPPeMmPJaBwbugO9dEhyp3pn/X8=",
"owner": "nix-community", "owner": "nix-community",
"repo": "srvos", "repo": "srvos",
"rev": "0ddba2fbd72bb60f8b35b7de1ad67590f454d402", "rev": "23122d21dfbe00e072ce515e21af18882bc88fd7",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -791,11 +836,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1774759885, "lastModified": 1778303188,
"narHash": "sha256-Y3D2GnZTO6BhGWeVcO6qUkiO5g0dDL2tmokLVWNC1WY=", "narHash": "sha256-zXFSvK80qpI91B7DU9QSExAtafSrz6vzormh2kUi6kQ=",
"owner": "youwen5", "owner": "youwen5",
"repo": "zen-browser-flake", "repo": "zen-browser-flake",
"rev": "16e3f4cd221a030186a96015d82dcb3fb4afa4d6", "rev": "9346c84657a9cab472bc4ee5a2d65d42a72d5346",
"type": "github" "type": "github"
}, },
"original": { "original": {

View File

@@ -2,6 +2,7 @@
description = "Home Manager configuration of phundrak"; description = "Home Manager configuration of phundrak";
inputs = { inputs = {
nixpkgsStable.url = "nixpkgs/nixos-25.11";
nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable"; nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";
flake-utils.url = "github:numtide/flake-utils"; flake-utils.url = "github:numtide/flake-utils";
@@ -26,7 +27,7 @@
}; };
jj-cz = { jj-cz = {
url = "git+https://labs.phundrak.com/phundrak/jj-cz"; url = "git+https://labs.phundrak.com/phundrak/jj-cz?ref=develop";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
@@ -35,6 +36,13 @@
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
rockchip = {
url = "github:raboof/nixos-rockchip/pinetab-linux-7.0";
inputs.utils.follows = "flake-utils";
inputs.nixpkgsStable.follows = "nixpkgsStable";
inputs.nixpkgsUnstable.follows = "nixpkgs";
};
sops-nix = { sops-nix = {
url = "github:Mic92/sops-nix"; url = "github:Mic92/sops-nix";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
@@ -58,14 +66,15 @@
nixConfig = { nixConfig = {
extra-trusted-public-keys = [ extra-trusted-public-keys = [
"devenv.cachix.org-1:w1cLUi8dv3hnoSPGAuibQv+f9TZLr6cv/Hm9XgU50cw=" "marpa-local:XoO+dFN4PeauF52pYuy3Vh4Sdtl2qIdxu5aUasWKv6Q="
"phundrak.cachix.org-1:osJAkYO0ioTOPqaQCIXMfIRz1/+YYlVFkup3R2KSexk=" "phundrak.cachix.org-1:osJAkYO0ioTOPqaQCIXMfIRz1/+YYlVFkup3R2KSexk="
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=" "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
"cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY="
]; ];
extra-substituters = [ extra-substituters = [
"https://nix-community.cachix.org?priority=10" "http://marpa:5000?priority=5"
"https://devenv.cachix.org?priority=20" "https://phundrak.cachix.org?priority=10"
"https://phundrak.cachix.org?priority=30" "https://nix-community.cachix.org?priority=20"
"https://cache.nixos.org?priority=40" "https://cache.nixos.org?priority=40"
]; ];
extra-experimental-features = [ extra-experimental-features = [
@@ -80,6 +89,7 @@
nixpkgs, nixpkgs,
flake-utils, flake-utils,
home-manager, home-manager,
rockchip,
srvos, srvos,
... ...
} @ inputs: } @ inputs:
@@ -90,7 +100,11 @@
in { in {
formatter = pkgs.alejandra; formatter = pkgs.alejandra;
devShells.default = pkgs.mkShell { devShells.default = pkgs.mkShell {
buildInputs = [pkgs.nh]; buildInputs = [
pkgs.nh
pkgs.jujutsu
pkgs.git
];
}; };
packages = { packages = {
@@ -118,7 +132,7 @@
}; };
"phundrak@gampo" = home-manager.lib.homeManagerConfiguration { "phundrak@gampo" = home-manager.lib.homeManagerConfiguration {
inherit extraSpecialArgs pkgs; inherit extraSpecialArgs pkgs;
modules = withUserModules ./users/phundrak/host/marpa.nix; modules = withUserModules ./users/phundrak/host/gampo.nix;
}; };
"phundrak@marpa" = home-manager.lib.homeManagerConfiguration { "phundrak@marpa" = home-manager.lib.homeManagerConfiguration {
inherit extraSpecialArgs pkgs; inherit extraSpecialArgs pkgs;
@@ -128,6 +142,10 @@
inherit extraSpecialArgs pkgs; inherit extraSpecialArgs pkgs;
modules = withUserModules ./users/phundrak/host/naromk3.nix; modules = withUserModules ./users/phundrak/host/naromk3.nix;
}; };
"phundrak@pinetab2" = home-manager.lib.homeManagerConfiguration {
inherit extraSpecialArgs pkgs;
modules = withUserModules ./users/phundrak/host/pinetab2.nix;
};
"phundrak@tilo" = home-manager.lib.homeManagerConfiguration { "phundrak@tilo" = home-manager.lib.homeManagerConfiguration {
inherit extraSpecialArgs pkgs; inherit extraSpecialArgs pkgs;
modules = withUserModules ./users/phundrak/host/tilo.nix; modules = withUserModules ./users/phundrak/host/tilo.nix;
@@ -141,6 +159,10 @@
inputs.copyparty.nixosModules.default inputs.copyparty.nixosModules.default
]; ];
withSystemModules = modules: nixpkgs.lib.lists.flatten (defaultSystemModules ++ [modules]); withSystemModules = modules: nixpkgs.lib.lists.flatten (defaultSystemModules ++ [modules]);
pinetabConfig = import ./utils/pinetab.nix {
inherit nixpkgs rockchip specialArgs;
additionalModules = defaultSystemModules;
};
in { in {
alys = nixpkgs.lib.nixosSystem { alys = nixpkgs.lib.nixosSystem {
inherit specialArgs; inherit specialArgs;
@@ -156,7 +178,7 @@
}; };
marpa = nixpkgs.lib.nixosSystem { marpa = nixpkgs.lib.nixosSystem {
inherit specialArgs; inherit specialArgs;
modules = withSystemModules ./hosts/marpa/configuration.nix; modules = withSystemModules ./hosts/marpa;
}; };
NaroMk3 = nixpkgs.lib.nixosSystem { NaroMk3 = nixpkgs.lib.nixosSystem {
inherit specialArgs; inherit specialArgs;
@@ -167,6 +189,7 @@
./hosts/naromk3/configuration.nix ./hosts/naromk3/configuration.nix
]; ];
}; };
pinetab2 = pinetabConfig "x86_64-linux" ./hosts/pinetab2/gnome.nix;
tilo = nixpkgs.lib.nixosSystem { tilo = nixpkgs.lib.nixosSystem {
inherit specialArgs; inherit specialArgs;
modules = withSystemModules ./hosts/tilo/configuration.nix; modules = withSystemModules ./hosts/tilo/configuration.nix;

View File

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

View File

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

View File

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

View File

@@ -0,0 +1,75 @@
{
config,
inputs,
...
}: {
imports = [
inputs.sops-nix.nixosModules.sops
../../system/desktop
../../system/dev
../../system/hardware
../../system/i18n
../../system/misc.nix
../../system/network
../../system/packages
../../system/security
../../system/services
../../system/users
];
system.stateVersion = "25.11";
# documentation.nixos.enable = false;
# nix.settings.trusted-users = ["root" "@wheel"];
mySystem = {
desktop = {
hyprland.enable = true;
niri.enable = true;
waydroid.enable = true;
xserver = {
enable = true;
de = "gnome";
};
};
dev.docker = {
enable = true;
podman.enable = true;
autoprune.enable = true;
};
hardware = {
bluetooth.enable = true;
input.opentablet.enable = true;
sound.enable = true;
};
i18n.input.enable = true;
misc.keymap = "fr-bepo";
networking = {
hostname = "pinetab2";
id = "99a11b15";
wifi.disablePowersave = true;
};
packages = {
appimage.enable = true;
flatpak.enable = true;
nix = {
gc.automatic = true;
nix-ld.enable = true;
};
};
services.ssh.enable = true;
users = {
root.disablePassword = true;
phundrak = {
enable = true;
trusted = true;
};
};
};
sops.secrets.extraHosts = {
inherit (config.users.users.root) group;
owner = config.users.users.phundrak.name;
mode = "0440";
};
}

37
hosts/pinetab2/gnome.nix Normal file
View File

@@ -0,0 +1,37 @@
{
pkgs,
config,
...
}: {
# https://github.com/systemd/systemd/pull/35304#issuecomment-3855146191
# gnome autorotate expects 'normal' is the _display panel_ normal, but
# mutter autoconfiguration rotates by 90deg.
# compensating with gdctl for now, though it would be better to 'properly'
# fix this.
services.udev = {
extraHwdb = ''
sensor:modalias:*sc7a20:*
ACCEL_MOUNT_MATRIX=1, 0, 0; 0, 0, 1; 0, 1, 0
'';
extraRules = ''
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="1018", ATTRS{idProduct}=="1006", ENV{SYSTEMD_WANTS}+="landscape.service", TAG+="systemd"
'';
};
systemd.services.landscape = {
script = ''
${pkgs.mutter}/bin/gdctl set --logical-monitor --primary --monitor=DSI-1 --transform normal
'';
serviceConfig.User = "phundrak";
serviceConfig.Type = "oneshot";
environment = {
"DBUS_SESSION_BUS_ADDRESS" = "unix:path=/run/user/${toString config.users.users."phundrak".uid}/bus";
};
};
environment.systemPackages = with pkgs; [
gnomeExtensions.arc-menu
gnomeExtensions.dash-to-dock
gnomeExtensions.dash-to-panel
gnomeExtensions.gjs-osk
gnomeExtensions.one-window-wonderland
];
}

View File

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

View File

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

View File

@@ -1,68 +1,15 @@
{ {
lib,
config,
...
}:
with lib; let
cfg = config.mySystem.misc;
in {
imports = [ imports = [
./boot ./boot
./desktop ./desktop
./dev ./dev
./hardware ./hardware
./i18n ./i18n
./misc.nix
./network ./network
./packages ./packages
./security ./security
./services ./services
./users ./users
]; ];
options.mySystem.misc = {
timezone = mkOption {
type = types.str;
default = "Europe/Paris";
};
keymap = mkOption {
type = types.str;
default = "fr";
example = "fr-bepo";
description = "Keymap to use in the TTY console";
};
};
config = {
boot.tmp.cleanOnBoot = true;
console.keyMap = cfg.keymap;
time.timeZone = cfg.timezone;
environment.pathsToLink = [
"/share/bash-completion"
"/share/zsh"
];
services = {
orca.enable = false;
envfs.enable = true;
};
nix.settings = {
substituters = [
"https://nix-community.cachix.org?priority=10"
"https://devenv.cachix.org?priority=20"
"https://phundrak.cachix.org?priority=30"
"https://cache.nixos.org?priority=40"
];
trusted-public-keys = [
"cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY="
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
"devenv.cachix.org-1:w1cLUi8dv3hnoSPGAuibQv+f9TZLr6cv/Hm9XgU50cw="
"phundrak.cachix.org-1:osJAkYO0ioTOPqaQCIXMfIRz1/+YYlVFkup3R2KSexk="
];
http-connections = 128;
experimental-features = [
"nix-command"
"flakes"
];
};
};
} }

View File

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

View File

@@ -3,8 +3,9 @@
./amdgpu.nix ./amdgpu.nix
./bluetooth.nix ./bluetooth.nix
./fingerprint.nix ./fingerprint.nix
./sound.nix
./input ./input
./pinetab2.nix
./sound.nix
]; ];
hardware.enableAllFirmware = lib.mkDefault true; hardware.enableAllFirmware = lib.mkDefault true;

View File

@@ -0,0 +1,18 @@
{
lib,
config,
...
}:
with lib; let
cfg = config.mySystem.hardware.pinetab2;
in {
options.mySystem.hardware.pinetab2.enable = mkEnableOption "Activate support for the PineTab2";
config = {
boot.kernelParams = ["console=tty0" "console=ttyS2,1500000n8" "rootwait" "root=LABEL=NIXOS_SD" "rw"];
hardware.sensor.iio.enable = true;
services.avahi = {
enable = true;
openFirewall = true;
};
};
}

View File

@@ -32,7 +32,8 @@ in {
config = { config = {
environment.systemPackages = mkIf cfg.scarlett.enable [pkgs.alsa-scarlett-gui]; environment.systemPackages = mkIf cfg.scarlett.enable [pkgs.alsa-scarlett-gui];
services.pipewire = mkIf cfg.enable { services = {
pipewire = mkIf cfg.enable {
enable = true; enable = true;
alsa = mkIf cfg.alsa { alsa = mkIf cfg.alsa {
enable = mkDefault true; enable = mkDefault true;
@@ -40,6 +41,8 @@ in {
}; };
jack.enable = mkDefault cfg.jack; jack.enable = mkDefault cfg.jack;
}; };
pulseaudio.enable = false;
};
programs.noisetorch = mkIf cfg.enable { programs.noisetorch = mkIf cfg.enable {
inherit (cfg) enable; inherit (cfg) enable;
}; };

View File

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

25
system/i18n/input.nix Normal file
View File

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

55
system/misc.nix Normal file
View File

@@ -0,0 +1,55 @@
{
lib,
config,
...
}:
with lib; let
cfg = config.mySystem.misc;
in {
options.mySystem.misc = {
timezone = mkOption {
type = types.str;
default = "Europe/Paris";
};
keymap = mkOption {
type = types.str;
default = "fr";
example = "fr-bepo";
description = "Keymap to use in the TTY console";
};
};
config = {
boot.tmp.cleanOnBoot = true;
console.keyMap = cfg.keymap;
time.timeZone = cfg.timezone;
environment.pathsToLink = [
"/share/bash-completion"
"/share/zsh"
];
services = {
orca.enable = false;
envfs.enable = true;
};
nix.settings = {
substituters = [
"http://marpa:5000?priority=5"
"https://phundrak.cachix.org?priority=10"
"https://nix-community.cachix.org?priority=20"
"https://cache.nixos.org?priority=40"
];
trusted-public-keys = [
"marpa-local:XoO+dFN4PeauF52pYuy3Vh4Sdtl2qIdxu5aUasWKv6Q="
"phundrak.cachix.org-1:osJAkYO0ioTOPqaQCIXMfIRz1/+YYlVFkup3R2KSexk="
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
"cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY="
];
http-connections = 128;
experimental-features = [
"nix-command"
"flakes"
];
};
};
}

View File

@@ -51,12 +51,20 @@ in {
default = null; default = null;
}; };
}; };
wifi.disablePowersave = mkEnableOption ''
Disables powersave for Wifi.
Used mainly for the PineTab2, as leaving WiFi powersave with the bes2600 can cause stability issues.
'';
}; };
config.networking = { config.networking = {
hostName = cfg.hostname; # Define your hostname. hostName = cfg.hostname; # Define your hostname.
hostId = cfg.id; hostId = cfg.id;
networkmanager.enable = true; networkmanager = {
enable = true;
wifi.powersave = ! cfg.wifi.disablePowersave;
};
inherit (cfg) hostFiles domain; inherit (cfg) hostFiles domain;
firewall = { firewall = {
enable = true; enable = true;

View File

@@ -27,7 +27,7 @@ in {
trusted-users = mkOption { trusted-users = mkOption {
type = types.listOf types.str; type = types.listOf types.str;
example = ["alice" "bob"]; example = ["alice" "bob"];
default = []; default = ["@wheel" "root"];
}; };
}; };

View File

@@ -2,4 +2,5 @@
imports = [ imports = [
./sops.nix ./sops.nix
]; ];
security.rtkit.enable = true;
} }

View File

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

View File

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

View File

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

View File

@@ -0,0 +1,23 @@
{pkgs, ...}:
pkgs.writeShellScriptBin "app-launcher" ''
LOG_FILE="$HOME/.local/share/app-launcher.log"
logger() {
local level="$1"
local message="$2"
local timestamp
timestamp=$(date +"%Y-%m-%d %H:%M:%S")
printf "[%s] [%-7s] %s\n" "$timestamp" "''${level^^}" "$message" >> "$LOG_FILE"
}
CAELESTIA_ACTIVE=$(systemctl --user is-active caelestia.service)
logger debug "Caelestia activity: $CAELESTIA_ACTIVE"
if systemctl --user is-active caelestia.service | grep 'active' &> /dev/null ; then
logger info "Using Caelestia app launcher"
caelestia shell drawers toggle launcher || \
logger error "failed to launch Caelestia app launcher"
exit 0
fi
rofi -show drun
''

View File

@@ -31,6 +31,6 @@ in {
dev.fullDesktop = mkDefault cfg.fullDesktop; dev.fullDesktop = mkDefault cfg.fullDesktop;
media.fullDesktop = mkDefault cfg.fullDesktop; media.fullDesktop = mkDefault cfg.fullDesktop;
security.fullDesktop = mkDefault cfg.fullDesktop; security.fullDesktop = mkDefault cfg.fullDesktop;
services.fullDesktop = mkDefault cfg.fullDesktop; myServices.fullDesktop = mkDefault cfg.fullDesktop;
}; };
} }

View File

@@ -13,9 +13,7 @@ in {
systemd = { systemd = {
enable = true; enable = true;
target = "graphical-session.target"; target = "graphical-session.target";
environment = [ environment = ["QT3_QPA_PLATFORMTHEME=gtk3"];
"QT3_QPA_PLATFORMTHEME=gtk3"
];
}; };
settings = { settings = {
paths.wallpaperDir = "~/Pictures/Wallpapers/nord"; paths.wallpaperDir = "~/Pictures/Wallpapers/nord";
@@ -27,9 +25,10 @@ in {
explorer = ["${pkgs.nemo-with-extensions}/bin/nemo"]; explorer = ["${pkgs.nemo-with-extensions}/bin/nemo"];
}; };
idle = { idle = {
inhibitWhenAudio = true;
timeouts = [ timeouts = [
{ {
timeout = 300; timeout = 3600;
idleAction = "lock"; idleAction = "lock";
} }
]; ];

View File

@@ -45,6 +45,7 @@ in {
}; };
config = mkIf cfg.enable { config = mkIf cfg.enable {
home.sessionVariables.MOZ_ENABLE_WAYLAND = "1";
programs.firefox = { programs.firefox = {
inherit (cfg) enable; inherit (cfg) enable;
package = package =
@@ -52,6 +53,7 @@ in {
then zen then zen
else pkgs.firefox; else pkgs.firefox;
nativeMessagingHosts = lists.optional cfg.tridactyl.enable pkgs.tridactyl-native; nativeMessagingHosts = lists.optional cfg.tridactyl.enable pkgs.tridactyl-native;
configPath = ".mozilla/firefox";
}; };
xdg.configFile."tridactyl/tridactylrc" = mkIf cfg.tridactyl.enable { xdg.configFile."tridactyl/tridactylrc" = mkIf cfg.tridactyl.enable {
text = concatStringsSep "\n" (filter (s: s != "") [ text = concatStringsSep "\n" (filter (s: s != "") [

View File

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

View File

@@ -2,6 +2,7 @@
config, config,
lib, lib,
pkgs, pkgs,
inputs,
... ...
}: }:
with lib; let with lib; let
@@ -29,7 +30,7 @@ in {
}; };
ollama.enable = mkDefault cfg.enable; ollama.enable = mkDefault cfg.enable;
}; };
packages = [pkgs.lmstudio]; packages = [pkgs.lmstudio pkgs.opencode];
}; };
programs.mcp = mkIf (cfg.mcpServers != {}) { programs.mcp = mkIf (cfg.mcpServers != {}) {
enable = true; enable = true;

View File

@@ -4,8 +4,8 @@
... ...
}: }:
with lib; let with lib; let
cfg = config.home.services.blanket; cfg = config.home.myServices.blanket;
in { in {
options.home.services.blanket.enable = mkEnableOption "Enable blanket"; options.home.myServices.blanket.enable = mkEnableOption "Enable blanket";
config.services.blanket.enable = cfg.enable; config.services.blanket.enable = cfg.enable;
} }

View File

@@ -4,7 +4,7 @@
... ...
}: }:
with lib; let with lib; let
cfg = config.home.services; cfg = config.home.myServices;
in { in {
imports = [ imports = [
./blanket.nix ./blanket.nix
@@ -12,8 +12,12 @@ in {
./mpris-proxy.nix ./mpris-proxy.nix
./playerctld.nix ./playerctld.nix
]; ];
options.home.services.fullDesktop = mkEnableOption "Enable all modules"; options.home.myServices.fullDesktop = mkOption {
config.home.services = { description = "Enable all modules";
type = types.bool;
default = config.home.fullDesktop;
};
config.home.myServices = {
blanket.enable = mkDefault cfg.fullDesktop; blanket.enable = mkDefault cfg.fullDesktop;
mbsync.enable = mkDefault cfg.fullDesktop; mbsync.enable = mkDefault cfg.fullDesktop;
mpris-proxy.enable = mkDefault cfg.fullDesktop; mpris-proxy.enable = mkDefault cfg.fullDesktop;

View File

@@ -4,9 +4,9 @@
... ...
}: }:
with lib; let with lib; let
cfg = config.home.services.mbsync; cfg = config.home.myServices.mbsync;
in { in {
options.home.services.mbsync = { options.home.myServices.mbsync = {
enable = mkEnableOption "Enables mbsync"; enable = mkEnableOption "Enables mbsync";
service.enable = mkOption { service.enable = mkOption {
type = types.bool; type = types.bool;

View File

@@ -4,8 +4,8 @@
... ...
}: }:
with lib; let with lib; let
cfg = config.home.services.mpris-proxy; cfg = config.home.myServices.mpris-proxy;
in { in {
options.home.services.mpris-proxy.enable = mkEnableOption "Enable MPRIS forwarding towards bluetooth and MIDI"; options.home.myServices.mpris-proxy.enable = mkEnableOption "Enable MPRIS forwarding towards bluetooth and MIDI";
config.services.mpris-proxy.enable = cfg.enable; config.services.mpris-proxy.enable = cfg.enable;
} }

View File

@@ -4,8 +4,8 @@
... ...
}: }:
with lib; let with lib; let
cfg = config.home.services.playerctld; cfg = config.home.myServices.playerctld;
in { in {
options.home.services.playerctld.enable = mkEnableOption "Enable playerctld daemon"; options.home.myServices.playerctld.enable = mkEnableOption "Enable playerctld daemon";
config.services.playerctld.enable = cfg.enable; config.services.playerctld.enable = cfg.enable;
} }

View File

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

1673
users/phundrak/XCompose Normal file

File diff suppressed because it is too large Load Diff

View File

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

View File

@@ -8,6 +8,8 @@
./light-home.nix ./light-home.nix
./packages.nix ./packages.nix
./email.nix ./email.nix
./firefox.nix
./tmux.nix
./wlr-which-key ./wlr-which-key
../modules ../modules
]; ];
@@ -65,76 +67,6 @@
}; };
desktop = { desktop = {
caelestia.enable = true; caelestia.enable = true;
firefox = {
enable = true;
useZen = true;
tridactyl = {
enable = true;
preConfig = "sanitise tridactyllocal tridactylsync";
config = {
editorcmd = "emacsclient -c";
keyboardlayoutbase = "bepo";
keyboardlayoutforce = "true";
hintchars = "auiectsr";
smothscroll = "true";
};
extraConfig = ''
unbind h
unbind j
unbind k
unbind l
unbind c
unbind t
unbind s
unbind r
unbind H
unbind J
unbind K
unbind L
unbind C
unbind T
unbind S
unbind R
" === Bépo layout scrolling (ctsr = hjkl) ===
bind c scrollpx -300 0
bind t scrollline 5
bind s scrollline -5
bind r scrollpx 300 0
" Half/full page scroll (replacing C-f/C-b/C-d/C-u)
bind <C-t> scrollpage 0.5
bind <C-s> scrollpage -0.5
" === History navigation (C/R = H/L) ===
bind C back
bind R forward
" === Tab navigation (T/S = J/K) ===
bind T tabprev
bind S tabnext
" === Displaced commands ===
" reload was on r move to h (bépo's 'replace' position)
bind h reload
bind H reloadhard
" tabopen was on t move to j (bépo's 'find char to' position)
bind j fillcmdline tabopen
unbind ^http(s?)://youtube\.com f
unbind ^http(s?)://youtube\.com t
unbind ^http(s?)://youtube\.com l
unbind ^http(s?)://youtube\.com j
unbind ^http(s?)://twitch\.tv f
bind < urlincrement -1
bind > urlincrement 1
bind ypv js tri.native.run(`mpv --ytdl-format="[height >=? 480]" --ontop --fs "''${document.location.href}"`)
bind ypm hint -JF e => tri.native.run(`mpv --ytdl-format="[height >=? 480]" --ontop --fs "''${e.href}"`)
'';
};
};
spotify = { spotify = {
enable = true; enable = true;
spicetify.enable = true; spicetify.enable = true;
@@ -157,7 +89,9 @@
vcs.jj.signing.enable = true; vcs.jj.signing.enable = true;
}; };
fullDesktop = true; fullDesktop = true;
file."${config.home.homeDirectory}/.ssh/allowed_signers" = { file = {
".XCompose".source = ./XCompose;
"${config.home.homeDirectory}/.ssh/allowed_signers" = {
enable = true; enable = true;
text = lib.strings.join "\n" ( text = lib.strings.join "\n" (
map (file: let map (file: let
@@ -169,6 +103,7 @@
); );
}; };
}; };
};
manual = { manual = {
html.enable = true; html.enable = true;

View File

@@ -0,0 +1,9 @@
{config, ...}: {
imports = [../home.nix];
home = {
cli.nh.flake = "${config.home.homeDirectory}/.dotfiles";
desktop.hyprland.host = "gampo";
phundrak.sshKey.content = builtins.readFile ../keys/id_pinetab2.pub;
};
programs.caelestia.settings.bar.persistent = false;
}

View File

@@ -0,0 +1 @@
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJCMgI5WDOKVUe6rUrOG4VS+hoUUVrAb1UhOECawUkrv Lucien Cartier-Tilet <lucien@phundrak.com>

View File

@@ -32,9 +32,7 @@ in {
secrets."ssh/hosts" = {}; secrets."ssh/hosts" = {};
age = { age = {
# automatically import user SSH keys as age keys # automatically import user SSH keys as age keys
sshKeyPaths = [ sshKeyPaths = ["${config.home.homeDirectory}/.ssh/id_ed25519"];
"${config.home.homeDirectory}/.ssh/id_ed25519"
];
# this will use an age key that is expected to already be in the filesystem # this will use an age key that is expected to already be in the filesystem
keyFile = "${config.home.homeDirectory}/.local/sops-nix/key.txt"; keyFile = "${config.home.homeDirectory}/.local/sops-nix/key.txt";
# generate a new key if the key specified above does not exist # generate a new key if the key specified above does not exist

View File

@@ -32,17 +32,16 @@ in {
audacity audacity
plexamp plexamp
plex-desktop plex-desktop
spicetify-cli
pavucontrol # Volume control pavucontrol # Volume control
# Social # Social
vesktop # Discord alternative that works well with wayland vesktop # Discord alternative that works well with wayland
element-desktop
signal-desktop signal-desktop
# Misc # Misc
bitwarden-desktop
# gplates # gplates
kicad-small
qgis
handy handy
libnotify libnotify
nextcloud-client nextcloud-client

210
users/phundrak/tmux.nix Normal file
View File

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

View File

@@ -26,8 +26,9 @@
focus-urgent = import ./focus-urgent.nix {inherit pkgs;}; focus-urgent = import ./focus-urgent.nix {inherit pkgs;};
fullscreen = import ./fullscreen.nix {inherit pkgs;}; fullscreen = import ./fullscreen.nix {inherit pkgs;};
logout = import ./logout.nix {inherit pkgs;}; logout = import ./logout.nix {inherit pkgs;};
ytplay = import ../../modules/cli/scripts/ytplay.nix {inherit pkgs;}; app-launcher = import ../../modules/cli/scripts/launcher.nix {inherit pkgs;};
plock = import ../../modules/cli/scripts/plock.nix {inherit pkgs;}; plock = import ../../modules/cli/scripts/plock.nix {inherit pkgs;};
ytplay = import ../../modules/cli/scripts/ytplay.nix {inherit pkgs;};
in in
[ [
{ {
@@ -96,7 +97,7 @@
{ {
key = "r"; key = "r";
desc = "App Menu"; desc = "App Menu";
cmd = "rofi -show drun"; cmd = "${app-launcher}/bin/app-launcher";
} }
{ {
key = "s"; key = "s";

27
utils/pinetab.nix Normal file
View File

@@ -0,0 +1,27 @@
{
nixpkgs,
rockchip,
additionalModules,
specialArgs,
...
}: buildPlatform: variant:
nixpkgs.lib.nixosSystem {
system = "aarch64-linux";
inherit specialArgs;
modules = [
rockchip.nixosModules.sdImageRockchip
rockchip.nixosModules.dtOverlayPCIeFix
rockchip.nixosModules.noZFS
../hosts/pinetab2
variant
{
rockchip.uBoot = rockchip.packages.${buildPlatform}.uBootPineTab2;
boot.kernelPackages = rockchip.legacyPackages.${buildPlatform}.kernel_linux_7_0_pinetab_unstable;
hardware.firmware = [rockchip.packages.aarch64-linux.bes2600];
nixpkgs.config.allowUnfreePredicate = pkg:
builtins.elem (nixpkgs.lib.getName pkg) [
"bes2600-firmware"
];
}
] ++ additionalModules;
}