Merge pull request #606 from genebean/rainbow-rework

Do some restructuring and cleanup
This commit is contained in:
Gene Liverman 2026-03-22 19:05:56 -04:00 committed by GitHub
commit e645668621
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
123 changed files with 1648 additions and 1346 deletions

1
.gitattributes vendored
View file

@ -1,2 +1,3 @@
*.yaml diff=sopsdiffer *.yaml diff=sopsdiffer
.pre-commit-config.yaml diff=default

27
.github/workflows/validate.yml vendored Normal file
View file

@ -0,0 +1,27 @@
name: Validate
on:
pull_request:
jobs:
validate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: cachix/install-nix-action@v26
with:
extra_nix_config: |
trusted-users = root @runner
- name: Validate flake
run: nix flake show
- name: Check formatting
run: nix fmt -- --ci .
- name: Run deadnix
run: nix run nixpkgs#deadnix ./modules ./lib
- name: Run statix
run: nix run nixpkgs#statix check -- .

26
.pre-commit-config.yaml Normal file
View file

@ -0,0 +1,26 @@
repos:
- repo: local
hooks:
- id: nixfmt
name: nixfmt
entry: nix
language: system
types: [nix]
pass_filenames: false
args: ["fmt"]
- id: deadnix
name: deadnix
entry: deadnix
language: system
types: [nix]
args: ["./modules", "./lib"]
- id: statix
name: statix
entry: statix
language: system
types: [nix]
pass_filenames: false
args: ["check", "."]

View file

@ -60,7 +60,7 @@ creation_rules:
key_groups: key_groups:
- age: - age:
- *system_rainbow_planet - *system_rainbow_planet
- path_regex: modules/hosts/common/secrets.yaml$ - path_regex: modules/shared/secrets.yaml$
key_groups: key_groups:
- age: - age:
- *system_bigboy - *system_bigboy

View file

@ -1,2 +0,0 @@
result/
result

View file

@ -1,25 +0,0 @@
{ inputs, pkgs, ... }: {
imports = [
./hardware-configuration.nix
];
system.stateVersion = "23.05";
boot = {
initrd.systemd = {
enable = true;
network.wait-online.enable = false; # Handled by NetworkManager
};
loader = {
efi.canTouchEfiVariables = true;
systemd-boot= {
enable = true;
consoleMode = "1";
};
};
};
environment.systemPackages = with pkgs; [
olm
];
}

View file

@ -1,183 +0,0 @@
{
"nodes": {
"config": {
"locked": {
"dir": "templates/config",
"lastModified": 1719931926,
"narHash": "sha256-B8j9lHX0LqWlZkm8JxZRN6919RQjJEu/1J1SR8pU/ww=",
"owner": "stackbuilders",
"repo": "nixpkgs-terraform",
"rev": "034287ee462c87dadc14a94d4b53a48ed66c7b3d",
"type": "github"
},
"original": {
"dir": "templates/config",
"owner": "stackbuilders",
"repo": "nixpkgs-terraform",
"type": "github"
}
},
"flake-parts": {
"inputs": {
"nixpkgs-lib": "nixpkgs-lib"
},
"locked": {
"lastModified": 1722555600,
"narHash": "sha256-XOQkdLafnb/p9ij77byFQjDf5m5QYl9b2REiVClC+x4=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "8471fe90ad337a8074e957b69ca4d0089218391d",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "flake-parts",
"type": "github"
}
},
"home-manager": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1733050161,
"narHash": "sha256-lYnT+EYE47f5yY3KS/Kd4pJ6CO9fhCqumkYYkQ3TK20=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "62d536255879be574ebfe9b87c4ac194febf47c5",
"type": "github"
},
"original": {
"owner": "nix-community",
"ref": "release-24.11",
"repo": "home-manager",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1733120037,
"narHash": "sha256-En+gSoVJ3iQKPDU1FHrR6zIxSLXKjzKY+pnh9tt+Yts=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "f9f0d5c5380be0a599b1fb54641fa99af8281539",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-24.11",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs-1_0": {
"locked": {
"lastModified": 1699291058,
"narHash": "sha256-5ggduoaAMPHUy4riL+OrlAZE14Kh7JWX4oLEs22ZqfU=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "41de143fda10e33be0f47eab2bfe08a50f234267",
"type": "github"
},
"original": {
"owner": "nixos",
"repo": "nixpkgs",
"rev": "41de143fda10e33be0f47eab2bfe08a50f234267",
"type": "github"
}
},
"nixpkgs-1_6": {
"locked": {
"lastModified": 1712757991,
"narHash": "sha256-kR7C7Fqt3JP40h0mzmSZeWI5pk1iwqj4CSeGjnUbVHc=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "d6b3ddd253c578a7ab98f8011e59990f21dc3932",
"type": "github"
},
"original": {
"owner": "nixos",
"repo": "nixpkgs",
"rev": "d6b3ddd253c578a7ab98f8011e59990f21dc3932",
"type": "github"
}
},
"nixpkgs-1_9": {
"locked": {
"lastModified": 1732617236,
"narHash": "sha256-PYkz6U0bSEaEB1al7O1XsqVNeSNS+s3NVclJw7YC43w=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "af51545ec9a44eadf3fe3547610a5cdd882bc34e",
"type": "github"
},
"original": {
"owner": "nixos",
"repo": "nixpkgs",
"rev": "af51545ec9a44eadf3fe3547610a5cdd882bc34e",
"type": "github"
}
},
"nixpkgs-lib": {
"locked": {
"lastModified": 1722555339,
"narHash": "sha256-uFf2QeW7eAHlYXuDktm9c25OxOyCoUOQmh5SZ9amE5Q=",
"type": "tarball",
"url": "https://github.com/NixOS/nixpkgs/archive/a5d394176e64ab29c852d03346c1fc9b0b7d33eb.tar.gz"
},
"original": {
"type": "tarball",
"url": "https://github.com/NixOS/nixpkgs/archive/a5d394176e64ab29c852d03346c1fc9b0b7d33eb.tar.gz"
}
},
"nixpkgs-terraform": {
"inputs": {
"config": "config",
"flake-parts": "flake-parts",
"nixpkgs-1_0": "nixpkgs-1_0",
"nixpkgs-1_6": "nixpkgs-1_6",
"nixpkgs-1_9": "nixpkgs-1_9",
"systems": "systems"
},
"locked": {
"lastModified": 1732844581,
"narHash": "sha256-BwHD1d6Bl5LL/HciTf+mQmBN3I3S6nYqcB+5BXVozNk=",
"owner": "stackbuilders",
"repo": "nixpkgs-terraform",
"rev": "b4db1b59d8f62cd37b6f9540e368d0e2627c4a2d",
"type": "github"
},
"original": {
"owner": "stackbuilders",
"repo": "nixpkgs-terraform",
"type": "github"
}
},
"root": {
"inputs": {
"home-manager": "home-manager",
"nixpkgs": "nixpkgs",
"nixpkgs-terraform": "nixpkgs-terraform"
}
},
"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
}

View file

@ -1,30 +0,0 @@
{
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-24.11";
home-manager = {
url = "github:nix-community/home-manager/release-24.11";
inputs.nixpkgs.follows = "nixpkgs";
};
nixpkgs-terraform = {
url = "github:stackbuilders/nixpkgs-terraform";
# inputs.nixpkgs-1_6.follows = "nixpkgs";
# inputs.nixpkgs-1_9.follows = "nixpkgs-unstable";
};
};
outputs = inputs: {
nixosConfigurations = {
rainbow-planet = inputs.nixpkgs.lib.nixosSystem {
specialArgs = { inherit inputs; };
system = "x86_64-linux";
modules = [
./configuration.nix
./nixpkgs-settings.nix
inputs.home-manager.nixosModules.home-manager
];
};
};
};
}

View file

@ -1,44 +0,0 @@
# Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{ config, lib, modulesPath, ... }:
{
imports =
[ (modulesPath + "/installer/scan/not-detected.nix")
];
boot.initrd.availableKernelModules = [ "xhci_pci" "nvme" "usb_storage" "sd_mod" "rtsx_pci_sdmmc" ];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-intel" ];
boot.kernelParams = [
"i915.enable_fbc=1"
"i915.enable_psr=2"
];
boot.extraModulePackages = [ ];
fileSystems."/" =
{ device = "/dev/disk/by-uuid/eb9a2c7e-ae61-4d06-9464-49b98d576f7c";
fsType = "ext4";
};
fileSystems."/boot" =
{ device = "/dev/disk/by-uuid/924D-E7A4";
fsType = "vfat";
};
swapDevices =
[ { device = "/dev/disk/by-uuid/166d24ca-401c-492e-845d-bb1d0d6d7d86"; }
];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's
# still possible to use this option, but it's recommended to use it in conjunction
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
networking.useDHCP = lib.mkDefault true;
# networking.interfaces.wlp58s0.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
powerManagement.cpuFreqGovernor = lib.mkDefault "powersave";
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
}

View file

@ -1,9 +0,0 @@
{ inputs, ... }: {
nixpkgs = {
config = {
allowUnfree = true;
permittedInsecurePackages = [ "olm-3.2.16" "electron-27.3.11" ];
};
overlays = [ inputs.nixpkgs-terraform.overlays.default ];
};
}

115
README.md
View file

@ -1,10 +1,9 @@
# Dots # Dots
This repo is a Nix flake that manages most of my setup on macOS and fully manages machines I have that run NixOS as their operating system. This repo is a Nix flake that manages most of my setup on macOS and fully manages machines I have that run NixOS as their operating system. It also contains as much configruation as I can make work on other Linux distros such as Ubuntu.
- [Flake structure](#flake-structure) - [Flake structure](#flake-structure)
- [Note](#note) - [Formatting and CI](#formatting-and-ci)
- [Repo structure](#repo-structure)
- [Historical bits](#historical-bits) - [Historical bits](#historical-bits)
- [Adding a new macOS host](#adding-a-new-macos-host) - [Adding a new macOS host](#adding-a-new-macos-host)
- [Extras steps not done by Nix and/or Homebrew and/or mas](#extras-steps-not-done-by-nix-andor-homebrew-andor-mas) - [Extras steps not done by Nix and/or Homebrew and/or mas](#extras-steps-not-done-by-nix-andor-homebrew-andor-mas)
@ -15,102 +14,32 @@ This repo is a Nix flake that manages most of my setup on macOS and fully manage
- [Adding a NixOS host](#adding-a-nixos-host) - [Adding a NixOS host](#adding-a-nixos-host)
- [Post-install](#post-install) - [Post-install](#post-install)
## Flake structure ## Flake structure
> **RESTRUCTURING IN PROGRESS**: please note, I am restructuring this to remove a lot of complexity. This first pass is done and moves home manager bits into modules that have home in the name. Things that apply to everything under a part of the tree are in a corresponding `default.nix` - `flake.nix` defines inputs, outputs, and instantiates host configurations via `lib/` functions
- `lib/` contains helper functions:
- `mkNixosHost` - constructs NixOS system configurations
- `mkDarwinHost` - constructs nix-darwin system configurations
- `mkHomeConfig` - constructs Home Manager configurations
- `modules/` contains Nix modules organized by type:
- `modules/shared/` - shared modules imported by multiple hosts
- `modules/shared/home/general/` - Home Manager config for all GUI users
- `modules/shared/home/linux/` - Home Manager config for Linux-specific apps
- `modules/shared/nixos/` - NixOS modules (i18n, flatpaks, restic, etc.)
- `modules/hosts/` - host-specific configurations
- `modules/hosts/nixos/` - NixOS host configs and hardware configs
- `modules/hosts/darwin/` - macOS host configs
- `modules/hosts/home-manager-only/` - Home Manager-only configs
The Nix bits are driven by `flake.nix` which pulls in things under `modules/`. Both Intel and Apple Silicon macOS are suppoted, as is NixOS. The flake is structured like so: ## Formatting and CI
- description: a human readable description of this flake This repo uses the following tools for code quality:
- inputs: all the places things are pulled from
- outputs:
- all the outputs from the inputs
- a `let` ... `in` block that contains:
- `darwinHostConfig` which takes a set of paramters as an attribute set and pulls in all the things needed to use Nix on a macOS host
- `mkNixosHost` which takes a set of parameters as an attribute set and pulls in all the things needed to configure a NixOS host
- `linuxHomeConfig` which takes a set of paramters as an attribute set and pulls in the things I manage on non-NixOS Linux hosts
- the body of outputs that contains:
- `darwinConfigurations` contains is an attribute set that contains keys named for each macOS host set to the results of a call to `darwinHostConfig` with values for each of the required parameters
- `nixosConfigurations` contains is an attribute set that contains keys named for each NixOS host set to the results of a call to `darwinHostConfig` with values for each of the required parameters
- `homeConfigurations` contains an entry for each username set to the results of a call to `linuxHomeConfig` with values for each of the required parameters
The parameters on `darwinHostConfig` & `mkNixosHost` are: - **nixfmt** - Formats Nix files. Run `nix fmt .` to format all files.
- **deadnix** - Finds unused code in Nix files.
- **statix** - Checks Nix code for common issues and style problems.
- `system:` the system definition to use for nixpkgs Pre-commit hooks are configured in `.pre-commit-config.yaml` and run automatically before commits. CI validation is defined in `.github/workflows/validate.yml`.
- `hostname:` the hostname of the machine being configured
- `username:` the username being configured on the host (all code currently assumes there is a single human user managed by Nix)
- `additionalModules:` any nix modules that are desired to supplement the default for the host. An example use case for this is adding in the hardware specific module from `nixos-hardware`.
- `additionalSpecialArgs:` any supplemental arguments to be passed to `specialArgs`.
The parameters on `linxuHomeConfig` are the same as the above.
## Note
> All the bits below here are useful, but may be slightly outdated... I have not done a good job of keeping them updated.
## Repo structure
The Nix stuff is structured like so, at least for now:
```bash
$ tree . -I legacy* -I link* --gitignore --dirsfirst
.
├── modules
│   ├── home-manager
│   │   ├── common
│   │   │   ├── linux-apps
│   │   │   │   ├── tilix.nix
│   │   │   │   ├── waybar.nix
│   │   │   │   └── xfce4-terminal.nix
│   │   │   ├── all-cli.nix
│   │   │   ├── all-darwin.nix
│   │   │   ├── all-gui.nix
│   │   │   └── all-linux.nix
│   │   ├── files
│   │   │   ├── tilix
│   │   │   │   └── Beanbag-Mathias.json
│   │   │   ├── waybar
│   │   │   │   ├── config
│   │   │   │   └── style.css
│   │   │   ├── xfce4
│   │   │   │   └── terminal
│   │   │   │   ├── accels.scm
│   │   │   │   └── terminalrc
│   │   │   └── Microsoft.PowerShell_profile.ps1
│   │   └── hosts
│   │   ├── Blue-Rock
│   │   │   └── gene.liverman.nix
│   │   ├── nixnuc
│   │   │   └── gene.nix
│   │   └── rainbow-planet
│   │   └── gene.nix
│   ├── hosts
│   │   ├── darwin
│   │   │   └── Blue-Rock
│   │   │   └── default.nix
│   │   └── nixos
│   │   ├── nixnuc
│   │   │   ├── default.nix
│   │   │   └── hardware-configuration.nix
│   │   └── rainbow-planet
│   │   ├── default.nix
│   │   └── hardware-configuration.nix
│   └── system
│   └── common
│   ├── linux
│   │   └── internationalisation.nix
│   ├── all-darwin.nix
│   └── all-nixos.nix
├── LICENSE
├── README.md
├── Vagrantfile
├── flake.lock
└── flake.nix
23 directories, 29 files
```
## Historical bits ## Historical bits

View file

@ -1,48 +1,45 @@
{ {
inputs = {}; inputs = {
outputs = inputs@{}: let nixpkgs.url = "github:nixos/nixpkgs/nixos-25.05";
darwinHostConfig = { system, hostname, username, additionalModules, additionalSpecialArgs }: home-manager.url = "github:nix-community/home-manager";
nix-darwin.lib.darwinSystem { }; nix-darwin.url = "github:lnl7/nix-darwin";
nixos-hardware.url = "github:NixOS/nixos-hardware";
};
mkNixosHost = { system, hostname, username, additionalModules, additionalSpecialArgs }: outputs =
nixpkgs.lib.nixosSystem { }; inputs@{ self, ... }:
let
linuxHomeConfig = { system, hostname, username, additionalModules, additionalSpecialArgs }: # Import helper functions from lib/
home-manager.lib.homeManagerConfiguration { }; localLib = import ./lib { inherit inputs; };
in
in { {
# Darwin (macOS) hosts # Darwin (macOS) hosts
darwinConfigurations = { darwinConfigurations = {
mightymac = darwinHostConfig { mightymac = localLib.mkDarwinHost {
system = "aarch64-darwin"; system = "aarch64-darwin";
hostname = "mightymac"; hostname = "mightymac";
username = "gene.liverman"; username = "gene.liverman";
additionalModules = [];
additionalSpecialArgs = {};
}; };
}; };
# NixOS hosts # NixOS hosts
nixosConfigurations = { nixosConfigurations = {
rainbow-planet = mkNixosHost { rainbow-planet = localLib.mkNixosHost {
system = "x86_64-linux"; system = "x86_64-linux";
hostname = "rainbow-planet"; hostname = "rainbow-planet";
username = "gene"; username = "gene";
additionalModules = [ additionalModules = [
nixos-hardware.nixosModules.dell-xps-13-9360 inputs.nixos-hardware.nixosModules.dell-xps-13-9360
]; ];
additionalSpecialArgs = {};
}; };
}; };
# Home Manager (only) users # Home Manager (only) users
homeConfigurations = { homeConfigurations = {
gene = linuxHomeConfig { gene = localLib.mkHomeConfig {
system = "x86_64-linux"; system = "x86_64-linux";
hostname = "mini-watcher"; homeDirectory = "/home/gene";
username = "gene"; username = "gene";
additionalModules = [];
additionalSpecialArgs = {};
}; };
}; };
}; };

204
flake.lock generated
View file

@ -69,6 +69,25 @@
"type": "github" "type": "github"
} }
}, },
"deadnix": {
"inputs": {
"nixpkgs": "nixpkgs",
"utils": "utils"
},
"locked": {
"lastModified": 1764114543,
"narHash": "sha256-+C39E8qmGODT6eB0rhE/VX+DcekXW/Xww5IL/xlERNY=",
"owner": "astro",
"repo": "deadnix",
"rev": "d590041677add62267bef35ddec63cd9402d3505",
"type": "github"
},
"original": {
"owner": "astro",
"repo": "deadnix",
"type": "github"
}
},
"disko": { "disko": {
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": [
@ -111,6 +130,28 @@
"type": "github" "type": "github"
} }
}, },
"fenix_2": {
"inputs": {
"nixpkgs": [
"statix",
"nixpkgs"
],
"rust-analyzer-src": "rust-analyzer-src_2"
},
"locked": {
"lastModified": 1645251813,
"narHash": "sha256-cQ66tGjnZclBCS3nD26mZ5fUH+3/HnysGffBiWXUSHk=",
"owner": "nix-community",
"repo": "fenix",
"rev": "9892337b588c38ec59466a1c89befce464aae7f8",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "fenix",
"type": "github"
}
},
"flake-compat": { "flake-compat": {
"flake": false, "flake": false,
"locked": { "locked": {
@ -197,7 +238,7 @@
"crane": "crane", "crane": "crane",
"fenix": "fenix", "fenix": "fenix",
"nix-unit-src": "nix-unit-src", "nix-unit-src": "nix-unit-src",
"nixpkgs": "nixpkgs", "nixpkgs": "nixpkgs_2",
"pre-commit-hooks": "pre-commit-hooks" "pre-commit-hooks": "pre-commit-hooks"
}, },
"locked": { "locked": {
@ -308,11 +349,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1772985280, "lastModified": 1773264488,
"narHash": "sha256-FdrNykOoY9VStevU4zjSUdvsL9SzJTcXt4omdEDZDLk=", "narHash": "sha256-rK0507bDuWBrZo+0zts9bCs/+RRUEHuvFE5DHWPxX/Q=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "8f736f007139d7f70752657dff6a401a585d6cbc", "rev": "5c0f63f8d55040a7eed69df7e3fcdd15dfb5a04c",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -331,11 +372,11 @@
"treefmt-nix": "treefmt-nix" "treefmt-nix": "treefmt-nix"
}, },
"locked": { "locked": {
"lastModified": 1772680513, "lastModified": 1773371628,
"narHash": "sha256-zwVeM1TgfwMIq026uln9hqcCIINsLv6jEjztPqx0q+U=", "narHash": "sha256-G9+d9C/7hz8qBFHOCzdH34Cj6MBNOlE9kCNfF+PKPZM=",
"owner": "numtide", "owner": "numtide",
"repo": "nix-auth", "repo": "nix-auth",
"rev": "77c07e9a107972dd2170da6da9ed1e73e65c4a4a", "rev": "09a9b568631cfbf4a70058bbff495b7e854aedc4",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -480,16 +521,16 @@
}, },
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1742889210, "lastModified": 1763934636,
"narHash": "sha256-hw63HnwnqU3ZQfsMclLhMvOezpM7RSB0dMAtD5/sOiw=", "narHash": "sha256-9glbI7f1uU+yzQCq5LwLgdZqx6svOhZWkd4JRY265fc=",
"owner": "flox", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "698214a32beb4f4c8e3942372c694f40848b360d", "rev": "ee09932cedcef15aaf476f9343d1dea2cb77e261",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "flox", "owner": "NixOS",
"ref": "stable", "ref": "nixpkgs-unstable",
"repo": "nixpkgs", "repo": "nixpkgs",
"type": "github" "type": "github"
} }
@ -511,11 +552,11 @@
}, },
"nixpkgs-unstable": { "nixpkgs-unstable": {
"locked": { "locked": {
"lastModified": 1772956932, "lastModified": 1773231277,
"narHash": "sha256-M0yS4AafhKxPPmOHGqIV0iKxgNO8bHDWdl1kOwGBwRY=", "narHash": "sha256-Xy3WEpUAbpsz8ydgvVAQAGGB/WB+8cNA5cshiL0McTI=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "608d0cadfed240589a7eea422407a547ad626a14", "rev": "75690239f08f885ca9b0267580101f60d10fbe62",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -526,6 +567,22 @@
} }
}, },
"nixpkgs_2": { "nixpkgs_2": {
"locked": {
"lastModified": 1742889210,
"narHash": "sha256-hw63HnwnqU3ZQfsMclLhMvOezpM7RSB0dMAtD5/sOiw=",
"owner": "flox",
"repo": "nixpkgs",
"rev": "698214a32beb4f4c8e3942372c694f40848b360d",
"type": "github"
},
"original": {
"owner": "flox",
"ref": "stable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_3": {
"locked": { "locked": {
"lastModified": 1770107345, "lastModified": 1770107345,
"narHash": "sha256-tbS0Ebx2PiA1FRW8mt8oejR0qMXmziJmPaU1d4kYY9g=", "narHash": "sha256-tbS0Ebx2PiA1FRW8mt8oejR0qMXmziJmPaU1d4kYY9g=",
@ -541,13 +598,13 @@
"type": "github" "type": "github"
} }
}, },
"nixpkgs_3": { "nixpkgs_4": {
"locked": { "locked": {
"lastModified": 1773068389, "lastModified": 1773375660,
"narHash": "sha256-vMrm7Pk2hjBRPnCSjhq1pH0bg350Z+pXhqZ9ICiqqCs=", "narHash": "sha256-SEzUWw2Rf5Ki3bcM26nSKgbeoqi2uYy8IHVBqOKjX3w=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "44bae273f9f82d480273bab26f5c50de3724f52f", "rev": "3e20095fe3c6cbb1ddcef89b26969a69a1570776",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -557,6 +614,22 @@
"type": "github" "type": "github"
} }
}, },
"nixpkgs_5": {
"locked": {
"lastModified": 1645013224,
"narHash": "sha256-b7OEC8vwzJv3rsz9pwnTX2LQDkeOWz2DbKypkVvNHXc=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "b66b39216b1fef2d8c33cc7a5c72d8da80b79970",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"onchg": { "onchg": {
"inputs": { "inputs": {
"nix-pre-commit": "nix-pre-commit", "nix-pre-commit": "nix-pre-commit",
@ -631,6 +704,7 @@
"root": { "root": {
"inputs": { "inputs": {
"compose2nix": "compose2nix", "compose2nix": "compose2nix",
"deadnix": "deadnix",
"disko": "disko", "disko": "disko",
"flox": "flox", "flox": "flox",
"genebean-omp-themes": "genebean-omp-themes", "genebean-omp-themes": "genebean-omp-themes",
@ -641,11 +715,12 @@
"nix-homebrew": "nix-homebrew", "nix-homebrew": "nix-homebrew",
"nixos-cosmic": "nixos-cosmic", "nixos-cosmic": "nixos-cosmic",
"nixos-hardware": "nixos-hardware", "nixos-hardware": "nixos-hardware",
"nixpkgs": "nixpkgs_3", "nixpkgs": "nixpkgs_4",
"nixpkgs-unstable": "nixpkgs-unstable", "nixpkgs-unstable": "nixpkgs-unstable",
"private-flake": "private-flake", "private-flake": "private-flake",
"simple-nixos-mailserver": "simple-nixos-mailserver", "simple-nixos-mailserver": "simple-nixos-mailserver",
"sops-nix": "sops-nix" "sops-nix": "sops-nix",
"statix": "statix"
} }
}, },
"rust-analyzer-src": { "rust-analyzer-src": {
@ -665,6 +740,23 @@
"type": "github" "type": "github"
} }
}, },
"rust-analyzer-src_2": {
"flake": false,
"locked": {
"lastModified": 1645205556,
"narHash": "sha256-e4lZW3qRyOEJ+vLKFQP7m2Dxh5P44NrnekZYLxlucww=",
"owner": "rust-analyzer",
"repo": "rust-analyzer",
"rev": "acf5874b39f3dc5262317a6074d9fc7285081161",
"type": "github"
},
"original": {
"owner": "rust-analyzer",
"ref": "nightly",
"repo": "rust-analyzer",
"type": "github"
}
},
"rust-overlay": { "rust-overlay": {
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": [
@ -696,11 +788,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1766537863, "lastModified": 1773313890,
"narHash": "sha256-HEt+wbazRgJYeY+lgj65bxhPyVc4x7NEB2bs5NU6DF8=", "narHash": "sha256-NXm/kOAk7HLziH1uWaUbNb9MhDS8yxFfQ8fMK5eN8/A=",
"owner": "simple-nixos-mailserver", "owner": "simple-nixos-mailserver",
"repo": "nixos-mailserver", "repo": "nixos-mailserver",
"rev": "23f0a53ca6e58e61e1ea2b86791c69b79c91656d", "rev": "9cdd6869e513df8153db4b920c8f15d394e150f7",
"type": "gitlab" "type": "gitlab"
}, },
"original": { "original": {
@ -730,16 +822,50 @@
"type": "github" "type": "github"
} }
}, },
"treefmt-nix": { "statix": {
"inputs": { "inputs": {
"nixpkgs": "nixpkgs_2" "fenix": "fenix_2",
"nixpkgs": "nixpkgs_5"
}, },
"locked": { "locked": {
"lastModified": 1772660329, "lastModified": 1676888642,
"narHash": "sha256-IjU1FxYqm+VDe5qIOxoW+pISBlGvVApRjiw/Y/ttJzY=", "narHash": "sha256-C73LOMVVCkeL0jA5xN7klLEDEB4NkuiATEJY4A/tIyM=",
"owner": "astro",
"repo": "statix",
"rev": "3c7136a23f444db252a556928c1489869ca3ab4e",
"type": "github"
},
"original": {
"owner": "astro",
"repo": "statix",
"type": "github"
}
},
"systems": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"treefmt-nix": {
"inputs": {
"nixpkgs": "nixpkgs_3"
},
"locked": {
"lastModified": 1773297127,
"narHash": "sha256-6E/yhXP7Oy/NbXtf1ktzmU8SdVqJQ09HC/48ebEGBpk=",
"owner": "numtide", "owner": "numtide",
"repo": "treefmt-nix", "repo": "treefmt-nix",
"rev": "3710e0e1218041bbad640352a0440114b1e10428", "rev": "71b125cd05fbfd78cab3e070b73544abe24c5016",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -747,6 +873,24 @@
"repo": "treefmt-nix", "repo": "treefmt-nix",
"type": "github" "type": "github"
} }
},
"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"
}
} }
}, },
"root": "root", "root": "root",

View file

@ -82,34 +82,26 @@
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
# Linting and formatting
deadnix.url = "github:astro/deadnix";
statix.url = "github:astro/statix";
}; # end inputs }; # end inputs
outputs = inputs@{ self, ... }: let outputs =
inputs@{ self, nixpkgs, ... }:
let
# Functions that setup systems # Functions that setup systems
localLib = import ./lib { inherit inputs; }; localLib = import ./lib { inherit inputs; };
forAllSystems = nixpkgs.lib.genAttrs [
linuxHomeConfig = { system, hostname, username, additionalModules, additionalSpecialArgs }: inputs.home-manager.lib.homeManagerConfiguration { "x86_64-linux"
extraSpecialArgs = { inherit inputs hostname username; "aarch64-linux"
pkgs = import inputs.nixpkgs { "x86_64-darwin"
inherit system; "aarch64-darwin"
config = { ];
allowUnfree = true; in
permittedInsecurePackages = [ "olm-3.2.16" "electron-21.4.4" ];
};
};
} // additionalSpecialArgs;
modules = [
./modules/home-manager/hosts/${hostname}/${username}.nix
{ {
home = { formatter = forAllSystems (system: nixpkgs.legacyPackages.${system}.nixfmt-tree);
username = "${username}";
homeDirectory = "/home/${username}";
};
}
inputs.sops-nix.homeManagerModules.sops
] ++ additionalModules;
}; # end homeManagerConfiguration
in {
# Darwin (macOS) hosts # Darwin (macOS) hosts
darwinConfigurations = { darwinConfigurations = {
AirPuppet = localLib.mkDarwinHost { AirPuppet = localLib.mkDarwinHost {
@ -195,6 +187,7 @@
}; };
}; # end homeConfigurations }; # end homeConfigurations
packages.aarch64-linux.kiosk-gene-desk-sdImage = self.nixosConfigurations.kiosk-gene-desk.config.system.build.sdImage; packages.aarch64-linux.kiosk-gene-desk-sdImage =
self.nixosConfigurations.kiosk-gene-desk.config.system.build.sdImage;
}; };
} }

View file

@ -1,8 +1,10 @@
{ inputs, ... }: let { inputs, ... }:
let
mkDarwinHost = import ./mkDarwinHost.nix { inherit inputs; }; mkDarwinHost = import ./mkDarwinHost.nix { inherit inputs; };
mkHomeConfig = import ./mkHomeConfig.nix { inherit inputs; }; mkHomeConfig = import ./mkHomeConfig.nix { inherit inputs; };
mkNixosHost = import ./mkNixosHost.nix { inherit inputs; }; mkNixosHost = import ./mkNixosHost.nix { inherit inputs; };
in { in
{
inherit (mkDarwinHost) mkDarwinHost; inherit (mkDarwinHost) mkDarwinHost;
inherit (mkHomeConfig) mkHomeConfig; inherit (mkHomeConfig) mkHomeConfig;
inherit (mkNixosHost) mkNixosHost; inherit (mkNixosHost) mkNixosHost;

View file

@ -1,17 +1,24 @@
{ inputs, ... }: { { inputs, ... }:
mkDarwinHost = { {
mkDarwinHost =
{
system ? "aarch64-darwin", system ? "aarch64-darwin",
hostname, hostname,
username ? "gene", username ? "gene",
additionalModules ? [ ], additionalModules ? [ ],
additionalSpecialArgs ? {} additionalSpecialArgs ? { },
}: inputs.nix-darwin.lib.darwinSystem { }:
inputs.nix-darwin.lib.darwinSystem {
inherit system; inherit system;
specialArgs = { inherit inputs hostname username; } // additionalSpecialArgs; specialArgs = {
inherit inputs hostname username;
}
// additionalSpecialArgs;
modules = [ modules = [
./nixpkgs-settings.nix ./nixpkgs-settings.nix
inputs.nix-homebrew.darwinModules.nix-homebrew { inputs.nix-homebrew.darwinModules.nix-homebrew
{
nix-homebrew = { nix-homebrew = {
enable = true; # Install Homebrew under the default prefix enable = true; # Install Homebrew under the default prefix
user = "${username}"; # User owning the Homebrew prefix user = "${username}"; # User owning the Homebrew prefix
@ -19,15 +26,16 @@
}; };
} }
inputs.home-manager.darwinModules.home-manager { inputs.home-manager.darwinModules.home-manager
{
home-manager = { home-manager = {
extraSpecialArgs = { inherit inputs username; }; extraSpecialArgs = { inherit inputs username; };
useGlobalPkgs = true; useGlobalPkgs = true;
useUserPackages = true; useUserPackages = true;
users.${username}.imports = [ users.${username}.imports = [
inputs.sops-nix.homeManagerModule # user-level secrets management inputs.sops-nix.homeManagerModule # user-level secrets management
../modules/hosts/common ../modules/shared/home/general
../modules/hosts/common/all-gui.nix ../modules/shared/home/general/all-gui.nix
../modules/hosts/darwin/home.nix ../modules/hosts/darwin/home.nix
../modules/hosts/darwin/${hostname}/home-${username}.nix ../modules/hosts/darwin/${hostname}/home-${username}.nix
]; ];
@ -36,6 +44,7 @@
../modules/hosts/darwin # system-wide stuff ../modules/hosts/darwin # system-wide stuff
../modules/hosts/darwin/${hostname} # host specific stuff ../modules/hosts/darwin/${hostname} # host specific stuff
] ++ additionalModules; # end modules ]
++ additionalModules; # end modules
}; # end darwinSystem }; # end darwinSystem
} }

View file

@ -1,10 +1,20 @@
{ inputs, ... }: { { inputs, ... }:
mkHomeConfig = { {
mkHomeConfig =
{
homeDirectory, homeDirectory,
system, system,
username, username,
}: inputs.home-manager.lib.homeManagerConfiguration { }:
extraSpecialArgs = { inherit inputs homeDirectory system username; }; inputs.home-manager.lib.homeManagerConfiguration {
extraSpecialArgs = {
inherit
inputs
homeDirectory
system
username
;
};
pkgs = inputs.nixpkgs.legacyPackages.${system}; pkgs = inputs.nixpkgs.legacyPackages.${system};
@ -12,7 +22,7 @@
# the path to your home.nix. # the path to your home.nix.
modules = [ modules = [
./nixpkgs-settings.nix ./nixpkgs-settings.nix
../modules/hosts/common ../modules/shared/home/general
../modules/hosts/home-manager-only ../modules/hosts/home-manager-only
../modules/hosts/home-manager-only/home-${username}.nix ../modules/hosts/home-manager-only/home-${username}.nix

View file

@ -1,26 +1,33 @@
{ inputs, ... }: { { inputs, ... }:
mkNixosHost = { {
mkNixosHost =
{
system ? "x86_64-linux", system ? "x86_64-linux",
hostname, hostname,
username ? "gene", username ? "gene",
additionalModules ? [ ], additionalModules ? [ ],
additionalSpecialArgs ? {} additionalSpecialArgs ? { },
}: inputs.nixpkgs.lib.nixosSystem { }:
inputs.nixpkgs.lib.nixosSystem {
inherit system; inherit system;
specialArgs = { inherit inputs hostname username; } // additionalSpecialArgs; specialArgs = {
inherit inputs hostname username;
}
// additionalSpecialArgs;
modules = [ modules = [
./nixpkgs-settings.nix ./nixpkgs-settings.nix
inputs.disko.nixosModules.disko inputs.disko.nixosModules.disko
inputs.home-manager.nixosModules.home-manager { inputs.home-manager.nixosModules.home-manager
{
home-manager = { home-manager = {
extraSpecialArgs = { inherit inputs hostname username; }; extraSpecialArgs = { inherit inputs hostname username; };
useGlobalPkgs = true; useGlobalPkgs = true;
useUserPackages = true; useUserPackages = true;
users.${username}.imports = [ users.${username}.imports = [
../modules/hosts/common ../modules/shared/home/general
../modules/hosts/common/linux/home.nix ../modules/shared/home/linux
../modules/hosts/nixos/${hostname}/home-${username}.nix ../modules/hosts/nixos/${hostname}/home-${username}.nix
]; ];
}; };
@ -31,6 +38,7 @@
inputs.sops-nix.nixosModules.sops # system wide secrets management inputs.sops-nix.nixosModules.sops # system wide secrets management
../modules/hosts/nixos # system-wide stuff ../modules/hosts/nixos # system-wide stuff
../modules/hosts/nixos/${hostname} # host specific stuff ../modules/hosts/nixos/${hostname} # host specific stuff
] ++ additionalModules; ]
++ additionalModules;
}; };
} }

View file

@ -1,4 +1,4 @@
{ inputs, ... }: { {
nixpkgs = { nixpkgs = {
config = { config = {
allowUnfree = true; allowUnfree = true;

View file

@ -1,30 +0,0 @@
{ lib, pkgs, ... }: with lib.hm.gvariant; {
dconf.settings = {
"com/gexperts/Tilix/profiles/2b7c4080-0ddd-46c5-8f23-563fd3ba789d" = {
background-color = "#272822";
background-transparency-percent = 10;
badge-color-set = false;
bold-color-set = false;
cursor-colors-set = false;
font = "Hack Nerd Font Mono 12";
foreground-color = "#F8F8F2";
highlight-colors-set = false;
palette = [ "#272822" "#F92672" "#A6E22E" "#F4BF75" "#66D9EF" "#AE81FF" "#A1EFE4" "#F8F8F2" "#75715E" "#F92672" "#A6E22E" "#F4BF75" "#66D9EF" "#AE81FF" "#A1EFE4" "#F9F8F5" ];
use-system-font = false;
use-theme-colors = false;
visible-name = "Default";
};
};
home.file = {
".config/tilix/schemes/Beanbag-Mathias.json".source = ../../files/tilix/Beanbag-Mathias.json;
".config/tilix/schemes/Catppuccin-Frappe.json".source = (pkgs.fetchFromGitHub {
owner = "catppuccin";
repo = "tilix";
rev = "3fd05e03419321f2f2a6aad6da733b28be1765ef";
hash = "sha256-SI7QxQ+WBHzeuXbTye+s8pi4tDVZOV4Aa33mRYO276k=";
} + "/src/Catppuccin-Frappe.json");
};
}

View file

@ -1,17 +0,0 @@
{ pkgs, ... }: {
home.file = {
".config/waybar/config".source = ../../files/waybar/config;
".config/waybar/frappe.css".source = (pkgs.fetchFromGitHub {
owner = "catppuccin";
repo = "waybar";
rev = "f74ab1eecf2dcaf22569b396eed53b2b2fbe8aff";
hash = "sha256-WLJMA2X20E5PCPg0ZPtSop0bfmu+pLImP9t8A8V4QK8=";
} + "/themes/frappe.css");
".config/waybar/style.css".source = ../../files/waybar/style.css;
};
programs = {
# Using file in ../../files/waybar/ to configure waybar
waybar.enable = true;
};
}

View file

@ -1,7 +0,0 @@
{ config, lib, ... }:
let
hostName = config.networking.hostName;
in {
programs.zsh.shellAliases.nixroutes =
"cd ~/repos/dots && echo '=== Current Routes ===' && ip route show && ip -6 route show && echo '' && echo '=== New Build Routes ===' && nix eval --json '.#nixosConfigurations.${hostName}.config.systemd.network.networks.\"10-wan\".routes'";
}

View file

@ -1,4 +1,4 @@
{ ... }: { {
system.stateVersion = 4; system.stateVersion = 4;
homebrew = { homebrew = {

View file

@ -1,4 +1,5 @@
{ username, ... }: { { username, ... }:
{
home.stateVersion = "23.11"; home.stateVersion = "23.11";
sops = { sops = {

View file

@ -1,4 +1,5 @@
{ pkgs, ... }: { { pkgs, ... }:
{
system.stateVersion = 4; system.stateVersion = 4;
environment = { environment = {

View file

@ -1,4 +1,5 @@
{ username, ... }: { { username, ... }:
{
home.stateVersion = "23.11"; home.stateVersion = "23.11";
programs = { programs = {

View file

@ -1,8 +1,17 @@
{ pkgs, hostname, username, ... }: { {
pkgs,
hostname,
username,
...
}:
{
system.primaryUser = username; system.primaryUser = username;
environment = { environment = {
shells = with pkgs; [ bash zsh ]; shells = with pkgs; [
bash
zsh
];
pathsToLink = [ pathsToLink = [
"/Applications" "/Applications"
"/share/zsh" "/share/zsh"
@ -113,7 +122,10 @@
"flox-cache-public-1:7F4OyH7ZCnFhcze3fJdfyXYLQw/aV7GEed86nQ7IsOs=" "flox-cache-public-1:7F4OyH7ZCnFhcze3fJdfyXYLQw/aV7GEed86nQ7IsOs="
"cache.thalheim.io-1:R7msbosLEZKrxk/lKxf9BTjOOH7Ax3H0Qj0/6wiHOgc=" "cache.thalheim.io-1:R7msbosLEZKrxk/lKxf9BTjOOH7Ax3H0Qj0/6wiHOgc="
]; ];
trusted-users = [ "@admin" "${username}" ]; trusted-users = [
"@admin"
"${username}"
];
}; };
extraOptions = '' extraOptions = ''
# Generated by https://github.com/DeterminateSystems/nix-installer, version 0.11.0. # Generated by https://github.com/DeterminateSystems/nix-installer, version 0.11.0.

View file

@ -1,4 +1,5 @@
{ username, ... }: { { username, ... }:
{
# dawrwin-specific shell config # dawrwin-specific shell config
programs = { programs = {
zsh = { zsh = {

View file

@ -1,4 +1,5 @@
{ inputs, pkgs, ... }: { { inputs, pkgs, ... }:
{
system.stateVersion = 4; system.stateVersion = 4;
environment = { environment = {

View file

@ -1,4 +1,5 @@
{ config, ... }: { { config, ... }:
{
home.stateVersion = "23.11"; home.stateVersion = "23.11";
programs = { programs = {

View file

@ -1,4 +1,11 @@
{ config, pkgs, system, username, ... }: { {
config,
pkgs,
system,
username,
...
}:
{
home.stateVersion = "25.05"; home.stateVersion = "25.05";
home.packages = with pkgs; [ home.packages = with pkgs; [
age age

View file

@ -1,3 +1,3 @@
{ ... }: { {
# Settings just for work machines go here # Settings just for work machines go here
} }

View file

@ -1,4 +1,5 @@
{ pkgs, ... }: { { pkgs, ... }:
{
# Settings just for personal machines go here # Settings just for personal machines go here
home.packages = with pkgs; [ home.packages = with pkgs; [

View file

@ -1,4 +1,9 @@
{ config, pkgs, username, ... }: {
config,
pkgs,
username,
...
}:
let let
libbluray = pkgs.libbluray.override { libbluray = pkgs.libbluray.override {
withAACS = true; withAACS = true;
@ -8,10 +13,11 @@
vlc-with-decoding = pkgs.vlc.override { inherit libbluray; }; vlc-with-decoding = pkgs.vlc.override { inherit libbluray; };
in in
{ {
imports = [ # Include the results of the hardware scan. imports = [
# Include the results of the hardware scan.
./hardware-configuration.nix ./hardware-configuration.nix
../../common/linux/flatpaks.nix ../../../shared/nixos/flatpaks.nix
../../common/linux/ripping.nix ../../../shared/nixos/ripping.nix
]; ];
system.stateVersion = "24.11"; # Did you read the comment? system.stateVersion = "24.11"; # Did you read the comment?
@ -43,7 +49,6 @@
zoom-us zoom-us
]; ];
networking.networkmanager.enable = true; networking.networkmanager.enable = true;
programs = { programs = {
@ -118,7 +123,12 @@
users.users.${username} = { users.users.${username} = {
isNormalUser = true; isNormalUser = true;
description = "Gene Liverman"; description = "Gene Liverman";
extraGroups = [ "networkmanager" "wheel" "dialout" "input" ]; extraGroups = [
"networkmanager"
"wheel"
"dialout"
"input"
];
packages = with pkgs; [ packages = with pkgs; [
kdePackages.kate kdePackages.kate
# thunderbird # thunderbird

View file

@ -1,31 +1,54 @@
# Do not modify this file! It was generated by nixos-generate-config # Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes # and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead. # to /etc/nixos/configuration.nix instead.
{ config, lib, pkgs, modulesPath, ... }: {
config,
lib,
modulesPath,
...
}:
{ {
imports = imports = [
[ (modulesPath + "/installer/scan/not-detected.nix") (modulesPath + "/installer/scan/not-detected.nix")
]; ];
boot.initrd.availableKernelModules = [ "xhci_pci" "nvme" "usb_storage" "sd_mod" "rtsx_pci_sdmmc" ]; boot = {
boot.initrd.kernelModules = [ ]; initrd = {
boot.kernelModules = [ "kvm-intel" "sg" ]; availableKernelModules = [
boot.extraModulePackages = [ ]; "xhci_pci"
"nvme"
"usb_storage"
"sd_mod"
"rtsx_pci_sdmmc"
];
kernelModules = [ ];
};
kernelModules = [
"kvm-intel"
"sg"
];
extraModulePackages = [ ];
};
fileSystems."/" = fileSystems = {
{ device = "/dev/disk/by-uuid/9c2d2979-dc8d-40e0-9ec2-c3cce33cd832"; "/" = {
device = "/dev/disk/by-uuid/9c2d2979-dc8d-40e0-9ec2-c3cce33cd832";
fsType = "ext4"; fsType = "ext4";
}; };
fileSystems."/boot" = "/boot" = {
{ device = "/dev/disk/by-uuid/59CB-16DE"; device = "/dev/disk/by-uuid/59CB-16DE";
fsType = "vfat"; fsType = "vfat";
options = [ "fmask=0077" "dmask=0077" ]; options = [
"fmask=0077"
"dmask=0077"
];
};
}; };
swapDevices = swapDevices = [
[ { device = "/dev/disk/by-uuid/878ff032-3de0-4efe-a12f-8eccd0ac3253"; } { device = "/dev/disk/by-uuid/878ff032-3de0-4efe-a12f-8eccd0ac3253"; }
]; ];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking # Enables DHCP on each ethernet and wireless interface. In case of scripted networking

View file

@ -1,9 +1,10 @@
{ ... }: { { ... }:
{
home.stateVersion = "24.05"; home.stateVersion = "24.05";
imports = [ imports = [
../../common/all-gui.nix ../../../shared/home/general/all-gui.nix
../../common/linux/apps/tilix.nix ../../../shared/home/linux/apps/tilix.nix
../../common/linux/apps/xfce4-terminal.nix ../../../shared/home/linux/apps/xfce4-terminal.nix
]; ];
programs = { programs = {
@ -27,4 +28,3 @@
}; };
}; };
} }

View file

@ -1,10 +1,19 @@
{ hostname, pkgs, username, ... }: { {
hostname,
pkgs,
username,
...
}:
{
imports = [ imports = [
../common/linux/internationalisation.nix ../../shared/nixos/internationalisation.nix
]; ];
environment = { environment = {
shells = with pkgs; [ bash zsh ]; shells = with pkgs; [
bash
zsh
];
systemPackages = with pkgs; [ systemPackages = with pkgs; [
age age
dconf2nix dconf2nix

View file

@ -1,6 +1,11 @@
{ inputs, pkgs, username, ... }: { {
pkgs,
username,
...
}:
{
imports = [ imports = [
../../common/linux/nixroutes.nix ../../../shared/nixos/nixroutes.nix
./disk-config.nix ./disk-config.nix
./hardware-configuration.nix ./hardware-configuration.nix
./post-install ./post-install
@ -88,7 +93,10 @@
users.users.${username} = { users.users.${username} = {
isNormalUser = true; isNormalUser = true;
description = "Gene Liverman"; description = "Gene Liverman";
extraGroups = [ "networkmanager" "wheel" ]; extraGroups = [
"networkmanager"
"wheel"
];
linger = true; linger = true;
}; };
} }

View file

@ -4,14 +4,25 @@
{ lib, modulesPath, ... }: { lib, modulesPath, ... }:
{ {
imports = imports = [
[ (modulesPath + "/profiles/qemu-guest.nix") (modulesPath + "/profiles/qemu-guest.nix")
]; ];
boot.initrd.availableKernelModules = [ "ahci" "xhci_pci" "virtio_pci" "virtio_scsi" "sd_mod" "sr_mod" ]; boot = {
boot.initrd.kernelModules = [ ]; initrd = {
boot.kernelModules = [ ]; availableKernelModules = [
boot.extraModulePackages = [ ]; "ahci"
"xhci_pci"
"virtio_pci"
"virtio_scsi"
"sd_mod"
"sr_mod"
];
kernelModules = [ ];
};
kernelModules = [ ];
extraModulePackages = [ ];
};
fileSystems."pack1828" = { fileSystems."pack1828" = {
device = "/dev/disk/by-id/scsi-0HC_Volume_102600992"; device = "/dev/disk/by-id/scsi-0HC_Volume_102600992";
@ -25,4 +36,3 @@
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
} }

View file

@ -1,3 +1,3 @@
{ ... }: { {
home.stateVersion = "24.05"; home.stateVersion = "24.05";
} }

View file

@ -1,6 +1,8 @@
{ config, username, ... }: let { config, username, ... }:
let
volume_base = "/var/lib/emqx"; volume_base = "/var/lib/emqx";
in { in
{
# Based on docs at https://docs.emqx.com/en/emqx/latest/deploy/install-docker.html # Based on docs at https://docs.emqx.com/en/emqx/latest/deploy/install-docker.html
virtualisation.oci-containers.containers = { virtualisation.oci-containers.containers = {
"emqx" = { "emqx" = {

View file

@ -1,10 +1,18 @@
{ config, lib, pkgs, username, ... }: let {
config,
lib,
pkgs,
username,
...
}:
let
domain = "technicalissues.us"; domain = "technicalissues.us";
restic_backup_time = "01:00"; restic_backup_time = "01:00";
in { in
{
imports = [ imports = [
../../../common/linux/lets-encrypt.nix ../../../../shared/nixos/lets-encrypt.nix
../../../common/linux/restic.nix ../../../../shared/nixos/restic.nix
./containers/emqx.nix ./containers/emqx.nix
./matrix-synapse.nix ./matrix-synapse.nix
./monitoring.nix ./monitoring.nix
@ -180,7 +188,8 @@ in {
}; };
systemd.services = { systemd.services = {
nextcloud-config-collabora = let nextcloud-config-collabora =
let
inherit (config.services.nextcloud) occ; inherit (config.services.nextcloud) occ;
wopi_url = "http://[::1]:${toString config.services.collabora-online.port}"; wopi_url = "http://[::1]:${toString config.services.collabora-online.port}";
@ -191,9 +200,13 @@ in {
"5.161.244.95" "5.161.244.95"
"2a01:4ff:f0:977c::1" "2a01:4ff:f0:977c::1"
]; ];
in { in
{
wantedBy = [ "multi-user.target" ]; wantedBy = [ "multi-user.target" ];
after = ["nextcloud-setup.service" "coolwsd.service"]; after = [
"nextcloud-setup.service"
"coolwsd.service"
];
requires = [ "coolwsd.service" ]; requires = [ "coolwsd.service" ];
script = '' script = ''
${occ}/bin/nextcloud-occ config:app:set richdocuments wopi_url --value ${lib.escapeShellArg wopi_url} ${occ}/bin/nextcloud-occ config:app:set richdocuments wopi_url --value ${lib.escapeShellArg wopi_url}

View file

@ -1,4 +1,5 @@
{ config, ... }: { { config, ... }:
{
services.matrix-synapse = { services.matrix-synapse = {
enable = true; enable = true;
configureRedisLocally = true; configureRedisLocally = true;

View file

@ -1,6 +1,8 @@
{ config, pkgs, ... }: let { config, pkgs, ... }:
let
metrics_server = "https://monitoring.home.technicalissues.us/remotewrite"; metrics_server = "https://monitoring.home.technicalissues.us/remotewrite";
in { in
{
services = { services = {
vmagent = { vmagent = {
enable = true; enable = true;
@ -120,9 +122,8 @@ in {
vmagent_push_pw = { vmagent_push_pw = {
owner = "vmagent"; owner = "vmagent";
restartUnits = [ "vmagent.service" ]; restartUnits = [ "vmagent.service" ];
sopsFile = ../../../common/secrets.yaml; sopsFile = ../../../../shared/secrets.yaml;
}; };
}; };
}; };
} }

View file

@ -1,16 +1,21 @@
{ config, ... }: let { config, ... }:
let
mqtt_domain = "mqtt.technicalissues.us"; mqtt_domain = "mqtt.technicalissues.us";
in { in
security.acme.certs.${mqtt_domain}.postRun = "systemctl restart ${config.systemd.services.mosquitto.name}"; {
security.acme.certs.${mqtt_domain}.postRun =
"systemctl restart ${config.systemd.services.mosquitto.name}";
services.mosquitto = { services.mosquitto = {
enable = true; enable = true;
bridges = { bridges = {
liamcottle = { liamcottle = {
addresses = [{ addresses = [
{
address = "mqtt.meshtastic.liamcottle.net"; address = "mqtt.meshtastic.liamcottle.net";
port = 1883; port = 1883;
}]; }
];
topics = [ topics = [
"msh/# out 1 \"\"" "msh/# out 1 \"\""
]; ];
@ -24,10 +29,12 @@ in {
}; };
}; };
meshtastic = { meshtastic = {
addresses = [{ addresses = [
{
address = "mqtt.meshtastic.org"; address = "mqtt.meshtastic.org";
port = 1883; port = 1883;
}]; }
];
topics = [ topics = [
"msh/# out 1 \"\"" "msh/# out 1 \"\""
]; ];
@ -42,10 +49,12 @@ in {
}; };
}; };
homeassistant = { homeassistant = {
addresses = [{ addresses = [
{
address = "homeasistant-lc.atlas-snares.ts.net"; address = "homeasistant-lc.atlas-snares.ts.net";
port = 1883; port = 1883;
}]; }
];
topics = [ topics = [
"msh/US/2/e/LongFast/!a386c80 out 1 \"\"" "msh/US/2/e/LongFast/!a386c80 out 1 \"\""
"msh/US/2/e/LongFast/!b03bcb24 out 1 \"\"" "msh/US/2/e/LongFast/!b03bcb24 out 1 \"\""
@ -62,7 +71,8 @@ in {
}; };
}; };
}; };
listeners = let listeners =
let
mqtt_users = { mqtt_users = {
genebean = { genebean = {
acl = [ acl = [
@ -77,7 +87,8 @@ in {
hashedPasswordFile = config.sops.secrets.mosquitto_mountain_mesh.path; hashedPasswordFile = config.sops.secrets.mosquitto_mountain_mesh.path;
}; };
}; };
in [ in
[
{ {
port = 1883; port = 1883;
users = mqtt_users; users = mqtt_users;
@ -86,9 +97,11 @@ in {
{ {
port = 8883; port = 8883;
users = mqtt_users; users = mqtt_users;
settings = let settings =
let
certDir = config.security.acme.certs."${mqtt_domain}".directory; certDir = config.security.acme.certs."${mqtt_domain}".directory;
in { in
{
allow_anonymous = false; allow_anonymous = false;
keyfile = certDir + "/key.pem"; keyfile = certDir + "/key.pem";
certfile = certDir + "/cert.pem"; certfile = certDir + "/cert.pem";
@ -98,9 +111,11 @@ in {
{ {
port = 9001; port = 9001;
users = mqtt_users; users = mqtt_users;
settings = let settings =
let
certDir = config.security.acme.certs."${mqtt_domain}".directory; certDir = config.security.acme.certs."${mqtt_domain}".directory;
in { in
{
allow_anonymous = false; allow_anonymous = false;
keyfile = certDir + "/key.pem"; keyfile = certDir + "/key.pem";
certfile = certDir + "/cert.pem"; certfile = certDir + "/cert.pem";

View file

@ -1,9 +1,11 @@
{ config, ... }: let { config, ... }:
let
domain = "technicalissues.us"; domain = "technicalissues.us";
http_port = 80; http_port = 80;
https_port = 443; https_port = 443;
private_btc = "umbrel.atlas-snares.ts.net"; private_btc = "umbrel.atlas-snares.ts.net";
in { in
{
services.nginx = { services.nginx = {
enable = true; enable = true;
@ -134,14 +136,36 @@ in {
}; };
"matrix.${domain}" = { "matrix.${domain}" = {
listen = [ listen = [
{ port = http_port; addr = "0.0.0.0"; } {
{ port = http_port; addr = "[::]"; } port = http_port;
addr = "0.0.0.0";
}
{
port = http_port;
addr = "[::]";
}
{ port = https_port; addr = "0.0.0.0"; ssl = true; } {
{ port = https_port; addr = "[::]"; ssl = true; } port = https_port;
addr = "0.0.0.0";
ssl = true;
}
{
port = https_port;
addr = "[::]";
ssl = true;
}
{ port = 8448; addr = "0.0.0.0"; ssl = true; } {
{ port = 8448; addr = "[::]"; ssl = true; } port = 8448;
addr = "0.0.0.0";
ssl = true;
}
{
port = 8448;
addr = "[::]";
ssl = true;
}
]; ];
enableACME = true; enableACME = true;
acmeRoot = null; acmeRoot = null;
@ -195,7 +219,8 @@ in {
"/" = { "/" = {
proxyPass = "http://127.0.0.1:8083"; proxyPass = "http://127.0.0.1:8083";
}; };
"/pub" = { # Client apps need to point to this path "/pub" = {
# Client apps need to point to this path
extraConfig = "proxy_set_header X-Limit-U $remote_user;"; extraConfig = "proxy_set_header X-Limit-U $remote_user;";
proxyPass = "http://127.0.0.1:8083/pub"; proxyPass = "http://127.0.0.1:8083/pub";
}; };

View file

@ -1,6 +1,12 @@
{ inputs, pkgs, username, ... }: { {
inputs,
pkgs,
username,
...
}:
{
imports = [ imports = [
../../common/linux/nixroutes.nix ../../../shared/nixos/nixroutes.nix
./disk-config.nix ./disk-config.nix
./hardware-configuration.nix ./hardware-configuration.nix
./post-install ./post-install
@ -56,7 +62,10 @@
users.users.${username} = { users.users.${username} = {
isNormalUser = true; isNormalUser = true;
description = "Gene Liverman"; description = "Gene Liverman";
extraGroups = [ "networkmanager" "wheel" ]; extraGroups = [
"networkmanager"
"wheel"
];
linger = true; linger = true;
}; };

View file

@ -4,34 +4,43 @@
{ lib, modulesPath, ... }: { lib, modulesPath, ... }:
{ {
imports = imports = [
[ (modulesPath + "/profiles/qemu-guest.nix") (modulesPath + "/profiles/qemu-guest.nix")
]; ];
boot = { boot = {
initrd = { initrd = {
availableKernelModules = [ "xhci_pci" "virtio_scsi" "sr_mod" ]; availableKernelModules = [
"xhci_pci"
"virtio_scsi"
"sr_mod"
];
kernelModules = [ ]; kernelModules = [ ];
}; };
kernelModules = [ ]; kernelModules = [ ];
extraModulePackages = [ ]; extraModulePackages = [ ];
}; };
fileSystems."/" = fileSystems = {
{ device = "/dev/disk/by-partlabel/disk-primary-root"; "/" = {
device = "/dev/disk/by-partlabel/disk-primary-root";
fsType = "ext4"; fsType = "ext4";
}; };
fileSystems."/boot" = "/boot" = {
{ device = "/dev/disk/by-partlabel/disk-primary-ESP"; device = "/dev/disk/by-partlabel/disk-primary-ESP";
fsType = "vfat"; fsType = "vfat";
options = [ "fmask=0022" "dmask=0022" ]; options = [
"fmask=0022"
"dmask=0022"
];
}; };
fileSystems."/nix" = "/nix" = {
{ device = "/dev/disk/by-partlabel/disk-volume1-nix"; device = "/dev/disk/by-partlabel/disk-volume1-nix";
fsType = "ext4"; fsType = "ext4";
}; };
};
swapDevices = [ ]; swapDevices = [ ];

View file

@ -1,3 +1,3 @@
{ ... }: { {
home.stateVersion = "24.05"; home.stateVersion = "24.05";
} }

View file

@ -1,6 +1,7 @@
{ config, username, ... }: { { config, username, ... }:
{
imports = [ imports = [
../../../common/linux/lets-encrypt.nix ../../../../shared/nixos/lets-encrypt.nix
./monitoring.nix ./monitoring.nix
./nginx.nix ./nginx.nix
]; ];
@ -23,4 +24,3 @@
}; };
}; };
} }

View file

@ -1,6 +1,8 @@
{ config, pkgs, ... }: let { config, pkgs, ... }:
let
metrics_server = "https://monitoring.home.technicalissues.us/remotewrite"; metrics_server = "https://monitoring.home.technicalissues.us/remotewrite";
in { in
{
services = { services = {
vmagent = { vmagent = {
enable = true; enable = true;
@ -120,9 +122,8 @@ in {
vmagent_push_pw = { vmagent_push_pw = {
owner = "vmagent"; owner = "vmagent";
restartUnits = [ "vmagent.service" ]; restartUnits = [ "vmagent.service" ];
sopsFile = ../../../common/secrets.yaml; sopsFile = ../../../../shared/secrets.yaml;
}; };
}; };
}; };
} }

View file

@ -1,7 +1,8 @@
{ pkgs, ... }:
{ pkgs, ... }: let let
domain = "genebean.me"; domain = "genebean.me";
in { in
{
environment.etc.nginx-littlelinks = { environment.etc.nginx-littlelinks = {
# Info generated via # Info generated via
# nurl https://github.com/genebean/littlelink genebean-sometag # nurl https://github.com/genebean/littlelink genebean-sometag

View file

@ -1,4 +1,11 @@
{ config, lib, pkgs, username, ... }: { {
config,
lib,
pkgs,
username,
...
}:
{
imports = [ imports = [
./disk-config.nix ./disk-config.nix
./hardware-configuration.nix ./hardware-configuration.nix
@ -50,19 +57,20 @@
}; };
nixpkgs.overlays = [ nixpkgs.overlays = [
(final: super: { (_final: super: {
makeModulesClosure = x: makeModulesClosure = x: super.makeModulesClosure (x // { allowMissing = true; });
super.makeModulesClosure (x // { allowMissing = true; });
}) })
]; ];
services = { services = {
cage = let cage =
let
kioskProgram = pkgs.writeShellScript "kiosk.sh" '' kioskProgram = pkgs.writeShellScript "kiosk.sh" ''
WAYLAND_DISPLAY=wayland-0 wlr-randr --output HDMI-A-1 WAYLAND_DISPLAY=wayland-0 wlr-randr --output HDMI-A-1
/etc/profiles/per-user/gene/bin/chromium-browser /etc/profiles/per-user/gene/bin/chromium-browser
''; '';
in { in
{
enable = true; enable = true;
program = kioskProgram; program = kioskProgram;
user = "gene"; user = "gene";
@ -97,7 +105,7 @@
path = "${config.users.users.${username}.home}/.private-env"; path = "${config.users.users.${username}.home}/.private-env";
}; };
wifi_creds = { wifi_creds = {
sopsFile = ../../common/secrets.yaml; sopsFile = ../../../shared/secrets.yaml;
restartUnits = [ restartUnits = [
"wpa_supplicant.service" "wpa_supplicant.service"
]; ];
@ -115,7 +123,10 @@
users.users.${username} = { users.users.${username} = {
isNormalUser = true; isNormalUser = true;
description = "Gene Liverman"; description = "Gene Liverman";
extraGroups = [ "networkmanager" "wheel" ]; extraGroups = [
"networkmanager"
"wheel"
];
linger = true; linger = true;
}; };
@ -125,4 +136,3 @@
memoryPercent = 90; memoryPercent = 90;
}; };
} }

View file

@ -1,17 +1,33 @@
# Do not modify this file! It was generated by nixos-generate-config # Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes # and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead. # to /etc/nixos/configuration.nix instead.
{ config, lib, pkgs, modulesPath, ... }: {
config,
lib,
modulesPath,
...
}:
{ {
imports = imports = [
[ (modulesPath + "/installer/scan/not-detected.nix") (modulesPath + "/installer/scan/not-detected.nix")
]; ];
boot.initrd.availableKernelModules = [ "xhci_pci" "ehci_pci" "ahci" "usbhid" "sd_mod" "rtsx_pci_sdmmc" ]; boot = {
boot.initrd.kernelModules = [ ]; initrd = {
boot.kernelModules = [ "kvm-intel" ]; availableKernelModules = [
boot.extraModulePackages = [ ]; "xhci_pci"
"ehci_pci"
"ahci"
"usbhid"
"sd_mod"
"rtsx_pci_sdmmc"
];
kernelModules = [ ];
};
kernelModules = [ "kvm-intel" ];
extraModulePackages = [ ];
};
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking # Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's # (the default) this is the recommended approach. When using systemd-networkd it's

View file

@ -1,4 +1,4 @@
{ ... }: { {
home.stateVersion = "24.11"; home.stateVersion = "24.11";
programs = { programs = {
@ -21,4 +21,3 @@
}; };
} }

View file

@ -1,6 +1,8 @@
{ config, pkgs, ... }: let { config, pkgs, ... }:
let
metrics_server = "https://monitoring.home.technicalissues.us/remotewrite"; metrics_server = "https://monitoring.home.technicalissues.us/remotewrite";
in { in
{
services = { services = {
vmagent = { vmagent = {
enable = true; enable = true;
@ -120,9 +122,8 @@ in {
vmagent_push_pw = { vmagent_push_pw = {
owner = "vmagent"; owner = "vmagent";
restartUnits = [ "vmagent.service" ]; restartUnits = [ "vmagent.service" ];
sopsFile = ../../../common/secrets.yaml; sopsFile = ../../../../shared/secrets.yaml;
}; };
}; };
}; };
} }

View file

@ -1,4 +1,12 @@
{ inputs, config, lib, pkgs, username, ... }: { {
inputs,
config,
lib,
pkgs,
username,
...
}:
{
imports = [ imports = [
# SD card image # SD card image
"${inputs.nixpkgs}/nixos/modules/installer/sd-card/sd-image-aarch64.nix" "${inputs.nixpkgs}/nixos/modules/installer/sd-card/sd-image-aarch64.nix"
@ -42,21 +50,22 @@
}; };
nixpkgs.overlays = [ nixpkgs.overlays = [
(final: super: { (_final: super: {
makeModulesClosure = x: makeModulesClosure = x: super.makeModulesClosure (x // { allowMissing = true; });
super.makeModulesClosure (x // { allowMissing = true; });
}) })
]; ];
sdImage.compressImage = true; sdImage.compressImage = true;
services = { services = {
cage = let cage =
let
kioskProgram = pkgs.writeShellScript "kiosk.sh" '' kioskProgram = pkgs.writeShellScript "kiosk.sh" ''
WAYLAND_DISPLAY=wayland-0 wlr-randr --output HDMI-A-1 --transform 90 WAYLAND_DISPLAY=wayland-0 wlr-randr --output HDMI-A-1 --transform 90
/etc/profiles/per-user/gene/bin/chromium-browser /etc/profiles/per-user/gene/bin/chromium-browser
''; '';
in { in
{
enable = true; enable = true;
program = kioskProgram; program = kioskProgram;
user = "gene"; user = "gene";
@ -90,7 +99,7 @@
path = "${config.users.users.${username}.home}/.private-env"; path = "${config.users.users.${username}.home}/.private-env";
}; };
wifi_creds = { wifi_creds = {
sopsFile = ../../common/secrets.yaml; sopsFile = ../../../shared/secrets.yaml;
restartUnits = [ restartUnits = [
"wpa_supplicant.service" "wpa_supplicant.service"
]; ];
@ -108,7 +117,10 @@
users.users.${username} = { users.users.${username} = {
isNormalUser = true; isNormalUser = true;
description = "Gene Liverman"; description = "Gene Liverman";
extraGroups = [ "networkmanager" "wheel" ]; extraGroups = [
"networkmanager"
"wheel"
];
linger = true; linger = true;
}; };
@ -118,4 +130,3 @@
memoryPercent = 90; memoryPercent = 90;
}; };
} }

View file

@ -1,4 +1,4 @@
{ ... }: { {
home.stateVersion = "24.11"; home.stateVersion = "24.11";
programs = { programs = {
@ -20,4 +20,3 @@
}; };
} }

View file

@ -1,8 +1,14 @@
{ config, pkgs, username, ... }: { {
config,
pkgs,
username,
...
}:
{
imports = [ imports = [
./disk-config.nix ./disk-config.nix
./hardware-configuration.nix ./hardware-configuration.nix
../../../system/common/linux/restic.nix ../../../shared/nixos/restic.nix
]; ];
system.stateVersion = "24.05"; system.stateVersion = "24.05";

View file

@ -1,4 +1,3 @@
{ ... }:
{ {
disko.devices = { disko.devices = {
disk = { disk = {

View file

@ -1,45 +1,71 @@
# Do not modify this file! It was generated by nixos-generate-config # Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes # and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead. # to /etc/nixos/configuration.nix instead.
{ config, lib, modulesPath, ... }: {
config,
lib,
modulesPath,
...
}:
{ {
imports = imports = [
[ (modulesPath + "/installer/scan/not-detected.nix") (modulesPath + "/installer/scan/not-detected.nix")
]; ];
boot.initrd.availableKernelModules = [ "ehci_pci" "ahci" "usbhid" "usb_storage" "sd_mod" "sr_mod" ]; boot = {
boot.initrd.kernelModules = [ "nvme" ]; initrd = {
boot.kernelModules = [ "kvm-intel" ]; availableKernelModules = [
boot.extraModulePackages = [ ]; "ehci_pci"
"ahci"
"usbhid"
"usb_storage"
"sd_mod"
"sr_mod"
];
kernelModules = [ "nvme" ];
};
kernelModules = [ "kvm-intel" ];
extraModulePackages = [ ];
};
fileSystems."/" = fileSystems = {
{ device = "zroot/root"; "/" = {
device = "zroot/root";
fsType = "zfs"; fsType = "zfs";
}; };
fileSystems."/nix" = "/nix" = {
{ device = "zroot/root/nix"; device = "zroot/root/nix";
fsType = "zfs"; fsType = "zfs";
}; };
fileSystems."/home" = "/home" = {
{ device = "zroot/root/home"; device = "zroot/root/home";
fsType = "zfs"; fsType = "zfs";
}; };
fileSystems."/boot" = "/boot" =
# { device = "/dev/disk/by-uuid/02A5-6FCC"; # { device = "/dev/disk/by-uuid/02A5-6FCC";
{ device = "/dev/disk/by-partlabel/disk-sdc-BOOT"; {
device = "/dev/disk/by-partlabel/disk-sdc-BOOT";
fsType = "vfat"; fsType = "vfat";
options = [ "fmask=0022" "dmask=0022" ]; options = [
"fmask=0022"
"dmask=0022"
];
}; };
fileSystems."/boot-fallback" = "/boot-fallback" =
# { device = "/dev/disk/by-uuid/02F1-B12D"; # { device = "/dev/disk/by-uuid/02F1-B12D";
{ device = "/dev/disk/by-partlabel/disk-sdd-BOOT-FALLBACK"; {
device = "/dev/disk/by-partlabel/disk-sdd-BOOT-FALLBACK";
fsType = "vfat"; fsType = "vfat";
options = [ "fmask=0022" "dmask=0022" ]; options = [
"fmask=0022"
"dmask=0022"
];
};
}; };
swapDevices = [ ]; swapDevices = [ ];

View file

@ -1,3 +1,3 @@
{ ... }: { {
home.stateVersion = "24.05"; home.stateVersion = "24.05";
} }

View file

@ -1,7 +1,9 @@
{ ... }: let _:
let
volume_base = "/var/lib/audiobookshelf"; volume_base = "/var/lib/audiobookshelf";
http_port = "13378"; http_port = "13378";
in { in
{
# Audiobookshelf # Audiobookshelf
virtualisation.oci-containers.containers = { virtualisation.oci-containers.containers = {

View file

@ -1,6 +1,8 @@
{ config, username, ... }: let { config, ... }:
let
volume_base = "/orico/mountain-mesh-bot-discord"; volume_base = "/orico/mountain-mesh-bot-discord";
in { in
{
# My mountain-mesh-bot-discord container # My mountain-mesh-bot-discord container
virtualisation.oci-containers.containers = { virtualisation.oci-containers.containers = {
@ -17,6 +19,8 @@ in {
sops.secrets.mtnmesh_bot_dot_env = { sops.secrets.mtnmesh_bot_dot_env = {
path = "${volume_base}/.env"; path = "${volume_base}/.env";
restartUnits = [ "${config.virtualisation.oci-containers.containers.mtnmesh_bot_discord.serviceName}" ]; restartUnits = [
"${config.virtualisation.oci-containers.containers.mtnmesh_bot_discord.serviceName}"
];
}; };
} }

View file

@ -1,8 +1,10 @@
{ config, ... }: let { config, ... }:
let
volume_base = "/orico/psitransfer"; volume_base = "/orico/psitransfer";
http_port = "3000"; http_port = "3000";
psitransfer_dot_env = "${config.sops.secrets.psitransfer_dot_env.path}"; psitransfer_dot_env = "${config.sops.secrets.psitransfer_dot_env.path}";
in { in
{
############################################################################# #############################################################################
# My intent as of now is to only make this available to the outside world # # My intent as of now is to only make this available to the outside world #
@ -29,4 +31,3 @@ in {
}; };
}; };
} }

View file

@ -1,18 +1,25 @@
{ inputs, config, pkgs, username, ... }: let {
http_port = 80; inputs,
config,
pkgs,
username,
...
}:
let
https_port = 443; https_port = 443;
home_domain = "home.technicalissues.us"; home_domain = "home.technicalissues.us";
backend_ip = "127.0.0.1"; backend_ip = "127.0.0.1";
restic_backup_time = "02:00"; restic_backup_time = "02:00";
in { in
{
imports = [ imports = [
./hardware-configuration.nix ./hardware-configuration.nix
./containers/audiobookshelf.nix ./containers/audiobookshelf.nix
./containers/mountain-mesh-bot-discord.nix ./containers/mountain-mesh-bot-discord.nix
./containers/psitransfer.nix ./containers/psitransfer.nix
./monitoring-stack.nix ./monitoring-stack.nix
../../common/linux/lets-encrypt.nix ../../../shared/nixos/lets-encrypt.nix
../../common/linux/restic.nix ../../../shared/nixos/restic.nix
]; ];
system.stateVersion = "23.11"; system.stateVersion = "23.11";
@ -31,7 +38,9 @@ in {
}; };
environment = { environment = {
sessionVariables = { LIBVA_DRIVER_NAME = "iHD"; }; sessionVariables = {
LIBVA_DRIVER_NAME = "iHD";
};
systemPackages = with pkgs; [ systemPackages = with pkgs; [
inputs.compose2nix.packages.${pkgs.stdenv.hostPlatform.system}.default inputs.compose2nix.packages.${pkgs.stdenv.hostPlatform.system}.default
docker-compose docker-compose
@ -112,23 +121,24 @@ in {
networkmanager.enable = false; networkmanager.enable = false;
useNetworkd = true; useNetworkd = true;
vlans = { vlans = {
vlan23 = { id = 23; interface = "eno1"; }; vlan23 = {
id = 23;
interface = "eno1";
};
}; };
interfaces = { interfaces = {
eno1.useDHCP = true; eno1.useDHCP = true;
vlan23.ipv4.addresses = [{ address = "192.168.23.21"; prefixLength = 24; }]; vlan23.ipv4.addresses = [
{
address = "192.168.23.21";
prefixLength = 24;
}
];
}; };
}; };
# Enable sound with pipewire. # Enable sound with pipewire.
security.rtkit.enable = true; security.rtkit.enable = true;
services.pipewire = {
enable = true;
alsa.enable = true;
alsa.support32Bit = true;
pulse.enable = true;
};
services.pulseaudio.enable = false;
programs = { programs = {
mtr.enable = true; mtr.enable = true;
@ -136,6 +146,13 @@ in {
# List services that you want to enable: # List services that you want to enable:
services = { services = {
pipewire = {
enable = true;
alsa.enable = true;
alsa.support32Bit = true;
pulse.enable = true;
};
pulseaudio.enable = false;
atuin = { atuin = {
enable = true; enable = true;
host = "127.0.0.1"; host = "127.0.0.1";
@ -311,7 +328,11 @@ in {
"nix-tester.${home_domain}" "nix-tester.${home_domain}"
]; ];
listen = [ listen = [
{ port = https_port; addr = "0.0.0.0"; ssl = true; } {
port = https_port;
addr = "0.0.0.0";
ssl = true;
}
]; ];
enableACME = true; enableACME = true;
acmeRoot = null; acmeRoot = null;
@ -331,7 +352,13 @@ in {
}; };
}; };
"ab.${home_domain}" = { "ab.${home_domain}" = {
listen = [{ port = https_port; addr = "0.0.0.0"; ssl = true; }]; listen = [
{
port = https_port;
addr = "0.0.0.0";
ssl = true;
}
];
enableACME = true; enableACME = true;
acmeRoot = null; acmeRoot = null;
forceSSL = true; forceSSL = true;
@ -342,17 +369,41 @@ in {
''; '';
}; };
"atuin.${home_domain}" = { "atuin.${home_domain}" = {
listen = [{ port = https_port; addr = "0.0.0.0"; ssl = true; }]; listen = [
{
port = https_port;
addr = "0.0.0.0";
ssl = true;
}
];
enableACME = true; enableACME = true;
acmeRoot = null; acmeRoot = null;
forceSSL = true; forceSSL = true;
locations."/".proxyPass = "http://${backend_ip}:8888"; locations."/".proxyPass = "http://${backend_ip}:8888";
}; };
# budget.${home_domain} # budget.${home_domain}
"${config.services.firefly-iii.virtualHost}".listen = [{ port = 3005; addr = "0.0.0.0"; ssl = false; }]; "${config.services.firefly-iii.virtualHost}".listen = [
"${config.services.firefly-iii-data-importer.virtualHost}".listen = [{ port = 3006; addr = "0.0.0.0"; ssl = false; }]; {
port = 3005;
addr = "0.0.0.0";
ssl = false;
}
];
"${config.services.firefly-iii-data-importer.virtualHost}".listen = [
{
port = 3006;
addr = "0.0.0.0";
ssl = false;
}
];
"git.${home_domain}" = { "git.${home_domain}" = {
listen = [{ port = https_port; addr = "0.0.0.0"; ssl = true; }]; listen = [
{
port = https_port;
addr = "0.0.0.0";
ssl = true;
}
];
enableACME = true; enableACME = true;
acmeRoot = null; acmeRoot = null;
forceSSL = true; forceSSL = true;
@ -362,7 +413,13 @@ in {
''; '';
}; };
"id.${home_domain}" = { "id.${home_domain}" = {
listen = [{ port = https_port; addr = "0.0.0.0"; ssl = true; }]; listen = [
{
port = https_port;
addr = "0.0.0.0";
ssl = true;
}
];
enableACME = true; enableACME = true;
acmeRoot = null; acmeRoot = null;
forceSSL = true; forceSSL = true;
@ -374,7 +431,13 @@ in {
''; '';
}; };
"immich.${home_domain}" = { "immich.${home_domain}" = {
listen = [{ port = https_port; addr = "0.0.0.0"; ssl = true; }]; listen = [
{
port = https_port;
addr = "0.0.0.0";
ssl = true;
}
];
enableACME = true; enableACME = true;
acmeRoot = null; acmeRoot = null;
forceSSL = true; forceSSL = true;
@ -388,7 +451,13 @@ in {
''; '';
}; };
"immich-kiosk.${home_domain}" = { "immich-kiosk.${home_domain}" = {
listen = [{ port = https_port; addr = "0.0.0.0"; ssl = true; }]; listen = [
{
port = https_port;
addr = "0.0.0.0";
ssl = true;
}
];
enableACME = true; enableACME = true;
acmeRoot = null; acmeRoot = null;
forceSSL = true; forceSSL = true;
@ -403,7 +472,13 @@ in {
''; '';
}; };
"jellyfin.${home_domain}" = { "jellyfin.${home_domain}" = {
listen = [{ port = https_port; addr = "0.0.0.0"; ssl = true; }]; listen = [
{
port = https_port;
addr = "0.0.0.0";
ssl = true;
}
];
enableACME = true; enableACME = true;
acmeRoot = null; acmeRoot = null;
forceSSL = true; forceSSL = true;
@ -428,7 +503,13 @@ in {
''; '';
}; };
"mealie.${home_domain}" = { "mealie.${home_domain}" = {
listen = [{ port = https_port; addr = "0.0.0.0"; ssl = true; }]; listen = [
{
port = https_port;
addr = "0.0.0.0";
ssl = true;
}
];
enableACME = true; enableACME = true;
acmeRoot = null; acmeRoot = null;
forceSSL = true; forceSSL = true;
@ -438,7 +519,13 @@ in {
''; '';
}; };
"monitoring.${home_domain}" = { "monitoring.${home_domain}" = {
listen = [{ port = https_port; addr = "0.0.0.0"; ssl = true; }]; listen = [
{
port = https_port;
addr = "0.0.0.0";
ssl = true;
}
];
enableACME = true; enableACME = true;
acmeRoot = null; acmeRoot = null;
forceSSL = true; forceSSL = true;
@ -469,7 +556,13 @@ in {
''; '';
}; };
"readit.${home_domain}" = { "readit.${home_domain}" = {
listen = [{ port = https_port; addr = "0.0.0.0"; ssl = true; }]; listen = [
{
port = https_port;
addr = "0.0.0.0";
ssl = true;
}
];
enableACME = true; enableACME = true;
acmeRoot = null; acmeRoot = null;
forceSSL = true; forceSSL = true;
@ -622,20 +715,25 @@ in {
users.users.${username} = { users.users.${username} = {
isNormalUser = true; isNormalUser = true;
description = "Gene Liverman"; description = "Gene Liverman";
extraGroups = [ "docker" "podman" "networkmanager" "wheel" ]; extraGroups = [
"docker"
"podman"
"networkmanager"
"wheel"
];
linger = true; linger = true;
}; };
# Enable common container config files in /etc/containers # Enable common container config files in /etc/containers
virtualisation.containers.enable = true; virtualisation = {
containers.enable = true;
virtualisation.oci-containers.backend = "podman"; oci-containers.backend = "podman";
# Compose based apps were crashing with podman compose, so back to Docker... # Compose based apps were crashing with podman compose, so back to Docker...
virtualisation.docker.enable = true; docker = {
virtualisation.docker.package = pkgs.docker; enable = true;
package = pkgs.docker;
virtualisation.podman = { };
podman = {
enable = true; enable = true;
autoPrune.enable = true; autoPrune.enable = true;
#dockerCompat = true; #dockerCompat = true;
@ -644,4 +742,5 @@ in {
# Required for container networking to be able to use names. # Required for container networking to be able to use names.
defaultNetwork.settings.dns_enabled = true; defaultNetwork.settings.dns_enabled = true;
}; };
};
} }

View file

@ -1,42 +1,60 @@
# Do not modify this file! It was generated by nixos-generate-config # Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes # and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead. # to /etc/nixos/configuration.nix instead.
{ config, lib, modulesPath, ... }: {
config,
lib,
modulesPath,
...
}:
{ {
imports = imports = [
[ (modulesPath + "/installer/scan/not-detected.nix") (modulesPath + "/installer/scan/not-detected.nix")
]; ];
boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "usbhid" "usb_storage" "sd_mod" "sdhci_pci" ]; boot = {
boot.initrd.kernelModules = [ ]; initrd = {
boot.kernelModules = [ "kvm-intel" ]; availableKernelModules = [
boot.extraModulePackages = [ ]; "xhci_pci"
"ahci"
"usbhid"
"usb_storage"
"sd_mod"
"sdhci_pci"
];
kernelModules = [ ];
};
kernelModules = [ "kvm-intel" ];
extraModulePackages = [ ];
};
fileSystems."/" = fileSystems = {
{ device = "/dev/disk/by-uuid/0ee15ee9-37ea-448d-aa3b-23eb25994df0"; "/" = {
device = "/dev/disk/by-uuid/0ee15ee9-37ea-448d-aa3b-23eb25994df0";
fsType = "ext4"; fsType = "ext4";
}; };
fileSystems."/boot" = "/boot" = {
{ device = "/dev/disk/by-uuid/4814-3E47"; device = "/dev/disk/by-uuid/4814-3E47";
fsType = "vfat"; fsType = "vfat";
}; };
fileSystems."/var/lib/audiobookshelf" = "/var/lib/audiobookshelf" = {
{ device = "orico/audiobookshelf"; device = "orico/audiobookshelf";
fsType = "zfs"; fsType = "zfs";
}; };
fileSystems."/var/lib/postgresql" = "/var/lib/postgresql" = {
{ device = "orico/postgresql-data"; device = "orico/postgresql-data";
fsType = "zfs"; fsType = "zfs";
}; };
fileSystems."/var/lib/postgresql/16/pg_wal" = "/var/lib/postgresql/16/pg_wal" = {
{ device = "orico/postgresql-wal-16"; device = "orico/postgresql-wal-16";
fsType = "zfs"; fsType = "zfs";
}; };
};
# Second disk inside case # Second disk inside case
#fileSystems."/var/lib/postgresql" = #fileSystems."/var/lib/postgresql" =

View file

@ -1,3 +1,3 @@
{ ... }: { {
home.stateVersion = "23.11"; home.stateVersion = "23.11";
} }

View file

@ -1,6 +1,8 @@
{ config, pkgs, ... }: let { config, pkgs, ... }:
let
home_domain = "home.technicalissues.us"; home_domain = "home.technicalissues.us";
in { in
{
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
# Keeping empty for manual testing if needed # Keeping empty for manual testing if needed
]; ];
@ -55,7 +57,10 @@ in {
]; ];
metric_relabel_configs = [ metric_relabel_configs = [
{ {
source_labels = ["__name__" "nodename"]; source_labels = [
"__name__"
"nodename"
];
regex = "node_uname_info;0d869efa-prometheus-node-exporter"; regex = "node_uname_info;0d869efa-prometheus-node-exporter";
target_label = "nodename"; target_label = "nodename";
replacement = "homeassistant"; replacement = "homeassistant";
@ -221,7 +226,6 @@ in {
]; ];
}; };
settings = { settings = {
auth = { auth = {
# Set to true to disable (hide) the login form, useful if you use OAuth # Set to true to disable (hide) the login form, useful if you use OAuth
@ -363,7 +367,7 @@ in {
uptimekuma_grafana_api_key = { uptimekuma_grafana_api_key = {
owner = "vmagent"; owner = "vmagent";
restartUnits = [ "vmagent.service" ]; restartUnits = [ "vmagent.service" ];
sopsFile = ../../common/secrets.yaml; sopsFile = ../../../shared/secrets.yaml;
}; };
}; };
}; };
@ -378,4 +382,3 @@ in {
]; ];
}; };
} }

View file

@ -1,8 +1,15 @@
{ inputs, config, pkgs, username, ... }: { {
inputs,
config,
pkgs,
username,
...
}:
{
imports = [ imports = [
./hardware-configuration.nix ./hardware-configuration.nix
../../common/linux/flatpaks.nix ../../../shared/nixos/flatpaks.nix
../../common/linux/ripping.nix ../../../shared/nixos/ripping.nix
]; ];
system.stateVersion = "23.05"; system.stateVersion = "23.05";
@ -108,9 +115,13 @@
boinc.enable = true; boinc.enable = true;
bpftune.enable = true; bpftune.enable = true;
dbus.implementation = "broker"; dbus.implementation = "broker";
desktopManager.cosmic.enable = false; desktopManager = {
desktopManager.cosmic.xwayland.enable = false; cosmic = {
desktopManager.plasma6.enable = true; enable = false;
xwayland.enable = false;
};
plasma6.enable = true;
};
displayManager.cosmic-greeter.enable = false; displayManager.cosmic-greeter.enable = false;
displayManager.sddm = { displayManager.sddm = {
enable = true; enable = true;
@ -179,7 +190,15 @@
users.users.${username} = { users.users.${username} = {
isNormalUser = true; isNormalUser = true;
description = "Gene Liverman"; description = "Gene Liverman";
extraGroups = [ "adbusers" "dialout" "docker" "input" "networkmanager" "podman" "wheel" ]; extraGroups = [
"adbusers"
"dialout"
"docker"
"input"
"networkmanager"
"podman"
"wheel"
];
packages = with pkgs; [ packages = with pkgs; [
tailscale-systray tailscale-systray
]; ];

View file

@ -1,4 +1,5 @@
{ pkgs, ... }: { { pkgs, ... }:
{
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
gnome.gnome-tweaks gnome.gnome-tweaks
gnome.nautilus gnome.nautilus
@ -33,4 +34,3 @@
}; };
}; };
} }

View file

@ -1,35 +1,55 @@
# Do not modify this file! It was generated by nixos-generate-config # Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes # and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead. # to /etc/nixos/configuration.nix instead.
{ config, lib, modulesPath, pkgs, ... }: {
config,
lib,
modulesPath,
...
}:
{ {
imports = imports = [
[ (modulesPath + "/installer/scan/not-detected.nix") (modulesPath + "/installer/scan/not-detected.nix")
]; ];
boot.initrd.availableKernelModules = [ "xhci_pci" "nvme" "usb_storage" "sd_mod" "rtsx_pci_sdmmc" ]; boot = {
initrd = {
availableKernelModules = [
"xhci_pci"
"nvme"
"usb_storage"
"sd_mod"
"rtsx_pci_sdmmc"
];
# boot.kernelPackages = pkgs.linuxPackages_zen; # boot.kernelPackages = pkgs.linuxPackages_zen;
boot.initrd.kernelModules = [ ]; kernelModules = [ ];
boot.kernelModules = [ "kvm-intel" "sg" ]; };
boot.kernelParams = [ kernelModules = [
"kvm-intel"
"sg"
];
kernelParams = [
"i915.enable_fbc=1" "i915.enable_fbc=1"
"i915.enable_psr=2" "i915.enable_psr=2"
]; ];
boot.extraModulePackages = [ ]; extraModulePackages = [ ];
};
fileSystems."/" = fileSystems = {
{ device = "/dev/disk/by-uuid/eb9a2c7e-ae61-4d06-9464-49b98d576f7c"; "/" = {
device = "/dev/disk/by-uuid/eb9a2c7e-ae61-4d06-9464-49b98d576f7c";
fsType = "ext4"; fsType = "ext4";
}; };
fileSystems."/boot" = "/boot" = {
{ device = "/dev/disk/by-uuid/924D-E7A4"; device = "/dev/disk/by-uuid/924D-E7A4";
fsType = "vfat"; fsType = "vfat";
}; };
};
swapDevices = swapDevices = [
[ { device = "/dev/disk/by-uuid/166d24ca-401c-492e-845d-bb1d0d6d7d86"; } { device = "/dev/disk/by-uuid/166d24ca-401c-492e-845d-bb1d0d6d7d86"; }
]; ];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking # Enables DHCP on each ethernet and wireless interface. In case of scripted networking

View file

@ -1,21 +1,24 @@
{ pkgs, ... }: { { pkgs, ... }:
{
home.stateVersion = "23.11"; home.stateVersion = "23.11";
imports = [ imports = [
../../common/all-gui.nix ../../../shared/home/general/all-gui.nix
../../common/linux/apps/hexchat.nix ../../../shared/home/linux/apps/hexchat.nix
../../common/linux/apps/pidgin.nix ../../../shared/home/linux/apps/pidgin.nix
../../common/linux/apps/tilix.nix ../../../shared/home/linux/apps/tilix.nix
../../common/linux/apps/waybar.nix ../../../shared/home/linux/apps/waybar.nix
../../common/linux/apps/xfce4-terminal.nix ../../../shared/home/linux/apps/xfce4-terminal.nix
]; ];
home.file = { home.file = {
".config/hypr/frappe.conf".source = (pkgs.fetchFromGitHub { ".config/hypr/frappe.conf".source =
pkgs.fetchFromGitHub {
owner = "catppuccin"; owner = "catppuccin";
repo = "hyprland"; repo = "hyprland";
rev = "99a88fd21fac270bd999d4a26cf0f4a4222c58be"; rev = "99a88fd21fac270bd999d4a26cf0f4a4222c58be";
hash = "sha256-07B5QmQmsUKYf38oWU3+2C6KO4JvinuTwmW1Pfk8CT8="; hash = "sha256-07B5QmQmsUKYf38oWU3+2C6KO4JvinuTwmW1Pfk8CT8=";
} + "/themes/frappe.conf"); }
+ "/themes/frappe.conf";
}; };
programs = { programs = {

Some files were not shown because too many files have changed in this diff Show more