feat(options): implementation of the terminal role and rework of the media options, also some cleaning
This commit is contained in:
parent
170a1950e7
commit
abe0fab3ab
14 changed files with 308 additions and 236 deletions
|
@ -32,13 +32,19 @@
|
||||||
mime.enable = true;
|
mime.enable = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
modules.system = {
|
modules = {
|
||||||
networking = {
|
system.networking = {
|
||||||
wifi.enable = true;
|
wifi.enable = true;
|
||||||
bluetooth.enable = true;
|
bluetooth.enable = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
services.nysh.enable = true;
|
services = {
|
||||||
|
nysh.enable = true;
|
||||||
|
tailscale = {
|
||||||
|
enable = true;
|
||||||
|
tags = [ "client" ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
media.enableAll = true;
|
media.enableAll = true;
|
||||||
};
|
};
|
||||||
|
@ -47,18 +53,6 @@
|
||||||
displayManager.sddm.enable = true;
|
displayManager.sddm.enable = true;
|
||||||
dbus.enable = true;
|
dbus.enable = true;
|
||||||
pipewire.enable = true;
|
pipewire.enable = true;
|
||||||
|
|
||||||
tailscale = {
|
|
||||||
enable = true;
|
|
||||||
extraUpFlags = [
|
|
||||||
"--ssh"
|
|
||||||
"--advertise-tags"
|
|
||||||
"tag:client"
|
|
||||||
"--login-server"
|
|
||||||
"https://hs.ccnlc.eu"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
# Necessary for Nautilus to display trash, DVDs and for gnome-disk-utility to show file systems
|
# Necessary for Nautilus to display trash, DVDs and for gnome-disk-utility to show file systems
|
||||||
gvfs.enable = true;
|
gvfs.enable = true;
|
||||||
gnome.gnome-keyring.enable = true;
|
gnome.gnome-keyring.enable = true;
|
||||||
|
|
|
@ -13,19 +13,19 @@
|
||||||
|
|
||||||
home-manager.users.${username} = {
|
home-manager.users.${username} = {
|
||||||
imports = [
|
imports = [
|
||||||
../../home/rofi
|
|
||||||
../../home/themes/catppuccin.nix
|
../../home/themes/catppuccin.nix
|
||||||
../../home
|
../../home
|
||||||
];
|
];
|
||||||
|
|
||||||
programs.direnv = {
|
programs = {
|
||||||
|
direnv = {
|
||||||
enable = true;
|
enable = true;
|
||||||
nix-direnv.enable = true;
|
nix-direnv.enable = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
programs = {
|
|
||||||
waybar.enable = true;
|
waybar.enable = true;
|
||||||
ssh.enable = true;
|
ssh.enable = true;
|
||||||
|
rofi.enable = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
services = {
|
services = {
|
||||||
|
@ -66,17 +66,11 @@
|
||||||
obsidian
|
obsidian
|
||||||
|
|
||||||
# CLI tools
|
# CLI tools
|
||||||
delta
|
|
||||||
fzf
|
|
||||||
jhead
|
jhead
|
||||||
fdupes
|
fdupes
|
||||||
exiftool
|
exiftool
|
||||||
sshfs
|
sshfs
|
||||||
zip
|
|
||||||
unzip
|
|
||||||
lazygit
|
lazygit
|
||||||
fd
|
|
||||||
ripgrep
|
|
||||||
wl-clipboard
|
wl-clipboard
|
||||||
|
|
||||||
# custom
|
# custom
|
||||||
|
|
|
@ -8,50 +8,46 @@
|
||||||
}:
|
}:
|
||||||
{
|
{
|
||||||
imports = [
|
imports = [
|
||||||
# Include the results of the hardware scan.
|
|
||||||
./hardware-configuration.nix
|
./hardware-configuration.nix
|
||||||
../../modules
|
../../modules
|
||||||
./home.nix
|
./home.nix
|
||||||
];
|
];
|
||||||
|
|
||||||
modules = {
|
modules = {
|
||||||
|
media.enableAll = true;
|
||||||
|
|
||||||
system = {
|
system = {
|
||||||
networking = {
|
networking = {
|
||||||
bluetooth.enable = true;
|
bluetooth.enable = true;
|
||||||
wifi.enable = true;
|
wifi.enable = true;
|
||||||
};
|
};
|
||||||
type = {
|
|
||||||
graphical.enable = true;
|
|
||||||
workstation.enable = true;
|
|
||||||
gaming.enable = true;
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
services = {
|
services = {
|
||||||
nysh.enable = true;
|
nysh.enable = true;
|
||||||
|
tailscale = {
|
||||||
|
enable = true;
|
||||||
|
tags = [ "client" ];
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
# Bootloader.
|
# Bootloader.
|
||||||
boot.loader.systemd-boot.enable = true;
|
boot = {
|
||||||
boot.loader.efi.canTouchEfiVariables = true;
|
loader = {
|
||||||
|
systemd-boot.enable = true;
|
||||||
|
efi.canTouchEfiVariables = true;
|
||||||
|
};
|
||||||
|
|
||||||
boot.initrd.luks.devices."luks-7adaa102-d438-4e9e-9972-4a3c91b887b3".device = "/dev/disk/by-uuid/7adaa102-d438-4e9e-9972-4a3c91b887b3";
|
initrd.luks.devices."luks-7adaa102-d438-4e9e-9972-4a3c91b887b3".device = "/dev/disk/by-uuid/7adaa102-d438-4e9e-9972-4a3c91b887b3";
|
||||||
|
};
|
||||||
|
|
||||||
hardware.graphics.enable = true;
|
hardware.graphics.enable = true;
|
||||||
|
|
||||||
# Configure keymap in X11
|
xdg = {
|
||||||
services.xserver.xkb = {
|
portal.enable = true;
|
||||||
layout = "fr";
|
mime.enable = true;
|
||||||
variant = "";
|
|
||||||
};
|
};
|
||||||
xdg.mime.enable = true;
|
|
||||||
services.pipewire.enable = true;
|
|
||||||
systemd.sleep.extraConfig = ''
|
|
||||||
HibernateDelaySec=1200
|
|
||||||
'';
|
|
||||||
|
|
||||||
programs.pulseview.enable = true;
|
|
||||||
|
|
||||||
specialisation = {
|
specialisation = {
|
||||||
gpu.configuration = {
|
gpu.configuration = {
|
||||||
|
@ -59,9 +55,14 @@
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
age.identityPaths = [
|
age = {
|
||||||
|
identityPaths = [
|
||||||
"/etc/ssh/ssh_host_ed25519_key"
|
"/etc/ssh/ssh_host_ed25519_key"
|
||||||
];
|
];
|
||||||
|
secrets.rustypaste = {
|
||||||
|
file = ../../secrets/rustypaste.age;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
programs = {
|
programs = {
|
||||||
dconf.enable = true;
|
dconf.enable = true;
|
||||||
|
@ -70,22 +71,30 @@
|
||||||
firefox.enable = true;
|
firefox.enable = true;
|
||||||
thunderbird.enable = true;
|
thunderbird.enable = true;
|
||||||
sway.enable = true;
|
sway.enable = true;
|
||||||
|
pulseview.enable = true;
|
||||||
|
|
||||||
|
gnupg.agent = {
|
||||||
|
enable = true;
|
||||||
|
enableSSHSupport = true;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
services = {
|
services = {
|
||||||
tailscale = {
|
dbus.enable = true;
|
||||||
enable = true;
|
fwupd.enable = true;
|
||||||
extraUpFlags = [
|
gvfs.enable = true;
|
||||||
"--ssh"
|
printing.enable = true;
|
||||||
"--advertise-tags"
|
|
||||||
"tag:client"
|
xserver.xkb = {
|
||||||
"--login-server"
|
layout = "fr";
|
||||||
"https://hs.ccnlc.eu"
|
variant = "";
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
services.greetd = {
|
pipewire.enable = true;
|
||||||
|
gnome.gnome-keyring.enable = true;
|
||||||
|
openssh.enable = true;
|
||||||
|
|
||||||
|
greetd = {
|
||||||
enable = true;
|
enable = true;
|
||||||
settings = {
|
settings = {
|
||||||
default_session = {
|
default_session = {
|
||||||
|
@ -94,69 +103,36 @@
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
age.secrets.rustypaste = {
|
|
||||||
file = ../../secrets/rustypaste.age;
|
|
||||||
};
|
|
||||||
#: Virtualisation {{{
|
|
||||||
virtualisation.docker = {
|
|
||||||
enable = false;
|
|
||||||
enableOnBoot = false;
|
|
||||||
rootless = {
|
|
||||||
enable = true;
|
|
||||||
setSocketVariable = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
virtualisation.libvirtd.enable = true;
|
|
||||||
programs.virt-manager.enable = true;
|
|
||||||
#: }}}
|
|
||||||
|
|
||||||
#: Power Consumption {{{
|
#: Power Consumption {{{
|
||||||
|
logind = {
|
||||||
services.logind = {
|
|
||||||
lidSwitch = "suspend-then-hibernate";
|
lidSwitch = "suspend-then-hibernate";
|
||||||
powerKey = "hibernate";
|
powerKey = "hibernate";
|
||||||
};
|
};
|
||||||
|
|
||||||
services.thermald.enable = true;
|
thermald.enable = true;
|
||||||
|
|
||||||
services.tlp = {
|
tlp = {
|
||||||
enable = false;
|
enable = false;
|
||||||
settings = {
|
settings = {
|
||||||
# CPU_SCALING_GOVERNOR_ON_AC = "performance";
|
|
||||||
CPU_SCALING_GOVERNOR_ON_BAT = "powersave";
|
CPU_SCALING_GOVERNOR_ON_BAT = "powersave";
|
||||||
|
|
||||||
CPU_ENERGY_PERF_POLICY_ON_BAT = "power";
|
CPU_ENERGY_PERF_POLICY_ON_BAT = "power";
|
||||||
# CPU_ENERGY_PERF_POLICY_ON_AC = "performance";
|
|
||||||
|
|
||||||
# CPU_MIN_PERF_ON_AC = 0;
|
|
||||||
# CPU_MAX_PERF_ON_AC = 100;
|
|
||||||
CPU_MIN_PERF_ON_BAT = 0;
|
CPU_MIN_PERF_ON_BAT = 0;
|
||||||
CPU_MAX_PERF_ON_BAT = 20;
|
CPU_MAX_PERF_ON_BAT = 20;
|
||||||
|
|
||||||
#Optional helps save long term battery health
|
# Optional helps save long term battery health
|
||||||
START_CHARGE_THRESH_BAT0 = 40; # 40 and below it starts to charge
|
START_CHARGE_THRESH_BAT0 = 40; # 40 and below it starts to charge
|
||||||
STOP_CHARGE_THRESH_BAT0 = 80; # 80 and above it stops charging
|
STOP_CHARGE_THRESH_BAT0 = 80; # 80 and above it stops charging
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
services.upower = {
|
upower = {
|
||||||
enable = true;
|
enable = true;
|
||||||
criticalPowerAction = "Hibernate";
|
criticalPowerAction = "Hibernate";
|
||||||
};
|
};
|
||||||
#:}}}
|
#:}}}
|
||||||
|
|
||||||
services = {
|
|
||||||
dbus.enable = true;
|
|
||||||
fwupd.enable = true;
|
|
||||||
gvfs.enable = true;
|
|
||||||
printing.enable = true;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
xdg.portal.enable = true;
|
|
||||||
|
|
||||||
modules.media.enableAll = true;
|
|
||||||
# Configure console keymap
|
|
||||||
console.keyMap = "fr";
|
console.keyMap = "fr";
|
||||||
|
|
||||||
users = {
|
users = {
|
||||||
|
@ -175,8 +151,6 @@
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
services.gnome.gnome-keyring.enable = true;
|
|
||||||
|
|
||||||
environment.variables = {
|
environment.variables = {
|
||||||
ELECTRON_OZONE_PLATFORM_HINT = "auto";
|
ELECTRON_OZONE_PLATFORM_HINT = "auto";
|
||||||
MOZ_ENABLE_WAYLAND = 1;
|
MOZ_ENABLE_WAYLAND = 1;
|
||||||
|
@ -184,21 +158,10 @@
|
||||||
|
|
||||||
security.polkit.enable = true;
|
security.polkit.enable = true;
|
||||||
|
|
||||||
services.openssh = {
|
|
||||||
enable = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
# List packages installed in system profile. To search, run:
|
|
||||||
# $ nix search wget
|
|
||||||
environment.systemPackages = with pkgs; [
|
environment.systemPackages = with pkgs; [
|
||||||
shared-mime-info
|
shared-mime-info
|
||||||
fish
|
|
||||||
git
|
|
||||||
htop
|
|
||||||
nextcloud-client
|
nextcloud-client
|
||||||
kdeconnect
|
kdeconnect
|
||||||
eza
|
|
||||||
bat
|
|
||||||
glib
|
glib
|
||||||
wireguard-tools
|
wireguard-tools
|
||||||
dconf
|
dconf
|
||||||
|
@ -208,19 +171,5 @@
|
||||||
pop-icon-theme
|
pop-icon-theme
|
||||||
];
|
];
|
||||||
|
|
||||||
# Some programs need SUID wrappers, can be configured further or are
|
system.stateVersion = "23.11";
|
||||||
# started in user sessions.
|
|
||||||
# programs.mtr.enable = true;
|
|
||||||
programs.gnupg.agent = {
|
|
||||||
enable = true;
|
|
||||||
enableSSHSupport = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
# This value determines the NixOS release from which the default
|
|
||||||
# settings for stateful data, like file locations and database versions
|
|
||||||
# on your system were taken. It‘s perfectly fine and recommended to leave
|
|
||||||
# this value at the release version of the first install of this system.
|
|
||||||
# Before changing this value read the documentation for this option
|
|
||||||
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
|
|
||||||
system.stateVersion = "23.11"; # Did you read the comment?
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,12 +26,12 @@
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
programs.direnv = {
|
programs = {
|
||||||
|
direnv = {
|
||||||
enable = true;
|
enable = true;
|
||||||
nix-direnv.enable = true;
|
nix-direnv.enable = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
programs = {
|
|
||||||
waybar.enable = true;
|
waybar.enable = true;
|
||||||
rofi.enable = true;
|
rofi.enable = true;
|
||||||
vscode.enable = true;
|
vscode.enable = true;
|
||||||
|
@ -70,17 +70,11 @@
|
||||||
obsidian
|
obsidian
|
||||||
|
|
||||||
# CLI tools
|
# CLI tools
|
||||||
delta
|
|
||||||
fzf
|
|
||||||
jhead
|
jhead
|
||||||
fdupes
|
fdupes
|
||||||
exiftool
|
exiftool
|
||||||
sshfs
|
sshfs
|
||||||
zip
|
|
||||||
unzip
|
|
||||||
lazygit
|
lazygit
|
||||||
fd
|
|
||||||
ripgrep
|
|
||||||
swaybg
|
swaybg
|
||||||
wl-clipboard
|
wl-clipboard
|
||||||
|
|
||||||
|
|
|
@ -13,11 +13,13 @@
|
||||||
./adguard.nix
|
./adguard.nix
|
||||||
];
|
];
|
||||||
|
|
||||||
age.secrets.navidrome.file = ../../secrets/navidrome.age;
|
age.secrets = {
|
||||||
age.secrets.adguard-dns-list = {
|
navidrome.file = ../../secrets/navidrome.age;
|
||||||
|
adguard-dns-list = {
|
||||||
file = ../../secrets/adguard-dns-list.age;
|
file = ../../secrets/adguard-dns-list.age;
|
||||||
mode = "444";
|
mode = "444";
|
||||||
};
|
};
|
||||||
|
};
|
||||||
|
|
||||||
boot.loader.grub = {
|
boot.loader.grub = {
|
||||||
efiSupport = true;
|
efiSupport = true;
|
||||||
|
@ -56,21 +58,16 @@
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
services.tailscale = {
|
||||||
|
enable = true;
|
||||||
|
isExitNode = true;
|
||||||
|
tags = [ "server" ];
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
services = {
|
services = {
|
||||||
openssh.enable = true;
|
openssh.enable = true;
|
||||||
tailscale = {
|
|
||||||
enable = true;
|
|
||||||
extraUpFlags = [
|
|
||||||
"--ssh"
|
|
||||||
"--advertise-tags"
|
|
||||||
"tag:server"
|
|
||||||
"--login-server"
|
|
||||||
"https://hs.ccnlc.eu"
|
|
||||||
];
|
|
||||||
useRoutingFeatures = "server";
|
|
||||||
};
|
|
||||||
|
|
||||||
immich = {
|
immich = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
}:
|
}:
|
||||||
let
|
let
|
||||||
inherit (lib) mkIf mkOption mkEnableOption;
|
inherit (lib) mkIf mkOption mkEnableOption;
|
||||||
inherit (lib.types) port bool string;
|
inherit (lib.types) port bool str;
|
||||||
cfg = config.modules.container.kitchenowl;
|
cfg = config.modules.container.kitchenowl;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
|
@ -21,7 +21,7 @@ in
|
||||||
default = false;
|
default = false;
|
||||||
};
|
};
|
||||||
version = mkOption {
|
version = mkOption {
|
||||||
type = string;
|
type = str;
|
||||||
default = "latest";
|
default = "latest";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
{
|
{
|
||||||
imports = [
|
imports = [
|
||||||
./media.nix
|
./media.nix
|
||||||
./nysh.nix
|
|
||||||
|
|
||||||
|
./services
|
||||||
./system
|
./system
|
||||||
./container
|
./container
|
||||||
./server
|
./server
|
||||||
|
|
|
@ -5,37 +5,90 @@
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
let
|
let
|
||||||
|
inherit (lib)
|
||||||
|
mkEnableOption
|
||||||
|
mkOption
|
||||||
|
mkIf
|
||||||
|
flatten
|
||||||
|
map
|
||||||
|
filter
|
||||||
|
any
|
||||||
|
;
|
||||||
|
inherit (lib.types)
|
||||||
|
listOf
|
||||||
|
package
|
||||||
|
bool
|
||||||
|
str
|
||||||
|
;
|
||||||
|
|
||||||
cfg = config.modules.media;
|
cfg = config.modules.media;
|
||||||
mkMedia = defPackages: {
|
mkMedia = packages: defaultHandler: {
|
||||||
enable = lib.mkOption { default = cfg.enableAll; };
|
enable = mkOption {
|
||||||
packages = lib.mkOption { default = defPackages; };
|
type = bool;
|
||||||
|
default = cfg.enableAll;
|
||||||
|
};
|
||||||
|
packages = mkOption {
|
||||||
|
type = listOf package;
|
||||||
|
default = packages;
|
||||||
|
};
|
||||||
|
default = mkOption {
|
||||||
|
type = str;
|
||||||
|
default = defaultHandler;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
options.modules.media = {
|
options.modules.media = {
|
||||||
enableAll = lib.mkEnableOption "";
|
enableAll = mkEnableOption "";
|
||||||
|
setMime = mkOption {
|
||||||
|
type = bool;
|
||||||
|
default = true;
|
||||||
|
};
|
||||||
audio = mkMedia [
|
audio = mkMedia [
|
||||||
pkgs.feishin
|
pkgs.feishin
|
||||||
pkgs.lollypop
|
pkgs.amberol
|
||||||
];
|
] "io.bassi.Amberol.desktop";
|
||||||
video = mkMedia [
|
video = mkMedia [
|
||||||
pkgs.vlc
|
pkgs.vlc
|
||||||
];
|
] "vlc.desktop";
|
||||||
|
image = mkMedia [
|
||||||
|
pkgs.loupe
|
||||||
|
] "org.gnome.Loupe.desktop";
|
||||||
ebook = mkMedia [
|
ebook = mkMedia [
|
||||||
pkgs.calibre
|
pkgs.calibre
|
||||||
pkgs.foliate
|
pkgs.foliate
|
||||||
];
|
] "com.github.johnfactotum.Foliate.desktop";
|
||||||
};
|
};
|
||||||
|
|
||||||
config = {
|
config =
|
||||||
environment.systemPackages = lib.flatten (
|
let
|
||||||
lib.map (opt: opt.packages) (
|
anyEnabled = any (e: e) [
|
||||||
lib.filter (opt: opt.enable) [
|
cfg.audio.enable
|
||||||
|
cfg.video.enable
|
||||||
|
cfg.ebook.enable
|
||||||
|
];
|
||||||
|
in
|
||||||
|
mkIf anyEnabled {
|
||||||
|
environment.systemPackages = flatten (
|
||||||
|
map (opt: opt.packages) (
|
||||||
|
filter (opt: opt.enable) [
|
||||||
cfg.audio
|
cfg.audio
|
||||||
cfg.video
|
cfg.video
|
||||||
cfg.ebook
|
cfg.ebook
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
xdg.mime = mkIf cfg.setMime {
|
||||||
|
enable = true;
|
||||||
|
defaultApplications = {
|
||||||
|
"video/*" = cfg.ebook.default;
|
||||||
|
"image/*" = cfg.image.default;
|
||||||
|
"audio/*" = cfg.audio.default;
|
||||||
|
# Ebooks sadly don't have a singular major type.
|
||||||
|
"application/epub+zip" = cfg.ebook.default;
|
||||||
};
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
6
options/services/default.nix
Normal file
6
options/services/default.nix
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
./nysh.nix
|
||||||
|
./tailscale.nix
|
||||||
|
];
|
||||||
|
}
|
68
options/services/tailscale.nix
Normal file
68
options/services/tailscale.nix
Normal file
|
@ -0,0 +1,68 @@
|
||||||
|
{ config, lib, ... }:
|
||||||
|
let
|
||||||
|
inherit (lib)
|
||||||
|
mkIf
|
||||||
|
mkEnableOption
|
||||||
|
mkOption
|
||||||
|
concatLists
|
||||||
|
concatStringsSep
|
||||||
|
;
|
||||||
|
inherit (lib.types)
|
||||||
|
str
|
||||||
|
listOf
|
||||||
|
enum
|
||||||
|
bool
|
||||||
|
;
|
||||||
|
cfg = config.modules.services.tailscale;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.modules.services.tailscale = {
|
||||||
|
enable = mkEnableOption "Tailscale";
|
||||||
|
|
||||||
|
server = mkOption {
|
||||||
|
type = str;
|
||||||
|
default = "https://hs.ccnlc.eu";
|
||||||
|
};
|
||||||
|
|
||||||
|
isExitNode = mkOption {
|
||||||
|
type = bool;
|
||||||
|
default = false;
|
||||||
|
description = "Enable if node should serve advertise itself as an exit node.";
|
||||||
|
};
|
||||||
|
|
||||||
|
tags = mkOption {
|
||||||
|
type = listOf (enum [
|
||||||
|
"client"
|
||||||
|
"server"
|
||||||
|
]);
|
||||||
|
default = [ ];
|
||||||
|
apply = map (e: "tag:${e}");
|
||||||
|
};
|
||||||
|
|
||||||
|
defaultFlags = mkOption {
|
||||||
|
type = listOf str;
|
||||||
|
default = [ "--ssh" ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
services.tailscale = {
|
||||||
|
enable = true;
|
||||||
|
extraUpFlags = concatLists [
|
||||||
|
cfg.defaultFlags
|
||||||
|
(
|
||||||
|
mkIf cfg.tags != [ ] [
|
||||||
|
"--advertise-tags"
|
||||||
|
(concatStringsSep "," cfg.tags)
|
||||||
|
]
|
||||||
|
)
|
||||||
|
(mkIf cfg.server [
|
||||||
|
"--login-server"
|
||||||
|
cfg.server
|
||||||
|
])
|
||||||
|
];
|
||||||
|
useRoutingFeatures = mkIf cfg.isExitNode "server";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
|
@ -1,37 +1,6 @@
|
||||||
{ lib, ... }:
|
|
||||||
let
|
|
||||||
inherit (lib.types) bool array string;
|
|
||||||
inherit (lib) mkEnableOption;
|
|
||||||
in
|
|
||||||
{
|
{
|
||||||
imports = [ ./networking ];
|
imports = [
|
||||||
|
./networking
|
||||||
options.modules.system = {
|
./roles
|
||||||
type = {
|
];
|
||||||
gaming.enable = lib.mkEnableOption {
|
|
||||||
type = bool;
|
|
||||||
default = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
graphical.enable = lib.mkEnableOption {
|
|
||||||
type = bool;
|
|
||||||
default = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
workstation.enable = lib.mkEnableOption {
|
|
||||||
type = bool;
|
|
||||||
default = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
server.enable = lib.mkEnableOption {
|
|
||||||
type = bool;
|
|
||||||
default = false;
|
|
||||||
};
|
|
||||||
|
|
||||||
vm.enable = lib.mkEnableOption {
|
|
||||||
type = lib.types.bool;
|
|
||||||
default = false;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
1
options/system/roles/default.nix
Normal file
1
options/system/roles/default.nix
Normal file
|
@ -0,0 +1 @@
|
||||||
|
{ imports = [ ./terminal.nix ]; }
|
47
options/system/roles/terminal.nix
Normal file
47
options/system/roles/terminal.nix
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
inherit (lib) mkEnableOption mkOption mkIf;
|
||||||
|
inherit (lib.types) listOf package;
|
||||||
|
cfg = config.modules.system.roles.terminal;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.modules.system.roles.terminal = {
|
||||||
|
enable = mkEnableOption "terminal packages" // {
|
||||||
|
default = true;
|
||||||
|
defaultText = ''
|
||||||
|
Enable by default, most systems will need a common set of CLI tools.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
extraPackages = mkOption {
|
||||||
|
type = listOf package;
|
||||||
|
default = [ ];
|
||||||
|
};
|
||||||
|
defaultPackages = mkOption {
|
||||||
|
type = listOf package;
|
||||||
|
default = with pkgs; [
|
||||||
|
btop
|
||||||
|
eza
|
||||||
|
bat
|
||||||
|
fish
|
||||||
|
cyme
|
||||||
|
lsof
|
||||||
|
git
|
||||||
|
delta
|
||||||
|
fzf
|
||||||
|
zip
|
||||||
|
unzip
|
||||||
|
fd
|
||||||
|
ripgrep
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
environment.systemPackages = cfg.extraPackages ++ cfg.defaultPackages;
|
||||||
|
};
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue