I'm Sorry

This commit is contained in:
ChaotiCryptidz 2021-12-20 23:48:26 +00:00
commit 8c7bdaf9f7
28 changed files with 444 additions and 0 deletions

2
.gitignore vendored Normal file
View file

@ -0,0 +1,2 @@
networking.nix
result

60
flake.lock Normal file
View file

@ -0,0 +1,60 @@
{
"nodes": {
"home-manager": {
"inputs": {
"nixpkgs": "nixpkgs"
},
"locked": {
"lastModified": 1639891275,
"narHash": "sha256-2IMLVTtOHV9kBsirGPRpo8NE48Mjq20iXN7l7uy0YjE=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "3db603677509eb0b8c396a3234b1d4b70d023894",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "home-manager",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1640012693,
"narHash": "sha256-D07/CBpeqsbXKb96NQliVqgB3ytLL3XfBGBrm/eaUxU=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "7dcb25726b3a5ed3896fe38362f631ca5bed4a6e",
"type": "github"
},
"original": {
"id": "nixpkgs",
"type": "indirect"
}
},
"nixpkgs_2": {
"locked": {
"lastModified": 1639966735,
"narHash": "sha256-FmVGFiyqE+pjQUTCTY0H75hqrnBnbEf3VVRB4dsd4KI=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "d87b72206aadebe6722944f541f55d33fd7046fb",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"root": {
"inputs": {
"home-manager": "home-manager",
"nixpkgs": "nixpkgs_2"
}
}
},
"root": "root",
"version": 7
}

10
flake.nix Normal file
View file

@ -0,0 +1,10 @@
{
description = "NixOS configuration";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
home-manager.url = "github:nix-community/home-manager";
};
outputs = { ... }@inputs: import ./outputs.nix inputs;
}

1
home/base/example.nix Normal file
View file

@ -0,0 +1 @@
{ ... }: { }

18
home/default.nix Normal file
View file

@ -0,0 +1,18 @@
{ lib, tree, ... }: with lib; let
wrapImports = imports: mapAttrs
(_: paths: { config, ... }: {
config.home-manager.users.chaoticryptidz = {
imports = singleton paths;
};
})
imports;
dirImports = wrapImports tree.prev;
in
dirImports // {
base = {
imports = [
dirImports.base
tree.prev.nixos
];
};
}

13
home/gui/gtk.nix Normal file
View file

@ -0,0 +1,13 @@
{ config, pkgs, ... }: {
gtk = {
enable = true;
iconTheme = {
name = "Papirus-Dark";
package = pkgs.papirus-icon-theme;
};
theme = {
name = "Adementary-dark";
package = pkgs.adementary-theme;
};
};
}

View file

@ -0,0 +1,6 @@
{ config, ... }: {
xsession.preferStatusNotifierItems = true;
services = {
network-manager-applet.enable = true;
};
}

6
home/nixos.nix Normal file
View file

@ -0,0 +1,6 @@
{ config, ... }: {
users.users.chaoticryptidz = {
isNormalUser = true;
extraGroups = [ "wheel" ];
};
}

19
hosts/default.nix Normal file
View file

@ -0,0 +1,19 @@
{ home-manager, nixpkgs, tree, ... }@inputs: let
defaultModules = [
home-manager.nixosModules.home-manager
tree.impure.profiles.base
];
defaultSpecialArgs = {
tree = tree.impure;
pureTree = tree.pure;
inherit inputs;
};
in {
nixos = nixpkgs.lib.nixosSystem {
specialArgs = defaultSpecialArgs;
system = "x86_64-linux";
modules = defaultModules ++ [
./nixos.nix
];
};
}

44
hosts/nixos.nix Normal file
View file

@ -0,0 +1,44 @@
{ tree, config, pkgs, lib, ... }:
{
imports = with tree; [
profiles.dev
profiles.gui
profiles.x11
profiles.xfce
profiles.laptop
profiles.pulse
profiles.network_manager
home.gui
home.network_manager
];
boot = {
loader = {
systemd-boot.enable = true;
efi.canTouchEfiVariables = true;
};
initrd.availableKernelModules = [ "xhci_pci" "ahci" "nvme" "usb_storage" "sd_mod" "rtsx_pci_sdmmc" ];
kernelModules = [ "kvm-intel" ];
};
powerManagement.cpuFreqGovernor = lib.mkDefault "powersave";
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
hardware.enableRedistributableFirmware = true;
networking.hostName = "nixos";
fileSystems = {
"/" = {
device = "/dev/disk/by-uuid/491ec94c-5e6a-4d23-a2a6-bcf4971a6e7b";
fsType = "ext4";
};
"/boot" = {
device = "/dev/disk/by-uuid/61F3-FD84";
fsType = "vfat";
};
};
system.stateVersion = "21.11";
}

18
outputs.nix Normal file
View file

@ -0,0 +1,18 @@
{ nixpkgs, home-manager, ... }@inputs: let
mkTree = import ./tree.nix { inherit (nixpkgs) lib; };
tree = mkTree {
inherit inputs;
folder = ./.;
config = {
"profiles/*".functor.enable = true;
"home".evaluateDefault = true;
"home/*".functor.enable = true;
};
};
in {
legacyPackages.tree = tree;
nixosConfigurations = import ./hosts {
nixosSystem = nixpkgs.lib.nixosSystem;
inherit nixpkgs home-manager tree;
};
}

View file

@ -0,0 +1,11 @@
{ fetchzip }: fetchzip {
name="comic-code-1.0";
url = "https://cdn.discordapp.com/attachments/780878889924165652/919700644347142214/COCOD.ZIP";
sha256 = "sha256-MzEkMAopjpQBk24nRVDAtGNeF6f61XGww4rya2cU8TU=";
postFetch = ''
mkdir -p $out/share/fonts
unzip -j $downloadedFile \*.otf -d $out/share/fonts/truetype
'';
}

3
overlay/default.nix Normal file
View file

@ -0,0 +1,3 @@
final: prev: {
comic-code = final.callPackage ./comic-code { };
}

7
profiles/base/access.nix Normal file
View file

@ -0,0 +1,7 @@
{ tree, config, lib, ... }: {
security.sudo.wheelNeedsPassword = lib.mkForce false;
imports = with tree; [
home.base
];
}

View file

@ -0,0 +1,3 @@
{ ... }: {
hardware.enableRedistributableFirmware = true;
}

17
profiles/base/home.nix Normal file
View file

@ -0,0 +1,17 @@
{ inputs, tree, config, lib, ... }: with lib; {
options.home-manager.users = mkOption {
type = types.attrsOf (types.submoduleWith {
modules = [ ];
specialArgs = {
inherit inputs tree;
nixos = config;
};
});
};
config = {
home-manager = {
useGlobalPkgs = true;
useUserPackages = true;
};
};
}

7
profiles/base/locale.nix Normal file
View file

@ -0,0 +1,7 @@
{ config, ... }: {
i18n.defaultLocale = "en_GB.UTF-8";
console = {
font = "Lat2-Terminus16";
keyMap = "uk";
};
}

19
profiles/base/nix.nix Normal file
View file

@ -0,0 +1,19 @@
{ inputs, config, lib, ... }: {
nix = {
nixPath = [
"nixpkgs=${inputs.nixpkgs}"
];
extraOptions = lib.optionalString (lib.versionAtLeast config.nix.package.version "2.4") ''
experimental-features = nix-command flakes
'';
trustedUsers = [ "root" "@wheel" ];
};
nixpkgs = {
config = {
allowUnfree = true;
};
overlays = [
(import ../../overlay)
];
};
}

View file

@ -0,0 +1,3 @@
{ config, ... }: {
programs.mtr.enable = true;
}

1
profiles/dev/default.nix Normal file
View file

@ -0,0 +1 @@
{ ... }: { }

18
profiles/gui/default.nix Normal file
View file

@ -0,0 +1,18 @@
{ config, pkgs, ... }: {
fonts.fonts = with pkgs; [
iosevka
comic-code
];
environment.systemPackages = with pkgs; [
git
nano
curl
wget
vscode
tdesktop
vivaldi
vivaldi-ffmpeg-codecs
vivaldi-widevine
];
}

View file

@ -0,0 +1,3 @@
{ config, ... }: {
services.xserver.libinput.enable = true;
}

View file

@ -0,0 +1,10 @@
{ config, lib, ... }: {
networking = {
networkmanager = {
enable = true;
connectionConfig = {
"ipv6.ip6-privacy" = lib.mkForce 0;
};
};
};
}

View file

@ -0,0 +1,4 @@
{ config, ... }: {
sound.enable = true;
hardware.pulseaudio.enable = true;
}

4
profiles/x11/default.nix Normal file
View file

@ -0,0 +1,4 @@
{ config, ... }: {
services.xserver.enable = true;
services.xserver.layout = "gb";
}

View file

@ -0,0 +1,6 @@
{ config, ... }: {
services.xserver = {
desktopManager.xfce.enable = true;
displayManager.defaultSession = "xfce";
};
}

10
rebuild.sh Executable file
View file

@ -0,0 +1,10 @@
#!/usr/bin/env bash
set -x
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
FIRST_ARG="${1:-switch}"
shift
nixos-rebuild --flake "${SCRIPT_DIR}#$(hostname)" ${FIRST_ARG} $@

121
tree.nix Normal file
View file

@ -0,0 +1,121 @@
{ lib }: { config, folder, inputs, ... }@args: with lib; let
pureTreeGrab = { base, path }: let
realPath = toString path;
dirContents = builtins.readDir path;
isDirectory = entry: dirContents."${entry}" == "directory";
isHidden = entry: hasPrefix "." entry;
isDir = entry: _: (isDirectory entry) && !(isHidden entry);
directories = filterAttrs isDir dirContents;
isNixFile = entry: _: let
result = builtins.match "(.*)\\.nix" entry;
in result != null && builtins.length result > 0;
nixFiles = filterAttrs isNixFile dirContents;
getPath = entry: "${realPath}/${entry}";
getPaths = entries: mapAttrs' (n: v:
nameValuePair (removeSuffix ".nix" n) (getPath n)
) entries;
nixFilePaths = getPaths nixFiles;
dirPaths = getPaths directories;
recursedPaths = mapAttrs (_: fullPath: pureTreeGrab {
inherit base;
path = fullPath;
}) dirPaths;
contents = recursedPaths // nixFilePaths;
in contents;
configTreeStruct = { config, ... }: {
options.treeConfig = mkOption {
type = with types; attrsOf (submodule ({ name, options, config, ... }: {
options = {
evaluateDefault = mkOption {
type = types.bool;
description = "Replace the contents of this branch or leaf with those provided by the evaluation of default.nix.";
default = false;
};
aliasDefault = mkOption {
type = types.bool;
description = "Replace the contents of this branch or leaf with the default.nix.";
default = false;
};
excludes = mkOption {
type = types.listOf types.str;
description = "Exclude files or folders from the recurser.";
default = [];
};
functor = {
enable = mkOption {
type = types.bool;
description = "Provide a functor for the path provided";
default = false;
};
external = mkOption {
type = types.listOf types.unspecified;
description = "Add external imports into the functor.";
default = [];
};
excludes = mkOption {
type = types.listOf types.str;
description = "Exclude files or folders from the functor.";
default = [];
};
};
};
}));
};
config.treeConfig = {
"*" = {};
};
};
configTree.treeConfig = config;
configTreeModule = (evalModules {
modules = [
configTreeStruct
configTree
];
}).config.treeConfig;
mapAttrsRecursive = f: set: let
recurse = path: set: let
g = name: value: if isAttrs value
then f (path ++ [name]) (recurse (path ++ [name]) value)
else f (path ++ [name]) value;
in mapAttrs g set;
in recurse [] set;
getPathString = path: concatStringsSep "/" path;
getConfig = path: default: configTreeModule.${getPathString path} or default;
revtail = path: sublist 0 (length path - 1) path;
getConfigRecursive = path: let
parentPath = revtail path;
in getConfig (path ++ singleton "*") (getConfigRecursive parentPath);
processLeaves = tree: config: mapAttrsRecursive (path: value: let
pathString = getPathString path;
leafConfig = getConfig path (getConfigRecursive (revtail path));
processConfig = path: value: let
processFunctor = prev: prev // {
__functor = self: { ... }: {
imports = attrValues (removeAttrs prev leafConfig.functor.excludes) ++ leafConfig.functor.external;
};
};
processAliasDefault = prev: prev.default;
processDefault = prev: import prev.default (args // {
inherit lib;
tree = {
prev = removeAttrs prev (singleton "default");
pure = pureTree;
impure = impureTree;
};
});
processExcludes = prev: removeAttrs prev leafConfig.excludes;
processes = optionals (isAttrs value) (
optional (leafConfig.excludes != []) processExcludes
++ optional leafConfig.evaluateDefault processDefault
++ optional leafConfig.aliasDefault processAliasDefault
++ optional leafConfig.functor.enable processFunctor
);
in pipe value processes;
in processConfig path value) tree;
pureTree = pureTreeGrab { base = folder; path = folder; };
impureTree = processLeaves pureTree configTreeModule;
in {
config = configTreeModule;
pure = pureTree;
impure = impureTree;
}