initial cleaned up config
This commit is contained in:
parent
9ae9ca3112
commit
782a58fdde
25
README.md
25
README.md
@ -1,2 +1,27 @@
|
|||||||
# nixos-demo
|
# nixos-demo
|
||||||
|
|
||||||
|
## NixOS Installation
|
||||||
|
|
||||||
|
### boot the installation image
|
||||||
|
|
||||||
|
- download the [minimal iso image](https://nixos.org/download)
|
||||||
|
- use dd to prepare an USB stick
|
||||||
|
- boot from the stick
|
||||||
|
|
||||||
|
### SSH connection
|
||||||
|
|
||||||
|
- use `passwd` to set a temporary password for the `nixos` user
|
||||||
|
- connect to the PC with `ssh nixos@nixos`
|
||||||
|
- the official [NixOS installation manual](https://nixos.org/manual/nixos/stable/#sec-installation-manual) describes how to do an installation without the graphical installer
|
||||||
|
|
||||||
|
### NixOS installation
|
||||||
|
|
||||||
|
- install `git` in a nix-shell for the installation process
|
||||||
|
- start `nix run` with the related hostname to configure the disks and filesystems
|
||||||
|
- start the NixOS installation process
|
||||||
|
|
||||||
|
```shell
|
||||||
|
nix-shell -p git
|
||||||
|
sudo nix --experimental-features "nix-command flakes" run 'github:nix-community/disko?tag=v1.12.0#disko' -- --mode disko --flake 'git+https://code.beancloud.de/public/nixos-demo.git?ref=main#pc-demo1'
|
||||||
|
sudo nixos-install --no-root-password --flake git+https://code.beancloud.de/public/nixos-demo.git?ref=main#pc-demo1
|
||||||
|
```
|
19
computer/pc-demo1/default.nix
Normal file
19
computer/pc-demo1/default.nix
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
{ ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
networking.hostName = "pc-demo1";
|
||||||
|
|
||||||
|
beancloud = {
|
||||||
|
software = {
|
||||||
|
container = true;
|
||||||
|
desktop = false;
|
||||||
|
};
|
||||||
|
disk.device.name = "vda";
|
||||||
|
hardware.virtualmachine.type = "kvm";
|
||||||
|
};
|
||||||
|
|
||||||
|
imports = [
|
||||||
|
../../users/root/default.nix
|
||||||
|
../../users/demo/default.nix
|
||||||
|
];
|
||||||
|
}
|
19
computer/pc-demo2/default.nix
Normal file
19
computer/pc-demo2/default.nix
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
{ ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
networking.hostName = "pc-demo2";
|
||||||
|
|
||||||
|
beancloud = {
|
||||||
|
software = {
|
||||||
|
container = true;
|
||||||
|
desktop = true;
|
||||||
|
nextcloud.client = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
imports = [
|
||||||
|
./network.nix
|
||||||
|
../../users/root/default.nix
|
||||||
|
../../users/demo/default.nix
|
||||||
|
];
|
||||||
|
}
|
51
computer/pc-demo2/microvm.nix
Normal file
51
computer/pc-demo2/microvm.nix
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
{ flake, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
sops = {
|
||||||
|
secrets = {
|
||||||
|
"vms/m1/services/openssh/key/ed25519" = {};
|
||||||
|
"vms/m1/services/openssh/key/rsa" = {};
|
||||||
|
"vms/w1/services/openssh/key/ed25519" = {};
|
||||||
|
"vms/w1/services/openssh/key/rsa" = {};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
systemd.tmpfiles.rules = [
|
||||||
|
"d /etc/microvms/m1/ssh/ 0755 root root - -"
|
||||||
|
"d /etc/microvms/w1/ssh/ 0755 root root - -"
|
||||||
|
];
|
||||||
|
|
||||||
|
systemd.network.networks."10-lan".matchConfig.Name = ["vm-*-01"];
|
||||||
|
systemd.network.networks."20-storage".matchConfig.Name = ["vm-*-02"];
|
||||||
|
|
||||||
|
systemd.services = {
|
||||||
|
"microvm@m1" = {
|
||||||
|
unitConfig = {
|
||||||
|
AssertPathExists = "/run/secrets/vms/m1/services/openssh/key/ed25519";
|
||||||
|
AssertFileNotEmpty = "/run/secrets/vms/m1/services/openssh/key/ed25519";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
"microvm@w1" = {
|
||||||
|
unitConfig = {
|
||||||
|
AssertPathExists = "/run/secrets/vms/w1/services/openssh/key/ed25519";
|
||||||
|
AssertFileNotEmpty = "/run/secrets/vms/w1/services/openssh/key/ed25519";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
microvm = {
|
||||||
|
vms = {
|
||||||
|
m1 = {
|
||||||
|
flake = flake;
|
||||||
|
updateFlake = "git+https://code.beancloud.de/beancloud/datacenter.git?ref=master";
|
||||||
|
restartIfChanged = true;
|
||||||
|
};
|
||||||
|
w1 = {
|
||||||
|
flake = flake;
|
||||||
|
updateFlake = "git+https://code.beancloud.de/beancloud/datacenter.git?ref=master";
|
||||||
|
restartIfChanged = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
autostart = [ "m1" "w1" ];
|
||||||
|
};
|
||||||
|
}
|
24
computer/pc-demo2/network.nix
Normal file
24
computer/pc-demo2/network.nix
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
{ lib, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
systemd.network.netdevs."br10".netdevConfig = {
|
||||||
|
Name = "br10";
|
||||||
|
Kind = "bridge";
|
||||||
|
};
|
||||||
|
|
||||||
|
systemd.network.networks = {
|
||||||
|
"10-lan" = {
|
||||||
|
enable = lib.mkForce true;
|
||||||
|
linkConfig.RequiredForOnline = lib.mkForce "enslaved";
|
||||||
|
networkConfig.Bridge = "br10";
|
||||||
|
networkConfig.DHCP = lib.mkForce "no";
|
||||||
|
};
|
||||||
|
"br10-lan" = {
|
||||||
|
enable = lib.mkForce true;
|
||||||
|
matchConfig.Name = [ "br10" ];
|
||||||
|
linkConfig.RequiredForOnline = "routable";
|
||||||
|
networkConfig.DHCP = "yes";
|
||||||
|
networkConfig.IPv6AcceptRA = false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
158
flake.lock
Normal file
158
flake.lock
Normal file
@ -0,0 +1,158 @@
|
|||||||
|
{
|
||||||
|
"nodes": {
|
||||||
|
"disko": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1752113600,
|
||||||
|
"narHash": "sha256-7LYDxKxZgBQ8LZUuolAQ8UkIB+jb4A2UmiR+kzY9CLI=",
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "disko",
|
||||||
|
"rev": "79264292b7e3482e5702932949de9cbb69fedf6d",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "disko",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"flake-utils": {
|
||||||
|
"inputs": {
|
||||||
|
"systems": "systems"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1731533236,
|
||||||
|
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"home-manager": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1752208517,
|
||||||
|
"narHash": "sha256-aRY1cYOdVdXdNjcL/Twpa27CknO7pVHxooPsBizDraE=",
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "home-manager",
|
||||||
|
"rev": "c6a01e54af81b381695db796a43360bf6db5702f",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-community",
|
||||||
|
"ref": "release-25.05",
|
||||||
|
"repo": "home-manager",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"impermanence": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1737831083,
|
||||||
|
"narHash": "sha256-LJggUHbpyeDvNagTUrdhe/pRVp4pnS6wVKALS782gRI=",
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "impermanence",
|
||||||
|
"rev": "4b3e914cdf97a5b536a889e939fb2fd2b043a170",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "impermanence",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"microvm": {
|
||||||
|
"inputs": {
|
||||||
|
"flake-utils": "flake-utils",
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs"
|
||||||
|
],
|
||||||
|
"spectrum": "spectrum"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1752278584,
|
||||||
|
"narHash": "sha256-QaT8PpCR1IaUMa12ou2MlvNCzYVWgTQfVWJGXyFvY5c=",
|
||||||
|
"owner": "astro",
|
||||||
|
"repo": "microvm.nix",
|
||||||
|
"rev": "f30ae9b9e740116d044935c9c0c68bd1c2ce8432",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "astro",
|
||||||
|
"repo": "microvm.nix",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1752162966,
|
||||||
|
"narHash": "sha256-3MxxkU8ZXMHXcbFz7UE4M6qnIPTYGcE/7EMqlZNnVDE=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "10e687235226880ed5e9f33f1ffa71fe60f2638a",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "nixos-25.05",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": {
|
||||||
|
"inputs": {
|
||||||
|
"disko": "disko",
|
||||||
|
"home-manager": "home-manager",
|
||||||
|
"impermanence": "impermanence",
|
||||||
|
"microvm": "microvm",
|
||||||
|
"nixpkgs": "nixpkgs"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"spectrum": {
|
||||||
|
"flake": false,
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1751265943,
|
||||||
|
"narHash": "sha256-XoHSo6GEElzRUOYAEg/jlh5c8TDsyDESFIux3nU/NMc=",
|
||||||
|
"ref": "refs/heads/main",
|
||||||
|
"rev": "37c8663fab86fdb202fece339ef7ac7177ffc201",
|
||||||
|
"revCount": 904,
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://spectrum-os.org/git/spectrum"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://spectrum-os.org/git/spectrum"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"systems": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1681028828,
|
||||||
|
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default",
|
||||||
|
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": "root",
|
||||||
|
"version": 7
|
||||||
|
}
|
85
flake.nix
Normal file
85
flake.nix
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
{
|
||||||
|
description = "Personal compute devices";
|
||||||
|
|
||||||
|
inputs = {
|
||||||
|
nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.05";
|
||||||
|
microvm = {
|
||||||
|
url = "github:astro/microvm.nix?tag=v0.5.0";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
disko = {
|
||||||
|
url = "github:nix-community/disko?tag=v1.12.0";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
home-manager = {
|
||||||
|
url = "github:nix-community/home-manager?ref=release-25.05";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
impermanence = {
|
||||||
|
url = "github:nix-community/impermanence";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
outputs =
|
||||||
|
{
|
||||||
|
self,
|
||||||
|
nixpkgs,
|
||||||
|
disko,
|
||||||
|
impermanence,
|
||||||
|
microvm,
|
||||||
|
home-manager,
|
||||||
|
...
|
||||||
|
}@inputs:
|
||||||
|
{
|
||||||
|
nixosConfigurations = {
|
||||||
|
pc-demo1 = nixpkgs.lib.nixosSystem {
|
||||||
|
system = "x86_64-linux";
|
||||||
|
modules = [
|
||||||
|
{
|
||||||
|
config._module.args = {
|
||||||
|
flake = self;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
disko.nixosModules.disko
|
||||||
|
impermanence.nixosModules.impermanence
|
||||||
|
home-manager.nixosModules.home-manager
|
||||||
|
./computer/pc-demo1/default.nix
|
||||||
|
./options.nix
|
||||||
|
./os/default.nix
|
||||||
|
./software/default.nix
|
||||||
|
./users/default.nix
|
||||||
|
{
|
||||||
|
home-manager = {
|
||||||
|
useGlobalPkgs = true;
|
||||||
|
useUserPackages = true;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
pc-demo2 = nixpkgs.lib.nixosSystem {
|
||||||
|
system = "x86_64-linux";
|
||||||
|
modules = [
|
||||||
|
{
|
||||||
|
config._module.args = {
|
||||||
|
flake = self;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
disko.nixosModules.disko
|
||||||
|
impermanence.nixosModules.impermanence
|
||||||
|
home-manager.nixosModules.home-manager
|
||||||
|
./computer/pc-demo2/default.nix
|
||||||
|
./options.nix
|
||||||
|
./os/default.nix
|
||||||
|
./software/default.nix
|
||||||
|
./users/default.nix
|
||||||
|
{
|
||||||
|
home-manager = {
|
||||||
|
useGlobalPkgs = true;
|
||||||
|
useUserPackages = true;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
274
options.nix
Normal file
274
options.nix
Normal file
@ -0,0 +1,274 @@
|
|||||||
|
{ lib, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
options = {
|
||||||
|
beancloud.network.address = lib.mkOption {
|
||||||
|
type = lib.types.str;
|
||||||
|
example = "192.168.1.10";
|
||||||
|
description = "beancloud.network.address to define the ip of the host/vm or a service";
|
||||||
|
};
|
||||||
|
beancloud.network.subnet = lib.mkOption {
|
||||||
|
type = lib.types.str;
|
||||||
|
example = "/24";
|
||||||
|
description = "beancloud.network.subnet to define the subnet of the host/vm or a service";
|
||||||
|
};
|
||||||
|
beancloud.network.interface.lan = lib.mkOption {
|
||||||
|
type = lib.types.str;
|
||||||
|
example = "enp1s0";
|
||||||
|
default = "eth0";
|
||||||
|
description = "beancloud.network.interface.lan to define the wired network interface";
|
||||||
|
};
|
||||||
|
beancloud.network.interface.wlan = lib.mkOption {
|
||||||
|
type = lib.types.str;
|
||||||
|
example = "enp1s0";
|
||||||
|
default = "wlan0";
|
||||||
|
description = "beancloud.network.interface.wlan to define the wireless network interface";
|
||||||
|
};
|
||||||
|
beancloud.bootloader.type = lib.mkOption {
|
||||||
|
type = lib.types.str;
|
||||||
|
example = "grub";
|
||||||
|
default = "systemd";
|
||||||
|
description = "beancloud.bootloader.type[grub|systemd] to define the to be used bootloader";
|
||||||
|
};
|
||||||
|
beancloud.persistence.type = lib.mkOption {
|
||||||
|
type = lib.types.str;
|
||||||
|
example = "preservation";
|
||||||
|
default = "impermanence";
|
||||||
|
description = "beancloud.persistence.type[impermanence|preservation] to define the to be used persistence provider";
|
||||||
|
};
|
||||||
|
beancloud.persistence.root = lib.mkOption {
|
||||||
|
type = lib.types.str;
|
||||||
|
example = "fs";
|
||||||
|
default = "tmpfs";
|
||||||
|
description = "beancloud.persistence.root[fs|tmpfs] to define the to be used type of root partition";
|
||||||
|
};
|
||||||
|
beancloud.disk.device.name = lib.mkOption {
|
||||||
|
type = lib.types.str;
|
||||||
|
example = "sda";
|
||||||
|
default = "nvme0n1";
|
||||||
|
description = "beancloud.disk.device.name to define the to be used device path for the first disk";
|
||||||
|
};
|
||||||
|
beancloud.os.lang.first = lib.mkOption {
|
||||||
|
type = lib.types.str;
|
||||||
|
example = "de_DE.UTF-8";
|
||||||
|
default = "de_DE.UTF-8";
|
||||||
|
description = "beancloud.os.lang.first to define the default system language";
|
||||||
|
};
|
||||||
|
beancloud.os.lang.second = lib.mkOption {
|
||||||
|
type = lib.types.str;
|
||||||
|
example = "en_US.UTF-8";
|
||||||
|
default = "en_US.UTF-8";
|
||||||
|
description = "beancloud.os.lang.second to define the second system language";
|
||||||
|
};
|
||||||
|
beancloud.os.lang.keymap = lib.mkOption {
|
||||||
|
type = lib.types.str;
|
||||||
|
example = "us";
|
||||||
|
default = "de,us";
|
||||||
|
description = "beancloud.os.lang.keymap to define the language for the (console) keymaps";
|
||||||
|
};
|
||||||
|
beancloud.os.powermgmt.service = lib.mkOption {
|
||||||
|
type = lib.types.str;
|
||||||
|
example = "tlp";
|
||||||
|
default = "auto-cpufreq";
|
||||||
|
description = "beancloud.os.lang.keymap[auto-cpufreq|power-profiles|tlp] to define the to be used power management service";
|
||||||
|
};
|
||||||
|
beancloud.software.chromium = lib.mkOption {
|
||||||
|
type = lib.types.bool;
|
||||||
|
default = false;
|
||||||
|
description = "beancloud.software.chromium to activate the chromium package";
|
||||||
|
};
|
||||||
|
beancloud.software.container = lib.mkOption {
|
||||||
|
type = lib.types.bool;
|
||||||
|
default = false;
|
||||||
|
description = "beancloud.software.container to activate the container related packages like docker and podman";
|
||||||
|
};
|
||||||
|
beancloud.software.davinci-resolve = lib.mkOption {
|
||||||
|
type = lib.types.bool;
|
||||||
|
default = false;
|
||||||
|
description = "beancloud.software.davinci-resolve to activate the Davinci video editor";
|
||||||
|
};
|
||||||
|
beancloud.software.desktop = lib.mkOption {
|
||||||
|
type = lib.types.bool;
|
||||||
|
default = true;
|
||||||
|
description = "beancloud.software.desktop to activate the Gnome Desktop and the related software packages";
|
||||||
|
};
|
||||||
|
beancloud.software.development = lib.mkOption {
|
||||||
|
type = lib.types.bool;
|
||||||
|
default = false;
|
||||||
|
description = "beancloud.software.development to activate the software development related packages like gnome-builder";
|
||||||
|
};
|
||||||
|
beancloud.software.games = {
|
||||||
|
enable = lib.mkOption {
|
||||||
|
type = lib.types.bool;
|
||||||
|
default = false;
|
||||||
|
description = "beancloud.software.games.enable to install several game related packages";
|
||||||
|
};
|
||||||
|
stardewvalley = lib.mkOption {
|
||||||
|
type = lib.types.bool;
|
||||||
|
default = false;
|
||||||
|
description = "beancloud.software.games.stardewvalley to enable game related settings";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
beancloud.software.epson-scan = lib.mkOption {
|
||||||
|
type = lib.types.bool;
|
||||||
|
default = false;
|
||||||
|
description = "beancloud.software.epson-scan to activate the Epson scanner software package";
|
||||||
|
};
|
||||||
|
beancloud.software.nextcloud = {
|
||||||
|
client = lib.mkOption {
|
||||||
|
type = lib.types.bool;
|
||||||
|
default = false;
|
||||||
|
description = "beancloud.software.nextcloud.client to activate the nextcloud-client package";
|
||||||
|
};
|
||||||
|
talk-desktop = lib.mkOption {
|
||||||
|
type = lib.types.bool;
|
||||||
|
default = false;
|
||||||
|
description = "beancloud.software.nextcloud.talk-desktop to activate the nextcloud talk desktop package";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
beancloud.software.ollama = lib.mkOption {
|
||||||
|
type = lib.types.bool;
|
||||||
|
default = false;
|
||||||
|
description = "beancloud.software.ollama to activate the local only ollama service and WebUI";
|
||||||
|
};
|
||||||
|
beancloud.software.obs-studio = lib.mkOption {
|
||||||
|
type = lib.types.bool;
|
||||||
|
default = false;
|
||||||
|
description = "beancloud.software.obs-studio to activate the OBS streaming software";
|
||||||
|
};
|
||||||
|
beancloud.software.podman-desktop = lib.mkOption {
|
||||||
|
type = lib.types.bool;
|
||||||
|
default = false;
|
||||||
|
description = "beancloud.software.podman-desktop to activate the podman-desktop package";
|
||||||
|
};
|
||||||
|
beancloud.software.shotcut = lib.mkOption {
|
||||||
|
type = lib.types.bool;
|
||||||
|
default = false;
|
||||||
|
description = "beancloud.software.shotcut to activate the Shotcut video editor";
|
||||||
|
};
|
||||||
|
beancloud.software.steam.enable = lib.mkOption {
|
||||||
|
type = lib.types.bool;
|
||||||
|
default = false;
|
||||||
|
description = "beancloud.software.steam.enable to activate the steam related packages";
|
||||||
|
};
|
||||||
|
beancloud.software.steam.autostart = lib.mkOption {
|
||||||
|
type = lib.types.bool;
|
||||||
|
default = false;
|
||||||
|
description = "beancloud.software.steam.autostart to control if the Steam client should be started on login";
|
||||||
|
};
|
||||||
|
beancloud.software.virt-manager = lib.mkOption {
|
||||||
|
type = lib.types.bool;
|
||||||
|
default = false;
|
||||||
|
description = "beancloud.software.virt-manager to activate the virt-manager package";
|
||||||
|
};
|
||||||
|
beancloud.software.wine = lib.mkOption {
|
||||||
|
type = lib.types.bool;
|
||||||
|
default = false;
|
||||||
|
description = "beancloud.software.wine to activate the wine related packages";
|
||||||
|
};
|
||||||
|
beancloud.software.zed-editor = lib.mkOption {
|
||||||
|
type = lib.types.bool;
|
||||||
|
default = false;
|
||||||
|
description = "beancloud.software.zed-editor to activate the zed-editor package";
|
||||||
|
};
|
||||||
|
beancloud.software.photography = lib.mkOption {
|
||||||
|
type = lib.types.bool;
|
||||||
|
default = false;
|
||||||
|
description = "beancloud.software.photography to activate several photo development related packages";
|
||||||
|
};
|
||||||
|
beancloud.software.virtualisation = lib.mkOption {
|
||||||
|
type = lib.types.bool;
|
||||||
|
default = false;
|
||||||
|
description = "beancloud.software.virtualisation to activate the libvirtd daemon and virt-manager";
|
||||||
|
};
|
||||||
|
beancloud.os.kernel.latest = lib.mkOption {
|
||||||
|
type = lib.types.bool;
|
||||||
|
example = true;
|
||||||
|
default = false;
|
||||||
|
description = "beancloud.os.kernel.latest to enable the newest available Linux kernel version";
|
||||||
|
};
|
||||||
|
beancloud.os.screensaver.lock = lib.mkOption {
|
||||||
|
type = lib.types.bool;
|
||||||
|
default = true;
|
||||||
|
description = "beancloud.os.screensaver.lock to control if the session should be locked after a period of inactivity";
|
||||||
|
};
|
||||||
|
beancloud.hardware = {
|
||||||
|
gpu = {
|
||||||
|
intel.i915 = lib.mkOption {
|
||||||
|
type = lib.types.bool;
|
||||||
|
example = true;
|
||||||
|
default = false;
|
||||||
|
description = "beancloud.hardware.gpu.intel.i915 to enable older Intel i915 GPU specific packages";
|
||||||
|
};
|
||||||
|
intel.xe = lib.mkOption {
|
||||||
|
type = lib.types.bool;
|
||||||
|
example = true;
|
||||||
|
default = false;
|
||||||
|
description = "beancloud.hardware.gpu.intel.xe to enable newer Intel xe GPU specific packages";
|
||||||
|
};
|
||||||
|
amd = {
|
||||||
|
enable = lib.mkOption {
|
||||||
|
type = lib.types.bool;
|
||||||
|
example = true;
|
||||||
|
default = false;
|
||||||
|
description = "beancloud.hardware.gpu.amd.enable to enable AMD GPU specific packages";
|
||||||
|
};
|
||||||
|
amdvlk = lib.mkOption {
|
||||||
|
type = lib.types.bool;
|
||||||
|
example = true;
|
||||||
|
default = false;
|
||||||
|
description = "beancloud.hardware.gpu.amd.amdvlk to enable the amdvlk driver instead of the default mesa driver";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
wifi.broadcom = lib.mkOption {
|
||||||
|
type = lib.types.bool;
|
||||||
|
example = true;
|
||||||
|
default = false;
|
||||||
|
description = "beancloud.hardware.wifi.broadcom to enable the Broadcom Wifi driver packages";
|
||||||
|
};
|
||||||
|
macbook = lib.mkOption {
|
||||||
|
type = lib.types.bool;
|
||||||
|
example = true;
|
||||||
|
default = false;
|
||||||
|
description = "beancloud.hardware.macbook to enable beancloud.hardware.macbook specific packages and settings";
|
||||||
|
};
|
||||||
|
steamdeck = lib.mkOption {
|
||||||
|
type = lib.types.bool;
|
||||||
|
default = false;
|
||||||
|
description = "beancloud.hardware.steamdeck to enable Steam Deck specific settings like the display autoconfig";
|
||||||
|
};
|
||||||
|
backlight.service = lib.mkOption {
|
||||||
|
type = lib.types.str;
|
||||||
|
example = "pommed";
|
||||||
|
default = "clight";
|
||||||
|
description = "beancloud.hardware.backlight.service [clight|pommed] to enable a backlight control service";
|
||||||
|
};
|
||||||
|
printer = {
|
||||||
|
hp = lib.mkOption {
|
||||||
|
type = lib.types.bool;
|
||||||
|
default = false;
|
||||||
|
description = "beancloud.hardware.printer.hp to enable HP printer drivers";
|
||||||
|
};
|
||||||
|
epson = lib.mkOption {
|
||||||
|
type = lib.types.bool;
|
||||||
|
default = false;
|
||||||
|
description = "beancloud.hardware.printer.epson to enable Epson printer drivers";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
virtualmachine = {
|
||||||
|
type = lib.mkOption {
|
||||||
|
type = lib.types.str;
|
||||||
|
example = "kvm";
|
||||||
|
description = "beancloud.hardware.virtualmachine.type[kvm] to enable virtio related kernel modules";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
beancloud.tier = lib.mkOption {
|
||||||
|
type = lib.types.str;
|
||||||
|
example = "dev";
|
||||||
|
default = "main";
|
||||||
|
description = "beancloud.tier to define the to be used git branch [main|qa|dev] for the autoupdates";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
58
os/boot.nix
Normal file
58
os/boot.nix
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
{
|
||||||
|
boot = {
|
||||||
|
initrd = {
|
||||||
|
availableKernelModules = [
|
||||||
|
"ahci"
|
||||||
|
"xhci_pci"
|
||||||
|
"sr_mod"
|
||||||
|
(lib.mkIf config.beancloud.hardware.wifi.broadcom "wl")
|
||||||
|
(lib.mkIf config.beancloud.hardware.gpu.intel.xe "xe")
|
||||||
|
(lib.mkIf config.beancloud.hardware.gpu.intel.i915 "i915")
|
||||||
|
];
|
||||||
|
kernelModules = [
|
||||||
|
"dm-snapshot"
|
||||||
|
];
|
||||||
|
systemd.enable = true;
|
||||||
|
systemd.emergencyAccess = true;
|
||||||
|
verbose = false;
|
||||||
|
};
|
||||||
|
extraModulePackages = with config.boot.kernelPackages; [
|
||||||
|
(lib.mkIf config.beancloud.hardware.wifi.broadcom broadcom_sta)
|
||||||
|
];
|
||||||
|
kernelPackages = lib.mkIf config.beancloud.os.kernel.latest pkgs.linuxPackages_latest;
|
||||||
|
kernelModules = [
|
||||||
|
(lib.mkIf config.beancloud.hardware.wifi.broadcom "wl")
|
||||||
|
];
|
||||||
|
blacklistedKernelModules = [ ];
|
||||||
|
loader = {
|
||||||
|
systemd-boot = {
|
||||||
|
enable = lib.mkIf (config.beancloud.bootloader.type == "systemd") true;
|
||||||
|
consoleMode = "max";
|
||||||
|
editor = false;
|
||||||
|
configurationLimit = 16;
|
||||||
|
memtest86.enable = true;
|
||||||
|
};
|
||||||
|
efi.canTouchEfiVariables = false;
|
||||||
|
};
|
||||||
|
plymouth = {
|
||||||
|
enable = config.beancloud.software.desktop;
|
||||||
|
theme = "breeze";
|
||||||
|
};
|
||||||
|
consoleLogLevel = 0;
|
||||||
|
kernelParams = [
|
||||||
|
"quiet"
|
||||||
|
"boot.shell_on_fail"
|
||||||
|
"rd.udev.log_level=3"
|
||||||
|
"udev.log_priority=3"
|
||||||
|
"fsck.mode=auto"
|
||||||
|
"fsck.repair=preen"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
21
os/container.nix
Normal file
21
os/container.nix
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
{ config, lib, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
virtualisation = {
|
||||||
|
containers.enable = lib.mkIf config.beancloud.software.container true;
|
||||||
|
oci-containers.backend = "podman";
|
||||||
|
podman = {
|
||||||
|
enable = lib.mkIf config.beancloud.software.container true;
|
||||||
|
dockerCompat = true;
|
||||||
|
defaultNetwork.settings.dns_enabled = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
(lib.mkIf config.beancloud.software.container dive)
|
||||||
|
(lib.mkIf config.beancloud.software.container docker)
|
||||||
|
(lib.mkIf config.beancloud.software.container podman)
|
||||||
|
(lib.mkIf config.beancloud.software.container podman-tui)
|
||||||
|
(lib.mkIf config.beancloud.software.container docker-compose)
|
||||||
|
];
|
||||||
|
}
|
44
os/default.nix
Normal file
44
os/default.nix
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
{ ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
./boot.nix
|
||||||
|
./disks.nix
|
||||||
|
./container.nix
|
||||||
|
./persistence.nix
|
||||||
|
./hardware
|
||||||
|
./swap.nix
|
||||||
|
./locale.nix
|
||||||
|
./network.nix
|
||||||
|
./update.nix
|
||||||
|
./virtualization.nix
|
||||||
|
];
|
||||||
|
|
||||||
|
time.timeZone = "Europe/Berlin";
|
||||||
|
environment.variables.EDITOR = "vim";
|
||||||
|
|
||||||
|
documentation = {
|
||||||
|
enable = true;
|
||||||
|
nixos.enable = false;
|
||||||
|
man.enable = true;
|
||||||
|
info.enable = false;
|
||||||
|
doc.enable = false;
|
||||||
|
dev.enable = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
nix = {
|
||||||
|
settings = {
|
||||||
|
experimental-features = [
|
||||||
|
"nix-command"
|
||||||
|
"flakes"
|
||||||
|
];
|
||||||
|
max-jobs = 2;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
nixpkgs.config = {
|
||||||
|
allowUnfree = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
system.stateVersion = "25.05";
|
||||||
|
}
|
119
os/disks.nix
Normal file
119
os/disks.nix
Normal file
@ -0,0 +1,119 @@
|
|||||||
|
{ config, lib, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
disko.devices = {
|
||||||
|
disk = {
|
||||||
|
disk0 = {
|
||||||
|
type = "disk";
|
||||||
|
device = "/dev/${config.beancloud.disk.device.name}";
|
||||||
|
content = {
|
||||||
|
type = "gpt";
|
||||||
|
partitions = {
|
||||||
|
ESP = {
|
||||||
|
size = "1G";
|
||||||
|
type = "EF00";
|
||||||
|
priority = 1;
|
||||||
|
content = {
|
||||||
|
type = "filesystem";
|
||||||
|
format = "vfat";
|
||||||
|
extraArgs = [
|
||||||
|
"-F"
|
||||||
|
"32"
|
||||||
|
"-n"
|
||||||
|
"BOOT"
|
||||||
|
];
|
||||||
|
mountpoint = "/boot";
|
||||||
|
mountOptions = [ "umask=0077" ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
lvm = {
|
||||||
|
size = "100%";
|
||||||
|
priority = 2;
|
||||||
|
content = {
|
||||||
|
type = "lvm_pv";
|
||||||
|
vg = "nixos";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
lvm_vg = {
|
||||||
|
nixos = {
|
||||||
|
type = "lvm_vg";
|
||||||
|
lvs = lib.mkMerge [
|
||||||
|
{
|
||||||
|
swap = {
|
||||||
|
size = "2GB";
|
||||||
|
content = {
|
||||||
|
type = "swap";
|
||||||
|
resumeDevice = true;
|
||||||
|
priority = 1;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
(lib.mkIf (config.beancloud.persistence.root == "fs") {
|
||||||
|
root = {
|
||||||
|
size = "100%FREE";
|
||||||
|
content = {
|
||||||
|
type = "filesystem";
|
||||||
|
format = "ext4";
|
||||||
|
extraArgs = [
|
||||||
|
"-L"
|
||||||
|
"root"
|
||||||
|
"-T"
|
||||||
|
"news"
|
||||||
|
"-m"
|
||||||
|
"1"
|
||||||
|
];
|
||||||
|
mountpoint = "/";
|
||||||
|
mountOptions = [ "defaults" ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
})
|
||||||
|
(lib.mkIf (config.beancloud.persistence.root == "tmpfs") {
|
||||||
|
nix = {
|
||||||
|
size = "100%FREE";
|
||||||
|
content = {
|
||||||
|
type = "filesystem";
|
||||||
|
format = "ext4";
|
||||||
|
extraArgs = [
|
||||||
|
"-L"
|
||||||
|
"nix"
|
||||||
|
"-T"
|
||||||
|
"news"
|
||||||
|
"-m"
|
||||||
|
"1"
|
||||||
|
];
|
||||||
|
mountpoint = "/nix";
|
||||||
|
mountOptions = [ "defaults" ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
})
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
nodev = lib.mkMerge [
|
||||||
|
(lib.mkIf (config.beancloud.persistence.root == "fs") {
|
||||||
|
tmp = {
|
||||||
|
fsType = "tmpfs";
|
||||||
|
mountpoint = "/tmp";
|
||||||
|
mountOptions = [
|
||||||
|
"size=25%"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
})
|
||||||
|
(lib.mkIf (config.beancloud.persistence.root == "tmpfs") {
|
||||||
|
root = {
|
||||||
|
fsType = "tmpfs";
|
||||||
|
mountpoint = "/";
|
||||||
|
mountOptions = [
|
||||||
|
"defaults"
|
||||||
|
"size=50%"
|
||||||
|
"mode=755"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
})
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
62
os/hardware/default.nix
Normal file
62
os/hardware/default.nix
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
modulesPath,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
(modulesPath + "/installer/scan/not-detected.nix")
|
||||||
|
./macbook
|
||||||
|
];
|
||||||
|
|
||||||
|
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
||||||
|
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
||||||
|
hardware.bluetooth.enable = true;
|
||||||
|
hardware.bluetooth.powerOnBoot = false;
|
||||||
|
|
||||||
|
# hidpi settings
|
||||||
|
fonts.fontconfig.subpixel.rgba = "rgb";
|
||||||
|
services.xserver.dpi = 144;
|
||||||
|
environment.variables = {
|
||||||
|
NIXOS_OZONE_WL = "1";
|
||||||
|
QT_QPA_PLATFORM = "wayland";
|
||||||
|
};
|
||||||
|
|
||||||
|
hardware = {
|
||||||
|
graphics = {
|
||||||
|
enable = true;
|
||||||
|
enable32Bit = true;
|
||||||
|
extraPackages = with pkgs; [
|
||||||
|
(lib.mkIf config.beancloud.hardware.gpu.intel.xe intel-compute-runtime)
|
||||||
|
(lib.mkIf config.beancloud.hardware.gpu.intel.xe vpl-gpu-rt)
|
||||||
|
(lib.mkIf (config.beancloud.hardware.gpu.amd.enable && config.beancloud.hardware.gpu.amd.amdvlk) amdvlk)
|
||||||
|
];
|
||||||
|
extraPackages32 = with pkgs; [
|
||||||
|
(lib.mkIf (config.beancloud.hardware.gpu.amd.enable && config.beancloud.hardware.gpu.amd.amdvlk) driversi686Linux.amdvlk)
|
||||||
|
];
|
||||||
|
};
|
||||||
|
amdgpu = {
|
||||||
|
initrd.enable = if config.beancloud.hardware.gpu.amd.enable then true else false;
|
||||||
|
amdvlk = {
|
||||||
|
enable = if (config.beancloud.hardware.gpu.amd.enable && config.beancloud.hardware.gpu.amd.amdvlk) then true else false;
|
||||||
|
support32Bit.enable = if (config.beancloud.hardware.gpu.amd.enable && config.beancloud.hardware.gpu.amd.amdvlk) then true else false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
xone.enable = false;
|
||||||
|
xpadneo.enable = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
(lib.mkIf config.beancloud.hardware.gpu.intel.xe clinfo)
|
||||||
|
(lib.mkIf config.beancloud.hardware.gpu.intel.xe nvtopPackages.intel)
|
||||||
|
];
|
||||||
|
|
||||||
|
services.fwupd.enable = lib.mkIf (config.beancloud.hardware.virtualmachine.type == "") true;
|
||||||
|
|
||||||
|
# services.udev.extraRules = lib.mkIf config.beancloud.hardware.steamdeck ''
|
||||||
|
# ACTION=="change", SUBSYSTEM=="drm", TAG+="systemd", ENV{SYSTEMD_USER_WANTS}="display-config.service"
|
||||||
|
# '';
|
||||||
|
}
|
101
os/hardware/macbook/clight/default.nix
Normal file
101
os/hardware/macbook/clight/default.nix
Normal file
@ -0,0 +1,101 @@
|
|||||||
|
{
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
{
|
||||||
|
services.clight = {
|
||||||
|
enable = if (config.beancloud.hardware.backlight.service == "clight" && config.beancloud.hardware.macbook) then true else false;
|
||||||
|
settings = {
|
||||||
|
verbose = true;
|
||||||
|
resumedelay = 30;
|
||||||
|
|
||||||
|
inhibit = {
|
||||||
|
disabled = false;
|
||||||
|
inhibit_docked = true;
|
||||||
|
inhibit_pm = true;
|
||||||
|
inhibit_bl = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
backlight = {
|
||||||
|
disabled = true;
|
||||||
|
restore_on_exit = true;
|
||||||
|
no_smooth_transition = false;
|
||||||
|
trans_step = 0.05;
|
||||||
|
trans_timeout = 30;
|
||||||
|
trans_fixed = 0;
|
||||||
|
ac_timeouts = [ 600 2700 300 ];
|
||||||
|
batt_timeouts = [ 1200 5400 600 ];
|
||||||
|
shutter_threshold = 0.10;
|
||||||
|
no_auto_calibration = false;
|
||||||
|
pause_on_lid_closed = true;
|
||||||
|
capture_on_lid_opened = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
sensor = {
|
||||||
|
ac_regression_points = [ 0.0 0.15 0.29 0.45 0.61 0.74 0.81 0.88 0.93 0.97 1.0 ];
|
||||||
|
batt_regression_points = [ 0.0 0.15 0.23 0.36 0.52 0.59 0.65 0.71 0.75 0.78 0.80 ];
|
||||||
|
devname = "";
|
||||||
|
settings = "";
|
||||||
|
captures = [ 5 5 ];
|
||||||
|
};
|
||||||
|
|
||||||
|
keyboard = {
|
||||||
|
disabled = false;
|
||||||
|
timeouts = [ 15 7 ];
|
||||||
|
ac_regression_points = [ 1.0 0.97 0.93 0.88 0.81 0.74 0.61 0.45 0.29 0.15 0.0 ];
|
||||||
|
batt_regression_points = [ 0.80 0.78 0.75 0.71 0.65 0.59 0.52 0.36 0.23 0.15 0.0 ];
|
||||||
|
};
|
||||||
|
|
||||||
|
gamma = {
|
||||||
|
disabled = true;
|
||||||
|
restore_on_exit = true;
|
||||||
|
no_smooth_transition = false;
|
||||||
|
trans_step = 50;
|
||||||
|
trans_timeout = 300;
|
||||||
|
long_transition = true;
|
||||||
|
ambient_gamma = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
daytime = {
|
||||||
|
sunrise = "6:30";
|
||||||
|
sunset = "20:30";
|
||||||
|
event_duration = 1800;
|
||||||
|
sunrise_offset = 0;
|
||||||
|
sunset_offset = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
dimmer = rec {
|
||||||
|
disabled = false;
|
||||||
|
no_smooth_transition = [ false false ];
|
||||||
|
trans_steps = [ 0.01 0.08 ];
|
||||||
|
trans_timeouts =
|
||||||
|
let
|
||||||
|
# calculates a duration for each step between
|
||||||
|
# full brightness and the dimmed percentage
|
||||||
|
formula = duration: target: step: builtins.floor (duration / ((1 - target) / step));
|
||||||
|
in
|
||||||
|
[
|
||||||
|
(formula 2000 dimmed_pct (builtins.elemAt trans_steps 0))
|
||||||
|
(formula 250 dimmed_pct (builtins.elemAt trans_steps 1))
|
||||||
|
];
|
||||||
|
trans_fixed = [ 0 0 ];
|
||||||
|
timeouts = [ 30 15 ];
|
||||||
|
dimmed_pct = 0.2;
|
||||||
|
};
|
||||||
|
|
||||||
|
dpms = {
|
||||||
|
disabled = false;
|
||||||
|
timeouts = [ 900 300 ];
|
||||||
|
};
|
||||||
|
|
||||||
|
screen = {
|
||||||
|
disabled = true;
|
||||||
|
contrib = 0.2;
|
||||||
|
timeouts = [ 5 0 ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
location.latitude = if (config.beancloud.hardware.backlight.service == "clight" && config.beancloud.hardware.macbook) then 50.856289 else null;
|
||||||
|
location.longitude = if (config.beancloud.hardware.backlight.service == "clight" && config.beancloud.hardware.macbook) then 11.464202 else null;
|
||||||
|
}
|
19
os/hardware/macbook/default.nix
Normal file
19
os/hardware/macbook/default.nix
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
./pommed
|
||||||
|
./clight
|
||||||
|
];
|
||||||
|
|
||||||
|
# hardware.facetimehd = {
|
||||||
|
# enable = lib.mkIf config.beancloud.hardware.macbook true;
|
||||||
|
# withCalibration = lib.mkIf config.beancloud.hardware.macbook true;
|
||||||
|
# };
|
||||||
|
beancloud.hardware.wifi.broadcom = lib.mkIf config.beancloud.hardware.macbook true;
|
||||||
|
beancloud.hardware.gpu.intel.i915 = lib.mkIf config.beancloud.hardware.macbook true;
|
||||||
|
}
|
11
os/hardware/macbook/pommed/config-macbook-air.nix
Normal file
11
os/hardware/macbook/pommed/config-macbook-air.nix
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
{ stdenv, ... }:
|
||||||
|
|
||||||
|
stdenv.mkDerivation {
|
||||||
|
name = "pommed-macbook-air";
|
||||||
|
src = ./configs/macbook-air.conf;
|
||||||
|
dontUnpack = true;
|
||||||
|
buildPhase = '''';
|
||||||
|
installPhase = ''
|
||||||
|
cat $src > $out
|
||||||
|
'';
|
||||||
|
}
|
42
os/hardware/macbook/pommed/configs/macbook-air.conf
Normal file
42
os/hardware/macbook/pommed/configs/macbook-air.conf
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
general {
|
||||||
|
fnmode = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
lcd_sysfs {
|
||||||
|
init = 1740
|
||||||
|
step = 10
|
||||||
|
on_batt = 1024
|
||||||
|
}
|
||||||
|
|
||||||
|
lcd_gma950 {
|
||||||
|
init = 0x94
|
||||||
|
step = 0x0f
|
||||||
|
on_batt = 0x40
|
||||||
|
}
|
||||||
|
|
||||||
|
audio {
|
||||||
|
disabled = yes
|
||||||
|
}
|
||||||
|
|
||||||
|
kbd {
|
||||||
|
default = 256
|
||||||
|
step = 10
|
||||||
|
on_threshold = 20
|
||||||
|
off_threshold = 200
|
||||||
|
auto = yes
|
||||||
|
idle_timer = -1
|
||||||
|
idle_level = 32
|
||||||
|
}
|
||||||
|
|
||||||
|
eject {
|
||||||
|
enabled = no
|
||||||
|
device = "/dev/dvd"
|
||||||
|
}
|
||||||
|
|
||||||
|
beep {
|
||||||
|
enabled = no
|
||||||
|
}
|
||||||
|
|
||||||
|
appleir {
|
||||||
|
enabled = no
|
||||||
|
}
|
24
os/hardware/macbook/pommed/default.nix
Normal file
24
os/hardware/macbook/pommed/default.nix
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
{
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
{
|
||||||
|
services.hardware.pommed = {
|
||||||
|
enable =
|
||||||
|
if
|
||||||
|
(config.beancloud.hardware.backlight.service == "pommed" && config.beancloud.hardware.macbook)
|
||||||
|
then
|
||||||
|
true
|
||||||
|
else
|
||||||
|
false;
|
||||||
|
configFile =
|
||||||
|
if
|
||||||
|
(config.beancloud.hardware.backlight.service == "pommed" && config.beancloud.hardware.macbook)
|
||||||
|
then
|
||||||
|
pkgs.callPackage ./config-macbook-air.nix { }
|
||||||
|
else
|
||||||
|
null;
|
||||||
|
};
|
||||||
|
}
|
23
os/locale.nix
Normal file
23
os/locale.nix
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
{ config, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
i18n = {
|
||||||
|
# https://sourceware.org/git/?p=glibc.git;a=blob;f=localedata/SUPPORTED
|
||||||
|
defaultLocale = "${config.beancloud.os.lang.first}";
|
||||||
|
supportedLocales = [
|
||||||
|
"${config.i18n.defaultLocale}/UTF-8"
|
||||||
|
"${config.beancloud.os.lang.second}/UTF-8"
|
||||||
|
];
|
||||||
|
extraLocaleSettings = {
|
||||||
|
LANG = config.beancloud.os.lang.first;
|
||||||
|
LC_ALL = config.beancloud.os.lang.first;
|
||||||
|
LC_MESSAGES = config.beancloud.os.lang.first;
|
||||||
|
LC_TIME = config.beancloud.os.lang.first;
|
||||||
|
LC_CTYPE = config.beancloud.os.lang.first;
|
||||||
|
LC_COLLATE = config.beancloud.os.lang.first;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
services.xserver.xkb.layout = "${config.beancloud.os.lang.keymap}";
|
||||||
|
console.useXkbConfig = true;
|
||||||
|
}
|
92
os/network.nix
Normal file
92
os/network.nix
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
{ config, lib, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
networking = {
|
||||||
|
domain = "local";
|
||||||
|
enableIPv6 = false;
|
||||||
|
useDHCP = false;
|
||||||
|
wireless.enable = false;
|
||||||
|
usePredictableInterfaceNames = lib.mkIf (config.beancloud.network.interface.lan == "eth0") false;
|
||||||
|
};
|
||||||
|
networking.networkmanager = {
|
||||||
|
enable = true;
|
||||||
|
wifi.powersave = lib.mkIf config.beancloud.hardware.steamdeck true;
|
||||||
|
};
|
||||||
|
systemd.network = {
|
||||||
|
enable = true;
|
||||||
|
config.networkConfig = {
|
||||||
|
UseDomains = true;
|
||||||
|
SpeedMeter = true;
|
||||||
|
};
|
||||||
|
networks."10-lan" = {
|
||||||
|
enable = lib.mkDefault true;
|
||||||
|
matchConfig.Name = [ "${config.beancloud.network.interface.lan}" ];
|
||||||
|
linkConfig.RequiredForOnline = lib.mkDefault "routable";
|
||||||
|
networkConfig = {
|
||||||
|
DHCP = "yes";
|
||||||
|
IPv6AcceptRA = false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
networking.hosts = {
|
||||||
|
};
|
||||||
|
|
||||||
|
# (m)DNS
|
||||||
|
services.resolved = {
|
||||||
|
enable = true;
|
||||||
|
fallbackDns = [
|
||||||
|
"9.9.9.9" # https://www.quad9.net/service/service-addresses-and-features
|
||||||
|
"2620:fe::fe" # https://www.quad9.net/service/service-addresses-and-features
|
||||||
|
];
|
||||||
|
dnssec = "false";
|
||||||
|
dnsovertls = "opportunistic";
|
||||||
|
};
|
||||||
|
|
||||||
|
networking.firewall.enable = true;
|
||||||
|
networking.firewall.allowPing = true;
|
||||||
|
networking.nftables.enable = false;
|
||||||
|
networking.nftables.tables = {
|
||||||
|
filter = {
|
||||||
|
content = ''
|
||||||
|
# Check out https://wiki.nftables.org/ for better documentation.
|
||||||
|
# Table for both IPv4 and IPv6.
|
||||||
|
chain input {
|
||||||
|
type filter hook input priority 0;
|
||||||
|
|
||||||
|
# accept any localhost traffic
|
||||||
|
iifname lo accept
|
||||||
|
|
||||||
|
# accept traffic originated from us
|
||||||
|
ct state {established, related} accept
|
||||||
|
|
||||||
|
# ICMP
|
||||||
|
# routers may also want: mld-listener-query, nd-router-solicit
|
||||||
|
ip6 nexthdr icmpv6 icmpv6 type { destination-unreachable, packet-too-big, time-exceeded, parameter-problem, nd-router-advert, nd-neighbor-solicit, nd-neighbor-advert } accept
|
||||||
|
ip protocol icmp icmp type { destination-unreachable, router-advertisement, time-exceeded, parameter-problem } accept
|
||||||
|
|
||||||
|
# allow "ping"
|
||||||
|
ip6 nexthdr icmpv6 icmpv6 type echo-request accept
|
||||||
|
ip protocol icmp icmp type echo-request accept
|
||||||
|
|
||||||
|
# count and drop any other traffic
|
||||||
|
counter drop
|
||||||
|
}
|
||||||
|
|
||||||
|
# Allow all outgoing connections.
|
||||||
|
chain output {
|
||||||
|
type filter hook output priority 0;
|
||||||
|
accept
|
||||||
|
}
|
||||||
|
|
||||||
|
chain forward {
|
||||||
|
type filter hook forward priority 0;
|
||||||
|
accept
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
family = "inet";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
beancloud.network.interface.lan = lib.mkIf config.beancloud.hardware.steamdeck "eth0";
|
||||||
|
}
|
141
os/persistence.nix
Normal file
141
os/persistence.nix
Normal file
@ -0,0 +1,141 @@
|
|||||||
|
{ config, lib, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
environment.persistence = {
|
||||||
|
persistence = {
|
||||||
|
enable = lib.mkIf (config.beancloud.persistence.type != "impermanence") false;
|
||||||
|
persistentStoragePath = "/nix/persistence";
|
||||||
|
hideMounts = true;
|
||||||
|
directories = [
|
||||||
|
"/etc/nixos"
|
||||||
|
"/var/log"
|
||||||
|
"/var/lib/bluetooth"
|
||||||
|
"/var/lib/nixos"
|
||||||
|
"/var/lib/systemd/coredump"
|
||||||
|
"/var/lib/systemd/timers"
|
||||||
|
"/etc/NetworkManager/system-connections"
|
||||||
|
];
|
||||||
|
files = [
|
||||||
|
"/etc/machine-id"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
boot.initrd.preLVMCommands = lib.mkIf (config.beancloud.persistence.type != "preservation" && config.beancloud.persistence.root == "fs") ''
|
||||||
|
WAIT_TIME=5
|
||||||
|
MAX_RETRIES=6
|
||||||
|
ROOT_DEV="/dev/disk/by-label/root"
|
||||||
|
ROOT_DIR=/rootmnt"
|
||||||
|
|
||||||
|
mountPartition() {
|
||||||
|
echo "mount the root / partition"
|
||||||
|
|
||||||
|
echo "create the $ROOT_DIR folder"
|
||||||
|
mkdir -p "$ROOT_DIR"
|
||||||
|
|
||||||
|
COUNTER=1
|
||||||
|
while [ ! -e "$ROOT_DEV" ] || [ ! -e "$ROOT_DIR" ]; do
|
||||||
|
echo "the root partition or the mount folder are not yet available"
|
||||||
|
sleep $WAIT_TIME
|
||||||
|
if [ "$COUNTER" -eq "$MAX_RETRIES" ]; then
|
||||||
|
echo "device check failed"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
COUNTER="$((COUNTER + 1))"
|
||||||
|
done
|
||||||
|
|
||||||
|
COUNTER=1
|
||||||
|
until mount "$ROOT_DEV" $ROOT_DIR; do
|
||||||
|
echo "the root partition has not yet been mounted"
|
||||||
|
sleep "$WAIT_TIME"
|
||||||
|
if [ "$COUNTER" -eq "$MAX_RETRIES" ]; then
|
||||||
|
echo "mount failed"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
COUNTER="$((COUNTER + 1))"
|
||||||
|
done
|
||||||
|
echo "mount done"
|
||||||
|
}
|
||||||
|
|
||||||
|
wipePartition() {
|
||||||
|
echo "wipe the content from the / partition"
|
||||||
|
|
||||||
|
COUNTER=1
|
||||||
|
until rm -rf "$ROOT_DIR/*"; do
|
||||||
|
echo "the wipe has been failed"
|
||||||
|
sleep 5
|
||||||
|
if [ "$COUNTER" -eq "$MAX_RETRIES" ]; then
|
||||||
|
echo "wipe failed"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
COUNTER="$((COUNTER + 1))"
|
||||||
|
done
|
||||||
|
echo "wipe done"
|
||||||
|
}
|
||||||
|
|
||||||
|
umountPartition() {
|
||||||
|
echo "umount the root / partition"
|
||||||
|
|
||||||
|
COUNTER=1
|
||||||
|
until umount "$ROOT_DIR"; do
|
||||||
|
echo "umount failed"
|
||||||
|
sleep 5
|
||||||
|
if [ "$COUNTER" -eq "$MAX_RETRIES" ]; then
|
||||||
|
echo "umount failed"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
COUNTER="$((COUNTER + 1))"
|
||||||
|
done
|
||||||
|
echo "umount done"
|
||||||
|
}
|
||||||
|
|
||||||
|
loadModules() {
|
||||||
|
echo "load the ext4 module"
|
||||||
|
|
||||||
|
COUNTER=1
|
||||||
|
until modprobe ext4; do
|
||||||
|
echo "modprobe ext4 failed"
|
||||||
|
sleep 5
|
||||||
|
if [ "$COUNTER" -eq "$MAX_RETRIES" ]; then
|
||||||
|
echo "modprobe failed"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
COUNTER="$((COUNTER + 1))"
|
||||||
|
done
|
||||||
|
echo "modprobe done"
|
||||||
|
}
|
||||||
|
|
||||||
|
fixPermissions() {
|
||||||
|
echo "fix /var/empty permissions"
|
||||||
|
|
||||||
|
COUNTER=1
|
||||||
|
until chattr -i -a "$ROOT_DIR/var/empty"; do
|
||||||
|
echo "chattr /var/empty failed"
|
||||||
|
sleep 5
|
||||||
|
if [ "$COUNTER" -eq "$MAX_RETRIES" ]; then
|
||||||
|
echo "chattr failed"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
COUNTER="$((COUNTER + 1))"
|
||||||
|
done
|
||||||
|
|
||||||
|
COUNTER=1
|
||||||
|
until chmod 755 "$ROOT_DIR/var/empty"; do
|
||||||
|
echo "chmod /var/empty failed"
|
||||||
|
sleep 5
|
||||||
|
if [ "$COUNTER" -eq "$MAX_RETRIES" ]; then
|
||||||
|
echo "chmod failed"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
COUNTER="$((COUNTER + 1))"
|
||||||
|
done
|
||||||
|
echo "permissions fix done"
|
||||||
|
}
|
||||||
|
|
||||||
|
loadModules
|
||||||
|
mountPartition
|
||||||
|
fixPermissions
|
||||||
|
wipePartition
|
||||||
|
umountPartition
|
||||||
|
'';
|
||||||
|
}
|
7
os/swap.nix
Normal file
7
os/swap.nix
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
{ ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
zramSwap = {
|
||||||
|
enable = true;
|
||||||
|
};
|
||||||
|
}
|
25
os/update.nix
Normal file
25
os/update.nix
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
{ config, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
system.autoUpgrade = {
|
||||||
|
enable = true;
|
||||||
|
allowReboot = false;
|
||||||
|
flake = "git+https://code.beancloud.de/public/nixos-demo.git?ref=${config.beancloud.tier}#${config.networking.hostName}";
|
||||||
|
dates = "02:00";
|
||||||
|
randomizedDelaySec = "45min";
|
||||||
|
};
|
||||||
|
nix = {
|
||||||
|
optimise = {
|
||||||
|
automatic = true;
|
||||||
|
};
|
||||||
|
gc = {
|
||||||
|
automatic = true;
|
||||||
|
dates = "weekly";
|
||||||
|
options = "--delete-older-than 30d";
|
||||||
|
};
|
||||||
|
extraOptions = ''
|
||||||
|
min-free = ${toString (1024 * 1024 * 1024)}
|
||||||
|
max-free = ${toString (4096 * 1024 * 1024)}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
}
|
34
os/virtualization.nix
Normal file
34
os/virtualization.nix
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
{
|
||||||
|
boot.initrd = {
|
||||||
|
availableKernelModules = [
|
||||||
|
(lib.mkIf (config.beancloud.hardware.virtualmachine.type == "kvm") "virtio_net")
|
||||||
|
(lib.mkIf (config.beancloud.hardware.virtualmachine.type == "kvm") "virtio_mmio")
|
||||||
|
(lib.mkIf (config.beancloud.hardware.virtualmachine.type == "kvm") "virtio_pci")
|
||||||
|
(lib.mkIf (config.beancloud.hardware.virtualmachine.type == "kvm") "virtio_blk")
|
||||||
|
(lib.mkIf (config.beancloud.hardware.virtualmachine.type == "kvm") "virtio_scsi")
|
||||||
|
(lib.mkIf (config.beancloud.hardware.virtualmachine.type == "kvm") "9p")
|
||||||
|
(lib.mkIf (config.beancloud.hardware.virtualmachine.type == "kvm") "9pnet_virtio")
|
||||||
|
];
|
||||||
|
kernelModules = [
|
||||||
|
(lib.mkIf (config.beancloud.hardware.virtualmachine.type == "kvm") "virtio_balloon")
|
||||||
|
(lib.mkIf (config.beancloud.hardware.virtualmachine.type == "kvm") "virtio_console")
|
||||||
|
(lib.mkIf (config.beancloud.hardware.virtualmachine.type == "kvm") "virtio_rng")
|
||||||
|
(lib.mkIf (config.beancloud.hardware.virtualmachine.type == "kvm") "virtio_gpu")
|
||||||
|
];
|
||||||
|
};
|
||||||
|
services.qemuGuest.enable = lib.mkIf (config.beancloud.hardware.virtualmachine.type == "kvm") true;
|
||||||
|
|
||||||
|
virtualisation.libvirtd.enable = lib.mkIf config.beancloud.software.virtualisation true;
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
(lib.mkIf (
|
||||||
|
config.beancloud.software.virtualisation || config.beancloud.software.virt-manager
|
||||||
|
) virt-manager)
|
||||||
|
];
|
||||||
|
}
|
45
software/default.nix
Normal file
45
software/default.nix
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
{
|
||||||
|
# https://search.nixos.org/packages
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
btop
|
||||||
|
curl
|
||||||
|
dnsutils
|
||||||
|
dosfstools
|
||||||
|
fzf
|
||||||
|
git
|
||||||
|
htop
|
||||||
|
(lib.mkIf config.beancloud.hardware.macbook inxi)
|
||||||
|
jq
|
||||||
|
less
|
||||||
|
mc
|
||||||
|
screen
|
||||||
|
strace
|
||||||
|
sysstat
|
||||||
|
tcpdump
|
||||||
|
tmux
|
||||||
|
unzip
|
||||||
|
vim
|
||||||
|
wget
|
||||||
|
whois
|
||||||
|
xz
|
||||||
|
yq-go
|
||||||
|
zip
|
||||||
|
];
|
||||||
|
|
||||||
|
programs.java.enable = lib.mkIf config.beancloud.software.steam.enable true;
|
||||||
|
|
||||||
|
imports = [
|
||||||
|
./firmware.nix
|
||||||
|
./gnome.nix
|
||||||
|
./nix-daemon.nix
|
||||||
|
./openssh.nix
|
||||||
|
./wine.nix
|
||||||
|
];
|
||||||
|
}
|
49
software/desktop.nix
Normal file
49
software/desktop.nix
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
./games.nix
|
||||||
|
./libreoffice.nix
|
||||||
|
./steam.nix
|
||||||
|
];
|
||||||
|
|
||||||
|
config = lib.mkIf (config.beancloud.software.desktop) {
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
(lib.mkIf config.beancloud.software.chromium chromium)
|
||||||
|
(lib.mkIf config.beancloud.software.photography ansel)
|
||||||
|
(lib.mkIf config.beancloud.software.davinci-resolve davinci-resolve-studio)
|
||||||
|
(lib.mkIf config.beancloud.software.photography darktable)
|
||||||
|
firefox
|
||||||
|
(lib.mkIf config.beancloud.software.nextcloud.client nextcloud-client)
|
||||||
|
(lib.mkIf config.beancloud.software.nextcloud.talk-desktop nextcloud-talk-desktop)
|
||||||
|
(lib.mkIf config.beancloud.software.obs-studio obs-studio)
|
||||||
|
(lib.mkIf config.beancloud.software.podman-desktop podman-desktop)
|
||||||
|
(lib.mkIf config.beancloud.software.shotcut shotcut)
|
||||||
|
(lib.mkIf config.beancloud.software.zed-editor zed-editor)
|
||||||
|
];
|
||||||
|
|
||||||
|
services = {
|
||||||
|
xserver = {
|
||||||
|
enable = true;
|
||||||
|
};
|
||||||
|
displayManager = {
|
||||||
|
enable = true;
|
||||||
|
sddm.autoLogin.relogin = lib.mkIf config.beancloud.hardware.steamdeck true;
|
||||||
|
};
|
||||||
|
greetd = {
|
||||||
|
enable = if config.beancloud.hardware.steamdeck then true else false;
|
||||||
|
settings = {
|
||||||
|
default_session = {
|
||||||
|
command = "${pkgs.gamescope}/bin/gamescope -f --mangoapp --steam --xwayland-count 2 -- steam -pipewire-dmabuf -gamepadui -steamos > /dev/null 2>&1";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
beancloud.os.screensaver.lock = lib.mkIf config.beancloud.hardware.steamdeck false;
|
||||||
|
};
|
||||||
|
}
|
14
software/firmware.nix
Normal file
14
software/firmware.nix
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
{
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
(lib.mkIf (config.beancloud.hardware.virtualmachine.type == "") linux-firmware)
|
||||||
|
(lib.mkIf (config.beancloud.hardware.virtualmachine.type == "") broadcom-bt-firmware)
|
||||||
|
(lib.mkIf (config.beancloud.hardware.virtualmachine.type == "") rtl8192su-firmware)
|
||||||
|
];
|
||||||
|
}
|
22
software/games.nix
Normal file
22
software/games.nix
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
{
|
||||||
|
config = lib.mkIf (config.beancloud.software.desktop) {
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
(lib.mkIf config.beancloud.software.games.enable lutris)
|
||||||
|
(lib.mkIf config.beancloud.software.games.enable prismlauncher)
|
||||||
|
(lib.mkIf config.beancloud.software.games.enable quakespasm)
|
||||||
|
(lib.mkIf config.beancloud.software.games.enable yquake2)
|
||||||
|
(lib.mkIf config.beancloud.software.games.enable quake3e)
|
||||||
|
];
|
||||||
|
|
||||||
|
networking.firewall.allowedUDPPorts = [
|
||||||
|
(lib.mkIf config.beancloud.software.games.stardewvalley 24642)
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
109
software/gnome.nix
Normal file
109
software/gnome.nix
Normal file
@ -0,0 +1,109 @@
|
|||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
{
|
||||||
|
config = lib.mkIf (config.beancloud.software.desktop) {
|
||||||
|
services = {
|
||||||
|
xserver = {
|
||||||
|
displayManager = {
|
||||||
|
gdm = {
|
||||||
|
enable = if config.beancloud.hardware.steamdeck then false else true;
|
||||||
|
wayland = true;
|
||||||
|
autoLogin.delay = lib.mkIf config.beancloud.hardware.steamdeck 6;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
desktopManager.gnome = {
|
||||||
|
enable = true;
|
||||||
|
# example for a Gnome config not managed by the home-manager
|
||||||
|
# extraGSettingsOverridePackages = [ pkgs.mutter ];
|
||||||
|
# extraGSettingsOverrides = ''
|
||||||
|
# [org.gnome.mutter]
|
||||||
|
# experimental-features=['scale-monitor-framebuffer']
|
||||||
|
# '';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
displayManager = {
|
||||||
|
defaultSession = "gnome";
|
||||||
|
};
|
||||||
|
gnome.localsearch.enable = true;
|
||||||
|
udev.packages = [ pkgs.gnome-settings-daemon ];
|
||||||
|
};
|
||||||
|
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
adwaita-icon-theme
|
||||||
|
gnome-bluetooth
|
||||||
|
(lib.mkIf config.beancloud.software.development gnome-boxes)
|
||||||
|
(lib.mkIf config.beancloud.software.development gnome-builder)
|
||||||
|
gnome-connections
|
||||||
|
gnome-firmware
|
||||||
|
gnomeExtensions.dash-to-dock
|
||||||
|
gnomeExtensions.gtk4-desktop-icons-ng-ding
|
||||||
|
gnomeExtensions.open-bar
|
||||||
|
gnomeExtensions.no-overview
|
||||||
|
];
|
||||||
|
|
||||||
|
environment.gnome.excludePackages = with pkgs; [
|
||||||
|
gnome-tour
|
||||||
|
gnome-initial-setup
|
||||||
|
];
|
||||||
|
|
||||||
|
systemd.user.services.display-config = {
|
||||||
|
enable = false;
|
||||||
|
wantedBy = [ "default.target" ];
|
||||||
|
after = [ "graphical-session.target" ];
|
||||||
|
partOf = [ "graphical-session.target" ];
|
||||||
|
description = "Gnome display configuration";
|
||||||
|
unitConfig = {
|
||||||
|
ConditionUser = "!root";
|
||||||
|
};
|
||||||
|
serviceConfig = {
|
||||||
|
Type = "oneshot";
|
||||||
|
Restart = "on-failure";
|
||||||
|
RestartSec = "5s";
|
||||||
|
RestartSteps = 24;
|
||||||
|
RestartMaxDelaySec = "120s";
|
||||||
|
};
|
||||||
|
script = ''
|
||||||
|
set -e
|
||||||
|
set -u
|
||||||
|
set -o pipefail
|
||||||
|
|
||||||
|
export DISPLAY=:0.0
|
||||||
|
WAIT_TIME="5s"
|
||||||
|
|
||||||
|
sleep 15s
|
||||||
|
|
||||||
|
if [ "''$(cat /sys/class/drm/card1-DP-1/status)" = "connected" ]; then
|
||||||
|
${pkgs.mutter}/bin/gdctl set --logical-monitor --primary --monitor 'DP-1'
|
||||||
|
sleep "''${WAIT_TIME}"
|
||||||
|
|
||||||
|
if ! ${pkgs.mutter}/bin/gdctl show | grep -A6 'Logical monitor #1' | grep -A2 'Primary: yes' | grep 'DP-1'; then
|
||||||
|
echo "display config not applied..."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
${pkgs.mutter}/bin/gdctl set --logical-monitor --primary --monitor 'eDP-1'
|
||||||
|
sleep "''${WAIT_TIME}"
|
||||||
|
|
||||||
|
if ! ${pkgs.mutter}/bin/gdctl show | grep -A6 'Logical monitor #1' | grep -A2 'Primary: yes' | grep 'eDP-1'; then
|
||||||
|
echo "display config not applied..."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ${pkgs.mutter}/bin/gdctl show | grep 'Logical monitor #2'; then
|
||||||
|
echo "display config not applied..."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
imports = [
|
||||||
|
./desktop.nix
|
||||||
|
];
|
||||||
|
}
|
17
software/libreoffice.nix
Normal file
17
software/libreoffice.nix
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
{
|
||||||
|
config = lib.mkIf (config.beancloud.software.desktop) {
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
hunspell
|
||||||
|
libreoffice
|
||||||
|
hyphenDicts.de_DE
|
||||||
|
hyphenDicts.de-de
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
15
software/nix-daemon.nix
Normal file
15
software/nix-daemon.nix
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
{ ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
systemd.services = {
|
||||||
|
nix-daemon = {
|
||||||
|
environment = {
|
||||||
|
TMPDIR = "/run/nix-daemon";
|
||||||
|
};
|
||||||
|
|
||||||
|
serviceConfig = {
|
||||||
|
RuntimeDirectory = "nix-daemon";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
30
software/openssh.nix
Normal file
30
software/openssh.nix
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
{ ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
# https://search.nixos.org/options?channel=24.11&from=0&size=50&sort=relevance&type=packages&query=services.openssh
|
||||||
|
services.openssh = {
|
||||||
|
enable = true;
|
||||||
|
settings.PasswordAuthentication = true;
|
||||||
|
settings.KbdInteractiveAuthentication = false;
|
||||||
|
settings.PermitRootLogin = "no";
|
||||||
|
listenAddresses = [
|
||||||
|
{
|
||||||
|
addr = "0.0.0.0";
|
||||||
|
port = 22;
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
systemd.services.ssh = {
|
||||||
|
wants = [ "network-online.target" ];
|
||||||
|
after = [ "network-online.target" ];
|
||||||
|
requires = [ "network-online.target" ];
|
||||||
|
serviceConfig = {
|
||||||
|
Restart = "on-failure";
|
||||||
|
RestartSec = "5s";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
networking.firewall.allowedTCPPorts = [ 22 ];
|
||||||
|
}
|
56
software/steam.nix
Normal file
56
software/steam.nix
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
{
|
||||||
|
config = lib.mkIf (config.beancloud.software.desktop) {
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
(lib.mkIf config.beancloud.software.steam.enable steamcmd)
|
||||||
|
(lib.mkIf config.beancloud.software.steam.enable mangohud)
|
||||||
|
];
|
||||||
|
|
||||||
|
beancloud.software = {
|
||||||
|
games.enable = lib.mkIf config.beancloud.hardware.steamdeck true;
|
||||||
|
steam.enable = lib.mkIf config.beancloud.hardware.steamdeck true;
|
||||||
|
wine = lib.mkIf config.beancloud.hardware.steamdeck true;
|
||||||
|
};
|
||||||
|
|
||||||
|
beancloud.hardware.gpu.amd.enable = lib.mkIf config.beancloud.hardware.steamdeck true;
|
||||||
|
|
||||||
|
programs = {
|
||||||
|
steam = {
|
||||||
|
enable = lib.mkIf config.beancloud.software.steam.enable true;
|
||||||
|
gamescopeSession.enable = lib.mkIf config.beancloud.hardware.steamdeck true;
|
||||||
|
localNetworkGameTransfers.openFirewall = lib.mkIf config.beancloud.software.steam.enable true;
|
||||||
|
package = pkgs.steam.override {
|
||||||
|
extraPkgs =
|
||||||
|
pkgs: with pkgs; [
|
||||||
|
cairo
|
||||||
|
gtk3
|
||||||
|
libdecor
|
||||||
|
xorg.libXcursor
|
||||||
|
xorg.libXi
|
||||||
|
xorg.libXinerama
|
||||||
|
xorg.libXScrnSaver
|
||||||
|
libpng
|
||||||
|
libpulseaudio
|
||||||
|
libvorbis
|
||||||
|
stdenv.cc.cc.lib # Provides libstdc++.so.6
|
||||||
|
libkrb5
|
||||||
|
keyutils
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
gamescope = {
|
||||||
|
enable = lib.mkIf config.beancloud.software.steam.enable true;
|
||||||
|
capSysNice = true;
|
||||||
|
};
|
||||||
|
gamemode = {
|
||||||
|
enable = lib.mkIf config.beancloud.software.steam.enable true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
18
software/wine.nix
Normal file
18
software/wine.nix
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
{
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
(lib.mkIf config.beancloud.software.wine wineWowPackages.stable)
|
||||||
|
(lib.mkIf config.beancloud.software.wine wineWowPackages.waylandFull)
|
||||||
|
(lib.mkIf config.beancloud.software.wine winetricks)
|
||||||
|
(lib.mkIf config.beancloud.software.wine gamemode)
|
||||||
|
(lib.mkIf config.beancloud.software.wine mangohud)
|
||||||
|
(lib.mkIf config.beancloud.software.wine gamescope)
|
||||||
|
(lib.mkIf config.beancloud.software.wine vulkan-tools)
|
||||||
|
];
|
||||||
|
}
|
8
users/default.nix
Normal file
8
users/default.nix
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
{ lib, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
users = {
|
||||||
|
mutableUsers = false;
|
||||||
|
};
|
||||||
|
security.sudo.wheelNeedsPassword = lib.mkDefault false;
|
||||||
|
}
|
44
users/demo/default.nix
Normal file
44
users/demo/default.nix
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
{
|
||||||
|
users = {
|
||||||
|
users = {
|
||||||
|
demo = {
|
||||||
|
password = "demo";
|
||||||
|
uid = 1000;
|
||||||
|
createHome = true;
|
||||||
|
home = "/home/demo";
|
||||||
|
shell = pkgs.bashInteractive;
|
||||||
|
isNormalUser = true;
|
||||||
|
extraGroups = [
|
||||||
|
"wheel"
|
||||||
|
"networkmanager"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
home-manager = {
|
||||||
|
users = {
|
||||||
|
demo = {
|
||||||
|
imports = [ ./home/default.nix ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
environment.persistence = {
|
||||||
|
persistence = {
|
||||||
|
directories = [
|
||||||
|
{
|
||||||
|
directory = "/home/demo";
|
||||||
|
user = "demo";
|
||||||
|
group = "users";
|
||||||
|
mode = "u=rwx,g=,o=";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
16
users/demo/home/bash.nix
Normal file
16
users/demo/home/bash.nix
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
{ ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
programs = {
|
||||||
|
bash = {
|
||||||
|
enable = true;
|
||||||
|
shellAliases = {
|
||||||
|
ll = "ls -lAh";
|
||||||
|
cp = "cp -iv";
|
||||||
|
mv = "mv -iv";
|
||||||
|
rm = "rm -iv";
|
||||||
|
df = "df -h";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
20
users/demo/home/default.nix
Normal file
20
users/demo/home/default.nix
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
{ lib, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
programs.home-manager.enable = true;
|
||||||
|
|
||||||
|
home = {
|
||||||
|
username = "demo";
|
||||||
|
homeDirectory = lib.mkForce "/home/demo";
|
||||||
|
stateVersion = "25.05";
|
||||||
|
};
|
||||||
|
|
||||||
|
# https://nix-community.github.io/home-manager/options.xhtml
|
||||||
|
imports = [
|
||||||
|
./bash.nix
|
||||||
|
./gnome.nix
|
||||||
|
./git.nix
|
||||||
|
./firefox.nix
|
||||||
|
./ssh.nix
|
||||||
|
];
|
||||||
|
}
|
120
users/demo/home/firefox.nix
Normal file
120
users/demo/home/firefox.nix
Normal file
@ -0,0 +1,120 @@
|
|||||||
|
{ pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
programs = {
|
||||||
|
firefox = {
|
||||||
|
enable = true;
|
||||||
|
languagePacks = [
|
||||||
|
"en-US"
|
||||||
|
"de"
|
||||||
|
];
|
||||||
|
# https://mozilla.github.io/policy-templates/
|
||||||
|
policies = {
|
||||||
|
DefaultDownloadDirectory = "\${home}/Downloads";
|
||||||
|
DisableFirefoxStudies = true;
|
||||||
|
DisableAppUpdate = true;
|
||||||
|
DisablePocket = true;
|
||||||
|
DisableTelemetry = true;
|
||||||
|
Extensions = {
|
||||||
|
Install = [
|
||||||
|
"https://addons.mozilla.org/firefox/downloads/latest/ublock-origin/latest.xpi"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
ExtensionSettings = {
|
||||||
|
"uBlock0@raymondhill.net" = {
|
||||||
|
installation_mode = "force_installed";
|
||||||
|
install_url = "https://addons.mozilla.org/firefox/downloads/latest/ublock-origin/latest.xpi";
|
||||||
|
updates_disabled = false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
FirefoxHome = {
|
||||||
|
Search = true;
|
||||||
|
TopSites = false;
|
||||||
|
SponsoredTopSites = false;
|
||||||
|
Highlights = false;
|
||||||
|
Pocket = false;
|
||||||
|
SponsoredPocket = false;
|
||||||
|
Snippets = false;
|
||||||
|
Locked = false;
|
||||||
|
};
|
||||||
|
FirefoxSuggest = {
|
||||||
|
WebSuggestions = false;
|
||||||
|
SponsoredSuggestions = false;
|
||||||
|
ImproveSuggest = false;
|
||||||
|
Locked = false;
|
||||||
|
};
|
||||||
|
HardwareAcceleration = true;
|
||||||
|
RequestedLocales = "en-US,de";
|
||||||
|
SSLVersionMin = "tls1.2";
|
||||||
|
TranslateEnabled = false;
|
||||||
|
UserMessaging = {
|
||||||
|
ExtensionRecommendations = false;
|
||||||
|
FeatureRecommendations = false;
|
||||||
|
UrlbarInterventions = false;
|
||||||
|
SkipOnboarding = true;
|
||||||
|
MoreFromMozilla = false;
|
||||||
|
FirefoxLabs = false;
|
||||||
|
Locked = false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
profiles = {
|
||||||
|
default = {
|
||||||
|
id = 0;
|
||||||
|
name = "default";
|
||||||
|
isDefault = true;
|
||||||
|
search = {
|
||||||
|
force = true;
|
||||||
|
default = "ddg";
|
||||||
|
engines = {
|
||||||
|
"ddg".metaData.alias = "@ddg";
|
||||||
|
"Nix Packages" = {
|
||||||
|
urls = [
|
||||||
|
{
|
||||||
|
template = "https://search.nixos.org/packages";
|
||||||
|
params = [
|
||||||
|
{
|
||||||
|
name = "type";
|
||||||
|
value = "packages";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "query";
|
||||||
|
value = "{searchTerms}";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
||||||
|
];
|
||||||
|
icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
|
||||||
|
definedAliases = [ "@np" ];
|
||||||
|
};
|
||||||
|
"NixOS Wiki" = {
|
||||||
|
urls = [ { template = "https://wiki.nixos.org/index.php?search={searchTerms}"; } ];
|
||||||
|
icon = "https://wiki.nixos.org/favicon.png";
|
||||||
|
updateInterval = 24 * 60 * 60 * 1000; # every day
|
||||||
|
definedAliases = [ "@nw" ];
|
||||||
|
};
|
||||||
|
"wikipedia".metaData.alias = "@wiki";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
settings = {
|
||||||
|
"general.smoothScroll" = true;
|
||||||
|
"signon.rememberSignons" = false; # Password Manager
|
||||||
|
};
|
||||||
|
bookmarks = {
|
||||||
|
force = true;
|
||||||
|
settings = [
|
||||||
|
{
|
||||||
|
toolbar = true; # <- global toolbar
|
||||||
|
bookmarks = [
|
||||||
|
{
|
||||||
|
name = "kernel.org";
|
||||||
|
url = "https://www.kernel.org";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
16
users/demo/home/git.nix
Normal file
16
users/demo/home/git.nix
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
{ ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
programs.git = {
|
||||||
|
enable = true;
|
||||||
|
extraConfig = {
|
||||||
|
init.defaultBranch = "main";
|
||||||
|
core = {
|
||||||
|
preloadindex = true;
|
||||||
|
fscache = true;
|
||||||
|
};
|
||||||
|
gc.auto = 256;
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
}
|
121
users/demo/home/gnome.nix
Normal file
121
users/demo/home/gnome.nix
Normal file
@ -0,0 +1,121 @@
|
|||||||
|
{ osConfig, lib, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
# https://nix-community.github.io/home-manager/options.xhtml#opt-dconf.settings
|
||||||
|
# https://github.com/nix-community/dconf2nix
|
||||||
|
dconf.settings =
|
||||||
|
let
|
||||||
|
inherit (lib.hm.gvariant) mkUint32;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
"system/locale" = {
|
||||||
|
region = "de_DE.UTF-8";
|
||||||
|
};
|
||||||
|
|
||||||
|
"org/gnome/software" = {
|
||||||
|
download-updates = false;
|
||||||
|
download-updates-notify = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
"org/gnome/desktop/calendar" = {
|
||||||
|
show-weekdate = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
"org/gnome/desktop/datetime" = {
|
||||||
|
automatic-timezone = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
"org/gnome/desktop/interface" = {
|
||||||
|
clock-show-weekday = true;
|
||||||
|
enable-hot-corners = true;
|
||||||
|
color-scheme = "prefer-dark";
|
||||||
|
};
|
||||||
|
|
||||||
|
"org/gnome/desktop/session" = {
|
||||||
|
idle-delay = mkUint32 300;
|
||||||
|
};
|
||||||
|
|
||||||
|
"org/gnome/desktop/screensaver" = {
|
||||||
|
lock-enabled = osConfig.beancloud.os.screensaver.lock;
|
||||||
|
};
|
||||||
|
|
||||||
|
"org/gnome/desktop/peripherals/keyboard" = {
|
||||||
|
numlock-state = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
"org/gnome/desktop/peripherals/mouse" = {
|
||||||
|
natural-scroll = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
"org/gnome/Console" = {
|
||||||
|
custom-font = "UbuntuMono Nerd Font Mono 13";
|
||||||
|
last-window-maximised = true;
|
||||||
|
use-system-font = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
"org/gnome/shell" = {
|
||||||
|
enabled-extensions = [
|
||||||
|
"openbar@neuromorph"
|
||||||
|
"dash-to-dock@micxgx.gmail.com"
|
||||||
|
];
|
||||||
|
favorite-apps = [
|
||||||
|
"firefox.desktop"
|
||||||
|
"org.gnome.Geary.desktop"
|
||||||
|
"org.gnome.Calendar.desktop"
|
||||||
|
"org.gnome.Music.desktop"
|
||||||
|
"org.gnome.Nautilus.desktop"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
"org/gnome/shell/extensions/dash-to-dock" = {
|
||||||
|
background-opacity = 0.80000000000000004;
|
||||||
|
dash-max-icon-size = 48;
|
||||||
|
dock-position = "RIGHT";
|
||||||
|
extend-height = false;
|
||||||
|
height-fraction = 0.90000000000000002;
|
||||||
|
intellihide-mode = "FOCUS_APPLICATION_WINDOWS";
|
||||||
|
preferred-monitor = -2;
|
||||||
|
preferred-monitor-by-connector = "DP-1";
|
||||||
|
};
|
||||||
|
|
||||||
|
"org/gnome/shell/extensions/gtk4-ding" = {
|
||||||
|
icon-size = "small";
|
||||||
|
};
|
||||||
|
|
||||||
|
"org/gnome/shell/extensions/openbar" = {
|
||||||
|
bg-change = true;
|
||||||
|
default-font = "UbuntuMono Nerd Font Mono 12";
|
||||||
|
neon-wmax = false;
|
||||||
|
pause-reload = false;
|
||||||
|
reloadstyle = true;
|
||||||
|
trigger-reload = true;
|
||||||
|
shadow = false;
|
||||||
|
wmaxbar = true;
|
||||||
|
autohg-bar = true;
|
||||||
|
autohg-menu = true;
|
||||||
|
trigger-autotheme = true;
|
||||||
|
autotheme-dark = "Dark";
|
||||||
|
autotheme-font = true;
|
||||||
|
autotheme-light = "Pastel";
|
||||||
|
bartype = "Trilands";
|
||||||
|
};
|
||||||
|
|
||||||
|
"org/gnome/nautilus/list-view" = {
|
||||||
|
default-zoom-level = "small";
|
||||||
|
};
|
||||||
|
|
||||||
|
"org/gnome/nautilus/preferences" = {
|
||||||
|
default-folder-viewer = "list-view";
|
||||||
|
search-filter-time-type = "last_modified";
|
||||||
|
};
|
||||||
|
|
||||||
|
"org/gnome/settings-daemon/plugins/power" = {
|
||||||
|
power-button-action = "interactive";
|
||||||
|
sleep-inactive-ac-type = "nothing";
|
||||||
|
};
|
||||||
|
|
||||||
|
"org/gnome/mutter" = {
|
||||||
|
experimental-features = [ "scale-monitor-framebuffer" ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
18
users/demo/home/ssh.nix
Normal file
18
users/demo/home/ssh.nix
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
{ ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
programs = {
|
||||||
|
ssh = {
|
||||||
|
enable = true;
|
||||||
|
addKeysToAgent = "1h";
|
||||||
|
hashKnownHosts = true;
|
||||||
|
matchBlocks = {
|
||||||
|
gitea = {
|
||||||
|
hostname = "code.beancloud.de";
|
||||||
|
user = "gitea";
|
||||||
|
port = 22;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
32
users/root/default.nix
Normal file
32
users/root/default.nix
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
{ ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
users = {
|
||||||
|
users = {
|
||||||
|
root = {
|
||||||
|
password = "rootpw";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
home-manager = {
|
||||||
|
users = {
|
||||||
|
root = {
|
||||||
|
imports = [ ./home/default.nix ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
environment.persistence = {
|
||||||
|
persistence = {
|
||||||
|
directories = [
|
||||||
|
{
|
||||||
|
directory = "/root";
|
||||||
|
user = "root";
|
||||||
|
group = "root";
|
||||||
|
mode = "u=rwx,g=,o=";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
18
users/root/home/bash.nix
Normal file
18
users/root/home/bash.nix
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
{ osConfig, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
programs = {
|
||||||
|
bash = {
|
||||||
|
enable = true;
|
||||||
|
shellAliases = {
|
||||||
|
ll = "ls -lAh";
|
||||||
|
cp = "cp -iv";
|
||||||
|
mv = "mv -iv";
|
||||||
|
rm = "rm -iv";
|
||||||
|
df = "df -h";
|
||||||
|
nixrbb = "nixos-rebuild boot --flake git+https://code.beancloud.de/public/nixos-demo.git?ref=${osConfig.beancloud.tier}";
|
||||||
|
nixrbs = "nixos-rebuild switch --flake git+https://code.beancloud.de/public/nixos-demo.git?ref=${osConfig.beancloud.tier}";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
17
users/root/home/default.nix
Normal file
17
users/root/home/default.nix
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
{ lib, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
programs.home-manager.enable = true;
|
||||||
|
|
||||||
|
home = {
|
||||||
|
username = "root";
|
||||||
|
homeDirectory = lib.mkForce "/root";
|
||||||
|
stateVersion = "25.05";
|
||||||
|
};
|
||||||
|
|
||||||
|
# https://nix-community.github.io/home-manager/options.xhtml
|
||||||
|
imports = [
|
||||||
|
./bash.nix
|
||||||
|
./git.nix
|
||||||
|
];
|
||||||
|
}
|
18
users/root/home/git.nix
Normal file
18
users/root/home/git.nix
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
{ ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
programs.git = {
|
||||||
|
enable = true;
|
||||||
|
userName = "root";
|
||||||
|
userEmail = "root@localhost";
|
||||||
|
signing.format = "ssh";
|
||||||
|
extraConfig = {
|
||||||
|
init.defaultBranch = "main";
|
||||||
|
core = {
|
||||||
|
preloadindex = true;
|
||||||
|
fscache = true;
|
||||||
|
};
|
||||||
|
gc.auto = 256;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user