mirror of
https://codeberg.org/leana8959/.files.git
synced 2025-12-06 14:49:14 +00:00
nix: format with alejandra
This commit is contained in:
parent
d5cad148da
commit
95eb4b71e0
118 changed files with 1291 additions and 1703 deletions
|
|
@ -1,6 +1,4 @@
|
|||
{ lib, ... }:
|
||||
|
||||
{
|
||||
{lib, ...}: {
|
||||
nix.gc = lib.mkDefault {
|
||||
automatic = true;
|
||||
dates = "semi-annually";
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
{ programs.command-not-found.enable = false; }
|
||||
{programs.command-not-found.enable = false;}
|
||||
|
|
|
|||
|
|
@ -1,14 +1,13 @@
|
|||
{
|
||||
|
||||
services.xserver.xkb = {
|
||||
extraLayouts = {
|
||||
"myDvorak" = {
|
||||
languages = [ "us" ];
|
||||
languages = ["us"];
|
||||
symbolsFile = ./dvorak.xkb;
|
||||
description = "Leana's dvorak";
|
||||
};
|
||||
"myDvorakFrench" = {
|
||||
languages = [ "fr" ];
|
||||
languages = ["fr"];
|
||||
symbolsFile = ./dvorak-french.xkb;
|
||||
description = "Leana's dvorak but baguette";
|
||||
};
|
||||
|
|
@ -16,5 +15,4 @@
|
|||
};
|
||||
|
||||
console.useXkbConfig = true;
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,9 +1,5 @@
|
|||
{ lib, ... }:
|
||||
|
||||
{
|
||||
|
||||
{lib, ...}: {
|
||||
config = lib.mkDefault {
|
||||
|
||||
time.timeZone = "Europe/Paris";
|
||||
i18n = {
|
||||
defaultLocale = "en_US.UTF-8";
|
||||
|
|
@ -13,7 +9,5 @@
|
|||
"zh_TW.UTF-8/UTF-8"
|
||||
];
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,8 @@
|
|||
{ lib, hostname, ... }:
|
||||
|
||||
{
|
||||
lib,
|
||||
hostname,
|
||||
...
|
||||
}: {
|
||||
networking.hostName = hostname;
|
||||
|
||||
services.openssh = {
|
||||
|
|
@ -9,7 +11,7 @@
|
|||
PermitRootLogin = "prohibit-password";
|
||||
PasswordAuthentication = false;
|
||||
};
|
||||
ports = lib.mkDefault [ 22 ];
|
||||
ports = lib.mkDefault [22];
|
||||
};
|
||||
|
||||
users.users.root.openssh.authorizedKeys.keys = [
|
||||
|
|
|
|||
|
|
@ -3,42 +3,32 @@
|
|||
lib,
|
||||
config,
|
||||
...
|
||||
}:
|
||||
|
||||
let
|
||||
}: let
|
||||
cfg = config.services.parrot;
|
||||
t = lib.types;
|
||||
in
|
||||
|
||||
{
|
||||
|
||||
in {
|
||||
options = {
|
||||
|
||||
services.parrot = {
|
||||
|
||||
enable = lib.mkEnableOption "parrot";
|
||||
|
||||
environmentFile = lib.mkOption {
|
||||
description = "Path to an environment file, you can set the token there";
|
||||
type = t.path;
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
|
||||
users.users."parrot" = {
|
||||
group = "parrot";
|
||||
isSystemUser = true;
|
||||
};
|
||||
users.groups."parrot" = { };
|
||||
users.groups."parrot" = {};
|
||||
|
||||
systemd.services."parrot" = {
|
||||
description = " A hassle-free, highly performant, self-hosted Discord music bot with YouTube and Spotify support. Powered by yt-dlp.";
|
||||
after = [ "network.target" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
after = ["network.target"];
|
||||
wantedBy = ["multi-user.target"];
|
||||
|
||||
serviceConfig = {
|
||||
User = "parrot";
|
||||
|
|
@ -48,9 +38,6 @@ in
|
|||
|
||||
ExecStart = "${lib.getExe pkgs.parrot}";
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,4 @@
|
|||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
{pkgs, ...}: {
|
||||
security.sudo.extraConfig = ''
|
||||
Defaults lecture = always
|
||||
Defaults lecture_file = ${pkgs.writeText "sudo_lecture_file" ''
|
||||
|
|
|
|||
|
|
@ -1,7 +1,8 @@
|
|||
{ lib, pkgs, ... }:
|
||||
|
||||
{
|
||||
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}: {
|
||||
nix = {
|
||||
package = lib.mkDefault pkgs.nix;
|
||||
|
||||
|
|
@ -28,7 +29,5 @@
|
|||
|
||||
sandbox = true;
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,19 +3,12 @@
|
|||
config,
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
|
||||
let
|
||||
}: let
|
||||
cfg = config.services.typst-bot;
|
||||
t = lib.types;
|
||||
in
|
||||
|
||||
{
|
||||
|
||||
in {
|
||||
options = {
|
||||
|
||||
services.typst-bot = {
|
||||
|
||||
enable = lib.mkEnableOption "typst-bot";
|
||||
|
||||
dataDir = lib.mkOption {
|
||||
|
|
@ -28,18 +21,15 @@ in
|
|||
description = "Path to an environment file, you can set the token there";
|
||||
type = t.path;
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
|
||||
users.users."typst-bot" = {
|
||||
group = "typst-bot";
|
||||
isSystemUser = true;
|
||||
};
|
||||
users.groups."typst-bot" = { };
|
||||
users.groups."typst-bot" = {};
|
||||
|
||||
systemd.tmpfiles.rules = [
|
||||
"d ${cfg.dataDir}/cache 700 typst-bot typst-bot - -"
|
||||
|
|
@ -48,15 +38,15 @@ in
|
|||
|
||||
systemd.services."typst-bot" = {
|
||||
description = "A discord bot to render Typst code";
|
||||
after = [ "network.target" ];
|
||||
wantedBy = [ "multi-user.target" ];
|
||||
after = ["network.target"];
|
||||
wantedBy = ["multi-user.target"];
|
||||
|
||||
preStart = ''
|
||||
touch ${cfg.dataDir}/sqlite/db.sqlite
|
||||
'';
|
||||
|
||||
# Don't pollute the global path
|
||||
path = [ pkgs.myPkgs.typst-bot ];
|
||||
path = [pkgs.myPkgs.typst-bot];
|
||||
script = "typst-bot";
|
||||
|
||||
serviceConfig = {
|
||||
|
|
@ -71,9 +61,6 @@ in
|
|||
cfg.environmentFile
|
||||
];
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,20 +1,18 @@
|
|||
{ lib, ... }:
|
||||
|
||||
{
|
||||
{lib, ...}: {
|
||||
nixpkgs.config.allowUnfreePredicate = lib.mkDefault (
|
||||
pkg:
|
||||
builtins.elem (lib.getName pkg) [
|
||||
"discord"
|
||||
builtins.elem (lib.getName pkg) [
|
||||
"discord"
|
||||
|
||||
"brscan5"
|
||||
"brscan5-etc-files"
|
||||
"brscan5"
|
||||
"brscan5-etc-files"
|
||||
|
||||
"steam"
|
||||
"steam-original"
|
||||
"steam-run"
|
||||
"steam"
|
||||
"steam-original"
|
||||
"steam-run"
|
||||
|
||||
"vscode"
|
||||
"code"
|
||||
]
|
||||
"vscode"
|
||||
"code"
|
||||
]
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,3 @@
|
|||
{ lib, ... }:
|
||||
|
||||
{
|
||||
{lib, ...}: {
|
||||
zramSwap.enable = lib.mkDefault true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,32 +1,26 @@
|
|||
{
|
||||
self,
|
||||
...
|
||||
}@inputs:
|
||||
|
||||
let
|
||||
inherit (self.lib)
|
||||
{self, ...} @ inputs: let
|
||||
inherit
|
||||
(self.lib)
|
||||
modulesFromDir
|
||||
mergeAttrsWith
|
||||
;
|
||||
|
||||
inherit (inputs.nixpkgs) lib;
|
||||
in
|
||||
|
||||
let
|
||||
in let
|
||||
# generic modules that can be enabled on all devices
|
||||
common =
|
||||
mergeAttrsWith
|
||||
(x: y: {
|
||||
imports = [
|
||||
x
|
||||
y
|
||||
];
|
||||
})
|
||||
(modulesFromDir ./common)
|
||||
{
|
||||
agenix = inputs.agenix.nixosModules.default;
|
||||
url-eater = inputs.url-eater.nixosModules.default;
|
||||
};
|
||||
(x: y: {
|
||||
imports = [
|
||||
x
|
||||
y
|
||||
];
|
||||
})
|
||||
(modulesFromDir ./common)
|
||||
{
|
||||
agenix = inputs.agenix.nixosModules.default;
|
||||
url-eater = inputs.url-eater.nixosModules.default;
|
||||
};
|
||||
|
||||
# extra opt-in configurations
|
||||
extra = modulesFromDir ./extra;
|
||||
|
|
@ -41,12 +35,15 @@ let
|
|||
self.nixosModules.leana
|
||||
inputs.home-manager.nixosModules.home-manager
|
||||
(
|
||||
{ config, lib, ... }:
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
...
|
||||
}: {
|
||||
home-manager = {
|
||||
extraSpecialArgs.hostname = name;
|
||||
sharedModules = [ { home.stateVersion = lib.mkDefault config.system.stateVersion; } ];
|
||||
users.leana.imports = [ (self.homeModules.${"named-" + name} or { }) ];
|
||||
sharedModules = [{home.stateVersion = lib.mkDefault config.system.stateVersion;}];
|
||||
users.leana.imports = [(self.homeModules.${"named-" + name} or {})];
|
||||
};
|
||||
}
|
||||
)
|
||||
|
|
@ -55,10 +52,9 @@ let
|
|||
];
|
||||
}) (modulesFromDir ./named);
|
||||
in
|
||||
|
||||
lib.mergeAttrsList [
|
||||
{ commonModules.imports = lib.attrValues common; }
|
||||
common
|
||||
extra
|
||||
named
|
||||
]
|
||||
lib.mergeAttrsList [
|
||||
{commonModules.imports = lib.attrValues common;}
|
||||
common
|
||||
extra
|
||||
named
|
||||
]
|
||||
|
|
|
|||
|
|
@ -1,16 +1,14 @@
|
|||
{ config, ... }:
|
||||
|
||||
{
|
||||
nix.settings.trusted-users = [ "leana" ];
|
||||
{config, ...}: {
|
||||
nix.settings.trusted-users = ["leana"];
|
||||
|
||||
users.users."leana" = {
|
||||
isNormalUser = true;
|
||||
home = "/home/leana";
|
||||
description = "Leana";
|
||||
group = "leana";
|
||||
extraGroups = [ "wheel" ];
|
||||
extraGroups = ["wheel"];
|
||||
openssh.authorizedKeys.keys = config.users.users.root.openssh.authorizedKeys.keys;
|
||||
};
|
||||
|
||||
users.groups.leana = { };
|
||||
users.groups.leana = {};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,5 @@
|
|||
{
|
||||
|
||||
services.pipewire = {
|
||||
|
||||
enable = true;
|
||||
alsa.enable = true;
|
||||
alsa.support32Bit = true;
|
||||
|
|
@ -16,9 +14,7 @@
|
|||
};
|
||||
};
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
users.users."leana".extraGroups = [ "audio" ];
|
||||
|
||||
users.users."leana".extraGroups = ["audio"];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,26 +1,25 @@
|
|||
{ config, lib, ... }:
|
||||
|
||||
{
|
||||
|
||||
config,
|
||||
lib,
|
||||
...
|
||||
}: {
|
||||
networking = {
|
||||
networkmanager.enable = lib.mkForce false;
|
||||
|
||||
firewall.allowedTCPPorts = [ 8080 ];
|
||||
firewall.allowedTCPPorts = [8080];
|
||||
|
||||
wireless = {
|
||||
enable = true;
|
||||
userControlled.enable = true;
|
||||
secretsFile = config.age.secrets.wpa_password.path;
|
||||
networks =
|
||||
let
|
||||
ordered =
|
||||
nss:
|
||||
lib.pipe nss [
|
||||
lib.lists.reverseList
|
||||
(lib.lists.imap0 (i: lib.mapAttrs (_: n: n // { priority = i; })))
|
||||
lib.mergeAttrsList
|
||||
];
|
||||
in
|
||||
networks = let
|
||||
ordered = nss:
|
||||
lib.pipe nss [
|
||||
lib.lists.reverseList
|
||||
(lib.lists.imap0 (i: lib.mapAttrs (_: n: n // {priority = i;})))
|
||||
lib.mergeAttrsList
|
||||
];
|
||||
in
|
||||
ordered [
|
||||
# first in list is tried first
|
||||
{
|
||||
|
|
@ -28,12 +27,12 @@
|
|||
"Pei’s Wifi".pskRaw = "ext:PEI";
|
||||
}
|
||||
{
|
||||
"_SNCF_WIFI_INOUI" = { };
|
||||
"EurostarTrainsWiFi" = { };
|
||||
"_SNCF_WIFI_INOUI" = {};
|
||||
"EurostarTrainsWiFi" = {};
|
||||
}
|
||||
{
|
||||
eduroam = {
|
||||
authProtocols = [ "WPA-EAP" ];
|
||||
authProtocols = ["WPA-EAP"];
|
||||
auth = ''
|
||||
pairwise=CCMP
|
||||
group=CCMP TKIP
|
||||
|
|
@ -47,12 +46,11 @@
|
|||
'';
|
||||
};
|
||||
}
|
||||
{ "iPhone de Léana 江".pskRaw = "ext:PHONE"; }
|
||||
{"iPhone de Léana 江".pskRaw = "ext:PHONE";}
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
hardware.bluetooth.enable = true;
|
||||
services.blueman.enable = true;
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,13 +1,11 @@
|
|||
{
|
||||
|
||||
services.postgresql = {
|
||||
enable = true;
|
||||
ensureDatabases = [ "M1BDD" ];
|
||||
ensureUsers = [ { name = "M1BDD"; } ];
|
||||
ensureDatabases = ["M1BDD"];
|
||||
ensureUsers = [{name = "M1BDD";}];
|
||||
};
|
||||
|
||||
services.monetdb = {
|
||||
enable = true;
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,4 @@
|
|||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
{pkgs, ...}: {
|
||||
users.users."leana".extraGroups = [
|
||||
"video" # light
|
||||
"i2c" # i2c (for ddcutil)
|
||||
|
|
@ -11,7 +9,7 @@
|
|||
|
||||
# Control external screen brightness
|
||||
hardware.i2c.enable = true;
|
||||
environment.systemPackages = [ pkgs.ddcutil ];
|
||||
environment.systemPackages = [pkgs.ddcutil];
|
||||
|
||||
# Auto setup external screen
|
||||
services.autorandr = {
|
||||
|
|
@ -22,61 +20,60 @@
|
|||
|
||||
ignoreLid = true; # clamshell support
|
||||
|
||||
profiles =
|
||||
let
|
||||
lg-monitor = "00ffffffffffff001e6d0777dd6a0100041f0104b53c22789e3e31ae5047ac270c50542108007140818081c0a9c0d1c08100010101014dd000a0f0703e803020650c58542100001a286800a0f0703e800890650c58542100001a000000fd00383d1e8738000a202020202020000000fc004c472048445220344b0a202020012102031c7144900403012309070783010000e305c000e6060501605550023a801871382d40582c450058542100001e565e00a0a0a029503020350058542100001a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e";
|
||||
built-in = "00ffffffffffff0030e4210500000000001a0104951f1178ea9d35945c558f291e5054000000010101010101010101010101010101012e3680a070381f403020350035ae1000001a542b80a070381f403020350035ae1000001a000000fe004c4720446973706c61790a2020000000fe004c503134305746362d535042370074";
|
||||
profiles = let
|
||||
lg-monitor = "00ffffffffffff001e6d0777dd6a0100041f0104b53c22789e3e31ae5047ac270c50542108007140818081c0a9c0d1c08100010101014dd000a0f0703e803020650c58542100001a286800a0f0703e800890650c58542100001a000000fd00383d1e8738000a202020202020000000fc004c472048445220344b0a202020012102031c7144900403012309070783010000e305c000e6060501605550023a801871382d40582c450058542100001e565e00a0a0a029503020350058542100001a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001e";
|
||||
built-in = "00ffffffffffff0030e4210500000000001a0104951f1178ea9d35945c558f291e5054000000010101010101010101010101010101012e3680a070381f403020350035ae1000001a542b80a070381f403020350035ae1000001a000000fe004c4720446973706c61790a2020000000fe004c503134305746362d535042370074";
|
||||
|
||||
allOff = {
|
||||
eDP-1.enable = false;
|
||||
DP-1.enable = false;
|
||||
DP-2.enable = false;
|
||||
DP-2-1.enable = false;
|
||||
DP-2-2.enable = false;
|
||||
HDMI-1.enable = false;
|
||||
HDMI-2.enable = false;
|
||||
allOff = {
|
||||
eDP-1.enable = false;
|
||||
DP-1.enable = false;
|
||||
DP-2.enable = false;
|
||||
DP-2-1.enable = false;
|
||||
DP-2-2.enable = false;
|
||||
HDMI-1.enable = false;
|
||||
HDMI-2.enable = false;
|
||||
};
|
||||
in {
|
||||
"home-DP-2-2" = let
|
||||
dev = "DP-2-2";
|
||||
in {
|
||||
fingerprint = {
|
||||
${dev} = lg-monitor;
|
||||
eDP-1 = built-in;
|
||||
};
|
||||
in
|
||||
{
|
||||
|
||||
"home-DP-2-2" =
|
||||
let
|
||||
dev = "DP-2-2";
|
||||
in
|
||||
{
|
||||
fingerprint = {
|
||||
${dev} = lg-monitor;
|
||||
eDP-1 = built-in;
|
||||
};
|
||||
config = allOff // {
|
||||
${dev} = {
|
||||
enable = true;
|
||||
crtc = 1;
|
||||
mode = "3840x2160";
|
||||
rate = "60";
|
||||
primary = true;
|
||||
};
|
||||
};
|
||||
hooks.postswitch = {
|
||||
"10_xrdb-dpi" = "xrdb -merge ${pkgs.writeText "xrdb-dpi-config" ''
|
||||
Xcursor.size: 84
|
||||
Xft.dpi: 163
|
||||
''}";
|
||||
|
||||
"20_alsa" = ''
|
||||
amixer set Master 10%
|
||||
amixer set Master unmute
|
||||
'';
|
||||
|
||||
"30_xkbcapswap" = ''
|
||||
setxkbmap -option
|
||||
'';
|
||||
config =
|
||||
allOff
|
||||
// {
|
||||
${dev} = {
|
||||
enable = true;
|
||||
crtc = 1;
|
||||
mode = "3840x2160";
|
||||
rate = "60";
|
||||
primary = true;
|
||||
};
|
||||
};
|
||||
hooks.postswitch = {
|
||||
"10_xrdb-dpi" = "xrdb -merge ${pkgs.writeText "xrdb-dpi-config" ''
|
||||
Xcursor.size: 84
|
||||
Xft.dpi: 163
|
||||
''}";
|
||||
|
||||
"laptop" = {
|
||||
fingerprint.eDP-1 = built-in;
|
||||
config = allOff // {
|
||||
"20_alsa" = ''
|
||||
amixer set Master 10%
|
||||
amixer set Master unmute
|
||||
'';
|
||||
|
||||
"30_xkbcapswap" = ''
|
||||
setxkbmap -option
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
"laptop" = {
|
||||
fingerprint.eDP-1 = built-in;
|
||||
config =
|
||||
allOff
|
||||
// {
|
||||
eDP-1 = {
|
||||
enable = true;
|
||||
crtc = 0;
|
||||
|
|
@ -85,24 +82,22 @@
|
|||
primary = true;
|
||||
};
|
||||
};
|
||||
hooks.postswitch = {
|
||||
"10_xrdb-dpi" = "xrdb -merge ${pkgs.writeText "xrdb-dpi-config" ''
|
||||
Xcursor.size: 64
|
||||
Xft.dpi: 120
|
||||
''}";
|
||||
hooks.postswitch = {
|
||||
"10_xrdb-dpi" = "xrdb -merge ${pkgs.writeText "xrdb-dpi-config" ''
|
||||
Xcursor.size: 64
|
||||
Xft.dpi: 120
|
||||
''}";
|
||||
|
||||
"20_alsa" = ''
|
||||
amixer set Master 10%
|
||||
amixer set Master mute
|
||||
'';
|
||||
"20_alsa" = ''
|
||||
amixer set Master 10%
|
||||
amixer set Master mute
|
||||
'';
|
||||
|
||||
"30_xkbcapswap" = ''
|
||||
setxkbmap -option caps:swapescape
|
||||
'';
|
||||
};
|
||||
"30_xkbcapswap" = ''
|
||||
setxkbmap -option caps:swapescape
|
||||
'';
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,4 @@
|
|||
{
|
||||
|
||||
systemd.tmpfiles.rules = [
|
||||
"d /mnt/data 0700 leana leana - -"
|
||||
"d /mnt/seagate 0700 leana leana - -"
|
||||
|
|
@ -15,9 +14,9 @@
|
|||
|
||||
fileSystems = {
|
||||
/*
|
||||
WARNING:
|
||||
Use "noauto" if you want to mount the drive at a later time and not all the time
|
||||
Otherwise the mount would fail and cascade into the graphical session being stopped
|
||||
WARNING:
|
||||
Use "noauto" if you want to mount the drive at a later time and not all the time
|
||||
Otherwise the mount would fail and cascade into the graphical session being stopped
|
||||
*/
|
||||
|
||||
"/mnt/data" = {
|
||||
|
|
@ -59,5 +58,4 @@
|
|||
];
|
||||
};
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,4 @@
|
|||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
|
||||
{pkgs, ...}: {
|
||||
services.xserver.windowManager.xmonad = {
|
||||
enable = true;
|
||||
enableContribAndExtras = true;
|
||||
|
|
@ -36,5 +33,4 @@
|
|||
"class_i = 'fcitx'"
|
||||
];
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,10 +6,8 @@
|
|||
lib,
|
||||
modulesPath,
|
||||
...
|
||||
}:
|
||||
|
||||
{
|
||||
imports = [ (modulesPath + "/installer/scan/not-detected.nix") ];
|
||||
}: {
|
||||
imports = [(modulesPath + "/installer/scan/not-detected.nix")];
|
||||
|
||||
boot.initrd.availableKernelModules = [
|
||||
"xhci_pci"
|
||||
|
|
@ -17,9 +15,9 @@
|
|||
"usb_storage"
|
||||
"sd_mod"
|
||||
];
|
||||
boot.initrd.kernelModules = [ "dm-snapshot" ];
|
||||
boot.kernelModules = [ "kvm-intel" ];
|
||||
boot.extraModulePackages = [ ];
|
||||
boot.initrd.kernelModules = ["dm-snapshot"];
|
||||
boot.kernelModules = ["kvm-intel"];
|
||||
boot.extraModulePackages = [];
|
||||
|
||||
# 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
|
||||
|
|
|
|||
|
|
@ -1,5 +1,4 @@
|
|||
{
|
||||
|
||||
hardware.keyboard.zsa.enable = true;
|
||||
|
||||
services.libinput = {
|
||||
|
|
@ -13,12 +12,11 @@
|
|||
};
|
||||
};
|
||||
|
||||
users.users.leana.extraGroups = [ "scanner" ];
|
||||
users.users.leana.extraGroups = ["scanner"];
|
||||
hardware.sane = {
|
||||
enable = true;
|
||||
brscan5.enable = true;
|
||||
};
|
||||
|
||||
services.xserver.xkb.layout = "myDvorak";
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,4 @@
|
|||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
|
||||
{pkgs, ...}: {
|
||||
environment.systemPackages = [
|
||||
pkgs.agenix
|
||||
pkgs.deploy-rs
|
||||
|
|
@ -42,5 +39,4 @@
|
|||
}
|
||||
'';
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,8 @@
|
|||
{ config, modulesPath, ... }:
|
||||
|
||||
{
|
||||
config,
|
||||
modulesPath,
|
||||
...
|
||||
}: {
|
||||
imports = [
|
||||
# The generator and hardware configuration
|
||||
(modulesPath + "/installer/sd-card/sd-image-aarch64.nix")
|
||||
|
|
@ -16,8 +18,8 @@
|
|||
];
|
||||
services.postgresql = {
|
||||
enable = true;
|
||||
ensureDatabases = [ "mockingjay" ];
|
||||
ensureUsers = [ { name = "postgres"; } ];
|
||||
ensureDatabases = ["mockingjay"];
|
||||
ensureUsers = [{name = "postgres";}];
|
||||
|
||||
enableTCPIP = true;
|
||||
authentication = ''
|
||||
|
|
|
|||
|
|
@ -1,13 +1,9 @@
|
|||
{
|
||||
|
||||
services.pipewire = {
|
||||
|
||||
enable = true;
|
||||
pulse.enable = true;
|
||||
jack.enable = true;
|
||||
|
||||
};
|
||||
|
||||
users.users."leana".extraGroups = [ "audio" ];
|
||||
|
||||
users.users."leana".extraGroups = ["audio"];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,4 @@
|
|||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
{pkgs, ...}: {
|
||||
systemd.sleep.extraConfig = ''
|
||||
HibernateDelaySec=1d
|
||||
'';
|
||||
|
|
|
|||
|
|
@ -3,16 +3,13 @@
|
|||
pkgs,
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
|
||||
{
|
||||
|
||||
}: {
|
||||
# helps calibre detect kindle
|
||||
services.gvfs.enable = true;
|
||||
|
||||
# iOS
|
||||
services.usbmuxd.enable = true;
|
||||
environment.systemPackages = [ pkgs.libimobiledevice ];
|
||||
environment.systemPackages = [pkgs.libimobiledevice];
|
||||
|
||||
# Wireless Regulatory Domain
|
||||
# https://community.frame.work/t/framework-nixos-linux-users-self-help/31426/77
|
||||
|
|
@ -24,22 +21,20 @@
|
|||
networking = {
|
||||
networkmanager.enable = lib.mkForce false;
|
||||
|
||||
firewall.allowedTCPPorts = [ 8080 ];
|
||||
firewall.allowedTCPPorts = [8080];
|
||||
|
||||
wireless = {
|
||||
enable = true;
|
||||
userControlled.enable = true;
|
||||
secretsFile = config.age.secrets.wpa_password.path;
|
||||
networks =
|
||||
let
|
||||
ordered =
|
||||
nss:
|
||||
lib.pipe nss [
|
||||
lib.lists.reverseList
|
||||
(lib.lists.imap0 (i: lib.mapAttrs (_: n: n // { priority = i; })))
|
||||
lib.mergeAttrsList
|
||||
];
|
||||
in
|
||||
networks = let
|
||||
ordered = nss:
|
||||
lib.pipe nss [
|
||||
lib.lists.reverseList
|
||||
(lib.lists.imap0 (i: lib.mapAttrs (_: n: n // {priority = i;})))
|
||||
lib.mergeAttrsList
|
||||
];
|
||||
in
|
||||
ordered [
|
||||
# first in list is tried first
|
||||
{
|
||||
|
|
@ -47,12 +42,12 @@
|
|||
"Pei’s Wifi".pskRaw = "ext:PEI";
|
||||
}
|
||||
{
|
||||
"_SNCF_WIFI_INOUI" = { };
|
||||
"EurostarTrainsWiFi" = { };
|
||||
"_SNCF_WIFI_INOUI" = {};
|
||||
"EurostarTrainsWiFi" = {};
|
||||
}
|
||||
{
|
||||
eduroam = {
|
||||
authProtocols = [ "WPA-EAP" ];
|
||||
authProtocols = ["WPA-EAP"];
|
||||
auth = ''
|
||||
pairwise=CCMP
|
||||
group=CCMP TKIP
|
||||
|
|
@ -66,12 +61,11 @@
|
|||
'';
|
||||
};
|
||||
}
|
||||
{ "iPhone de Léana 江".pskRaw = "ext:PHONE"; }
|
||||
{"iPhone de Léana 江".pskRaw = "ext:PHONE";}
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
hardware.bluetooth.enable = true;
|
||||
services.blueman.enable = true;
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,4 @@
|
|||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
{pkgs, ...}: {
|
||||
imports = [
|
||||
./hardware-configuration.nix # generated
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,4 @@
|
|||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
{pkgs, ...}: {
|
||||
users.users."leana".extraGroups = [
|
||||
"video" # light
|
||||
"i2c" # i2c (for ddcutil)
|
||||
|
|
@ -11,7 +9,7 @@
|
|||
|
||||
# Control external screen brightness
|
||||
hardware.i2c.enable = true;
|
||||
environment.systemPackages = [ pkgs.ddcutil ];
|
||||
environment.systemPackages = [pkgs.ddcutil];
|
||||
|
||||
# Auto setup external screen
|
||||
services.autorandr = {
|
||||
|
|
@ -20,65 +18,66 @@
|
|||
"20_xmonad" = "xmonad --restart"; # make sure feh keeps up
|
||||
};
|
||||
|
||||
profiles =
|
||||
let
|
||||
lg-monitor = "00ffffffffffff001e6d0677dd6a0100041f0103803c2278ea3e31ae5047ac270c50542108007140818081c0a9c0d1c0810001010101b8ce0050f0705a8018108a0058542100001e04740030f2705a80b0588a0058542100001a000000fd00383d1e873c000a202020202020000000fc004c472048445220344b0a20202001bf02033b714d9022201f1203040161605d5e5f230907076d030c001000983c20006001020367d85dc401788001e30f0003e305c000e6060501605550023a801871382d40582c450058542100001e565e00a0a0a029503020350058542100001a000000ff003130344e544b4632513839330a0000000000000000000000000000ff";
|
||||
built-in = "00ffffffffffff0009e5ca0b000000002f200104a51c137803de50a3544c99260f505400000001010101010101010101010101010101115cd01881e02d50302036001dbe1000001aa749d01881e02d50302036001dbe1000001a000000fe00424f452043510a202020202020000000fe004e4531333546424d2d4e34310a0073";
|
||||
profiles = let
|
||||
lg-monitor = "00ffffffffffff001e6d0677dd6a0100041f0103803c2278ea3e31ae5047ac270c50542108007140818081c0a9c0d1c0810001010101b8ce0050f0705a8018108a0058542100001e04740030f2705a80b0588a0058542100001a000000fd00383d1e873c000a202020202020000000fc004c472048445220344b0a20202001bf02033b714d9022201f1203040161605d5e5f230907076d030c001000983c20006001020367d85dc401788001e30f0003e305c000e6060501605550023a801871382d40582c450058542100001e565e00a0a0a029503020350058542100001a000000ff003130344e544b4632513839330a0000000000000000000000000000ff";
|
||||
built-in = "00ffffffffffff0009e5ca0b000000002f200104a51c137803de50a3544c99260f505400000001010101010101010101010101010101115cd01881e02d50302036001dbe1000001aa749d01881e02d50302036001dbe1000001a000000fe00424f452043510a202020202020000000fe004e4531333546424d2d4e34310a0073";
|
||||
|
||||
allOff = {
|
||||
eDP-1.enable = false;
|
||||
DP-1.enable = false;
|
||||
DP-2.enable = false;
|
||||
DP-3.enable = false;
|
||||
DP-4.enable = false;
|
||||
DP-5.enable = false;
|
||||
DP-6.enable = false;
|
||||
DP-7.enable = false;
|
||||
DP-8.enable = false;
|
||||
DP-9.enable = false;
|
||||
DP-10.enable = false;
|
||||
DP-11.enable = false;
|
||||
DP-12.enable = false;
|
||||
allOff = {
|
||||
eDP-1.enable = false;
|
||||
DP-1.enable = false;
|
||||
DP-2.enable = false;
|
||||
DP-3.enable = false;
|
||||
DP-4.enable = false;
|
||||
DP-5.enable = false;
|
||||
DP-6.enable = false;
|
||||
DP-7.enable = false;
|
||||
DP-8.enable = false;
|
||||
DP-9.enable = false;
|
||||
DP-10.enable = false;
|
||||
DP-11.enable = false;
|
||||
DP-12.enable = false;
|
||||
};
|
||||
|
||||
home-switch = {
|
||||
"10_xrdb-dpi" = "xrdb -merge ${pkgs.writeText "xrdb-dpi-config" ''
|
||||
Xcursor.size: 84
|
||||
Xft.dpi: 150
|
||||
''}";
|
||||
|
||||
"20_alsa" = ''
|
||||
amixer set Master 10%
|
||||
amixer set Master unmute
|
||||
'';
|
||||
|
||||
"30_xkbcapswap" = ''
|
||||
setxkbmap -option
|
||||
'';
|
||||
};
|
||||
|
||||
laptop-switch = {
|
||||
"10_xrdb-dpi" = "xrdb -merge ${pkgs.writeText "xrdb-dpi-config" ''
|
||||
Xcursor.size: 64
|
||||
Xft.dpi: 150
|
||||
''}";
|
||||
|
||||
"20_alsa" = ''
|
||||
amixer set Master 10%
|
||||
amixer set Master mute
|
||||
'';
|
||||
|
||||
"30_xkbcapswap" = ''
|
||||
setxkbmap -option caps:swapescape
|
||||
'';
|
||||
};
|
||||
|
||||
mkHomeProfile = dev: {
|
||||
fingerprint = {
|
||||
${dev} = lg-monitor;
|
||||
eDP-1 = built-in;
|
||||
};
|
||||
|
||||
home-switch = {
|
||||
"10_xrdb-dpi" = "xrdb -merge ${pkgs.writeText "xrdb-dpi-config" ''
|
||||
Xcursor.size: 84
|
||||
Xft.dpi: 150
|
||||
''}";
|
||||
|
||||
"20_alsa" = ''
|
||||
amixer set Master 10%
|
||||
amixer set Master unmute
|
||||
'';
|
||||
|
||||
"30_xkbcapswap" = ''
|
||||
setxkbmap -option
|
||||
'';
|
||||
};
|
||||
|
||||
laptop-switch = {
|
||||
"10_xrdb-dpi" = "xrdb -merge ${pkgs.writeText "xrdb-dpi-config" ''
|
||||
Xcursor.size: 64
|
||||
Xft.dpi: 150
|
||||
''}";
|
||||
|
||||
"20_alsa" = ''
|
||||
amixer set Master 10%
|
||||
amixer set Master mute
|
||||
'';
|
||||
|
||||
"30_xkbcapswap" = ''
|
||||
setxkbmap -option caps:swapescape
|
||||
'';
|
||||
};
|
||||
|
||||
mkHomeProfile = dev: {
|
||||
fingerprint = {
|
||||
${dev} = lg-monitor;
|
||||
eDP-1 = built-in;
|
||||
};
|
||||
config = allOff // {
|
||||
config =
|
||||
allOff
|
||||
// {
|
||||
${dev} = {
|
||||
enable = true;
|
||||
crtc = 1;
|
||||
|
|
@ -87,27 +86,27 @@
|
|||
primary = true;
|
||||
};
|
||||
};
|
||||
hooks.postswitch = home-switch;
|
||||
};
|
||||
hooks.postswitch = home-switch;
|
||||
};
|
||||
in {
|
||||
home-DP-1 = mkHomeProfile "DP-1";
|
||||
home-DP-2 = mkHomeProfile "DP-2";
|
||||
home-DP-3 = mkHomeProfile "DP-3";
|
||||
home-DP-4 = mkHomeProfile "DP-4";
|
||||
home-DP-5 = mkHomeProfile "DP-5";
|
||||
home-DP-6 = mkHomeProfile "DP-6";
|
||||
home-DP-7 = mkHomeProfile "DP-7";
|
||||
home-DP-8 = mkHomeProfile "DP-8";
|
||||
home-DP-9 = mkHomeProfile "DP-9";
|
||||
home-DP-10 = mkHomeProfile "DP-10";
|
||||
home-DP-11 = mkHomeProfile "DP-11";
|
||||
home-DP-12 = mkHomeProfile "DP-12";
|
||||
|
||||
in
|
||||
{
|
||||
home-DP-1 = mkHomeProfile "DP-1";
|
||||
home-DP-2 = mkHomeProfile "DP-2";
|
||||
home-DP-3 = mkHomeProfile "DP-3";
|
||||
home-DP-4 = mkHomeProfile "DP-4";
|
||||
home-DP-5 = mkHomeProfile "DP-5";
|
||||
home-DP-6 = mkHomeProfile "DP-6";
|
||||
home-DP-7 = mkHomeProfile "DP-7";
|
||||
home-DP-8 = mkHomeProfile "DP-8";
|
||||
home-DP-9 = mkHomeProfile "DP-9";
|
||||
home-DP-10 = mkHomeProfile "DP-10";
|
||||
home-DP-11 = mkHomeProfile "DP-11";
|
||||
home-DP-12 = mkHomeProfile "DP-12";
|
||||
|
||||
laptop = {
|
||||
fingerprint.eDP-1 = built-in;
|
||||
config = allOff // {
|
||||
laptop = {
|
||||
fingerprint.eDP-1 = built-in;
|
||||
config =
|
||||
allOff
|
||||
// {
|
||||
eDP-1 = {
|
||||
enable = true;
|
||||
crtc = 0;
|
||||
|
|
@ -116,10 +115,8 @@
|
|||
rate = "60.00";
|
||||
};
|
||||
};
|
||||
hooks.postswitch = laptop-switch;
|
||||
};
|
||||
|
||||
hooks.postswitch = laptop-switch;
|
||||
};
|
||||
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,8 @@
|
|||
{ config, pkgs, ... }:
|
||||
|
||||
{
|
||||
|
||||
config,
|
||||
pkgs,
|
||||
...
|
||||
}: {
|
||||
systemd.tmpfiles.rules = [
|
||||
# tmux-sessionizer directories
|
||||
"d /home/leana/r 0700 leana leana - -"
|
||||
|
|
@ -11,9 +12,9 @@
|
|||
|
||||
fileSystems = {
|
||||
/*
|
||||
WARNING:
|
||||
Use "noauto" if you want to mount the drive at a later time and not all the time
|
||||
Otherwise the mount would fail and cascade into the graphical session being stopped
|
||||
WARNING:
|
||||
Use "noauto" if you want to mount the drive at a later time and not all the time
|
||||
Otherwise the mount would fail and cascade into the graphical session being stopped
|
||||
*/
|
||||
|
||||
"/home/leana/mnt/tdk32" = {
|
||||
|
|
@ -42,26 +43,23 @@
|
|||
two /dev/disk/by-uuid/552234e0-0820-44d8-b7ac-2653076149a5 ${config.age.secrets.two_pwd.path} noauto
|
||||
'';
|
||||
|
||||
systemd.mounts =
|
||||
let
|
||||
bindToCryptDev = dev: {
|
||||
what = "/dev/mapper/${dev}";
|
||||
where = "/mnt/${dev}";
|
||||
unitConfig = {
|
||||
Requires = [ "systemd-cryptsetup@${dev}.service" ];
|
||||
After = [ "systemd-cryptsetup@${dev}.service" ];
|
||||
PropagatesStopTo = [ "systemd-cryptsetup@${dev}.service" ];
|
||||
};
|
||||
systemd.mounts = let
|
||||
bindToCryptDev = dev: {
|
||||
what = "/dev/mapper/${dev}";
|
||||
where = "/mnt/${dev}";
|
||||
unitConfig = {
|
||||
Requires = ["systemd-cryptsetup@${dev}.service"];
|
||||
After = ["systemd-cryptsetup@${dev}.service"];
|
||||
PropagatesStopTo = ["systemd-cryptsetup@${dev}.service"];
|
||||
};
|
||||
in
|
||||
[
|
||||
(bindToCryptDev "four")
|
||||
(bindToCryptDev "two")
|
||||
];
|
||||
};
|
||||
in [
|
||||
(bindToCryptDev "four")
|
||||
(bindToCryptDev "two")
|
||||
];
|
||||
|
||||
environment.systemPackages = [
|
||||
pkgs.lsof
|
||||
pkgs.smartmontools
|
||||
];
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,4 @@
|
|||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
|
||||
{pkgs, ...}: {
|
||||
services.xserver.windowManager.xmonad = {
|
||||
enable = true;
|
||||
enableContribAndExtras = true;
|
||||
|
|
@ -36,5 +33,4 @@
|
|||
"class_i = 'fcitx'"
|
||||
];
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,17 +1,21 @@
|
|||
# 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, ... }:
|
||||
|
||||
{
|
||||
imports =
|
||||
[ (modulesPath + "/installer/scan/not-detected.nix")
|
||||
];
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
modulesPath,
|
||||
...
|
||||
}: {
|
||||
imports = [
|
||||
(modulesPath + "/installer/scan/not-detected.nix")
|
||||
];
|
||||
|
||||
boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "thunderbolt" ];
|
||||
boot.initrd.kernelModules = [ "dm-snapshot" ];
|
||||
boot.kernelModules = [ "kvm-amd" ];
|
||||
boot.extraModulePackages = [ ];
|
||||
boot.initrd.availableKernelModules = ["nvme" "xhci_pci" "thunderbolt"];
|
||||
boot.initrd.kernelModules = ["dm-snapshot"];
|
||||
boot.kernelModules = ["kvm-amd"];
|
||||
boot.extraModulePackages = [];
|
||||
|
||||
# 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
|
||||
|
|
|
|||
|
|
@ -1,5 +1,4 @@
|
|||
{
|
||||
|
||||
hardware.keyboard.zsa.enable = true;
|
||||
|
||||
services.libinput = {
|
||||
|
|
@ -13,7 +12,7 @@
|
|||
};
|
||||
};
|
||||
|
||||
users.users.leana.extraGroups = [ "scanner" ];
|
||||
users.users.leana.extraGroups = ["scanner"];
|
||||
hardware.sane = {
|
||||
enable = true;
|
||||
brscan5.enable = true;
|
||||
|
|
@ -22,5 +21,4 @@
|
|||
services.xserver.xkb.layout = "myDvorak";
|
||||
|
||||
services.fprintd.enable = false;
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,4 @@
|
|||
{
|
||||
|
||||
programs.vim = {
|
||||
enable = true;
|
||||
defaultEditor = true;
|
||||
|
|
@ -35,5 +34,4 @@
|
|||
}
|
||||
'';
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,73 +1,65 @@
|
|||
{ config, ... }:
|
||||
|
||||
{
|
||||
|
||||
services.restic.backups =
|
||||
let
|
||||
pruneOpts = [
|
||||
"--keep-daily 7"
|
||||
"--keep-weekly 4"
|
||||
"--keep-monthly 12"
|
||||
"--keep-yearly 10"
|
||||
{config, ...}: {
|
||||
services.restic.backups = let
|
||||
pruneOpts = [
|
||||
"--keep-daily 7"
|
||||
"--keep-weekly 4"
|
||||
"--keep-monthly 12"
|
||||
"--keep-yearly 10"
|
||||
];
|
||||
in {
|
||||
"Documents-backblaze" = {
|
||||
paths = [
|
||||
"/home/leana/Documents"
|
||||
"/home/leana/Calibre"
|
||||
];
|
||||
in
|
||||
{
|
||||
|
||||
"Documents-backblaze" = {
|
||||
paths = [
|
||||
"/home/leana/Documents"
|
||||
"/home/leana/Calibre"
|
||||
];
|
||||
|
||||
passwordFile = config.age.secrets.restic_backblaze_pwd.path;
|
||||
repositoryFile = config.age.secrets.restic_backblaze_repo.path;
|
||||
environmentFile = config.age.secrets.restic_backblaze_env.path;
|
||||
|
||||
inherit pruneOpts;
|
||||
};
|
||||
|
||||
"four" = {
|
||||
paths = [
|
||||
"/home/leana/Music"
|
||||
"/home/leana/Documents"
|
||||
"/home/leana/Calibre"
|
||||
"/home/leana/Images"
|
||||
];
|
||||
|
||||
repository = "/mnt/four/restic";
|
||||
passwordFile = config.age.secrets.restic_four_pwd.path;
|
||||
|
||||
timerConfig = {
|
||||
OnCalendar = "02:00";
|
||||
};
|
||||
|
||||
inherit pruneOpts;
|
||||
};
|
||||
|
||||
"two-to-four" = {
|
||||
paths = [ "/mnt/two" ];
|
||||
|
||||
timerConfig = null;
|
||||
|
||||
repository = "/mnt/four/restic";
|
||||
passwordFile = config.age.secrets.restic_four_pwd.path;
|
||||
|
||||
exclude = [ "lost+found" ];
|
||||
|
||||
inherit pruneOpts;
|
||||
};
|
||||
passwordFile = config.age.secrets.restic_backblaze_pwd.path;
|
||||
repositoryFile = config.age.secrets.restic_backblaze_repo.path;
|
||||
environmentFile = config.age.secrets.restic_backblaze_env.path;
|
||||
|
||||
inherit pruneOpts;
|
||||
};
|
||||
|
||||
systemd.services = {
|
||||
"four" = {
|
||||
paths = [
|
||||
"/home/leana/Music"
|
||||
"/home/leana/Documents"
|
||||
"/home/leana/Calibre"
|
||||
"/home/leana/Images"
|
||||
];
|
||||
|
||||
repository = "/mnt/four/restic";
|
||||
passwordFile = config.age.secrets.restic_four_pwd.path;
|
||||
|
||||
timerConfig = {
|
||||
OnCalendar = "02:00";
|
||||
};
|
||||
|
||||
inherit pruneOpts;
|
||||
};
|
||||
|
||||
"two-to-four" = {
|
||||
paths = ["/mnt/two"];
|
||||
|
||||
timerConfig = null;
|
||||
|
||||
repository = "/mnt/four/restic";
|
||||
passwordFile = config.age.secrets.restic_four_pwd.path;
|
||||
|
||||
exclude = ["lost+found"];
|
||||
|
||||
inherit pruneOpts;
|
||||
};
|
||||
};
|
||||
|
||||
systemd.services = {
|
||||
# TODO:
|
||||
# Wait for upstream to introduce direct access to unitConfig
|
||||
# c.f. https://github.com/NixOS/nixpkgs/pull/368234
|
||||
"restic-backups-four" = {
|
||||
requires = [ "mnt-four.mount" ];
|
||||
after = [ "mnt-four.mount" ];
|
||||
unitConfig.PropagatesStopTo = [ "mnt-four.mount" ];
|
||||
requires = ["mnt-four.mount"];
|
||||
after = ["mnt-four.mount"];
|
||||
unitConfig.PropagatesStopTo = ["mnt-four.mount"];
|
||||
};
|
||||
|
||||
"restic-backups-two-to-four" = {
|
||||
|
|
@ -84,7 +76,5 @@
|
|||
"mnt-four.mount"
|
||||
];
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,4 @@
|
|||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
|
||||
{pkgs, ...}: {
|
||||
# IPD
|
||||
programs.wireshark = {
|
||||
enable = true;
|
||||
|
|
@ -10,5 +7,4 @@
|
|||
users.users."leana".extraGroups = [
|
||||
"wireshark"
|
||||
];
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue