Compare commits
18 commits
main
...
export-nix
| Author | SHA1 | Date | |
|---|---|---|---|
| 2c0062bf51 | |||
| 31effae175 | |||
| 87ba726b18 | |||
| 9e35764e0c | |||
| 1c86c85c56 | |||
| 7ac78ca260 | |||
| d181f3a719 | |||
| 2a6696bafc | |||
| 75f1776916 | |||
| b1be9f20d9 | |||
| a68c26c6ef | |||
| 9ee0cb3287 | |||
| e01c8330d6 | |||
| 033b0e8a57 | |||
| 27a486bf5c | |||
| 5d706dd2dc | |||
| 748e55f1a6 | |||
| 2ed60a227e |
23 changed files with 280 additions and 158 deletions
|
|
@ -13,6 +13,7 @@ flake-parts.lib.mkFlake { inherit inputs; } {
|
|||
./checks.nix
|
||||
./dev-shells.nix
|
||||
./home-manager.nix
|
||||
./hosts.nix
|
||||
./lib.nix
|
||||
./nixos.nix
|
||||
./overlays.nix
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
{ self, inputs, lib, ... }:
|
||||
{ self, config, inputs, lib, ... }:
|
||||
let
|
||||
inherit (config) hosts;
|
||||
|
||||
defaultModules = [
|
||||
# Include generic settings
|
||||
"${self}/modules/home"
|
||||
|
|
@ -19,14 +21,14 @@ let
|
|||
# Enable home-manager
|
||||
programs.home-manager.enable = true;
|
||||
}
|
||||
# Import common modules
|
||||
"${self}/modules/common"
|
||||
];
|
||||
|
||||
mkHome = name: system: inputs.home-manager.lib.homeManagerConfiguration {
|
||||
mkHomeCommon = mainModules: system: inputs.home-manager.lib.homeManagerConfiguration {
|
||||
pkgs = inputs.nixpkgs.legacyPackages.${system};
|
||||
|
||||
modules = defaultModules ++ [
|
||||
"${self}/hosts/homes/${name}"
|
||||
];
|
||||
modules = defaultModules ++ mainModules;
|
||||
|
||||
# Use my extended lib in NixOS configuration
|
||||
inherit (self) lib;
|
||||
|
|
@ -37,24 +39,41 @@ let
|
|||
};
|
||||
};
|
||||
|
||||
homes = {
|
||||
mkHome = name: mkHomeCommon [ "${self}/hosts/homes/${name}" ];
|
||||
|
||||
mkNixosHome = name: mkHomeCommon [
|
||||
"${self}/hosts/nixos/${name}/home.nix"
|
||||
"${self}/hosts/nixos/${name}/profiles.nix"
|
||||
];
|
||||
in
|
||||
{
|
||||
hosts.homes = {
|
||||
"ambroisie@bazin" = "x86_64-linux";
|
||||
"ambroisie@mousqueton" = "x86_64-linux";
|
||||
};
|
||||
in
|
||||
{
|
||||
|
||||
perSystem = { system, ... }: {
|
||||
# Work-around for https://github.com/nix-community/home-manager/issues/3075
|
||||
legacyPackages = {
|
||||
homeConfigurations =
|
||||
let
|
||||
filteredHomes = lib.filterAttrs (_: v: v == system) homes;
|
||||
filteredHomes = lib.filterAttrs (_: v: v == system) hosts.homes;
|
||||
allHomes = filteredHomes // {
|
||||
# Default configuration
|
||||
ambroisie = system;
|
||||
};
|
||||
homeManagerHomes = lib.mapAttrs mkHome allHomes;
|
||||
|
||||
filteredNixosHosts = lib.filterAttrs (_: v: v == system) hosts.nixos;
|
||||
nixosHomes' = lib.mapAttrs mkNixosHome filteredNixosHosts;
|
||||
nixosHomeUsername = (host: self.nixosConfigurations.${host}.config.my.user.name);
|
||||
nixosHomes = lib.mapAttrs' (host: lib.nameValuePair "${nixosHomeUsername host}@${host}") nixosHomes';
|
||||
in
|
||||
lib.mapAttrs mkHome allHomes;
|
||||
lib.foldl' lib.mergeAttrs { }
|
||||
[
|
||||
homeManagerHomes
|
||||
nixosHomes
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
|
|||
21
flake/hosts.nix
Normal file
21
flake/hosts.nix
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
# Define `hosts.{darwin,home,nixos}` options for consumption in other modules
|
||||
{ lib, ... }:
|
||||
let
|
||||
mkHostsOption = description: lib.mkOption {
|
||||
inherit description;
|
||||
type = with lib.types; attrsOf str;
|
||||
default = { };
|
||||
example = { name = "x86_64-linux"; };
|
||||
};
|
||||
in
|
||||
{
|
||||
options = {
|
||||
hosts = {
|
||||
darwin = mkHostsOption "Darwin hosts";
|
||||
|
||||
homes = mkHostsOption "Home Manager hosts";
|
||||
|
||||
nixos = mkHostsOption "NixOS hosts";
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
{ self, inputs, lib, ... }:
|
||||
{ self, config, inputs, lib, ... }:
|
||||
let
|
||||
defaultModules = [
|
||||
{
|
||||
|
|
@ -12,6 +12,8 @@ let
|
|||
}
|
||||
# Include generic settings
|
||||
"${self}/modules/nixos"
|
||||
# Import common modules
|
||||
"${self}/modules/common"
|
||||
];
|
||||
|
||||
buildHost = name: system: lib.nixosSystem {
|
||||
|
|
@ -30,8 +32,12 @@ let
|
|||
};
|
||||
in
|
||||
{
|
||||
flake.nixosConfigurations = lib.mapAttrs buildHost {
|
||||
aramis = "x86_64-linux";
|
||||
porthos = "x86_64-linux";
|
||||
config = {
|
||||
hosts.nixos = {
|
||||
aramis = "x86_64-linux";
|
||||
porthos = "x86_64-linux";
|
||||
};
|
||||
|
||||
flake.nixosConfigurations = lib.mapAttrs buildHost config.hosts.nixos;
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@
|
|||
./hardware.nix
|
||||
./home.nix
|
||||
./networking.nix
|
||||
./profiles.nix
|
||||
./secrets
|
||||
./services.nix
|
||||
./system.nix
|
||||
|
|
|
|||
4
hosts/nixos/porthos/profiles.nix
Normal file
4
hosts/nixos/porthos/profiles.nix
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
{ ... }:
|
||||
{
|
||||
# Nothing
|
||||
}
|
||||
28
modules/common/default.nix
Normal file
28
modules/common/default.nix
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
# Modules that are common to various module systems
|
||||
# Usually with very small differences, if any, between them.
|
||||
{ lib, _class, ... }:
|
||||
let
|
||||
allowedClass = [
|
||||
"darwin"
|
||||
"homeManager"
|
||||
"nixos"
|
||||
];
|
||||
|
||||
allowedClassString = lib.concatStringSep ", " (builtins.map lib.escapeNixString allowedClass);
|
||||
in
|
||||
{
|
||||
imports = [
|
||||
./profiles
|
||||
];
|
||||
|
||||
config = {
|
||||
assertions = [
|
||||
{
|
||||
assertion = builtins.elem _class allowedClass;
|
||||
message = ''
|
||||
`_class` specialArgs must be one of ${allowedClassString}.
|
||||
'';
|
||||
}
|
||||
];
|
||||
};
|
||||
}
|
||||
19
modules/common/profiles/bluetooth/default.nix
Normal file
19
modules/common/profiles/bluetooth/default.nix
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
{ config, lib, _class, ... }:
|
||||
let
|
||||
cfg = config.my.profiles.bluetooth;
|
||||
in
|
||||
{
|
||||
options.my.profiles.bluetooth = with lib; {
|
||||
enable = mkEnableOption "bluetooth profile";
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable (lib.mkMerge [
|
||||
(lib.optionalAttrs (_class == "homeManager") {
|
||||
my.home.bluetooth.enable = true;
|
||||
})
|
||||
|
||||
(lib.optionalAttrs (_class == "nixos") {
|
||||
my.hardware.bluetooth.enable = true;
|
||||
})
|
||||
]);
|
||||
}
|
||||
25
modules/common/profiles/default.nix
Normal file
25
modules/common/profiles/default.nix
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
# Configuration that spans across system and home, or are almagations of modules
|
||||
{ config, lib, _class, ... }:
|
||||
{
|
||||
imports = [
|
||||
./bluetooth
|
||||
./devices
|
||||
./gtk
|
||||
./laptop
|
||||
./wm
|
||||
./x
|
||||
];
|
||||
|
||||
config = lib.mkMerge [
|
||||
# Transparently enable home-manager profiles as well
|
||||
(lib.optionalAttrs (_class != "homeManager") {
|
||||
home-manager.users.${config.my.user.name} = {
|
||||
config = {
|
||||
my = {
|
||||
inherit (config.my) profiles;
|
||||
};
|
||||
};
|
||||
};
|
||||
})
|
||||
];
|
||||
}
|
||||
22
modules/common/profiles/devices/default.nix
Normal file
22
modules/common/profiles/devices/default.nix
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
{ config, lib, _class, ... }:
|
||||
let
|
||||
cfg = config.my.profiles.devices;
|
||||
in
|
||||
{
|
||||
options.my.profiles.devices = with lib; {
|
||||
enable = mkEnableOption "devices profile";
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable (lib.mkMerge [
|
||||
(lib.optionalAttrs (_class == "nixos") {
|
||||
my.hardware = {
|
||||
ergodox.enable = true;
|
||||
|
||||
trackball.enable = true;
|
||||
};
|
||||
|
||||
# MTP devices auto-mount via file explorers
|
||||
services.gvfs.enable = true;
|
||||
})
|
||||
]);
|
||||
}
|
||||
21
modules/common/profiles/gtk/default.nix
Normal file
21
modules/common/profiles/gtk/default.nix
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
{ config, lib, _class, ... }:
|
||||
let
|
||||
cfg = config.my.profiles.gtk;
|
||||
in
|
||||
{
|
||||
options.my.profiles.gtk = with lib; {
|
||||
enable = mkEnableOption "gtk profile";
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable (lib.mkMerge [
|
||||
(lib.optionalAttrs (_class == "homeManager") {
|
||||
# GTK theme configuration
|
||||
my.home.gtk.enable = true;
|
||||
})
|
||||
|
||||
(lib.optionalAttrs (_class == "nixos") {
|
||||
# Allow setting GTK configuration using home-manager
|
||||
programs.dconf.enable = true;
|
||||
})
|
||||
]);
|
||||
}
|
||||
27
modules/common/profiles/laptop/default.nix
Normal file
27
modules/common/profiles/laptop/default.nix
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
{ config, lib, _class, ... }:
|
||||
let
|
||||
cfg = config.my.profiles.laptop;
|
||||
in
|
||||
{
|
||||
options.my.profiles.laptop = with lib; {
|
||||
enable = mkEnableOption "laptop profile";
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable (lib.mkMerge [
|
||||
(lib.optionalAttrs (_class == "homeManager") {
|
||||
# Enable battery notifications
|
||||
my.home.power-alert.enable = true;
|
||||
})
|
||||
|
||||
(lib.optionalAttrs (_class == "nixos") {
|
||||
# Enable touchpad support
|
||||
services.libinput.enable = true;
|
||||
|
||||
# Enable TLP power management
|
||||
my.services.tlp.enable = true;
|
||||
|
||||
# Enable upower power management
|
||||
my.hardware.upower.enable = true;
|
||||
})
|
||||
]);
|
||||
}
|
||||
38
modules/common/profiles/wm/default.nix
Normal file
38
modules/common/profiles/wm/default.nix
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
{ config, lib, _class, ... }:
|
||||
let
|
||||
cfg = config.my.profiles.wm;
|
||||
|
||||
applyWm = wm: configs: lib.mkIf (cfg.windowManager == wm) (lib.my.merge configs);
|
||||
in
|
||||
{
|
||||
options.my.profiles.wm = with lib; {
|
||||
windowManager = mkOption {
|
||||
type = with types; nullOr (enum [ "i3" ]);
|
||||
default = null;
|
||||
example = "i3";
|
||||
description = "Which window manager to use";
|
||||
};
|
||||
};
|
||||
|
||||
config = lib.mkMerge [
|
||||
(applyWm "i3" [
|
||||
(lib.optionalAttrs (_class == "homeManager") {
|
||||
# i3 settings
|
||||
my.home.wm.windowManager = "i3";
|
||||
# Screenshot tool
|
||||
my.home.flameshot.enable = true;
|
||||
# Auto disk mounter
|
||||
my.home.udiskie.enable = true;
|
||||
})
|
||||
|
||||
(lib.optionalAttrs (_class == "nixos") {
|
||||
# Enable i3
|
||||
services.xserver.windowManager.i3.enable = true;
|
||||
# udiskie fails if it can't find this dbus service
|
||||
services.udisks2.enable = true;
|
||||
# Ensure i3lock can actually unlock the session
|
||||
security.pam.services.i3lock.enable = true;
|
||||
})
|
||||
])
|
||||
];
|
||||
}
|
||||
27
modules/common/profiles/x/default.nix
Normal file
27
modules/common/profiles/x/default.nix
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
{ config, lib, pkgs, _class, ... }:
|
||||
let
|
||||
cfg = config.my.profiles.x;
|
||||
in
|
||||
{
|
||||
options.my.profiles.x = with lib; {
|
||||
enable = mkEnableOption "X profile";
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable (lib.mkMerge [
|
||||
(lib.optionalAttrs (_class == "homeManager") {
|
||||
# X configuration
|
||||
my.home.x.enable = true;
|
||||
})
|
||||
|
||||
(lib.optionalAttrs (_class == "nixos") {
|
||||
# Enable the X11 windowing system.
|
||||
services.xserver.enable = true;
|
||||
# Nice wallpaper
|
||||
services.xserver.displayManager.lightdm.background =
|
||||
let
|
||||
wallpapers = "${pkgs.plasma5Packages.plasma-workspace-wallpapers}/share/wallpapers";
|
||||
in
|
||||
"${wallpapers}/summer_1am/contents/images/2560x1600.jpg";
|
||||
})
|
||||
]);
|
||||
}
|
||||
|
|
@ -5,7 +5,6 @@
|
|||
imports = [
|
||||
./hardware
|
||||
./home
|
||||
./profiles
|
||||
./programs
|
||||
./secrets
|
||||
./services
|
||||
|
|
|
|||
|
|
@ -13,8 +13,13 @@ in
|
|||
|
||||
config = lib.mkIf cfg.enable {
|
||||
home-manager = {
|
||||
# Not a fan of out-of-directory imports, but this is a good exception
|
||||
users.${config.my.user.name} = import "${inputs.self}/modules/home";
|
||||
users.${config.my.user.name} = {
|
||||
# Not a fan of out-of-directory imports, but this is a good exception
|
||||
imports = [
|
||||
"${inputs.self}/modules/common"
|
||||
"${inputs.self}/modules/home"
|
||||
];
|
||||
};
|
||||
|
||||
# Nix Flakes compatibility
|
||||
useGlobalPkgs = true;
|
||||
|
|
|
|||
|
|
@ -1,15 +0,0 @@
|
|||
{ config, lib, ... }:
|
||||
let
|
||||
cfg = config.my.profiles.bluetooth;
|
||||
in
|
||||
{
|
||||
options.my.profiles.bluetooth = with lib; {
|
||||
enable = mkEnableOption "bluetooth profile";
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
my.hardware.bluetooth.enable = true;
|
||||
|
||||
my.home.bluetooth.enable = true;
|
||||
};
|
||||
}
|
||||
|
|
@ -1,12 +0,0 @@
|
|||
# Configuration that spans across system and home, or are almagations of modules
|
||||
{ ... }:
|
||||
{
|
||||
imports = [
|
||||
./bluetooth
|
||||
./devices
|
||||
./gtk
|
||||
./laptop
|
||||
./wm
|
||||
./x
|
||||
];
|
||||
}
|
||||
|
|
@ -1,20 +0,0 @@
|
|||
{ config, lib, ... }:
|
||||
let
|
||||
cfg = config.my.profiles.devices;
|
||||
in
|
||||
{
|
||||
options.my.profiles.devices = with lib; {
|
||||
enable = mkEnableOption "devices profile";
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
my.hardware = {
|
||||
ergodox.enable = true;
|
||||
|
||||
trackball.enable = true;
|
||||
};
|
||||
|
||||
# MTP devices auto-mount via file explorers
|
||||
services.gvfs.enable = true;
|
||||
};
|
||||
}
|
||||
|
|
@ -1,17 +0,0 @@
|
|||
{ config, lib, ... }:
|
||||
let
|
||||
cfg = config.my.profiles.gtk;
|
||||
in
|
||||
{
|
||||
options.my.profiles.gtk = with lib; {
|
||||
enable = mkEnableOption "gtk profile";
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
# Allow setting GTK configuration using home-manager
|
||||
programs.dconf.enable = true;
|
||||
|
||||
# GTK theme configuration
|
||||
my.home.gtk.enable = true;
|
||||
};
|
||||
}
|
||||
|
|
@ -1,23 +0,0 @@
|
|||
{ config, lib, ... }:
|
||||
let
|
||||
cfg = config.my.profiles.laptop;
|
||||
in
|
||||
{
|
||||
options.my.profiles.laptop = with lib; {
|
||||
enable = mkEnableOption "laptop profile";
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
# Enable touchpad support
|
||||
services.libinput.enable = true;
|
||||
|
||||
# Enable TLP power management
|
||||
my.services.tlp.enable = true;
|
||||
|
||||
# Enable upower power management
|
||||
my.hardware.upower.enable = true;
|
||||
|
||||
# Enable battery notifications
|
||||
my.home.power-alert.enable = true;
|
||||
};
|
||||
}
|
||||
|
|
@ -1,31 +0,0 @@
|
|||
{ config, lib, ... }:
|
||||
let
|
||||
cfg = config.my.profiles.wm;
|
||||
in
|
||||
{
|
||||
options.my.profiles.wm = with lib; {
|
||||
windowManager = mkOption {
|
||||
type = with types; nullOr (enum [ "i3" ]);
|
||||
default = null;
|
||||
example = "i3";
|
||||
description = "Which window manager to use";
|
||||
};
|
||||
};
|
||||
|
||||
config = lib.mkMerge [
|
||||
(lib.mkIf (cfg.windowManager == "i3") {
|
||||
# Enable i3
|
||||
services.xserver.windowManager.i3.enable = true;
|
||||
# i3 settings
|
||||
my.home.wm.windowManager = "i3";
|
||||
# Screenshot tool
|
||||
my.home.flameshot.enable = true;
|
||||
# Auto disk mounter
|
||||
my.home.udiskie.enable = true;
|
||||
# udiskie fails if it can't find this dbus service
|
||||
services.udisks2.enable = true;
|
||||
# Ensure i3lock can actually unlock the session
|
||||
security.pam.services.i3lock.enable = true;
|
||||
})
|
||||
];
|
||||
}
|
||||
|
|
@ -1,23 +0,0 @@
|
|||
{ config, lib, pkgs, ... }:
|
||||
let
|
||||
cfg = config.my.profiles.x;
|
||||
in
|
||||
{
|
||||
options.my.profiles.x = with lib; {
|
||||
enable = mkEnableOption "X profile";
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
# Enable the X11 windowing system.
|
||||
services.xserver.enable = true;
|
||||
# Nice wallpaper
|
||||
services.xserver.displayManager.lightdm.background =
|
||||
let
|
||||
wallpapers = "${pkgs.plasma5Packages.plasma-workspace-wallpapers}/share/wallpapers";
|
||||
in
|
||||
"${wallpapers}/summer_1am/contents/images/2560x1600.jpg";
|
||||
|
||||
# X configuration
|
||||
my.home.x.enable = true;
|
||||
};
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue