1 Commits

Author SHA1 Message Date
4ad4814bed Initial pi config 2023-12-03 23:17:30 +00:00
52 changed files with 717 additions and 585 deletions

60
flake.lock generated
View File

@ -45,11 +45,11 @@
"firefox-gnome-theme": { "firefox-gnome-theme": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1702138393, "lastModified": 1701370547,
"narHash": "sha256-2jRm1yzX+gKpSCtdpYt1olIgWVEkJnS7FeK00o9X1ko=", "narHash": "sha256-pCtPIcRnMMJOwAlNh5qTO00uw/PBThIIzjMCRcCyHYw=",
"owner": "rafaelmardojai", "owner": "rafaelmardojai",
"repo": "firefox-gnome-theme", "repo": "firefox-gnome-theme",
"rev": "d2e6cfdd63651ae8168e5905d94138f406580dd6", "rev": "ec9421f82d922b7293ffd45a47f7abdee80038c6",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -86,11 +86,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1702195709, "lastModified": 1700814205,
"narHash": "sha256-+zRjWkm5rKqQ57PuLZ3JF3xi3vPMiOJzItb1m/43Cq4=", "narHash": "sha256-lWqDPKHRbQfi+zNIivf031BUeyciVOtwCwTjyrhDB5g=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "6761b8188b860f374b457eddfdb05c82eef9752f", "rev": "aeb2232d7a32530d3448318790534d196bf9427a",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -100,6 +100,21 @@
"type": "github" "type": "github"
} }
}, },
"nixos-hardware": {
"locked": {
"lastModified": 1701598471,
"narHash": "sha256-kHdJ2qc4qKeMTzUIHEcP41ah/dBIhCgvWgrjllt2G78=",
"owner": "NixOS",
"repo": "nixos-hardware",
"rev": "a89745edd5f657e2e5be5ed1bea86725ca78d92e",
"type": "github"
},
"original": {
"owner": "NixOS",
"repo": "nixos-hardware",
"type": "github"
}
},
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1677676435, "lastModified": 1677676435,
@ -118,11 +133,11 @@
}, },
"nixpkgs_2": { "nixpkgs_2": {
"locked": { "locked": {
"lastModified": 1702233072, "lastModified": 1701389149,
"narHash": "sha256-H5G2wgbim2Ku6G6w+NSaQaauv6B6DlPhY9fMvArKqRo=", "narHash": "sha256-rU1suTIEd5DGCaAXKW6yHoCfR1mnYjOXQFOaH7M23js=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "781e2a9797ecf0f146e81425c822dca69fe4a348", "rev": "5de0b32be6e85dc1a9404c75131316e4ffbc634c",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -136,19 +151,19 @@
"agenix": "agenix", "agenix": "agenix",
"firefox-gnome-theme": "firefox-gnome-theme", "firefox-gnome-theme": "firefox-gnome-theme",
"home-manager": "home-manager_2", "home-manager": "home-manager_2",
"nixos-hardware": "nixos-hardware",
"nixpkgs": "nixpkgs_2", "nixpkgs": "nixpkgs_2",
"thunderbird-gnome-theme": "thunderbird-gnome-theme", "thunderbird-gnome-theme": "thunderbird-gnome-theme"
"wallpapers": "wallpapers"
} }
}, },
"thunderbird-gnome-theme": { "thunderbird-gnome-theme": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1701889124, "lastModified": 1699285862,
"narHash": "sha256-K+6oh7+J6RDBFkxphY/pzf0B+q5+IY54ZMKZrFSKXlc=", "narHash": "sha256-3TQYBJAeQ2fPFxQnD5iKRKKWFlN3GJhz1EkdwE+4m0k=",
"owner": "rafaelmardojai", "owner": "rafaelmardojai",
"repo": "thunderbird-gnome-theme", "repo": "thunderbird-gnome-theme",
"rev": "966e9dd54bd2ce9d36d51cd6af8c3bac7a764a68", "rev": "a899ca12204d19f4834fbd092aa5bb05dc4bd127",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -156,23 +171,6 @@
"repo": "thunderbird-gnome-theme", "repo": "thunderbird-gnome-theme",
"type": "github" "type": "github"
} }
},
"wallpapers": {
"flake": false,
"locked": {
"lastModified": 1702336410,
"narHash": "sha256-DyC9Ro5tj3X0P2M24gZdpTkFGuZEy9JXrFLUav/b5H0=",
"ref": "refs/heads/master",
"rev": "dd78ed7242af54c33e8304feee322a71da575abd",
"shallow": true,
"type": "git",
"url": "ssh://git@git.vimium.com/jordan/wallpapers.git"
},
"original": {
"shallow": true,
"type": "git",
"url": "ssh://git@git.vimium.com/jordan/wallpapers.git"
}
} }
}, },
"root": "root", "root": "root",

112
flake.nix
View File

@ -1,8 +1,9 @@
{ {
description = "NixOS system configuration"; description = "NixOS/Darwin system configuration";
inputs = { inputs = {
nixpkgs.url = "nixpkgs/nixos-23.11"; nixpkgs.url = "nixpkgs/nixos-23.11";
nixos-hardware.url = "github:NixOS/nixos-hardware";
agenix.url = "github:ryantm/agenix"; agenix.url = "github:ryantm/agenix";
home-manager = { home-manager = {
url = "github:nix-community/home-manager/release-23.11"; url = "github:nix-community/home-manager/release-23.11";
@ -16,55 +17,70 @@
url = "github:rafaelmardojai/thunderbird-gnome-theme"; url = "github:rafaelmardojai/thunderbird-gnome-theme";
flake = false; flake = false;
}; };
wallpapers = {
url = "git+ssh://git@git.vimium.com/jordan/wallpapers.git?shallow=1";
flake = false;
};
}; };
outputs = inputs @ { self, nixpkgs, agenix, home-manager, ... }: outputs = inputs @ { self, nixpkgs, agenix, home-manager, ... }:
let let
nixpkgsForSystem = system: inputs.nixpkgs; inherit (lib) attrValues;
overlays = [ inherit (lib.my) mapModules mapModulesRec;
agenix.overlays.default
(import ./overlays/gnome.nix)
];
commonModules = [
agenix.nixosModules.age
home-manager.nixosModule
./modules
];
nixosSystem = system: name:
let
nixpkgs = nixpkgsForSystem system;
lib = (import nixpkgs { inherit overlays system; }).lib;
in
inputs.nixpkgs.lib.nixosSystem {
inherit lib system;
specialArgs = { modulesPath = toString (nixpkgs + "/nixos/modules"); inherit inputs; };
baseModules = import (nixpkgs + "/nixos/modules/module-list.nix");
modules = commonModules ++ [
({ config, ... }:
{
nixpkgs.pkgs = import nixpkgs {
inherit overlays system;
config.allowUnfree = true;
};
networking.hostName = name;
nix = {
extraOptions = "experimental-features = nix-command flakes";
};
})
./hosts/${name}
];
};
nixosConfigurations = {
atlas = nixosSystem "x86_64-linux" "atlas";
eos = nixosSystem "x86_64-linux" "eos";
helios = nixosSystem "x86_64-linux" "helios";
odyssey = nixosSystem "x86_64-linux" "odyssey";
};
in
{ inherit nixosConfigurations; };
}
system = "x86_64-linux";
mkPkgs = pkgs: extraOverlays:
import pkgs {
inherit system;
config.allowUnfree = true;
overlays = extraOverlays ++ (lib.attrValues self.overlays);
};
pkgs = mkPkgs nixpkgs [];
lib = nixpkgs.lib.extend (self: super: {
my = import ./lib {
inherit pkgs inputs;
lib = self;
};
});
in {
lib = lib.my;
nixosConfigurations = {
atlas = nixpkgs.lib.nixosSystem {
modules = [
home-manager.nixosModules.home-manager
{ nixpkgs.overlays = [ (import ./overlays/gnome.nix) ]; }
(import ./modules)
./hosts/atlas
];
specialArgs = { inherit lib inputs; };
};
eos = nixpkgs.lib.nixosSystem {
modules = [
home-manager.nixosModules.home-manager
{ nixpkgs.overlays = [ (import ./overlays/gnome.nix) ]; }
(import ./modules)
./hosts/eos
];
specialArgs = { inherit lib inputs; };
};
helios = nixpkgs.lib.nixosSystem {
modules = [
home-manager.nixosModules.home-manager
{ nixpkgs.overlays = [ (import ./overlays/gnome.nix) ]; }
(import ./modules)
./hosts/helios
];
specialArgs = { inherit lib inputs; };
};
odyssey = nixpkgs.lib.nixosSystem {
modules = [
home-manager.nixosModules.home-manager
agenix.nixosModules.default
{ nixpkgs.overlays = [ (import ./overlays/gnome.nix) ]; }
(import ./modules)
./hosts/odyssey
];
specialArgs = { inherit lib inputs; };
};
};
};
}

View File

@ -1,5 +1,6 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib.my;
{ {
imports = [ imports = [
./hardware-configuration.nix ./hardware-configuration.nix

View File

@ -1,66 +1,70 @@
# 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, pkgs, modulesPath, ... }: { config, lib, pkgs, modulesPath, ... }:
{ {
imports = [ imports =
(modulesPath + "/installer/scan/not-detected.nix") [ (modulesPath + "/installer/scan/not-detected.nix")
]; ];
boot = { boot.initrd.availableKernelModules = [ "xhci_pci" "ehci_pci" "ahci" "usbhid" "usb_storage" "sd_mod" ];
initrd.availableKernelModules = [ "xhci_pci" "ehci_pci" "ahci" "usbhid" "usb_storage" "sd_mod" ]; boot.initrd.kernelModules = [ ];
initrd.kernelModules = [ ]; boot.initrd.supportedFilesystems = [ "zfs" ];
initrd.supportedFilesystems = [ "zfs" ]; boot.kernelModules = [ "kvm-intel" ];
kernelModules = [ "kvm-intel" ]; boot.kernelParams = [ "elevator=none" ];
kernelParams = [ "elevator=none" ]; boot.extraModulePackages = [ ];
extraModulePackages = [ ]; boot.supportedFilesystems = [ "zfs" ];
supportedFilesystems = [ "zfs" ];
};
fileSystems."/" = { fileSystems."/" =
device = "rpool/system/root"; { device = "rpool/system/root";
fsType = "zfs"; fsType = "zfs";
}; };
fileSystems."/home" = { fileSystems."/home" =
device = "rpool/user/home"; { device = "rpool/user/home";
fsType = "zfs"; fsType = "zfs";
}; };
fileSystems."/nix" = { fileSystems."/nix" =
device = "rpool/local/nix"; { device = "rpool/local/nix";
fsType = "zfs"; fsType = "zfs";
}; };
fileSystems."/tmp" = { fileSystems."/tmp" =
device = "rpool/local/tmp"; { device = "rpool/local/tmp";
fsType = "zfs"; fsType = "zfs";
}; };
fileSystems."/var" = { fileSystems."/var" =
device = "rpool/system/var"; { device = "rpool/system/var";
fsType = "zfs"; fsType = "zfs";
}; };
fileSystems."/var/log" = { fileSystems."/var/log" =
device = "rpool/system/var/log"; { device = "rpool/system/var/log";
fsType = "zfs"; fsType = "zfs";
}; };
fileSystems."/var/tmp" = { fileSystems."/var/tmp" =
device = "rpool/system/var/tmp"; { device = "rpool/system/var/tmp";
fsType = "zfs"; fsType = "zfs";
}; };
fileSystems."/boot" = { fileSystems."/boot" =
device = "/dev/disk/by-uuid/00B2-0384"; { device = "/dev/disk/by-uuid/00B2-0384";
fsType = "vfat"; fsType = "vfat";
}; };
swapDevices = [ ]; swapDevices = [ ];
# 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.useDHCP = lib.mkDefault true;
# networking.interfaces.enp0s25.useDHCP = lib.mkDefault true; # networking.interfaces.enp0s25.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
} }

View File

@ -1,5 +1,7 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib;
with lib.my;
{ {
time.timeZone = "Europe/London"; time.timeZone = "Europe/London";

View File

@ -1,5 +1,6 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib.my;
{ {
imports = [ imports = [
./hardware-configuration.nix ./hardware-configuration.nix

View File

@ -1,65 +1,71 @@
# 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, pkgs, modulesPath, ... }: { config, lib, pkgs, modulesPath, ... }:
{ {
imports = [ imports =
(modulesPath + "/installer/scan/not-detected.nix") [ (modulesPath + "/installer/scan/not-detected.nix")
]; ];
boot = { boot.initrd.availableKernelModules = [ "ehci_pci" "ahci" "usb_storage" "sd_mod" "sdhci_pci" ];
initrd.availableKernelModules = [ "ehci_pci" "ahci" "usb_storage" "sd_mod" "sdhci_pci" ]; boot.initrd.kernelModules = [ ];
initrd.kernelModules = [ ]; boot.initrd.supportedFilesystems = [ "zfs" ];
initrd.supportedFilesystems = [ "zfs" ]; boot.kernelModules = [ ];
kernelModules = [ ]; boot.kernelParams = [ "elevator=none" ];
kernelParams = [ "elevator=none" ]; boot.extraModulePackages = [ ];
extraModulePackages = [ ]; boot.supportedFilesystems = [ "zfs" ];
supportedFilesystems = [ "zfs" ];
};
fileSystems."/" = { fileSystems."/" =
device = "rpool/system/root"; { device = "rpool/system/root";
fsType = "zfs"; fsType = "zfs";
}; };
fileSystems."/home" = { fileSystems."/home" =
device = "rpool/user/home"; { device = "rpool/user/home";
fsType = "zfs"; fsType = "zfs";
}; };
fileSystems."/nix" = { fileSystems."/nix" =
device = "rpool/local/nix"; { device = "rpool/local/nix";
fsType = "zfs"; fsType = "zfs";
}; };
fileSystems."/tmp" = { fileSystems."/tmp" =
device = "rpool/local/tmp"; { device = "rpool/local/tmp";
fsType = "zfs"; fsType = "zfs";
}; };
fileSystems."/var" = { fileSystems."/var" =
device = "rpool/system/var"; { device = "rpool/system/var";
fsType = "zfs"; fsType = "zfs";
}; };
fileSystems."/var/log" = { fileSystems."/var/log" =
device = "rpool/system/var/log"; { device = "rpool/system/var/log";
fsType = "zfs"; fsType = "zfs";
}; };
fileSystems."/var/tmp" = { fileSystems."/var/tmp" =
device = "rpool/system/var/tmp"; { device = "rpool/system/var/tmp";
fsType = "zfs"; fsType = "zfs";
}; };
fileSystems."/boot" = { fileSystems."/boot" =
device = "/dev/disk/by-uuid/28E6-5509"; { device = "/dev/disk/by-uuid/28E6-5509";
fsType = "vfat"; fsType = "vfat";
}; };
swapDevices = [ ]; swapDevices = [ ];
# 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.useDHCP = lib.mkDefault true;
# networking.interfaces.enp0s25.useDHCP = lib.mkDefault true;
# networking.interfaces.wlp3s0.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
} }

View File

@ -1,5 +1,6 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib.my;
{ {
imports = [ imports = [
./hardware-configuration.nix ./hardware-configuration.nix

View File

@ -1,61 +1,65 @@
# 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, pkgs, modulesPath, ... }: { config, lib, pkgs, modulesPath, ... }:
{ {
imports = [ imports =
(modulesPath + "/installer/scan/not-detected.nix") [ (modulesPath + "/installer/scan/not-detected.nix")
]; ];
boot = { boot.initrd.availableKernelModules = [ "ehci_pci" "ahci" "usbhid" "usb_storage" "sd_mod" "sr_mod" "zfs" ];
initrd.availableKernelModules = [ "ehci_pci" "ahci" "usbhid" "usb_storage" "sd_mod" "sr_mod" "zfs" ]; boot.initrd.kernelModules = [ ];
initrd.kernelModules = [ ]; boot.initrd.supportedFilesystems = [ "zfs" ];
initrd.supportedFilesystems = [ "zfs" ]; boot.kernelModules = [ "kvm-intel" ];
kernelModules = [ "kvm-intel" ]; boot.kernelParams = [ "elevator=none" ];
kernelParams = [ "elevator=none" ]; boot.extraModulePackages = [ ];
extraModulePackages = [ ]; boot.supportedFilesystems = [ "zfs" ];
supportedFilesystems = [ "zfs" ];
};
fileSystems."/" = { fileSystems."/" =
device = "rpool/system/root"; { device = "rpool/system/root";
fsType = "zfs"; fsType = "zfs";
}; };
fileSystems."/home" = { fileSystems."/home" =
device = "rpool/user/home"; { device = "rpool/user/home";
fsType = "zfs"; fsType = "zfs";
}; };
fileSystems."/nix" = { fileSystems."/nix" =
device = "rpool/local/nix"; { device = "rpool/local/nix";
fsType = "zfs"; fsType = "zfs";
}; };
fileSystems."/tmp" = { fileSystems."/tmp" =
device = "rpool/local/tmp"; { device = "rpool/local/tmp";
fsType = "zfs"; fsType = "zfs";
}; };
fileSystems."/var/log" = { fileSystems."/var/log" =
device = "rpool/system/var/log"; { device = "rpool/system/var/log";
fsType = "zfs"; fsType = "zfs";
}; };
fileSystems."/var/tmp" = { fileSystems."/var/tmp" =
device = "rpool/system/var/tmp"; { device = "rpool/system/var/tmp";
fsType = "zfs"; fsType = "zfs";
}; };
fileSystems."/boot" = { fileSystems."/boot" =
device = "/dev/sda1"; { device = "/dev/sda1";
fsType = "ext2"; fsType = "ext2";
}; };
swapDevices = [ ]; swapDevices = [ ];
# 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.useDHCP = lib.mkDefault true;
# networking.interfaces.eno1.useDHCP = lib.mkDefault true; # networking.interfaces.eno1.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
} }

View File

@ -1,4 +1,4 @@
From daebf42bd955f6f8d971af967c675e4e339cb0b2 Mon Sep 17 00:00:00 2001 From c16be6b3b4da5a55e3ff4258ada123b5f03757e5 Mon Sep 17 00:00:00 2001
From: Jordan Holt <jordan@vimium.com> From: Jordan Holt <jordan@vimium.com>
Date: Sun, 12 Nov 2023 12:13:39 +0000 Date: Sun, 12 Nov 2023 12:13:39 +0000
Subject: [PATCH] Update device ID for PreSonus 1824c Subject: [PATCH] Update device ID for PreSonus 1824c
@ -6,9 +6,8 @@ Subject: [PATCH] Update device ID for PreSonus 1824c
--- ---
sound/usb/format.c | 4 ++-- sound/usb/format.c | 4 ++--
sound/usb/mixer_quirks.c | 2 +- sound/usb/mixer_quirks.c | 2 +-
sound/usb/mixer_s1810c.c | 2 +-
sound/usb/quirks.c | 4 ++-- sound/usb/quirks.c | 4 ++--
4 files changed, 6 insertions(+), 6 deletions(-) 3 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/sound/usb/format.c b/sound/usb/format.c diff --git a/sound/usb/format.c b/sound/usb/format.c
index ab5fed9f55b6..da50a4782414 100644 index ab5fed9f55b6..da50a4782414 100644
@ -38,19 +37,6 @@ index 898bc3baca7b..c3135459c38c 100644
err = snd_sc1810_init_mixer(mixer); err = snd_sc1810_init_mixer(mixer);
break; break;
case USB_ID(0x2a39, 0x3fb0): /* RME Babyface Pro FS */ case USB_ID(0x2a39, 0x3fb0): /* RME Babyface Pro FS */
diff --git a/sound/usb/mixer_s1810c.c b/sound/usb/mixer_s1810c.c
index fac4bbc6b275..5bc2e66d452c 100644
--- a/sound/usb/mixer_s1810c.c
+++ b/sound/usb/mixer_s1810c.c
@@ -552,7 +552,7 @@ int snd_sc1810_init_mixer(struct usb_mixer_interface *mixer)
return 0;
dev_info(&dev->dev,
- "Presonus Studio 1810c, device_setup: %u\n", chip->setup);
+ "Presonus Studio 1824c, device_setup: %u\n", chip->setup);
if (chip->setup == 1)
dev_info(&dev->dev, "(8out/18in @ 48kHz)\n");
else if (chip->setup == 2)
diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c
index ab2b938502eb..b86832edaaa0 100644 index ab2b938502eb..b86832edaaa0 100644
--- a/sound/usb/quirks.c --- a/sound/usb/quirks.c
@ -67,5 +53,5 @@ index ab2b938502eb..b86832edaaa0 100644
-- --
2.42.0 2.40.1

View File

@ -1,45 +0,0 @@
{ config, pkgs, ... }:
let
snd-usb-audio-module = pkgs.callPackage ./snd-usb-audio.nix {
kernel = config.boot.kernelPackages.kernel;
};
upmixConfig = ''
stream.properties = {
channelmix.upmix = true
channelmix.upmix-method = psd
}
'';
in {
boot.extraModulePackages = [
(snd-usb-audio-module.overrideAttrs (_: {
patches = [ ./0001-Update-device-ID-for-PreSonus-1824c.patch ];
}))
];
environment.etc = {
"pipewire/pipewire.conf.d/surround.conf".text = ''
context.modules = [
{
name = libpipewire-module-loopback
args = {
node.description = "Genelec 4.1 Surround"
capture.props = {
node.name = "Genelec_Speakers"
media.class = "Audio/Sink"
audio.position = [ FL FR SL SR LFE ]
}
playback.props = {
node.name = "playback.Genelec_Speakers"
audio.position = [ AUX0 AUX1 AUX3 AUX4 AUX5 ]
target.object = "alsa_output.usb-PreSonus_Studio_1824c_SC4E21110775-00.multichannel-output"
stream.dont-remix = true
node.passive = true
}
}
}
]
'';
"pipewire/pipewire-pulse.conf.d/40-upmix.conf".text = upmixConfig;
"pipewire/client-rt.conf.d/40-upmix.conf".text = upmixConfig;
};
}

View File

@ -1,9 +1,9 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib.my;
{ {
imports = [ imports = [
./hardware-configuration.nix ./hardware-configuration.nix
./audio.nix
../desktop.nix ../desktop.nix
]; ];
@ -16,8 +16,32 @@
networking.hostName = "odyssey"; networking.hostName = "odyssey";
networking.hostId = "c5e68d78"; networking.hostId = "c5e68d78";
networking.networkmanager.enable = true; networking.networkmanager.enable = true;
environment.etc."pipewire/pipewire.conf.d/surround.conf".text = ''
context.modules = [
{
name = libpipewire-module-loopback
args = {
node.description = "1824c Surround"
capture.props = {
node.name = "1824c_Speakers"
media.class = "Audio/Sink"
audio.position = [ FL FR FC SL SR LFE ]
}
playback.props = {
node.name = "playback.1824c_Speakers"
audio.position = [ AUX0 AUX1 AUX2 AUX3 AUX4 AUX5 ]
target.object = "alsa_output.usb-PreSonus_Studio_1824c_SC4E21110775-00.multichannel-output"
stream.dont-remix = true
node.passive = true
}
}
}
]
'';
nix.package = pkgs.nixFlakes; nix.package = pkgs.nixFlakes;
nix.extraOptions = '' nix.extraOptions = ''
experimental-features = nix-command flakes experimental-features = nix-command flakes
@ -101,7 +125,6 @@
}; };
editors = { editors = {
neovim.enable = true; neovim.enable = true;
vscode.enable = true;
}; };
security = { security = {
gpg.enable = true; gpg.enable = true;

View File

@ -1,68 +1,78 @@
# 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, pkgs, modulesPath, ... }: { config, lib, pkgs, modulesPath, ... }:
{ let
imports = [ snd-usb-audio-module = pkgs.callPackage ./snd-usb-audio.nix {
(modulesPath + "/installer/scan/not-detected.nix") kernel = config.boot.kernelPackages.kernel;
};
in {
imports =
[ (modulesPath + "/installer/scan/not-detected.nix")
];
boot.initrd.availableKernelModules = [ "xhci_pci" "ehci_pci" "nvme" "usbhid" "usb_storage" "sd_mod" ];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-intel" ];
boot.extraModulePackages = [
(snd-usb-audio-module.overrideAttrs (_: {
patches = [ ./0001-Update-device-ID-for-PreSonus-1824c.patch ];
}))
]; ];
boot.supportedFilesystems = [ "ntfs" ];
boot.binfmt.emulatedSystems = [ "aarch64-linux" ];
boot = { hardware.nvidia = {
initrd.availableKernelModules = [ "xhci_pci" "ehci_pci" "nvme" "usbhid" "usb_storage" "sd_mod" ]; modesetting.enable = true;
initrd.kernelModules = [ ]; powerManagement.enable = true;
initrd.supportedFilesystems = [ "zfs" ];
kernelModules = [ "kvm-intel" ];
kernelPackages = pkgs.linuxPackages;
supportedFilesystems = [ "ntfs" ];
binfmt.emulatedSystems = [ "aarch64-linux" ];
}; };
hardware = {
cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
nvidia = {
modesetting.enable = true;
powerManagement.enable = true;
};
};
services.xserver.videoDrivers = [ "nvidia" ]; services.xserver.videoDrivers = [ "nvidia" ];
fileSystems."/" = { fileSystems."/" =
device = "rpool/system/root"; { device = "rpool/system/root";
fsType = "zfs"; fsType = "zfs";
}; };
fileSystems."/home" = { fileSystems."/home" =
device = "rpool/user/home"; { device = "rpool/user/home";
fsType = "zfs"; fsType = "zfs";
}; };
fileSystems."/var" = { fileSystems."/var" =
device = "rpool/system/var"; { device = "rpool/system/var";
fsType = "zfs"; fsType = "zfs";
}; };
fileSystems."/tmp" = { fileSystems."/tmp" =
device = "rpool/local/tmp"; { device = "rpool/local/tmp";
fsType = "zfs"; fsType = "zfs";
}; };
fileSystems."/var/log" = { fileSystems."/var/log" =
device = "rpool/system/var/log"; { device = "rpool/system/var/log";
fsType = "zfs"; fsType = "zfs";
}; };
fileSystems."/var/tmp" = { fileSystems."/var/tmp" =
device = "rpool/system/var/tmp"; { device = "rpool/system/var/tmp";
fsType = "zfs"; fsType = "zfs";
}; };
fileSystems."/boot" = { fileSystems."/boot" =
device = "/dev/disk/by-uuid/E63E-8E75"; { device = "/dev/disk/by-uuid/E63E-8E75";
fsType = "vfat"; fsType = "vfat";
}; };
swapDevices = [ ]; swapDevices = [ ];
# 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.useDHCP = lib.mkDefault true;
# networking.interfaces.eno1.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
} }

44
hosts/pi/default.nix Normal file
View File

@ -0,0 +1,44 @@
{ config, lib, pkgs, ... }:
with lib.my;
{
imports = [
<nixos-hardware/raspberry-pi/4>
./hardware-configuration.nix
../server.nix
];
networking.hostName = "pi";
networking.hostId = "";
hardware = {
raspberry-pi."4" = {
apply-overlays-dtmerge.enable = true;
audio.enable = true;
fkms-3d.enable = true;
};
deviceTree = {
enable = true;
filter = "*rpi-4-*.dtb";
};
};
sound.enable = true;
console.enable = false;
security.rtkit.enable = true;
services.pipewire = {
enable = true;
alsa.enable = true;
alsa.support32Bit = true;
pulse.enable = true;
};
environment.systemPackages = with pkgs; [
libraspberrypi
raspberrypi-eeprom
];
system.stateVersion = "22.11";
}

View File

@ -0,0 +1,16 @@
{ config, lib, pkgs, modulesPath, ... }:
{
imports = [
<nixos-hardware/raspberry-pi/4>
];
fileSystems = {
"/" = {
device = "/dev/disk/by-label/NIXOS_SD";
fsType = "ext4";
options = [ "noatime" ];
};
};
}

View File

@ -1,5 +1,7 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib;
with lib.my;
{ {
time.timeZone = "Europe/London"; time.timeZone = "Europe/London";

26
lib/attrs.nix Normal file
View File

@ -0,0 +1,26 @@
{ lib, ... }:
with builtins;
with lib;
rec {
# attrsToList
attrsToList = attrs:
mapAttrsToList (name: value: { inherit name value; }) attrs;
# mapFilterAttrs ::
# (name -> value -> bool)
# (name -> value -> { name = any; value = any; })
# attrs
mapFilterAttrs = pred: f: attrs: filterAttrs pred (mapAttrs' f attrs);
# Generate an attribute set by mapping a function over a list of values.
genAttrs' = values: f: listToAttrs (map f values);
# anyAttrs :: (name -> value -> bool) attrs
anyAttrs = pred: attrs:
any (attr: pred attr.name attr.value) (attrsToList attrs);
# countAttrs :: (name -> value -> bool) attrs
countAttrs = pred: attrs:
count (attr: pred attr.name attr.value) (attrsToList attrs);
}

19
lib/default.nix Normal file
View File

@ -0,0 +1,19 @@
{ inputs, lib, pkgs, ... }:
let
inherit (lib) makeExtensible attrValues foldr;
inherit (modules) mapModules;
modules = import ./modules.nix {
inherit lib;
self.attrs = import ./attrs.nix { inherit lib; self = {}; };
};
mylib = makeExtensible (self:
with self; mapModules ./.
(file: import file { inherit self lib pkgs inputs; }));
in
mylib.extend
(self: super:
foldr (a: b: a // b) {} (attrValues super))

53
lib/modules.nix Normal file
View File

@ -0,0 +1,53 @@
{ self, lib, ... }:
let
inherit (builtins) attrValues readDir pathExists concatLists;
inherit (lib) id mapAttrsToList filterAttrs hasPrefix hasSuffix nameValuePair removeSuffix;
inherit (self.attrs) mapFilterAttrs;
in
rec {
mapModules = dir: fn:
mapFilterAttrs
(n: v:
v != null &&
!(hasPrefix "_" n))
(n: v:
let path = "${toString dir}/${n}"; in
if v == "directory" && pathExists "${path}/default.nix"
then nameValuePair n (fn path)
else if v == "regular" &&
n != "default.nix" &&
hasSuffix ".nix" n
then nameValuePair (removeSuffix ".nix" n) (fn path)
else nameValuePair "" null)
(readDir dir);
mapModules' = dir: fn:
attrValues (mapModules dir fn);
mapModulesRec = dir: fn:
mapFilterAttrs
(n: v:
v != null &&
!(hasPrefix "_" n))
(n: v:
let path = "${toString dir}/${n}"; in
if v == "directory"
then nameValuePair n (mapModulesRec path fn)
else if v == "regular" && n != "default.nix" && hasSuffix ".nix" n
then nameValuePair (removeSuffix ".nix" n) (fn path)
else nameValuePair "" null)
(readDir dir);
mapModulesRec' = dir: fn:
let
dirs =
mapAttrsToList
(k: _: "${dir}/${k}")
(filterAttrs
(n: v: v == "directory" && !(hasPrefix "_" n))
(readDir dir));
files = attrValues (mapModules dir id);
paths = files ++ concatLists (map (d: mapModulesRec' d id) dirs);
in map fn paths;
}

25
lib/nixos.nix Normal file
View File

@ -0,0 +1,25 @@
{ inputs, lib, pkgs, ... }:
with lib;
with lib.my;
let sys = "x86_64-linux";
in {
mkHost = path: attrs @ { system ? sys, ... }:
nixosSystem {
inherit system;
specialArgs = { inherit lib inputs system; };
modules = [
{
nixpkgs.pkgs = pkgs;
networking.hostName = mkDefault (removeSuffix ".nix" (baseNameOf path));
}
(filterAttrs (n: v: !elem n [ "system" ]) attrs)
../. # /default.nix
(import path)
];
};
mapHosts = dir: attrs @ { system ? system, ... }:
mapModules dir
(hostPath: mkHost hostPath attrs);
}

35
lib/options.nix Normal file
View File

@ -0,0 +1,35 @@
{ lib, ... }:
let
inherit (lib) mkOption types;
in
rec {
mkOpt = type: default:
mkOption { inherit type default; };
mkOpt' = type: default: description:
mkOption { inherit type default description; };
mkBoolOpt = default: mkOption {
inherit default;
type = types.bool;
example = true;
};
mkStringOpt = default: mkOption {
inherit default;
type = types.lines;
example = "";
};
mkListOfStringOpt = default: mkOption {
inherit default;
type = types.listOf types.lines;
example = [ "a" "b" "c" ];
};
mkPath = path:
if path != null
then toString path
else "";
}

View File

@ -1,17 +1,16 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib;
with lib.my;
let cfg = config.modules.desktop.apps.qbittorrent; let cfg = config.modules.desktop.apps.qbittorrent;
in { in {
options.modules.desktop.apps.qbittorrent = { options.modules.desktop.apps.qbittorrent = {
enable = lib.mkOption { enable = mkBoolOpt false;
default = false;
example = true;
};
}; };
config = lib.mkIf cfg.enable { config = mkIf cfg.enable {
user.packages = with pkgs; [ user.packages = with pkgs; [
qbittorrent qbittorrent
]; ];
}; };
} }

View File

@ -1,15 +1,14 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib;
with lib.my;
let cfg = config.modules.desktop.apps.slack; let cfg = config.modules.desktop.apps.slack;
in { in {
options.modules.desktop.apps.slack = { options.modules.desktop.apps.slack = {
enable = lib.mkOption { enable = mkBoolOpt false;
default = false;
example = true;
};
}; };
config = lib.mkIf cfg.enable { config = mkIf cfg.enable {
user.packages = with pkgs; [ user.packages = with pkgs; [
slack slack
]; ];

View File

@ -1,15 +1,14 @@
{ config, lib, pkgs, inputs, ... }: { config, lib, pkgs, inputs, ... }:
with lib;
with lib.my;
let cfg = config.modules.desktop.apps.thunderbird; let cfg = config.modules.desktop.apps.thunderbird;
in { in {
options.modules.desktop.apps.thunderbird = { options.modules.desktop.apps.thunderbird = {
enable = lib.mkOption { enable = mkBoolOpt false;
default = false;
example = true;
};
}; };
config = lib.mkIf cfg.enable { config = mkIf cfg.enable {
home.file.".thunderbird/Default/chrome/thunderbird-gnome-theme".source = inputs.thunderbird-gnome-theme; home.file.".thunderbird/Default/chrome/thunderbird-gnome-theme".source = inputs.thunderbird-gnome-theme;
home.programs.thunderbird = { home.programs.thunderbird = {

View File

@ -1,15 +1,14 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib;
with lib.my;
let cfg = config.modules.desktop.apps.zoom; let cfg = config.modules.desktop.apps.zoom;
in { in {
options.modules.desktop.apps.zoom = { options.modules.desktop.apps.zoom = {
enable = lib.mkOption { enable = mkBoolOpt false;
default = false;
example = true;
};
}; };
config = lib.mkIf cfg.enable { config = mkIf cfg.enable {
user.packages = with pkgs; [ user.packages = with pkgs; [
zoom-us zoom-us
]; ];

View File

@ -1,15 +1,14 @@
{ config, lib, pkgs, inputs, ... }: { config, lib, pkgs, inputs, ... }:
with lib;
with lib.my;
let cfg = config.modules.desktop.browsers.firefox; let cfg = config.modules.desktop.browsers.firefox;
in { in {
options.modules.desktop.browsers.firefox = { options.modules.desktop.browsers.firefox = {
enable = lib.mkOption { enable = mkBoolOpt false;
default = false;
example = true;
};
}; };
config = lib.mkIf cfg.enable { config = mkIf cfg.enable {
home.file.".mozilla/firefox/Default/chrome/firefox-gnome-theme".source = inputs.firefox-gnome-theme; home.file.".mozilla/firefox/Default/chrome/firefox-gnome-theme".source = inputs.firefox-gnome-theme;
home.programs.firefox = { home.programs.firefox = {

View File

@ -1,59 +1,34 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib;
with lib.my;
let cfg = config.modules.desktop.gaming.emulators; let cfg = config.modules.desktop.gaming.emulators;
in { in {
options.modules.desktop.gaming.emulators = { options.modules.desktop.gaming.emulators = {
ds.enable = lib.mkOption { ds.enable = mkBoolOpt false;
default = false; gb.enable = mkBoolOpt false;
example = true; gba.enable = mkBoolOpt false;
}; gamecube.enable = mkBoolOpt false;
gb.enable = lib.mkOption { ps2.enable = mkBoolOpt false;
default = false; ps3.enable = mkBoolOpt false;
example = true; psp.enable = mkBoolOpt false;
}; snes.enable = mkBoolOpt false;
gba.enable = lib.mkOption { wii.enable = mkBoolOpt false;
default = false;
example = true;
};
gamecube.enable = lib.mkOption {
default = false;
example = true;
};
ps2.enable = lib.mkOption {
default = false;
example = true;
};
ps3.enable = lib.mkOption {
default = false;
example = true;
};
psp.enable = lib.mkOption {
default = false;
example = true;
};
snes.enable = lib.mkOption {
default = false;
example = true;
};
wii.enable = lib.mkOption {
default = false;
example = true;
};
}; };
config = { config = {
user.packages = with pkgs; [ user.packages = with pkgs; [
(lib.mkIf cfg.ps2.enable pcsx2) (mkIf cfg.ps2.enable pcsx2)
(lib.mkIf cfg.ps3.enable rpcs3) (mkIf cfg.ps3.enable rpcs3)
(lib.mkIf cfg.psp.enable ppsspp) (mkIf cfg.psp.enable ppsspp)
(lib.mkIf cfg.ds.enable desmume) (mkIf cfg.ds.enable desmume)
(lib.mkIf (cfg.gba.enable || (mkIf (cfg.gba.enable ||
cfg.gb.enable || cfg.gb.enable ||
cfg.snes.enable) cfg.snes.enable)
higan) higan)
(lib.mkIf (cfg.wii.enable || (mkIf (cfg.wii.enable ||
cfg.gamecube.enable) cfg.gamecube.enable)
dolphin-emu) dolphin-emu)
]; ];
}; };
} }

View File

@ -1,15 +1,14 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib;
with lib.my;
let cfg = config.modules.desktop.gaming.lutris; let cfg = config.modules.desktop.gaming.lutris;
in { in {
options.modules.desktop.gaming.lutris = { options.modules.desktop.gaming.lutris = {
enable = lib.mkOption { enable = mkBoolOpt false;
default = false;
example = true;
};
}; };
config = lib.mkIf cfg.enable { config = mkIf cfg.enable {
user.packages = with pkgs; [ user.packages = with pkgs; [
lutris lutris
vulkan-loader vulkan-loader

View File

@ -1,17 +1,16 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib;
with lib.my;
let cfg = config.modules.desktop.gaming.steam; let cfg = config.modules.desktop.gaming.steam;
in { in {
options.modules.desktop.gaming.steam = { options.modules.desktop.gaming.steam = {
enable = lib.mkOption { enable = mkBoolOpt false;
default = false;
example = true;
};
}; };
config = lib.mkIf cfg.enable { config = mkIf cfg.enable {
programs.steam.enable = true; programs.steam.enable = true;
systemd.extraConfig = "DefaultLimitNOFILE=1048576"; systemd.extraConfig = "DefaultLimitNOFILE=1048576";
}; };
} }

View File

@ -1,15 +1,14 @@
{ config, lib, pkgs, inputs, ... }: { config, lib, pkgs, ... }:
with lib;
with lib.my;
let cfg = config.modules.desktop.gnome; let cfg = config.modules.desktop.gnome;
in { in {
options.modules.desktop.gnome = { options.modules.desktop.gnome = {
enable = lib.mkOption { enable = mkBoolOpt false;
default = false;
example = true;
};
}; };
config = lib.mkIf cfg.enable { config = mkIf cfg.enable {
services.xserver = { services.xserver = {
enable = true; enable = true;
displayManager.gdm.enable = true; displayManager.gdm.enable = true;
@ -99,8 +98,8 @@ in {
window-gap = 8; window-gap = 8;
}; };
"org/gnome/desktop/background" = { "org/gnome/desktop/background" = {
picture-uri = "file://${inputs.wallpapers}/Aqua.png"; picture-uri = "file://${pkgs.gnome.gnome-backgrounds}/share/backgrounds/gnome/adwaita-l.jpg";
picture-uri-dark = "file://${inputs.wallpapers}/Aqua.png"; picture-uri-dark = "file://${pkgs.gnome.gnome-backgrounds}/share/backgrounds/gnome/adwaita-d.jpg";
}; };
"org/gtk/settings/file-chooser" = { "org/gtk/settings/file-chooser" = {
show-hidden = true; show-hidden = true;
@ -181,7 +180,6 @@ in {
gnomeExtensions.pano gnomeExtensions.pano
gnomeExtensions.paperwm gnomeExtensions.paperwm
# gnomeExtensions.pip-on-top # gnomeExtensions.pip-on-top
gnomeExtensions.rounded-window-corners
gnomeExtensions.search-light gnomeExtensions.search-light
gnomeExtensions.smart-auto-move gnomeExtensions.smart-auto-move
gnomeExtensions.space-bar gnomeExtensions.space-bar

View File

@ -1,28 +1,21 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib;
with lib.my;
let cfg = config.modules.desktop.media.graphics; let cfg = config.modules.desktop.media.graphics;
in { in {
options.modules.desktop.media.graphics = { options.modules.desktop.media.graphics = {
modeling.enable = lib.mkOption { modeling.enable = mkBoolOpt false;
default = false; raster.enable = mkBoolOpt false;
example = true; vector.enable = mkBoolOpt false;
};
raster.enable = lib.mkOption {
default = false;
example = true;
};
vector.enable = lib.mkOption {
default = false;
example = true;
};
}; };
config = { config = {
user.packages = with pkgs; [ user.packages = with pkgs; [
(lib.mkIf cfg.modeling.enable blender) (mkIf cfg.modeling.enable blender)
(lib.mkIf cfg.raster.enable gimp) (mkIf cfg.raster.enable gimp)
(lib.mkIf cfg.raster.enable krita) (mkIf cfg.raster.enable krita)
(lib.mkIf cfg.vector.enable inkscape) (mkIf cfg.vector.enable inkscape)
]; ];
}; };
} }

View File

@ -1,16 +1,12 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib;
with lib.my;
let cfg = config.modules.desktop.media.recording; let cfg = config.modules.desktop.media.recording;
in { in {
options.modules.desktop.media.recording = { options.modules.desktop.media.recording = {
audio.enable = lib.mkOption { audio.enable = mkBoolOpt false;
default = false; video.enable = mkBoolOpt false;
example = true;
};
video.enable = lib.mkOption {
default = false;
example = true;
};
}; };
config = { config = {
@ -25,4 +21,4 @@ in {
obs-studio obs-studio
] else []); ] else []);
}; };
} }

View File

@ -1,18 +1,17 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib;
with lib.my;
let let
cfg = config.modules.desktop.mimeapps; cfg = config.modules.desktop.mimeapps;
avApp = "io.github.celluloid_player.Celluloid.desktop"; avApp = "io.github.celluloid_player.Celluloid.desktop";
imageApp = "org.gnome.eog.desktop"; imageApp = "org.gnome.eog.desktop";
in { in {
options.modules.desktop.mimeapps = { options.modules.desktop.mimeapps = {
enable = lib.mkOption { enable = mkBoolOpt false;
default = false;
example = true;
};
}; };
config = lib.mkIf cfg.enable { config = mkIf cfg.enable {
xdg.mime.defaultApplications = { xdg.mime.defaultApplications = {
# Audio/video # Audio/video
"audio/x-vorbis+ogg" = avApp; "audio/x-vorbis+ogg" = avApp;

View File

@ -1,15 +1,14 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib;
with lib.my;
let cfg = config.modules.desktop.office.libreoffice; let cfg = config.modules.desktop.office.libreoffice;
in { in {
options.modules.desktop.office.libreoffice = { options.modules.desktop.office.libreoffice = {
enable = lib.mkOption { enable = mkBoolOpt false;
default = false;
example = true;
};
}; };
config = lib.mkIf cfg.enable { config = mkIf cfg.enable {
user.packages = with pkgs; [ user.packages = with pkgs; [
libreoffice libreoffice
]; ];

View File

@ -1,15 +1,14 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib;
with lib.my;
let cfg = config.modules.dev.cc; let cfg = config.modules.dev.cc;
in { in {
options.modules.dev.cc = { options.modules.dev.cc = {
enable = lib.mkOption { enable = mkBoolOpt false;
default = false;
example = true;
};
}; };
config = lib.mkIf cfg.enable { config = mkIf cfg.enable {
user.packages = with pkgs; [ user.packages = with pkgs; [
clang clang
gcc gcc
@ -18,4 +17,4 @@ in {
llvmPackages.libcxx llvmPackages.libcxx
]; ];
}; };
} }

View File

@ -1,17 +1,16 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib;
with lib.my;
let cfg = config.modules.dev.java; let cfg = config.modules.dev.java;
in { in {
options.modules.dev.java = { options.modules.dev.java = {
enable = lib.mkOption { enable = mkBoolOpt false;
default = false;
example = true;
};
}; };
config = lib.mkIf cfg.enable { config = mkIf cfg.enable {
user.packages = with pkgs; [ user.packages = with pkgs; [
jdk jdk
]; ];
}; };
} }

View File

@ -1,17 +1,16 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib;
with lib.my;
let cfg = config.modules.dev.lua; let cfg = config.modules.dev.lua;
in { in {
options.modules.dev.lua = { options.modules.dev.lua = {
enable = lib.mkOption { enable = mkBoolOpt false;
default = false;
example = true;
};
}; };
config = lib.mkIf cfg.enable { config = mkIf cfg.enable {
user.packages = with pkgs; [ user.packages = with pkgs; [
lua lua
]; ];
}; };
} }

View File

@ -1,17 +1,16 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib;
with lib.my;
let cfg = config.modules.dev.node; let cfg = config.modules.dev.node;
in { in {
options.modules.dev.node = { options.modules.dev.node = {
enable = lib.mkOption { enable = mkBoolOpt false;
default = false;
example = true;
};
}; };
config = lib.mkIf cfg.enable { config = mkIf cfg.enable {
user.packages = with pkgs; [ user.packages = with pkgs; [
nodejs_latest nodejs_latest
]; ];
}; };
} }

View File

@ -1,17 +1,16 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib;
with lib.my;
let cfg = config.modules.dev.python; let cfg = config.modules.dev.python;
in { in {
options.modules.dev.python = { options.modules.dev.python = {
enable = lib.mkOption { enable = mkBoolOpt false;
default = false;
example = true;
};
}; };
config = lib.mkIf cfg.enable { config = mkIf cfg.enable {
user.packages = with pkgs; [ user.packages = with pkgs; [
python310 python310
]; ];
}; };
} }

View File

@ -1,15 +1,14 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib;
with lib.my;
let cfg = config.modules.dev.rust; let cfg = config.modules.dev.rust;
in { in {
options.modules.dev.rust = { options.modules.dev.rust = {
enable = lib.mkOption { enable = mkBoolOpt false;
default = false;
example = true;
};
}; };
config = lib.mkIf cfg.enable { config = mkIf cfg.enable {
user.packages = with pkgs; [ user.packages = with pkgs; [
rustc rustc
rustup rustup
@ -17,4 +16,4 @@ in {
rust-bindgen rust-bindgen
]; ];
}; };
} }

View File

@ -1,19 +1,18 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib;
with lib.my;
let cfg = config.modules.dev.scala; let cfg = config.modules.dev.scala;
in { in {
options.modules.dev.scala = { options.modules.dev.scala = {
enable = lib.mkOption { enable = mkBoolOpt false;
default = false;
example = true;
};
}; };
config = lib.mkIf cfg.enable { config = mkIf cfg.enable {
user.packages = with pkgs; [ user.packages = with pkgs; [
jdk jdk
sbt sbt
scala scala
]; ];
}; };
} }

View File

@ -1,17 +1,16 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib;
with lib.my;
let cfg = config.modules.dev.shell; let cfg = config.modules.dev.shell;
in { in {
options.modules.dev.shell = { options.modules.dev.shell = {
enable = lib.mkOption { enable = mkBoolOpt false;
default = false;
example = true;
};
}; };
config = lib.mkIf cfg.enable { config = mkIf cfg.enable {
user.packages = with pkgs; [ user.packages = with pkgs; [
shellcheck shellcheck
]; ];
}; };
} }

View File

@ -1,17 +1,16 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib;
with lib.my;
let cfg = config.modules.dev.zig; let cfg = config.modules.dev.zig;
in { in {
options.modules.dev.zig = { options.modules.dev.zig = {
enable = lib.mkOption { enable = mkBoolOpt false;
default = false;
example = true;
};
}; };
config = lib.mkIf cfg.enable { config = mkIf cfg.enable {
user.packages = with pkgs; [ user.packages = with pkgs; [
zig zig
]; ];
}; };
} }

View File

@ -1,17 +1,16 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib;
with lib.my;
let let
cfg = config.modules.editors.neovim; cfg = config.modules.editors.neovim;
dev = config.modules.dev; dev = config.modules.dev;
in { in {
options.modules.editors.neovim = { options.modules.editors.neovim = {
enable = lib.mkOption { enable = mkBoolOpt false;
default = false;
example = true;
};
}; };
config = lib.mkIf cfg.enable { config = mkIf cfg.enable {
user.packages = with pkgs; [ user.packages = with pkgs; [
(neovim.override { (neovim.override {
configure = { configure = {

View File

@ -1,49 +1,16 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib;
with lib.my;
let cfg = config.modules.editors.vscode; let cfg = config.modules.editors.vscode;
in { in {
options.modules.editors.vscode = { options.modules.editors.vscode = {
enable = lib.mkOption { enable = mkBoolOpt false;
default = false;
example = true;
};
}; };
config = lib.mkIf cfg.enable { config = mkIf cfg.enable {
environment.sessionVariables.NIXOS_OZONE_WL = "1";
home.programs.vscode = { home.programs.vscode = {
enable = true; enable = true;
extensions = with pkgs.vscode-extensions; [
asvetliakov.vscode-neovim
brettm12345.nixfmt-vscode
coolbear.systemd-unit-file
editorconfig.editorconfig
golang.go
graphql.vscode-graphql-syntax
mattn.lisp
# mkhl.direnv
ms-python.vscode-pylance
ms-vscode.cpptools
ms-vscode.hexeditor
piousdeer.adwaita-theme
# redhat.java
# sumneko.lua
];
userSettings = {
"editor.renderLineHighlight" = "none";
"extensions.experimental.affinity" = {
"asvetliakov.vscode-neovim" = 1;
};
"files.autoSave" = "off";
"window.autoDetectColorScheme" = true;
"window.commandCenter" = true;
"window.titleBarStyle" = "custom";
"workbench.iconTheme" = null;
"workbench.preferredDarkColorTheme" = "Adwaita Dark";
"workbench.preferredLightColorTheme" = "Adwaita Light";
"workbench.tree.indent" = 12;
};
}; };
}; };
} }

View File

@ -1,19 +1,15 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib;
with lib.my;
let cfg = config.modules.networking.tailscale; let cfg = config.modules.networking.tailscale;
in { in {
options.modules.networking.tailscale = { options.modules.networking.tailscale = {
enable = lib.mkOption { enable = mkBoolOpt false;
default = false; restrictSSH = mkBoolOpt true;
example = true;
};
restrictSSH = lib.mkOption {
default = true;
example = true;
};
}; };
config = lib.mkIf cfg.enable { config = mkIf cfg.enable {
services.tailscale.enable = true; services.tailscale.enable = true;
services.openssh.openFirewall = !cfg.restrictSSH; services.openssh.openFirewall = !cfg.restrictSSH;
networking.firewall = { networking.firewall = {

View File

@ -1,20 +1,21 @@
{ config, options, lib, home-manager, ... }: { config, options, lib, home-manager, ... }:
with lib; with lib;
with lib.my;
{ {
options = with types; { options = with types; {
user = mkOption { type = attrs; default = { }; }; user = mkOpt attrs { };
home = { home = {
configFile = mkOption { type = attrs; default = { }; description = "Files to place in $XDG_CONFIG_HOME"; }; configFile = mkOpt' attrs { } "Files to place in $XDG_CONFIG_HOME";
dataFile = mkOption { type = attrs; default = { }; description = "Files to place in $XDG_DATA_HOME"; }; dataFile = mkOpt' attrs { } "Files to place in $XDG_DATA_HOME";
file = mkOption { type = attrs; default = { }; description = "Files to place directly in $HOME"; }; file = mkOpt' attrs { } "Files to place directly in $HOME";
packages = mkOption { type = attrs; default = { }; description = "User-level installed packages"; }; packages = mkOpt' attrs { } "User-level installed packages";
programs = mkOption { type = attrs; default = { }; description = "Programs managed directly from home-manager"; }; programs = mkOpt' attrs { } "Programs managed directly from home-manager";
services = mkOption { type = attrs; default = { }; description = "Services managed directly from home-manager"; }; services = mkOpt' attrs { } "Services managed directly from home-manager";
}; };
dconf.settings = mkOption { type = attrs; default = { }; description = "dconf settings to enable"; }; dconf.settings = mkOpt' attrs { } "dconf settings to enable";
env = mkOption { env = mkOption {
type = attrsOf (oneOf [ str path (listOf (either str path)) ]); type = attrsOf (oneOf [ str path (listOf (either str path)) ]);
@ -68,6 +69,8 @@ with lib;
users.users.${config.user.name} = mkAliasDefinitions options.user; users.users.${config.user.name} = mkAliasDefinitions options.user;
nixpkgs.config.allowUnfree = true;
environment.extraInit = environment.extraInit =
concatStringsSep "\n" concatStringsSep "\n"
(mapAttrsToList (n: v: "export ${n}=\"${v}\"") config.env); (mapAttrsToList (n: v: "export ${n}=\"${v}\"") config.env);

View File

@ -1,15 +1,14 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib;
with lib.my;
let cfg = config.modules.security.gpg; let cfg = config.modules.security.gpg;
in { in {
options.modules.security.gpg = { options.modules.security.gpg = {
enable = lib.mkOption { enable = mkBoolOpt false;
default = false;
example = true;
};
}; };
config = lib.mkIf cfg.enable { config = mkIf cfg.enable {
home.programs.gpg = { home.programs.gpg = {
enable = true; enable = true;
}; };
@ -19,4 +18,4 @@ in {
enableSshSupport = true; enableSshSupport = true;
}; };
}; };
} }

View File

@ -1,18 +1,17 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib;
with lib.my;
let cfg = config.modules.security.pass; let cfg = config.modules.security.pass;
in { in {
options.modules.security.pass = { options.modules.security.pass = {
enable = lib.mkOption { enable = mkBoolOpt false;
default = false;
example = true;
};
}; };
config = lib.mkIf cfg.enable { config = mkIf cfg.enable {
home.programs.password-store = { home.programs.password-store = {
enable = true; enable = true;
package = pkgs.pass.withExtensions (exts: [ exts.pass-otp ]); package = pkgs.pass.withExtensions (exts: [ exts.pass-otp ]);
}; };
}; };
} }

View File

@ -1,15 +1,14 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib;
with lib.my;
let cfg = config.modules.shell.git; let cfg = config.modules.shell.git;
in { in {
options.modules.shell.git = { options.modules.shell.git = {
enable = lib.mkOption { enable = mkBoolOpt false;
default = false;
example = true;
};
}; };
config = lib.mkIf cfg.enable { config = mkIf cfg.enable {
home.programs.git = { home.programs.git = {
enable = true; enable = true;
aliases = { aliases = {
@ -36,4 +35,4 @@ in {
"git/ignore".source = ./ignore; "git/ignore".source = ./ignore;
}; };
}; };
} }

View File

@ -1,15 +1,14 @@
{ config, lib, pkgs, ... }: { config, lib, pkgs, ... }:
with lib;
with lib.my;
let cfg = config.modules.shell.zsh; let cfg = config.modules.shell.zsh;
in { in {
options.modules.shell.zsh = { options.modules.shell.zsh = {
enable = lib.mkOption { enable = mkBoolOpt false;
default = false;
example = true;
};
}; };
config = lib.mkIf cfg.enable { config = mkIf cfg.enable {
users.defaultUserShell = pkgs.zsh; users.defaultUserShell = pkgs.zsh;
programs.zsh = { programs.zsh = {

View File

@ -4,7 +4,7 @@ self: super:
mutter = gsuper.mutter.overrideAttrs (oldAttrs: { mutter = gsuper.mutter.overrideAttrs (oldAttrs: {
src = super.fetchurl { src = super.fetchurl {
url = "https://gitlab.gnome.org/Community/Ubuntu/mutter/-/archive/triple-buffering-v4-45/mutter-triple-buffering-v4-45.tar.gz"; url = "https://gitlab.gnome.org/Community/Ubuntu/mutter/-/archive/triple-buffering-v4-45/mutter-triple-buffering-v4-45.tar.gz";
sha256 = "tN+zQ5brk+hc+louIipqPV/Bqft42ghKOzjZZMj5Q8A="; sha256 = "E+AdsQdotqlH/kYskl+Fwv0i+UTK7mfdkJ+zlfLdU9o=";
}; };
}); });
}); });