Compare commits

..

1 Commits

Author SHA1 Message Date
800d0adeea feat(pumo): add config for phone pumo 2026-05-01 16:27:56 +02:00
38 changed files with 421 additions and 746 deletions

150
flake.lock generated
View File

@@ -72,11 +72,11 @@
]
},
"locked": {
"lastModified": 1778125502,
"narHash": "sha256-QAAO9RCR6byVJi50l8RMVJWzrsNYbXonfR6tqU93vIQ=",
"lastModified": 1772764582,
"narHash": "sha256-hSwjmpXHFqzSXrndVekA0IheKrbC7wi0IbfZTYwlmXw=",
"owner": "caelestia-dots",
"repo": "cli",
"rev": "7b8a4281aa8b2b12745de531cce0c65d87aea2e5",
"rev": "4bcd42f482d038b98145b0b03388244b68b7d35d",
"type": "github"
},
"original": {
@@ -94,11 +94,11 @@
"quickshell": "quickshell"
},
"locked": {
"lastModified": 1778381004,
"narHash": "sha256-JwIlrajiY74obxyTMu/Ym6wOEQaCjpHwfziPK+E5u3Q=",
"lastModified": 1775660122,
"narHash": "sha256-qMKB06TE0MY1anDQKBrzZEpktNPyvMxQQzTEEwWAA6I=",
"owner": "caelestia-dots",
"repo": "shell",
"rev": "2ca4ad4a434e91e73504debd5225e66dc5ebb2b6",
"rev": "aa2b08dd45963dc9558de94dbff5e1615e347d02",
"type": "github"
},
"original": {
@@ -115,11 +115,11 @@
]
},
"locked": {
"lastModified": 1778198574,
"narHash": "sha256-XzgYoibIH6diZoZ2GzoGeyV2xdXAwBtXdAze+Qu2kR0=",
"lastModified": 1775334496,
"narHash": "sha256-dUopEMj5KhH1vnv43o29kMsayp0Ki+9EfIn4UAE9sAU=",
"owner": "9001",
"repo": "copyparty",
"rev": "139ef1851e5d698521a5c2078c56f951d6e54d00",
"rev": "ede692925edfc6fca7a52f483414d543e9303237",
"type": "github"
},
"original": {
@@ -374,11 +374,11 @@
]
},
"locked": {
"lastModified": 1778609305,
"narHash": "sha256-muTc+WME6k3sfTr/Pvmw8hrK7zXrbl961TEF9wPeAnk=",
"lastModified": 1775683737,
"narHash": "sha256-oBYyowo6yfgb95Z78s3uTnAd9KkpJpwzjJbfnpLaM2Y=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "5878fdadfe2cfe1b3383b38d66117f7b80696b68",
"rev": "7ba4ee4228ed36123c7cb75d50524b43514ef992",
"type": "github"
},
"original": {
@@ -398,20 +398,35 @@
"rust-overlay": "rust-overlay"
},
"locked": {
"lastModified": 1777830987,
"narHash": "sha256-fPsv7qZHb9EO04IoQ6cGAj+6/y1pSMEFWmvLCULOEuM=",
"ref": "develop",
"rev": "bd6892d91e1a04f9b092b22831a977f08a36cbe0",
"revCount": 40,
"lastModified": 1775400071,
"narHash": "sha256-uFoqOUB1wbqqDKRdHNEYdgyRQECYWhJBq4Oxjm3Dx9M=",
"ref": "refs/heads/develop",
"rev": "3da214ae4c14f57dc5f6ecd480330936f00e1a4f",
"revCount": 35,
"type": "git",
"url": "https://labs.phundrak.com/phundrak/jj-cz"
},
"original": {
"ref": "develop",
"type": "git",
"url": "https://labs.phundrak.com/phundrak/jj-cz"
}
},
"mobile-nixos": {
"flake": false,
"locked": {
"lastModified": 1772289954,
"narHash": "sha256-iDdtwk/dFb6AsXMtcOpZixxXl6C1HNUPe6cglxxHO7M=",
"owner": "mobile-nixos",
"repo": "mobile-nixos",
"rev": "1a9e0af79dc7b5e29ed772f1a8a76fcbd9d45fdf",
"type": "github"
},
"original": {
"owner": "mobile-nixos",
"repo": "mobile-nixos",
"type": "github"
}
},
"nix": {
"inputs": {
"flake-compat": [
@@ -465,11 +480,11 @@
]
},
"locked": {
"lastModified": 1778393439,
"narHash": "sha256-mOtQxUjtKaPHLeoLOY/YEDctmud1X9KwJr4kE1MJ3Wc=",
"lastModified": 1775365369,
"narHash": "sha256-DgH5mveLoau20CuTnaU5RXZWgFQWn56onQ4Du2CqYoI=",
"owner": "nix-community",
"repo": "nix-index-database",
"rev": "01466c414c7357ae2ce32be4a272a7c69e94ab5f",
"rev": "cef5cf82671e749ac87d69aadecbb75967e6f6c3",
"type": "github"
},
"original": {
@@ -509,11 +524,11 @@
},
"nixpkgs": {
"locked": {
"lastModified": 1778443072,
"narHash": "sha256-zi7/fsqM/kFdNuED//4WOCUtezGtKKqRNORjMvfwjnA=",
"lastModified": 1775423009,
"narHash": "sha256-vPKLpjhIVWdDrfiUM8atW6YkIggCEKdSAlJPzzhkQlw=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "da5ad661ba4e5ef59ba743f0d112cbc30e474f32",
"rev": "68d8aa3d661f0e6bd5862291b5bb263b2a6595c9",
"type": "github"
},
"original": {
@@ -523,19 +538,25 @@
"type": "github"
}
},
"nixpkgsStable": {
"opencode": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1778430510,
"narHash": "sha256-Ti+ZBvW6yrWWAg2szExVTwCd4qOJ3KlVr1tFHfyfi8Q=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "8fd9daa3db09ced9700431c5b7ad0e8ba199b575",
"lastModified": 1775336060,
"narHash": "sha256-KkjMN2xA8jGBnj96UtzffvOeYJJZM05/5T36nSdpZkE=",
"owner": "anomalyco",
"repo": "opencode",
"rev": "930e94a3ea098b9d56fcb6d08b545256d2546a82",
"type": "github"
},
"original": {
"id": "nixpkgs",
"ref": "nixos-25.11",
"type": "indirect"
"owner": "anomalyco",
"ref": "v1.3.15",
"repo": "opencode",
"type": "github"
}
},
"pumo-system-info": {
@@ -568,11 +589,11 @@
]
},
"locked": {
"lastModified": 1778222427,
"narHash": "sha256-6GFiP611nEJvtm+m03sMyfaVIJ9QOCi//hS+PPKyyPA=",
"lastModified": 1772925576,
"narHash": "sha256-mMoiXABDtkSJxCYDrkhJ/TrrJf5M46oUfIlJvv2gkZ0=",
"ref": "refs/heads/master",
"rev": "d1760ed1f31c02a95b37a9bf4084129c829ebe7f",
"revCount": 817,
"rev": "15a84097653593dd15fad59a56befc2b7bdc270d",
"revCount": 750,
"type": "git",
"url": "https://git.outfoxxed.me/outfoxxed/quickshell"
},
@@ -581,33 +602,6 @@
"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": {
"inputs": {
"caelestia-shell": "caelestia-shell",
@@ -615,11 +609,11 @@
"flake-utils": "flake-utils_2",
"home-manager": "home-manager",
"jj-cz": "jj-cz",
"mobile-nixos": "mobile-nixos",
"nix-index-database": "nix-index-database",
"nixpkgs": "nixpkgs",
"nixpkgsStable": "nixpkgsStable",
"opencode": "opencode",
"pumo-system-info": "pumo-system-info",
"rockchip": "rockchip",
"sops-nix": "sops-nix",
"spicetify": "spicetify",
"srvos": "srvos",
@@ -692,11 +686,11 @@
]
},
"locked": {
"lastModified": 1777944972,
"narHash": "sha256-VfGRo1qTBKOe3s2gOv8LSoA6Fk19PvBlwQ1ECN0Evn8=",
"lastModified": 1775682595,
"narHash": "sha256-0E9PohY/VuESLq0LR4doaH7hTag513sDDW5n5qmHd1Q=",
"owner": "Mic92",
"repo": "sops-nix",
"rev": "c591bf665727040c6cc5cb409079acb22dcce33c",
"rev": "d2e8438d5886e92bc5e7c40c035ab6cae0c41f76",
"type": "github"
},
"original": {
@@ -713,11 +707,11 @@
"systems": "systems_4"
},
"locked": {
"lastModified": 1778540809,
"narHash": "sha256-FNXls2QZTcxY0Dem3QtSewnr8vUKMDsTw9m8pLOnhTc=",
"lastModified": 1775421933,
"narHash": "sha256-JkEbzFDFTsUlVtHEzA8Y4r3O9LInhb96eOCbtGjGnbM=",
"owner": "Gerg-L",
"repo": "spicetify-nix",
"rev": "83939d7df4c0f1b8ee88cabde112223280a48554",
"rev": "ec8d73085fdf807d55765335dc8126e14e7b2096",
"type": "github"
},
"original": {
@@ -733,11 +727,11 @@
]
},
"locked": {
"lastModified": 1778468351,
"narHash": "sha256-A5ZdpWN5d+OmKln2EPPeMmPJaBwbugO9dEhyp3pn/X8=",
"lastModified": 1775701952,
"narHash": "sha256-xj9u8fz2hTTTELMorqox0hPWrmAvGRnQUEnlj+vCjFo=",
"owner": "nix-community",
"repo": "srvos",
"rev": "23122d21dfbe00e072ce515e21af18882bc88fd7",
"rev": "f56f1053ae9f878501d3a8ae1961c73d1d7abce3",
"type": "github"
},
"original": {
@@ -836,11 +830,11 @@
]
},
"locked": {
"lastModified": 1778303188,
"narHash": "sha256-zXFSvK80qpI91B7DU9QSExAtafSrz6vzormh2kUi6kQ=",
"lastModified": 1775710180,
"narHash": "sha256-sCokvdNvl8zIzsnjgG0TN5h3RUI7GJyWW9ErfmEj0rM=",
"owner": "youwen5",
"repo": "zen-browser-flake",
"rev": "9346c84657a9cab472bc4ee5a2d65d42a72d5346",
"rev": "2c138beb648d1cbbfae76695a8230ee04e4db25a",
"type": "github"
},
"original": {

View File

@@ -2,7 +2,6 @@
description = "Home Manager configuration of phundrak";
inputs = {
nixpkgsStable.url = "nixpkgs/nixos-25.11";
nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";
flake-utils.url = "github:numtide/flake-utils";
@@ -27,7 +26,17 @@
};
jj-cz = {
url = "git+https://labs.phundrak.com/phundrak/jj-cz?ref=develop";
url = "git+https://labs.phundrak.com/phundrak/jj-cz";
inputs.nixpkgs.follows = "nixpkgs";
};
mobile-nixos = {
url = "github:mobile-nixos/mobile-nixos";
flake = false; # It is not as a flake
};
opencode = {
url = "github:anomalyco/opencode/v1.3.15";
inputs.nixpkgs.follows = "nixpkgs";
};
@@ -36,13 +45,6 @@
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 = {
url = "github:Mic92/sops-nix";
inputs.nixpkgs.follows = "nixpkgs";
@@ -89,7 +91,7 @@
nixpkgs,
flake-utils,
home-manager,
rockchip,
mobile-nixos,
srvos,
...
} @ inputs:
@@ -142,10 +144,6 @@
inherit extraSpecialArgs pkgs;
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 {
inherit extraSpecialArgs pkgs;
modules = withUserModules ./users/phundrak/host/tilo.nix;
@@ -159,10 +157,6 @@
inputs.copyparty.nixosModules.default
];
withSystemModules = modules: nixpkgs.lib.lists.flatten (defaultSystemModules ++ [modules]);
pinetabConfig = import ./utils/pinetab.nix {
inherit nixpkgs rockchip specialArgs;
additionalModules = defaultSystemModules;
};
in {
alys = nixpkgs.lib.nixosSystem {
inherit specialArgs;
@@ -189,7 +183,14 @@
./hosts/naromk3/configuration.nix
];
};
pinetab2 = pinetabConfig "x86_64-linux" ./hosts/pinetab2/gnome.nix;
pumo = nixpkgs.lib.nixosSystem {
system = "aarch64-linux";
inherit specialArgs;
modules = withSystemModules [
(import "${mobile-nixos}/lib/configuration.nix" {device = "oneplus-enchilada";})
./hosts/pumo
];
};
tilo = nixpkgs.lib.nixosSystem {
inherit specialArgs;
modules = withSystemModules ./hosts/tilo/configuration.nix;

View File

@@ -1,75 +0,0 @@
{
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";
};
}

View File

@@ -1,37 +0,0 @@
{
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
];
}

91
hosts/pumo/default.nix Normal file
View File

@@ -0,0 +1,91 @@
# Minimal configuration for OnePlus 6 (enchilada) NixOS Mobile
# Focus on essentials: SSH, wireless, and basic tools
{
pkgs,
inputs,
...
}: {
imports = [
inputs.sops-nix.nixosModules.sops
../../system
];
nixpkgs.config.permittedInsecurePackages = ["olm-3.2.16"];
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;
sound = {
enable = true;
usePulseaudio = true;
};
};
i18n.input.enable = true;
misc = {
keymap = "fr-bepo";
mobile = true;
};
networking = {
hostname = "pumo";
id = "93595b88";
};
packages = {
appimage.enable = true;
flatpak.enable = true;
nix.nix-ld.enable = true;
};
services = {
languagetool.enable = true;
printing.enable = true;
ssh.enable = true;
};
users = {
root.disablePassword = true;
phundrak = {
enable = true;
trusted = true;
extraGroups = ["feedbackd"];
};
};
};
programs = {
dconf.enable = true;
calls.enable = true;
zsh.enable = true;
};
hardware.sensor.iio.enable = true;
# Minimal essential packages
environment.systemPackages = with pkgs; [
chatty # IM and SMS
epiphany
nixd
git
vim
emacs
wget
curl
jujutsu
firefox
kitty
];
system.stateVersion = "25.11";
}

View File

@@ -54,7 +54,7 @@ in {
};
};
config.boot = {
config.boot = mkIf (! config.mySystem.misc.mobile) {
initrd.kernelModules = lib.lists.singleton (
if config.mySystem.hardware.amdgpu.enable
then "amdgpu"

View File

@@ -1,15 +1,69 @@
{
lib,
config,
...
}:
with lib; let
cfg = config.mySystem.misc;
in {
imports = [
./boot
./desktop
./dev
./hardware
./i18n
./misc.nix
./network
./packages
./security
./services
./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";
};
mobile = mkEnableOption "Enable if using Mobile NixOS";
};
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

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

View File

@@ -30,6 +30,7 @@ in {
games.enable = false;
gnome-remote-desktop.enable = true;
gnome-online-accounts.enable = true;
gnome-keyring.enable = true;
sushi.enable = true;
};

View File

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

View File

@@ -1,18 +0,0 @@
{
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

@@ -8,7 +8,8 @@ with lib; let
cfg = config.mySystem.hardware.sound;
in {
options.mySystem.hardware.sound = {
enable = mkEnableOption "Whether to enable sounds with Pipewire";
enable = mkEnableOption "Whether to enable sounds";
usePulseaudio = mkEnableOption "Activate sound support with pulseaudio";
scarlett.enable = mkEnableOption "Activate support for Scarlett sound card";
alsa = mkOption {
type = types.bool;
@@ -33,15 +34,13 @@ in {
config = {
environment.systemPackages = mkIf cfg.scarlett.enable [pkgs.alsa-scarlett-gui];
services = {
pipewire = mkIf cfg.enable {
enable = true;
alsa = mkIf cfg.alsa {
enable = mkDefault true;
support32Bit = mkDefault true;
};
jack.enable = mkDefault cfg.jack;
pipewire.enable = mkForce (cfg.enable && ! cfg.usePulseaudio);
pipewire.alsa = {
enable = mkDefault true;
support32Bit = mkDefault true;
};
pulseaudio.enable = false;
pipewire.jack.enable = cfg.jack;
pulseaudio.enable = cfg.usePulseaudio;
};
programs.noisetorch = mkIf cfg.enable {
inherit (cfg) enable;

View File

@@ -1,55 +0,0 @@
{
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,20 +51,12 @@ in {
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 = {
hostName = cfg.hostname; # Define your hostname.
hostId = cfg.id;
networkmanager = {
enable = true;
wifi.powersave = ! cfg.wifi.disablePowersave;
};
networkmanager.enable = true;
inherit (cfg) hostFiles domain;
firewall = {
enable = true;

View File

@@ -1,5 +1,4 @@
{
pkgs,
lib,
config,
...
@@ -11,12 +10,7 @@ in {
enable = mkEnableOption "Enable Flatpak support";
builder.enable = mkEnableOption "Enable Flatpak builder";
};
config = {
services.flatpak = mkIf cfg.enable {
inherit (cfg) enable;
};
environment.systemPackages = mkIf cfg.builder.enable [
pkgs.flatpak-buildR
];
config.services.flatpak = mkIf cfg.enable {
inherit (cfg) enable;
};
}

View File

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

View File

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

View File

@@ -10,13 +10,18 @@ in {
options.mySystem.users.phundrak = {
enable = mkEnableOption "Enables user phundrak";
trusted = mkEnableOption "Mark the user as trusted by Nix";
extraGroups = mkOption {
type = types.listOf types.str;
default = [];
example = ["feedbackd"];
};
};
config = {
users.users.phundrak = mkIf cfg.enable {
isNormalUser = true;
description = "Lucien Cartier-Tilet";
extraGroups = ["networkmanager" "wheel" "docker" "dialout" "podman" "plugdev" "games" "audio" "input"];
extraGroups = ["networkmanager" "wheel" "docker" "dialout" "podman" "plugdev" "games" "audio" "input"] ++ cfg.extraGroups;
shell = pkgs.zsh;
openssh.authorizedKeys.keyFiles = lib.filesystem.listFilesRecursive ../../users/phundrak/keys;
};

View File

@@ -1,23 +0,0 @@
{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;
media.fullDesktop = mkDefault cfg.fullDesktop;
security.fullDesktop = mkDefault cfg.fullDesktop;
myServices.fullDesktop = mkDefault cfg.fullDesktop;
services.fullDesktop = mkDefault cfg.fullDesktop;
};
}

View File

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

View File

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

View File

@@ -30,7 +30,10 @@ in {
};
ollama.enable = mkDefault cfg.enable;
};
packages = [pkgs.lmstudio pkgs.opencode];
packages = let
inherit (pkgs.stdenv.hostPlatform) system;
inherit (inputs.opencode.packages.${system}) opencode;
in [pkgs.lmstudio opencode];
};
programs.mcp = mkIf (cfg.mcpServers != {}) {
enable = true;

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -8,8 +8,6 @@
./light-home.nix
./packages.nix
./email.nix
./firefox.nix
./tmux.nix
./wlr-which-key
../modules
];
@@ -67,6 +65,76 @@
};
desktop = {
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 ===
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 < 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 = {
enable = true;
spicetify.enable = true;

View File

@@ -1,9 +0,0 @@
{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

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

View File

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

View File

@@ -40,8 +40,8 @@ in {
# Misc
# gplates
kicad-small
qgis
kicad
handy
libnotify
nextcloud-client

View File

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

View File

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

View File

@@ -1,27 +0,0 @@
{
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;
}