mirror of
https://github.com/Swarsel/.dotfiles.git
synced 2026-04-14 13:19:09 +02:00
wip: migrate client modules
This commit is contained in:
parent
f6d2ff1544
commit
7ce27d5d2f
245 changed files with 20254 additions and 188 deletions
1645
SwarselSystems.org
1645
SwarselSystems.org
File diff suppressed because it is too large
Load diff
57
aspects/battery-pii.nix
Normal file
57
aspects/battery-pii.nix
Normal file
|
|
@ -0,0 +1,57 @@
|
||||||
|
{ lib, ... }:
|
||||||
|
let
|
||||||
|
# If the given expression is a bare set, it will be wrapped in a function,
|
||||||
|
# so that the imported file can always be applied to the inputs, similar to
|
||||||
|
# how modules can be functions or sets.
|
||||||
|
constSet = x: if builtins.isAttrs x then (_: x) else x;
|
||||||
|
|
||||||
|
sopsImportEncrypted =
|
||||||
|
assert lib.assertMsg (builtins ? extraBuiltins.sopsImportEncrypted)
|
||||||
|
"The extra builtin 'sopsImportEncrypted' is not available, so repo.secrets cannot be decrypted. Did you forget to add nix-plugins and point it to `<flakeRoot>/files/nix/extra-builtins.nix` ?";
|
||||||
|
builtins.extraBuiltins.sopsImportEncrypted;
|
||||||
|
|
||||||
|
importEncrypted =
|
||||||
|
path:
|
||||||
|
constSet (
|
||||||
|
if builtins.pathExists path then
|
||||||
|
sopsImportEncrypted path
|
||||||
|
else
|
||||||
|
{ }
|
||||||
|
);
|
||||||
|
in
|
||||||
|
{
|
||||||
|
den = {
|
||||||
|
schema.conf = { config, inputs, lib, homeLib, nodes, globals, ... }: {
|
||||||
|
options = {
|
||||||
|
repo = {
|
||||||
|
secretFiles = lib.mkOption {
|
||||||
|
default = { };
|
||||||
|
type = lib.types.attrsOf lib.types.path;
|
||||||
|
example = lib.literalExpression "{ local = ./pii.nix.enc; }";
|
||||||
|
description = ''
|
||||||
|
This is for storing PII.
|
||||||
|
Each path given here must be an sops-encrypted .nix file. For each attribute `<name>`,
|
||||||
|
the corresponding file will be decrypted, imported and exposed as {option}`repo.secrets.<name>`.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
secrets = lib.mkOption {
|
||||||
|
readOnly = true;
|
||||||
|
default = lib.mapAttrs (_: x: importEncrypted x { inherit lib homeLib nodes globals inputs config; inherit (inputs.topologyPrivate) topologyPrivate; }) config.repo.secretFiles;
|
||||||
|
type = lib.types.unspecified;
|
||||||
|
description = "Exposes the loaded repo secrets.";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
config = {
|
||||||
|
repo.secretFiles =
|
||||||
|
let
|
||||||
|
local = config.node.secretsDir + "/pii.nix.enc";
|
||||||
|
in
|
||||||
|
(lib.optionalAttrs (lib.pathExists local) { inherit local; }) // {
|
||||||
|
common = ../secrets/repo/pii.nix.enc;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
24
aspects/battery-sops.nix
Normal file
24
aspects/battery-sops.nix
Normal file
|
|
@ -0,0 +1,24 @@
|
||||||
|
{ lib, den, ... }:
|
||||||
|
let
|
||||||
|
hostContext = { name, args, class }: { host }: {
|
||||||
|
nixos.sops.secrets.${name} = lib.mkIf (!host.isPublic) args // lib.optionalAttrs (class == "homeManager") { owner = host.mainUser; };
|
||||||
|
};
|
||||||
|
|
||||||
|
# deadnix: skip
|
||||||
|
hostUserContext = { name, args, class }: { host, user }: {
|
||||||
|
nixos.sops.secrets.${name} = lib.mkIf (!host.isPublic) args // lib.optionalAttrs (class == "homeManager") { owner = host.mainUser; };
|
||||||
|
};
|
||||||
|
|
||||||
|
homeContext = { name, args }: { home }: {
|
||||||
|
homeManager.sops.secrets.${name} = lib.mkIf (!home.isPublic) args;
|
||||||
|
};
|
||||||
|
|
||||||
|
in
|
||||||
|
{
|
||||||
|
den.provides.sops = { name, args, class ? "homeManager" }: den.lib.parametric.exactly {
|
||||||
|
includes = [
|
||||||
|
(hostContext { inherit name args class; })
|
||||||
|
(hostUserContext { inherit name args class; })
|
||||||
|
] ++ lib.optional (class == "homeManager") (homeContext { inherit name args; });
|
||||||
|
};
|
||||||
|
}
|
||||||
19
aspects/defaults.nix
Normal file
19
aspects/defaults.nix
Normal file
|
|
@ -0,0 +1,19 @@
|
||||||
|
{ lib, den, ... }:
|
||||||
|
{
|
||||||
|
den = {
|
||||||
|
schema.user.classes = lib.mkDefault [ "homeManager" ];
|
||||||
|
ctx.user.includes = [ den.provides.mutual-provider ];
|
||||||
|
default = {
|
||||||
|
nixos = { lib, minimal, ... }: {
|
||||||
|
users.mutableUsers = lib.mkIf (!minimal) (lib.mkDefault false);
|
||||||
|
system.stateVersion = lib.mkDefault "23.05";
|
||||||
|
};
|
||||||
|
homeManager = {
|
||||||
|
home.stateVersion = lib.mkDefault "23.05";
|
||||||
|
};
|
||||||
|
includes = [
|
||||||
|
den.provides.define-user
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
104
aspects/hosts/pyramid.nix
Normal file
104
aspects/hosts/pyramid.nix
Normal file
|
|
@ -0,0 +1,104 @@
|
||||||
|
{ mkNixos, lib, den, ... }:
|
||||||
|
let
|
||||||
|
hostContext = { host }:
|
||||||
|
let
|
||||||
|
inherit (host) mainUser;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
nixos = { self, inputs, lib, ... }: {
|
||||||
|
|
||||||
|
imports = [
|
||||||
|
inputs.nixos-hardware.nixosModules.framework-16-7040-amd
|
||||||
|
|
||||||
|
"${self}/hosts/nixos/x86_64-linux/pyramid/disk-config.nix"
|
||||||
|
"${self}/hosts/nixos/x86_64-linux/pyramid/hardware-configuration.nix"
|
||||||
|
|
||||||
|
"${self}/modules/nixos/optional/amdcpu.nix"
|
||||||
|
"${self}/modules/nixos/optional/amdgpu.nix"
|
||||||
|
"${self}/modules/nixos/optional/framework.nix"
|
||||||
|
"${self}/modules/nixos/optional/gaming.nix"
|
||||||
|
"${self}/modules/nixos/optional/hibernation.nix"
|
||||||
|
"${self}/modules/nixos/optional/nswitch-rcm.nix"
|
||||||
|
"${self}/modules/nixos/optional/virtualbox.nix"
|
||||||
|
"${self}/modules/nixos/optional/work.nix"
|
||||||
|
"${self}/modules/nixos/optional/niri.nix"
|
||||||
|
"${self}/modules/nixos/optional/noctalia.nix"
|
||||||
|
];
|
||||||
|
|
||||||
|
topology.self = {
|
||||||
|
interfaces = {
|
||||||
|
eth1.network = lib.mkForce "home";
|
||||||
|
wifi = { };
|
||||||
|
fritz-wg.network = "fritz-wg";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
swarselsystems = {
|
||||||
|
lowResolution = "1280x800";
|
||||||
|
highResolution = "2560x1600";
|
||||||
|
isLaptop = true;
|
||||||
|
isNixos = true;
|
||||||
|
isBtrfs = true;
|
||||||
|
isLinux = true;
|
||||||
|
sharescreen = "eDP-2";
|
||||||
|
info = "Framework Laptop 16, 7940HS, RX7700S, 64GB RAM";
|
||||||
|
firewall = lib.mkForce true;
|
||||||
|
wallpaper = self + /files/wallpaper/landscape/lenovowp.png;
|
||||||
|
hasBluetooth = true;
|
||||||
|
hasFingerprint = true;
|
||||||
|
isImpermanence = false;
|
||||||
|
isSecureBoot = true;
|
||||||
|
isCrypted = true;
|
||||||
|
inherit (host.repo.secrets.local) hostName;
|
||||||
|
inherit (host.repo.secrets.local) fqdn;
|
||||||
|
hibernation.offset = 533760;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
home-manager = { lib, minimal, ... }: {
|
||||||
|
users."${mainUser}" = {
|
||||||
|
swarselsystems = {
|
||||||
|
isSecondaryGpu = true;
|
||||||
|
SecondaryGpuCard = "pci-0000_03_00_0";
|
||||||
|
cpuCount = 16;
|
||||||
|
temperatureHwmon = {
|
||||||
|
isAbsolutePath = true;
|
||||||
|
path = "/sys/devices/virtual/thermal/thermal_zone0/";
|
||||||
|
input-filename = "temp4_input";
|
||||||
|
};
|
||||||
|
monitors = {
|
||||||
|
main = {
|
||||||
|
# name = "BOE 0x0BC9 Unknown";
|
||||||
|
name = "BOE 0x0BC9";
|
||||||
|
mode = "2560x1600";
|
||||||
|
scale = "1";
|
||||||
|
position = "2560,0";
|
||||||
|
workspace = "15:L";
|
||||||
|
output = "eDP-2";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
} // lib.optionalAttrs (!minimal) {
|
||||||
|
swarselprofiles = {
|
||||||
|
personal = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
networking.nftables.firewall.zones.untrusted.interfaces = [ "wlan*" "enp*" ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
in
|
||||||
|
lib.recursiveUpdate
|
||||||
|
(mkNixos
|
||||||
|
{
|
||||||
|
name = "pyramid";
|
||||||
|
system = "x86_64-linux";
|
||||||
|
})
|
||||||
|
{
|
||||||
|
den.aspects.pyramid = {
|
||||||
|
includes = [
|
||||||
|
hostContext
|
||||||
|
den.aspects.work
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
14
aspects/shared.nix
Normal file
14
aspects/shared.nix
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
{
|
||||||
|
den = {
|
||||||
|
schema.conf = { lib, ... }: {
|
||||||
|
options = {
|
||||||
|
isPublic = lib.mkEnableOption "mark this as a public config (= without secrets)";
|
||||||
|
isMicroVM = lib.mkEnableOption "mark this config as a microvm";
|
||||||
|
mainUser = lib.mkOption {
|
||||||
|
type = lib.types.str;
|
||||||
|
default = "swarsel";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
143
aspects/shell.nix
Normal file
143
aspects/shell.nix
Normal file
|
|
@ -0,0 +1,143 @@
|
||||||
|
{ den, ... }:
|
||||||
|
{
|
||||||
|
den.aspects.shell = {
|
||||||
|
provides.zsh = {
|
||||||
|
includes = [
|
||||||
|
(den.provides.sops { name = "croc-password"; args = { }; })
|
||||||
|
(den.provides.sops { name = "github-nixpkgs-review-token"; args = { }; })
|
||||||
|
];
|
||||||
|
nixos = { pkgs, ... }: {
|
||||||
|
programs.zsh = {
|
||||||
|
enable = true;
|
||||||
|
enableCompletion = false;
|
||||||
|
};
|
||||||
|
users.defaultUserShell = pkgs.zsh;
|
||||||
|
environment = {
|
||||||
|
shells = with pkgs; [ zsh ];
|
||||||
|
pathsToLink = [ "/share/zsh" ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
homeManager = { self, config, pkgs, lib, minimal, globals, confLib, arch, ... }:
|
||||||
|
let
|
||||||
|
inherit (config.swarselsystems) flakePath isNixos homeDir;
|
||||||
|
crocDomain = globals.services.croc.domain;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
programs.zsh = {
|
||||||
|
enable = true;
|
||||||
|
} // lib.optionalAttrs (!minimal) {
|
||||||
|
shellAliases =
|
||||||
|
{
|
||||||
|
nb = "nix build";
|
||||||
|
nbl = "nix build --builders \"\"";
|
||||||
|
nbo = "nix build --offline --builders \"\"";
|
||||||
|
nd = "nix develop";
|
||||||
|
ns = "nix shell";
|
||||||
|
hmswitch = lib.mkIf (!isNixos) "${lib.getExe pkgs.home-manager} --flake ${flakePath}#$(hostname) switch |& nom";
|
||||||
|
nswitch = lib.mkIf isNixos "cd ${flakePath}; swarsel-deploy $(hostname) switch; cd -;";
|
||||||
|
ntest = lib.mkIf isNixos "cd ${flakePath}; swarsel-deploy $(hostname) test; cd -;";
|
||||||
|
nboot = lib.mkIf isNixos "cd ${flakePath}; swarsel-deploy $(hostname) boot; cd -;";
|
||||||
|
ndry = lib.mkIf isNixos "cd ${flakePath}; swarsel-deploy $(hostname) dry-activate; cd -;";
|
||||||
|
magit = "emacsclient -nc -e \"(magit-status)\"";
|
||||||
|
config = "git --git-dir=$HOME/.cfg/ --work-tree=$HOME";
|
||||||
|
g = "git";
|
||||||
|
c = "git --git-dir=$FLAKE/.git --work-tree=$FLAKE/";
|
||||||
|
passpush = "cd ~/.local/share/password-store; git add .; git commit -m 'pass file changes'; git push; cd -;";
|
||||||
|
passpull = "cd ~/.local/share/password-store; git pull; cd -;";
|
||||||
|
hotspot = "nmcli connection up local; nmcli device wifi hotspot;";
|
||||||
|
youtube-dl = "yt-dlp";
|
||||||
|
cat-orig = "cat";
|
||||||
|
# cdr = "cd \"$( (find $DOCUMENT_DIR_WORK $DOCUMENT_DIR_PRIV -maxdepth 1 && echo $FLAKE) | fzf )\"";
|
||||||
|
cdr = "source cdr";
|
||||||
|
nix-ldd-ldd = "LD_LIBRARY_PATH=$NIX_LD_LIBRARY_PATH ldd";
|
||||||
|
nix-ldd = "LD_LIBRARY_PATH=$NIX_LD_LIBRARY_PATH ldd";
|
||||||
|
nix-ldd-locate = "nix-locate --minimal --top-level -w ";
|
||||||
|
nix-store-search = "ls /nix/store | grep";
|
||||||
|
fs-diff = "sudo mount -o subvol=/ /dev/mapper/cryptroot /mnt ; fs-diff";
|
||||||
|
lt = "eza -las modified --total-size";
|
||||||
|
boot-diff = "nix store diff-closures /run/*-system";
|
||||||
|
gen-diff = "nix profile diff-closures --profile /nix/var/nix/profiles/system";
|
||||||
|
cc = "wl-copy";
|
||||||
|
build-topology = "nix build --override-input topologyPrivate ${self}/files/topology/private ${flakePath}#topology.${arch}.config.output";
|
||||||
|
build-topology-dev = "nix build --show-trace --override-input nix-topology ${homeDir}/Documents/Private/nix-topology --override-input topologyPrivate ${self}/files/topology/private ${flakePath}#topology.${arch}.config.output";
|
||||||
|
build-iso = "nix build --print-out-paths .#live-iso";
|
||||||
|
nix-review-local = "nix run nixpkgs#nixpkgs-review -- rev HEAD";
|
||||||
|
nix-review-post = "nix run nixpkgs#nixpkgs-review -- pr --post-result --systems linux";
|
||||||
|
};
|
||||||
|
autosuggestion.enable = true;
|
||||||
|
enableCompletion = true;
|
||||||
|
syntaxHighlighting.enable = true;
|
||||||
|
autocd = false;
|
||||||
|
cdpath = [
|
||||||
|
"~/.dotfiles"
|
||||||
|
];
|
||||||
|
defaultKeymap = "emacs";
|
||||||
|
dirHashes = {
|
||||||
|
dl = "$HOME/Downloads";
|
||||||
|
gh = "$HOME/Documents/GitHub";
|
||||||
|
};
|
||||||
|
history = {
|
||||||
|
expireDuplicatesFirst = true;
|
||||||
|
append = true;
|
||||||
|
ignoreSpace = true;
|
||||||
|
ignoreDups = true;
|
||||||
|
path = "${config.home.homeDirectory}/.histfile";
|
||||||
|
save = 100000;
|
||||||
|
size = 100000;
|
||||||
|
};
|
||||||
|
historySubstringSearch = {
|
||||||
|
enable = true;
|
||||||
|
searchDownKey = "^[OB";
|
||||||
|
searchUpKey = "^[OA";
|
||||||
|
};
|
||||||
|
initContent = ''
|
||||||
|
my-forward-word() {
|
||||||
|
local WORDCHARS=$WORDCHARS
|
||||||
|
WORDCHARS="''${WORDCHARS//:}"
|
||||||
|
WORDCHARS="''${WORDCHARS//\/}"
|
||||||
|
WORDCHARS="''${WORDCHARS//.}"
|
||||||
|
zle forward-word
|
||||||
|
}
|
||||||
|
zle -N my-forward-word
|
||||||
|
# ctrl + right
|
||||||
|
bindkey "^[[1;5C" my-forward-word
|
||||||
|
|
||||||
|
# shift + right
|
||||||
|
bindkey "^[[1;2C" forward-word
|
||||||
|
|
||||||
|
my-backward-word() {
|
||||||
|
local WORDCHARS=$WORDCHARS
|
||||||
|
WORDCHARS="''${WORDCHARS//:}"
|
||||||
|
WORDCHARS="''${WORDCHARS//\/}"
|
||||||
|
WORDCHARS="''${WORDCHARS//.}"
|
||||||
|
zle backward-word
|
||||||
|
}
|
||||||
|
zle -N my-backward-word
|
||||||
|
# ctrl + left
|
||||||
|
bindkey "^[[1;5D" my-backward-word
|
||||||
|
|
||||||
|
# shift + left
|
||||||
|
bindkey "^[[1;2D" backward-word
|
||||||
|
|
||||||
|
my-backward-delete-word() {
|
||||||
|
local WORDCHARS=$WORDCHARS
|
||||||
|
WORDCHARS="''${WORDCHARS//:}"
|
||||||
|
WORDCHARS="''${WORDCHARS//\/}"
|
||||||
|
WORDCHARS="''${WORDCHARS//.}"
|
||||||
|
zle backward-delete-word
|
||||||
|
}
|
||||||
|
zle -N my-backward-delete-word
|
||||||
|
# ctrl + del
|
||||||
|
bindkey '^H' my-backward-delete-word
|
||||||
|
'';
|
||||||
|
sessionVariables = lib.mkIf (!config.swarselsystems.isPublic) {
|
||||||
|
CROC_RELAY = crocDomain;
|
||||||
|
CROC_PASS = "$(cat ${confLib.getConfig.sops.secrets.croc-password.path or ""})";
|
||||||
|
GITHUB_TOKEN = "$(cat ${confLib.getConfig.sops.secrets.github-nixpkgs-review-token.path or ""})";
|
||||||
|
QT_QPA_PLATFORM_PLUGIN_PATH = "${pkgs.libsForQt5.qt5.qtbase.bin}/lib/qt-${pkgs.libsForQt5.qt5.qtbase.version}/plugins";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
46
aspects/users.nix
Normal file
46
aspects/users.nix
Normal file
|
|
@ -0,0 +1,46 @@
|
||||||
|
{ den, ... }:
|
||||||
|
let
|
||||||
|
hostContext = { host, ... }: {
|
||||||
|
nixos = { minimal, lib, config, ... }: {
|
||||||
|
users.users.swarsel = {
|
||||||
|
uid = 1000;
|
||||||
|
autoSubUidGidRange = false;
|
||||||
|
subUidRanges = [
|
||||||
|
{
|
||||||
|
count = 65534;
|
||||||
|
startUid = 100001;
|
||||||
|
}
|
||||||
|
];
|
||||||
|
subGidRanges = [
|
||||||
|
{
|
||||||
|
count = 999;
|
||||||
|
startGid = 1001;
|
||||||
|
}
|
||||||
|
];
|
||||||
|
description = "Leon S";
|
||||||
|
password = lib.mkIf (minimal || host.isPublic) "setup";
|
||||||
|
hashedPasswordFile = lib.mkIf (!minimal && !host.isPublic) config.sops.secrets.main-user-hashed-pw.path;
|
||||||
|
extraGroups = lib.optionals (!minimal && !host.isMicroVM) [ "input" "syncthing" "docker" "lp" "audio" "video" "vboxusers" "libvirtd" "scanner" ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
in
|
||||||
|
{
|
||||||
|
|
||||||
|
den = {
|
||||||
|
aspects.swarsel = {
|
||||||
|
includes = [
|
||||||
|
hostContext
|
||||||
|
(den.provides.sops { class = "nixos"; name = "main-user-hashed-pw"; args = { neededForUsers = true; }; })
|
||||||
|
den.provides.primary-user
|
||||||
|
(den.provides.user-shell "zsh")
|
||||||
|
];
|
||||||
|
};
|
||||||
|
aspects.root = { globals, ... }: {
|
||||||
|
nixos = {
|
||||||
|
users.users.root = globals.root.hashedPassword;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
996
aspects/work.nix
Normal file
996
aspects/work.nix
Normal file
|
|
@ -0,0 +1,996 @@
|
||||||
|
{ self, den, ... }:
|
||||||
|
let
|
||||||
|
sopsFile = self + /secrets/work/secrets.yaml;
|
||||||
|
certsSopsFile = self + /secrets/repo/certs.yaml;
|
||||||
|
|
||||||
|
hostContext = { host }: common host;
|
||||||
|
homeContext = { home }: common home;
|
||||||
|
|
||||||
|
common = from: {
|
||||||
|
nixos = { lib, pkgs, config, ... }:
|
||||||
|
let
|
||||||
|
inherit (from) mainUser;
|
||||||
|
inherit (config.swarselsystems) homeDir;
|
||||||
|
iwd = config.networking.networkmanager.wifi.backend == "iwd";
|
||||||
|
owner = mainUser;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.swarselsystems = {
|
||||||
|
hostName = lib.mkOption {
|
||||||
|
type = lib.types.str;
|
||||||
|
default = config.node.name;
|
||||||
|
};
|
||||||
|
fqdn = lib.mkOption {
|
||||||
|
type = lib.types.str;
|
||||||
|
default = "";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
config = {
|
||||||
|
|
||||||
|
sops =
|
||||||
|
let
|
||||||
|
secretNames = [
|
||||||
|
"vcuser"
|
||||||
|
"vcpw"
|
||||||
|
"govcuser"
|
||||||
|
"govcpw"
|
||||||
|
"govcurl"
|
||||||
|
"govcdc"
|
||||||
|
"govcds"
|
||||||
|
"govchost"
|
||||||
|
"govcnetwork"
|
||||||
|
"govcpool"
|
||||||
|
"baseuser"
|
||||||
|
"basepw"
|
||||||
|
];
|
||||||
|
in
|
||||||
|
{
|
||||||
|
secrets = builtins.listToAttrs (
|
||||||
|
map
|
||||||
|
(name: {
|
||||||
|
inherit name;
|
||||||
|
value = { inherit owner sopsFile; };
|
||||||
|
})
|
||||||
|
secretNames
|
||||||
|
);
|
||||||
|
templates = {
|
||||||
|
"network-manager-work.env".content = ''
|
||||||
|
BASEUSER=${config.sops.placeholder.baseuser}
|
||||||
|
BASEPASS=${config.sops.placeholder.basepw}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
boot.initrd = {
|
||||||
|
systemd.enable = lib.mkForce true; # make sure we are using initrd systemd even when not using Impermanence
|
||||||
|
luks = {
|
||||||
|
# disable "support" since we use systemd-cryptenroll
|
||||||
|
# make sure yubikeys are enrolled using
|
||||||
|
# sudo systemd-cryptenroll --fido2-device=auto --fido2-with-user-verification=no --fido2-with-user-presence=true --fido2-with-client-pin=no /dev/nvme0n1p2
|
||||||
|
yubikeySupport = false;
|
||||||
|
fido2Support = false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
programs = {
|
||||||
|
|
||||||
|
browserpass.enable = true;
|
||||||
|
_1password.enable = true;
|
||||||
|
_1password-gui = {
|
||||||
|
enable = true;
|
||||||
|
package = pkgs._1password-gui-beta;
|
||||||
|
polkitPolicyOwners = [ "${mainUser}" ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
networking = {
|
||||||
|
inherit (config.swarselsystems) hostName fqdn;
|
||||||
|
|
||||||
|
networkmanager = {
|
||||||
|
wifi.scanRandMacAddress = false;
|
||||||
|
ensureProfiles = {
|
||||||
|
environmentFiles = [
|
||||||
|
"${config.sops.templates."network-manager-work.env".path}"
|
||||||
|
];
|
||||||
|
profiles = {
|
||||||
|
VBC = {
|
||||||
|
"802-1x" = {
|
||||||
|
eap = if (!iwd) then "ttls;" else "peap;";
|
||||||
|
identity = "$BASEUSER";
|
||||||
|
password = "$BASEPASS";
|
||||||
|
phase2-auth = "mschapv2";
|
||||||
|
};
|
||||||
|
connection = {
|
||||||
|
id = "VBC";
|
||||||
|
type = "wifi";
|
||||||
|
autoconnect-priority = "500";
|
||||||
|
uuid = "3988f10e-6451-381f-9330-a12e66f45051";
|
||||||
|
secondaries = "48d09de4-0521-47d7-9bd5-43f97e23ff82"; # vpn uuid
|
||||||
|
};
|
||||||
|
ipv4 = { method = "auto"; };
|
||||||
|
ipv6 = {
|
||||||
|
# addr-gen-mode = "default";
|
||||||
|
addr-gen-mode = "stable-privacy";
|
||||||
|
method = "auto";
|
||||||
|
};
|
||||||
|
proxy = { };
|
||||||
|
wifi = {
|
||||||
|
cloned-mac-address = "permanent";
|
||||||
|
mac-address = "E8:65:38:52:63:FF";
|
||||||
|
mac-address-randomization = "1";
|
||||||
|
mode = "infrastructure";
|
||||||
|
band = "a";
|
||||||
|
ssid = "VBC";
|
||||||
|
};
|
||||||
|
wifi-security = {
|
||||||
|
# auth-alg = "open";
|
||||||
|
key-mgmt = "wpa-eap";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
nftables = {
|
||||||
|
firewall = {
|
||||||
|
zones = {
|
||||||
|
virbr = {
|
||||||
|
interfaces = [ "virbr*" ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
rules = {
|
||||||
|
virbr-dns-dhcp = {
|
||||||
|
from = [ "virbr" ];
|
||||||
|
to = [ "local" ];
|
||||||
|
allowedTCPPorts = [ 53 ];
|
||||||
|
allowedUDPPorts = [ 53 67 547 ];
|
||||||
|
};
|
||||||
|
virbr-forward = {
|
||||||
|
from = [ "virbr" ];
|
||||||
|
to = [ "untrusted" ];
|
||||||
|
verdict = "accept";
|
||||||
|
};
|
||||||
|
virbr-forward-return = {
|
||||||
|
from = [ "untrusted" ];
|
||||||
|
to = [ "virbr" ];
|
||||||
|
extraLines = [
|
||||||
|
"ct state { established, related } accept"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
chains.postrouting.libvirt-masq = {
|
||||||
|
after = [ "dnat" ];
|
||||||
|
rules = [
|
||||||
|
"iifname \"virbr*\" masquerade"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
search = [
|
||||||
|
"vbc.ac.at"
|
||||||
|
"clip.vbc.ac.at"
|
||||||
|
"imp.univie.ac.at"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
systemd.services = {
|
||||||
|
virtqemud.path = with pkgs; [
|
||||||
|
qemu_kvm
|
||||||
|
libvirt
|
||||||
|
];
|
||||||
|
|
||||||
|
virtstoraged.path = with pkgs; [
|
||||||
|
qemu_kvm
|
||||||
|
libvirt
|
||||||
|
];
|
||||||
|
|
||||||
|
virtnetworkd.path = with pkgs; [
|
||||||
|
dnsmasq
|
||||||
|
iproute2
|
||||||
|
nftables
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
virtualisation = {
|
||||||
|
docker.enable = lib.mkIf (!config.virtualisation.podman.dockerCompat) true;
|
||||||
|
spiceUSBRedirection.enable = true;
|
||||||
|
libvirtd = {
|
||||||
|
enable = true;
|
||||||
|
qemu = {
|
||||||
|
package = pkgs.qemu_kvm;
|
||||||
|
runAsRoot = true;
|
||||||
|
swtpm.enable = true;
|
||||||
|
vhostUserPackages = with pkgs; [ virtiofsd ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
remmina
|
||||||
|
python39
|
||||||
|
qemu
|
||||||
|
packer
|
||||||
|
gnumake
|
||||||
|
libisoburn
|
||||||
|
govc
|
||||||
|
terraform
|
||||||
|
opentofu
|
||||||
|
terragrunt
|
||||||
|
graphviz
|
||||||
|
azure-cli
|
||||||
|
|
||||||
|
# vm
|
||||||
|
virt-manager
|
||||||
|
virt-viewer
|
||||||
|
virtiofsd
|
||||||
|
spice
|
||||||
|
spice-gtk
|
||||||
|
spice-protocol
|
||||||
|
virtio-win
|
||||||
|
win-spice
|
||||||
|
|
||||||
|
powershell
|
||||||
|
gh
|
||||||
|
];
|
||||||
|
|
||||||
|
services = {
|
||||||
|
spice-vdagentd.enable = true;
|
||||||
|
openssh = {
|
||||||
|
enable = true;
|
||||||
|
extraConfig = ''
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
syncthing = {
|
||||||
|
settings = {
|
||||||
|
"winters" = {
|
||||||
|
id = "O7RWDMD-AEAHPP7-7TAVLKZ-BSWNBTU-2VA44MS-EYGUNBB-SLHKB3C-ZSLMOAA";
|
||||||
|
};
|
||||||
|
"moonside@oracle" = {
|
||||||
|
id = "VPCDZB6-MGVGQZD-Q6DIZW3-IZJRJTO-TCC3QUQ-2BNTL7P-AKE7FBO-N55UNQE";
|
||||||
|
};
|
||||||
|
folders = {
|
||||||
|
"Documents" = {
|
||||||
|
path = "${homeDir}/Documents";
|
||||||
|
devices = [ "moonside@oracle" ];
|
||||||
|
id = "hgr3d-pfu3w";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# udev.extraRules = ''
|
||||||
|
# # lock screen when yubikey removed
|
||||||
|
# ACTION=="remove", ENV{PRODUCT}=="3/1050/407/110", RUN+="${pkgs.systemd}/bin/systemctl suspend"
|
||||||
|
# '';
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
# cgroups v1 is required for centos7 dockers
|
||||||
|
# specialisation = {
|
||||||
|
# cgroup_v1.configuration = {
|
||||||
|
# boot.kernelParams = [
|
||||||
|
# "SYSTEMD_CGROUP_ENABLE_LEGACY_FORCE=1"
|
||||||
|
# "systemd.unified_cgroup_hierarchy=0"
|
||||||
|
# ];
|
||||||
|
# };
|
||||||
|
# };
|
||||||
|
};
|
||||||
|
};
|
||||||
|
homeManager = { self, config, pkgs, lib, vars, ... }:
|
||||||
|
let
|
||||||
|
source = if (config ? home) then "home" else "host";
|
||||||
|
inherit (config.swarselsystems) homeDir;
|
||||||
|
inherit (config.repo.secrets.local.mail) allMailAddresses;
|
||||||
|
inherit (config.repo.secrets.local.work) mailAddress;
|
||||||
|
|
||||||
|
in
|
||||||
|
{
|
||||||
|
config = {
|
||||||
|
home = {
|
||||||
|
packages = with pkgs; [
|
||||||
|
teams-for-linux
|
||||||
|
shellcheck
|
||||||
|
dig
|
||||||
|
docker
|
||||||
|
postman
|
||||||
|
# rclone
|
||||||
|
libguestfs-with-appliance
|
||||||
|
prometheus.cli
|
||||||
|
tigervnc
|
||||||
|
# openstackclient
|
||||||
|
step-cli
|
||||||
|
|
||||||
|
vscode-fhs
|
||||||
|
copilot-cli
|
||||||
|
antigravity
|
||||||
|
|
||||||
|
|
||||||
|
rustdesk-vbc
|
||||||
|
];
|
||||||
|
sessionVariables = {
|
||||||
|
AWS_CA_BUNDLE = source.sops.secrets.harica-root-ca.path;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
systemd.user.sessionVariables = {
|
||||||
|
DOCUMENT_DIR_WORK = lib.mkForce "${homeDir}/Documents/Work";
|
||||||
|
} // lib.optionalAttrs (!config.swarselsystems.isPublic) {
|
||||||
|
SWARSEL_MAIL_ALL = lib.mkForce allMailAddresses;
|
||||||
|
SWARSEL_MAIL_WORK = lib.mkForce mailAddress;
|
||||||
|
};
|
||||||
|
|
||||||
|
accounts.email.accounts.work =
|
||||||
|
let
|
||||||
|
inherit (from.repo.secrets.local.work) mailName;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
primary = false;
|
||||||
|
address = mailAddress;
|
||||||
|
userName = mailAddress;
|
||||||
|
realName = mailName;
|
||||||
|
passwordCommand = "pizauth show work";
|
||||||
|
imap = {
|
||||||
|
host = "outlook.office365.com";
|
||||||
|
port = 993;
|
||||||
|
tls.enable = true; # SSL/TLS
|
||||||
|
};
|
||||||
|
smtp = {
|
||||||
|
host = "outlook.office365.com";
|
||||||
|
port = 587;
|
||||||
|
tls = {
|
||||||
|
enable = true; # SSL/TLS
|
||||||
|
useStartTls = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
thunderbird = {
|
||||||
|
enable = true;
|
||||||
|
profiles = [ "default" ];
|
||||||
|
settings = id: {
|
||||||
|
"mail.smtpserver.smtp_${id}.authMethod" = 10; # oauth
|
||||||
|
"mail.server.server_${id}.authMethod" = 10; # oauth
|
||||||
|
# "toolkit.telemetry.enabled" = false;
|
||||||
|
# "toolkit.telemetry.rejected" = true;
|
||||||
|
# "toolkit.telemetry.prompted" = 2;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
msmtp = {
|
||||||
|
enable = true;
|
||||||
|
extraConfig = {
|
||||||
|
auth = "xoauth2";
|
||||||
|
host = "outlook.office365.com";
|
||||||
|
protocol = "smtp";
|
||||||
|
port = "587";
|
||||||
|
tls = "on";
|
||||||
|
tls_starttls = "on";
|
||||||
|
from = "${mailAddress}";
|
||||||
|
user = "${mailAddress}";
|
||||||
|
passwordeval = "pizauth show work";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
mu.enable = true;
|
||||||
|
mbsync = {
|
||||||
|
enable = true;
|
||||||
|
expunge = "both";
|
||||||
|
patterns = [ "INBOX" ];
|
||||||
|
extraConfig = {
|
||||||
|
account = {
|
||||||
|
AuthMechs = "XOAUTH2";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
wayland.windowManager.sway =
|
||||||
|
let
|
||||||
|
inherit (from.repo.secrets.local.work) user1 user1Long domain1 mailAddress;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
config = {
|
||||||
|
keybindings =
|
||||||
|
let
|
||||||
|
inherit (config.wayland.windowManager.sway.config) modifier;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
"${modifier}+Shift+d" = "exec ${pkgs.quickpass}/bin/quickpass work/adm/${user1}/${user1Long}@${domain1}";
|
||||||
|
"${modifier}+Shift+i" = "exec ${pkgs.quickpass}/bin/quickpass work/${mailAddress}";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
stylix = {
|
||||||
|
targets.firefox.profileNames =
|
||||||
|
let
|
||||||
|
inherit (from.repo.secrets.local.work) user1 user2 user3;
|
||||||
|
in
|
||||||
|
[
|
||||||
|
"${user1}"
|
||||||
|
"${user2}"
|
||||||
|
"${user3}"
|
||||||
|
"work"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
programs =
|
||||||
|
let
|
||||||
|
inherit (from.repo.secrets.local.work) user1 user1Long user2 user2Long user3 user3Long path1 site1 site2 site3 site4 site5 site6 site7 clouds;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
openstackclient = {
|
||||||
|
enable = true;
|
||||||
|
inherit clouds;
|
||||||
|
};
|
||||||
|
awscli = {
|
||||||
|
enable = true;
|
||||||
|
package = pkgs.awscli2;
|
||||||
|
};
|
||||||
|
|
||||||
|
zsh = {
|
||||||
|
shellAliases = {
|
||||||
|
dssh = "ssh -l ${user1Long}";
|
||||||
|
cssh = "ssh -l ${user2Long}";
|
||||||
|
wssh = "ssh -l ${user3Long}";
|
||||||
|
};
|
||||||
|
cdpath = [
|
||||||
|
"~/Documents/Work"
|
||||||
|
];
|
||||||
|
dirHashes = {
|
||||||
|
d = "$HOME/.dotfiles";
|
||||||
|
w = "$HOME/Documents/Work";
|
||||||
|
s = "$HOME/.dotfiles/secrets";
|
||||||
|
pr = "$HOME/Documents/Private";
|
||||||
|
ac = path1;
|
||||||
|
};
|
||||||
|
|
||||||
|
sessionVariables = {
|
||||||
|
VSPHERE_USER = "$(cat ${source.sops.secrets.vcuser.path})";
|
||||||
|
VSPHERE_PW = "$(cat ${source.sops.secrets.vcpw.path})";
|
||||||
|
GOVC_USERNAME = "$(cat ${source.sops.secrets.govcuser.path})";
|
||||||
|
GOVC_PASSWORD = "$(cat ${source.sops.secrets.govcpw.path})";
|
||||||
|
GOVC_URL = "$(cat ${source.sops.secrets.govcurl.path})";
|
||||||
|
GOVC_DATACENTER = "$(cat ${source.sops.secrets.govcdc.path})";
|
||||||
|
GOVC_DATASTORE = "$(cat ${source.sops.secrets.govcds.path})";
|
||||||
|
GOVC_HOST = "$(cat ${source.sops.secrets.govchost.path})";
|
||||||
|
GOVC_RESOURCE_POOL = "$(cat ${source.sops.secrets.govcpool.path})";
|
||||||
|
GOVC_NETWORK = "$(cat ${source.sops.secrets.govcnetwork.path})";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
ssh.matchBlocks = from.repo.secrets.local.work.sshConfig;
|
||||||
|
|
||||||
|
firefox = {
|
||||||
|
profiles =
|
||||||
|
let
|
||||||
|
isDefault = false;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
"${user1}" = lib.recursiveUpdate
|
||||||
|
{
|
||||||
|
inherit isDefault;
|
||||||
|
id = 1;
|
||||||
|
settings = {
|
||||||
|
"browser.startup.homepage" = "${site1}|${site2}";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
vars.firefox;
|
||||||
|
"${user2}" = lib.recursiveUpdate
|
||||||
|
{
|
||||||
|
inherit isDefault;
|
||||||
|
id = 2;
|
||||||
|
settings = {
|
||||||
|
"browser.startup.homepage" = "${site3}";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
vars.firefox;
|
||||||
|
"${user3}" = lib.recursiveUpdate
|
||||||
|
{
|
||||||
|
inherit isDefault;
|
||||||
|
id = 3;
|
||||||
|
}
|
||||||
|
vars.firefox;
|
||||||
|
work = lib.recursiveUpdate
|
||||||
|
{
|
||||||
|
inherit isDefault;
|
||||||
|
id = 4;
|
||||||
|
settings = {
|
||||||
|
"browser.startup.homepage" = "${site4}|${site5}|${site6}|${site7}";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
vars.firefox;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
chromium = {
|
||||||
|
enable = true;
|
||||||
|
package = pkgs.chromium;
|
||||||
|
|
||||||
|
extensions = [
|
||||||
|
# 1password
|
||||||
|
"gejiddohjgogedgjnonbofjigllpkmbf"
|
||||||
|
# dark reader
|
||||||
|
"eimadpbcbfnmbkopoojfekhnkhdbieeh"
|
||||||
|
# ublock origin
|
||||||
|
"cjpalhdlnbpafiamejdnhcphjbkeiagm"
|
||||||
|
# i still dont care about cookies
|
||||||
|
"edibdbjcniadpccecjdfdjjppcpchdlm"
|
||||||
|
# browserpass
|
||||||
|
"naepdomgkenhinolocfifgehidddafch"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
services = {
|
||||||
|
|
||||||
|
shikane = {
|
||||||
|
settings =
|
||||||
|
let
|
||||||
|
workRight = [
|
||||||
|
"m=HP Z32"
|
||||||
|
"s=CN41212T55"
|
||||||
|
"v=HP Inc."
|
||||||
|
];
|
||||||
|
workLeft = [
|
||||||
|
"m=HP 732pk"
|
||||||
|
"s=CNC4080YL5"
|
||||||
|
"v=HP Inc."
|
||||||
|
];
|
||||||
|
exec = [ "notify-send shikane \"Profile $SHIKANE_PROFILE_NAME has been applied\"" ];
|
||||||
|
in
|
||||||
|
{
|
||||||
|
profile = [
|
||||||
|
|
||||||
|
{
|
||||||
|
name = "work-internal-on";
|
||||||
|
inherit exec;
|
||||||
|
output = [
|
||||||
|
{
|
||||||
|
match = config.swarselsystems.sharescreen;
|
||||||
|
enable = true;
|
||||||
|
scale = 1.7;
|
||||||
|
position = "2560,0";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
match = workRight;
|
||||||
|
enable = true;
|
||||||
|
scale = 1.0;
|
||||||
|
mode = "3840x2160@60Hz";
|
||||||
|
position = "-1280,0";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
match = workLeft;
|
||||||
|
enable = true;
|
||||||
|
scale = 1.0;
|
||||||
|
transform = "270";
|
||||||
|
mode = "3840x2160@60Hz";
|
||||||
|
position = "-3440,-1050";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "work-internal-off";
|
||||||
|
inherit exec;
|
||||||
|
output = [
|
||||||
|
{
|
||||||
|
match = config.swarselsystems.sharescreen;
|
||||||
|
enable = false;
|
||||||
|
scale = 1.7;
|
||||||
|
position = "2560,0";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
match = workRight;
|
||||||
|
enable = true;
|
||||||
|
scale = 1.0;
|
||||||
|
mode = "3840x2160@60Hz";
|
||||||
|
position = "-1280,0";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
match = workLeft;
|
||||||
|
enable = true;
|
||||||
|
scale = 1.0;
|
||||||
|
transform = "270";
|
||||||
|
mode = "3840x2160@60Hz";
|
||||||
|
position = "-3440,-1050";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
kanshi = {
|
||||||
|
settings = [
|
||||||
|
{
|
||||||
|
# seminary room
|
||||||
|
output = {
|
||||||
|
criteria = "Applied Creative Technology Transmitter QUATTRO201811";
|
||||||
|
scale = 1.0;
|
||||||
|
mode = "1280x720";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
{
|
||||||
|
# work side screen
|
||||||
|
output = {
|
||||||
|
criteria = "HP Inc. HP 732pk CNC4080YL5";
|
||||||
|
scale = 1.0;
|
||||||
|
mode = "3840x2160";
|
||||||
|
transform = "270";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
# {
|
||||||
|
# # work side screen
|
||||||
|
# output = {
|
||||||
|
# criteria = "Hewlett Packard HP Z24i CN44250RDT";
|
||||||
|
# scale = 1.0;
|
||||||
|
# mode = "1920x1200";
|
||||||
|
# transform = "270";
|
||||||
|
# };
|
||||||
|
# }
|
||||||
|
{
|
||||||
|
# work main screen
|
||||||
|
output = {
|
||||||
|
criteria = "HP Inc. HP Z32 CN41212T55";
|
||||||
|
scale = 1.0;
|
||||||
|
mode = "3840x2160";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
{
|
||||||
|
profile = {
|
||||||
|
name = "lidopen";
|
||||||
|
exec = [
|
||||||
|
"${pkgs.swaybg}/bin/swaybg --output '${config.swarselsystems.sharescreen}' --image ${config.swarselsystems.wallpaper} --mode ${config.stylix.imageScalingMode}"
|
||||||
|
"${pkgs.swaybg}/bin/swaybg --output 'HP Inc. HP Z32 CN41212T55' --image ${self}/files/wallpaper/landscape/botanicswp.png --mode ${config.stylix.imageScalingMode}"
|
||||||
|
"${pkgs.swaybg}/bin/swaybg --output 'HP Inc. HP 732pk CNC4080YL5' --image ${self}/files/wallpaper/portrait/op6wp.png --mode ${config.stylix.imageScalingMode}"
|
||||||
|
];
|
||||||
|
outputs = [
|
||||||
|
{
|
||||||
|
criteria = config.swarselsystems.sharescreen;
|
||||||
|
status = "enable";
|
||||||
|
scale = 1.5;
|
||||||
|
position = "2560,0";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
criteria = "HP Inc. HP 732pk CNC4080YL5";
|
||||||
|
scale = 1.0;
|
||||||
|
mode = "3840x2160";
|
||||||
|
position = "-3440,-1050";
|
||||||
|
transform = "270";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
criteria = "HP Inc. HP Z32 CN41212T55";
|
||||||
|
scale = 1.0;
|
||||||
|
mode = "3840x2160";
|
||||||
|
position = "-1280,0";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
|
{
|
||||||
|
profile =
|
||||||
|
let
|
||||||
|
monitor = "Applied Creative Technology Transmitter QUATTRO201811";
|
||||||
|
in
|
||||||
|
{
|
||||||
|
name = "lidopen";
|
||||||
|
exec = [
|
||||||
|
"${pkgs.swaybg}/bin/swaybg --output '${config.swarselsystems.sharescreen}' --image ${config.swarselsystems.wallpaper} --mode ${config.stylix.imageScalingMode}"
|
||||||
|
"${pkgs.swaybg}/bin/swaybg --output '${monitor}' --image ${self}/files/wallpaper/services/navidrome.png --mode ${config.stylix.imageScalingMode}"
|
||||||
|
"${pkgs.kanshare}/bin/kanshare ${config.swarselsystems.sharescreen} '${monitor}'"
|
||||||
|
];
|
||||||
|
outputs = [
|
||||||
|
{
|
||||||
|
criteria = config.swarselsystems.sharescreen;
|
||||||
|
status = "enable";
|
||||||
|
scale = 1.7;
|
||||||
|
position = "2560,0";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
criteria = "Applied Creative Technology Transmitter QUATTRO201811";
|
||||||
|
scale = 1.0;
|
||||||
|
mode = "1280x720";
|
||||||
|
position = "10000,10000";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
|
{
|
||||||
|
profile = {
|
||||||
|
name = "lidclosed";
|
||||||
|
exec = [
|
||||||
|
"${pkgs.swaybg}/bin/swaybg --output 'HP Inc. HP Z32 CN41212T55' --image ${self}/files/wallpaper/landscape/botanicswp.png --mode ${config.stylix.imageScalingMode}"
|
||||||
|
"${pkgs.swaybg}/bin/swaybg --output 'HP Inc. HP 732pk CNC4080YL5' --image ${self}/files/wallpaper/portrait/op6wp.png --mode ${config.stylix.imageScalingMode}"
|
||||||
|
];
|
||||||
|
outputs = [
|
||||||
|
{
|
||||||
|
criteria = config.swarselsystems.sharescreen;
|
||||||
|
status = "disable";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
criteria = "HP Inc. HP 732pk CNC4080YL5";
|
||||||
|
scale = 1.0;
|
||||||
|
mode = "3840x2160";
|
||||||
|
position = "-3440,-1050";
|
||||||
|
transform = "270";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
criteria = "HP Inc. HP Z32 CN41212T55";
|
||||||
|
scale = 1.0;
|
||||||
|
mode = "3840x2160";
|
||||||
|
position = "-1280,0";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
|
{
|
||||||
|
profile =
|
||||||
|
let
|
||||||
|
monitor = "Applied Creative Technology Transmitter QUATTRO201811";
|
||||||
|
in
|
||||||
|
{
|
||||||
|
name = "lidclosed";
|
||||||
|
exec = [
|
||||||
|
"${pkgs.swaybg}/bin/swaybg --output '${monitor}' --image ${self}/files/wallpaper/services/navidrome.png --mode ${config.stylix.imageScalingMode}"
|
||||||
|
];
|
||||||
|
outputs = [
|
||||||
|
{
|
||||||
|
criteria = config.swarselsystems.sharescreen;
|
||||||
|
status = "disable";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
criteria = "Applied Creative Technology Transmitter QUATTRO201811";
|
||||||
|
scale = 1.0;
|
||||||
|
mode = "1280x720";
|
||||||
|
position = "10000,10000";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
systemd.user.services = {
|
||||||
|
pizauth.Service = {
|
||||||
|
ExecStartPost = [
|
||||||
|
"${pkgs.toybox}/bin/sleep 1"
|
||||||
|
"//bin/sh -c '${lib.getExe pkgs.pizauth} restore < ${homeDir}/.pizauth.state'"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
teams-applet = {
|
||||||
|
Unit = {
|
||||||
|
Description = "teams applet";
|
||||||
|
Requires = [ "graphical-session.target" ];
|
||||||
|
After = [
|
||||||
|
"graphical-session.target"
|
||||||
|
"tray.target"
|
||||||
|
];
|
||||||
|
PartOf = [
|
||||||
|
"tray.target"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
Install = {
|
||||||
|
WantedBy = [ "tray.target" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
Service = {
|
||||||
|
ExecStart = "${pkgs.teams-for-linux}/bin/teams-for-linux --disableGpu=true --minimized=true --trayIconEnabled=true";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
onepassword-applet = {
|
||||||
|
Unit = {
|
||||||
|
Description = "1password applet";
|
||||||
|
Requires = [ "graphical-session.target" ];
|
||||||
|
After = [
|
||||||
|
"graphical-session.target"
|
||||||
|
"tray.target"
|
||||||
|
];
|
||||||
|
PartOf = [
|
||||||
|
"tray.target"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
Install = {
|
||||||
|
WantedBy = [ "tray.target" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
Service = {
|
||||||
|
ExecStart = "${pkgs._1password-gui-beta}/bin/1password";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
services.pizauth = {
|
||||||
|
enable = true;
|
||||||
|
extraConfig = ''
|
||||||
|
auth_notify_cmd = "if [[ \"$(notify-send -A \"Open $PIZAUTH_ACCOUNT\" -t 30000 'pizauth authorisation')\" == \"0\" ]]; then open \"$PIZAUTH_URL\"; fi";
|
||||||
|
error_notify_cmd = "notify-send -t 90000 \"pizauth error for $PIZAUTH_ACCOUNT\" \"$PIZAUTH_MSG\"";
|
||||||
|
token_event_cmd = "pizauth dump > ${homeDir}/.pizauth.state";
|
||||||
|
'';
|
||||||
|
accounts = {
|
||||||
|
work = {
|
||||||
|
authUri = "https://login.microsoftonline.com/common/oauth2/v2.0/authorize";
|
||||||
|
tokenUri = "https://login.microsoftonline.com/common/oauth2/v2.0/token";
|
||||||
|
clientId = "08162f7c-0fd2-4200-a84a-f25a4db0b584";
|
||||||
|
clientSecret = "TxRBilcHdC6WGBee]fs?QR:SJ8nI[g82";
|
||||||
|
scopes = [
|
||||||
|
"https://outlook.office365.com/IMAP.AccessAsUser.All"
|
||||||
|
"https://outlook.office365.com/SMTP.Send"
|
||||||
|
"offline_access"
|
||||||
|
];
|
||||||
|
loginHint = "${from.repo.secrets.local.work.mailAddress}";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
xdg =
|
||||||
|
let
|
||||||
|
inherit (from.repo.secrets.local.work) user1 user2 user3;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
mimeApps = {
|
||||||
|
defaultApplications = {
|
||||||
|
"x-scheme-handler/msteams" = [ "teams-for-linux.desktop" ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
desktopEntries =
|
||||||
|
let
|
||||||
|
terminal = false;
|
||||||
|
categories = [ "Application" ];
|
||||||
|
icon = "firefox";
|
||||||
|
in
|
||||||
|
{
|
||||||
|
firefox_work = {
|
||||||
|
name = "Firefox (work)";
|
||||||
|
genericName = "Firefox work";
|
||||||
|
exec = "firefox -p work";
|
||||||
|
inherit terminal categories icon;
|
||||||
|
};
|
||||||
|
"firefox_${user1}" = {
|
||||||
|
name = "Firefox (${user1})";
|
||||||
|
genericName = "Firefox ${user1}";
|
||||||
|
exec = "firefox -p ${user1}";
|
||||||
|
inherit terminal categories icon;
|
||||||
|
};
|
||||||
|
|
||||||
|
"firefox_${user2}" = {
|
||||||
|
name = "Firefox (${user2})";
|
||||||
|
genericName = "Firefox ${user2}";
|
||||||
|
exec = "firefox -p ${user2}";
|
||||||
|
inherit terminal categories icon;
|
||||||
|
};
|
||||||
|
|
||||||
|
"firefox_${user3}" = {
|
||||||
|
name = "Firefox (${user3})";
|
||||||
|
genericName = "Firefox ${user3}";
|
||||||
|
exec = "firefox -p ${user3}";
|
||||||
|
inherit terminal categories icon;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
};
|
||||||
|
};
|
||||||
|
swarselsystems = {
|
||||||
|
startup = [
|
||||||
|
# { command = "nextcloud --background"; }
|
||||||
|
# { command = "vesktop --start-minimized --enable-speech-dispatcher --ozone-platform-hint=auto --enable-features=WaylandWindowDecorations --enable-wayland-ime"; }
|
||||||
|
# { command = "element-desktop --hidden --enable-features=UseOzonePlatform --ozone-platform=wayland --disable-gpu-driver-bug-workarounds"; }
|
||||||
|
# { command = "anki"; }
|
||||||
|
# { command = "obsidian"; }
|
||||||
|
# { command = "nm-applet"; }
|
||||||
|
# { command = "feishin"; }
|
||||||
|
# { command = "teams-for-linux --disableGpu=true --minimized=true --trayIconEnabled=true"; }
|
||||||
|
# { command = "1password"; }
|
||||||
|
];
|
||||||
|
monitors = {
|
||||||
|
work_back_middle = rec {
|
||||||
|
name = "LG Electronics LG Ultra HD 0x000305A6";
|
||||||
|
mode = "2560x1440";
|
||||||
|
scale = "1";
|
||||||
|
position = "5120,0";
|
||||||
|
workspace = "1:一";
|
||||||
|
# output = "DP-10";
|
||||||
|
output = name;
|
||||||
|
};
|
||||||
|
work_front_left = rec {
|
||||||
|
name = "LG Electronics LG Ultra HD 0x0007AB45";
|
||||||
|
mode = "3840x2160";
|
||||||
|
scale = "1";
|
||||||
|
position = "5120,0";
|
||||||
|
workspace = "1:一";
|
||||||
|
# output = "DP-7";
|
||||||
|
output = name;
|
||||||
|
};
|
||||||
|
work_middle_middle_main = rec {
|
||||||
|
name = "HP Inc. HP Z32 CN41212T55";
|
||||||
|
mode = "3840x2160";
|
||||||
|
scale = "1";
|
||||||
|
position = "-1280,0";
|
||||||
|
workspace = "1:一";
|
||||||
|
# output = "DP-3";
|
||||||
|
output = name;
|
||||||
|
};
|
||||||
|
# work_middle_middle_main = rec {
|
||||||
|
# name = "HP Inc. HP 732pk CNC4080YL5";
|
||||||
|
# mode = "3840x2160";
|
||||||
|
# scale = "1";
|
||||||
|
# position = "-1280,0";
|
||||||
|
# workspace = "11:M";
|
||||||
|
# # output = "DP-8";
|
||||||
|
# output = name;
|
||||||
|
# };
|
||||||
|
work_middle_middle_side = rec {
|
||||||
|
name = "HP Inc. HP 732pk CNC4080YL5";
|
||||||
|
mode = "3840x2160";
|
||||||
|
transform = "270";
|
||||||
|
scale = "1";
|
||||||
|
position = "-3440,-1050";
|
||||||
|
workspace = "12:S";
|
||||||
|
# output = "DP-8";
|
||||||
|
output = name;
|
||||||
|
};
|
||||||
|
work_middle_middle_old = rec {
|
||||||
|
name = "Hewlett Packard HP Z24i CN44250RDT";
|
||||||
|
mode = "1920x1200";
|
||||||
|
transform = "270";
|
||||||
|
scale = "1";
|
||||||
|
position = "-2480,0";
|
||||||
|
workspace = "12:S";
|
||||||
|
# output = "DP-9";
|
||||||
|
output = name;
|
||||||
|
};
|
||||||
|
work_seminary = rec {
|
||||||
|
name = "Applied Creative Technology Transmitter QUATTRO201811";
|
||||||
|
mode = "1280x720";
|
||||||
|
scale = "1";
|
||||||
|
position = "10000,10000"; # i.e. this screen is inaccessible by moving the mouse
|
||||||
|
workspace = "14:T";
|
||||||
|
# output = "DP-4";
|
||||||
|
output = name;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
inputs = {
|
||||||
|
"1133:45081:MX_Master_2S_Keyboard" = {
|
||||||
|
xkb_layout = "us";
|
||||||
|
xkb_variant = "altgr-intl";
|
||||||
|
};
|
||||||
|
# "2362:628:PIXA3854:00_093A:0274_Touchpad" = {
|
||||||
|
# dwt = "enabled";
|
||||||
|
# tap = "enabled";
|
||||||
|
# natural_scroll = "enabled";
|
||||||
|
# middle_emulation = "enabled";
|
||||||
|
# drag_lock = "disabled";
|
||||||
|
# };
|
||||||
|
"1133:50504:Logitech_USB_Receiver" = {
|
||||||
|
xkb_layout = "us";
|
||||||
|
xkb_variant = "altgr-intl";
|
||||||
|
};
|
||||||
|
"1133:45944:MX_KEYS_S" = {
|
||||||
|
xkb_layout = "us";
|
||||||
|
xkb_variant = "altgr-intl";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
in
|
||||||
|
{
|
||||||
|
den = {
|
||||||
|
aspects.work = {
|
||||||
|
includes = [
|
||||||
|
hostContext
|
||||||
|
homeContext
|
||||||
|
(den.provides.sops { name = "harica-root-ca"; args = { sopsFile = certsSopsFile; path = "/home/swarsel/.aws/certs/harica-root.pem"; }; })
|
||||||
|
(den.provides.sops { name = "yubikey-1"; args = { inherit sopsFile; }; })
|
||||||
|
(den.provides.sops { name = "ucKey"; args = { inherit sopsFile; }; })
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
@ -21,7 +21,7 @@ in
|
||||||
assert assertMsg (hasSuffix ".nix.enc" nixFile)
|
assert assertMsg (hasSuffix ".nix.enc" nixFile)
|
||||||
"The content of the decrypted file must be a nix expression and should therefore end in .nix.enc";
|
"The content of the decrypted file must be a nix expression and should therefore end in .nix.enc";
|
||||||
exec [
|
exec [
|
||||||
./files/scripts/sops-decrypt-and-cache.sh
|
../scripts/sops-decrypt-and-cache.sh
|
||||||
nixFile
|
nixFile
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
|
||||||
6
flake.lock
generated
6
flake.lock
generated
|
|
@ -158,11 +158,11 @@
|
||||||
},
|
},
|
||||||
"den": {
|
"den": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1774890137,
|
"lastModified": 1775073310,
|
||||||
"narHash": "sha256-ud23tRiZy+DONcw3a3WDIl+bYa+wY4ZrB8pHbRCLR+w=",
|
"narHash": "sha256-wGlW57lzZy6dyA62zf3HC/w5fL6kS+prUdP2q4afiNQ=",
|
||||||
"owner": "vic",
|
"owner": "vic",
|
||||||
"repo": "den",
|
"repo": "den",
|
||||||
"rev": "26a5d222f770069180ae147c6907d3875fa0056e",
|
"rev": "2b72a0d40861088caa7f203f9a1cf837d0ccc3bc",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|
|
||||||
19
flake.nix
19
flake.nix
|
|
@ -107,8 +107,23 @@
|
||||||
|
|
||||||
outputs =
|
outputs =
|
||||||
inputs:
|
inputs:
|
||||||
inputs.flake-parts.lib.mkFlake { inherit inputs; } {
|
let
|
||||||
imports = [ (inputs.import-tree [ ./flake ]) ];
|
mkNixos = { name, system }: {
|
||||||
|
den.hosts.${system} = {
|
||||||
|
${name} = { host, ... }: {
|
||||||
|
instantiate = inputs.self.outputs.instantiateNixos { minimal = false; } host.name host.system;
|
||||||
|
users.swarsel = { };
|
||||||
|
};
|
||||||
|
|
||||||
|
"${name}-minimal" = { host, ... }: {
|
||||||
|
instantiate = inputs.self.outputs.instantiateNixos { minimal = true; } host.name host.system;
|
||||||
|
intoAttr = [ "nixosConfigurationsMinimal" host.name ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
in
|
||||||
|
inputs.flake-parts.lib.mkFlake { inherit inputs; specialArgs = { inherit mkNixos; }; } {
|
||||||
|
imports = [ (inputs.import-tree [ ./flake ./aspects ]) ];
|
||||||
systems = [
|
systems = [
|
||||||
"x86_64-linux"
|
"x86_64-linux"
|
||||||
"aarch64-linux"
|
"aarch64-linux"
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,4 @@
|
||||||
{ self, inputs, ... }:
|
{ inputs, ... }:
|
||||||
let
|
|
||||||
inherit (self.outputs) lib;
|
|
||||||
in
|
|
||||||
{
|
{
|
||||||
imports = [ inputs.den.flakeModule ];
|
imports = [ inputs.den.flakeModule ];
|
||||||
|
|
||||||
den = {
|
|
||||||
schema.user.classes = lib.mkDefault [ "homeManager" ];
|
|
||||||
default.homeManager.home.stateVersion = "23.05";
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,84 +1,6 @@
|
||||||
{ self, inputs, ... }:
|
{ self, inputs, ... }:
|
||||||
let
|
|
||||||
inherit (self) outputs;
|
|
||||||
inherit (outputs) lib homeLib;
|
|
||||||
in
|
|
||||||
{
|
{
|
||||||
|
|
||||||
den.hosts.x86_64-linux.pyramid =
|
|
||||||
let
|
|
||||||
configName = "pyramid";
|
|
||||||
arch = "x86_64-linux";
|
|
||||||
in
|
|
||||||
{
|
|
||||||
modules = [
|
|
||||||
inputs.disko.nixosModules.disko
|
|
||||||
inputs.home-manager.nixosModules.home-manager
|
|
||||||
inputs.impermanence.nixosModules.impermanence
|
|
||||||
inputs.lanzaboote.nixosModules.lanzaboote
|
|
||||||
inputs.microvm.nixosModules.host
|
|
||||||
inputs.microvm.nixosModules.microvm
|
|
||||||
inputs.nix-index-database.nixosModules.nix-index
|
|
||||||
inputs.nix-minecraft.nixosModules.minecraft-servers
|
|
||||||
inputs.nix-topology.nixosModules.default
|
|
||||||
inputs.nswitch-rcm-nix.nixosModules.nswitch-rcm
|
|
||||||
inputs.simple-nixos-mailserver.nixosModules.default
|
|
||||||
inputs.sops.nixosModules.sops
|
|
||||||
inputs.stylix.nixosModules.stylix
|
|
||||||
inputs.swarsel-nix.nixosModules.default
|
|
||||||
inputs.nixos-nftables-firewall.nixosModules.default
|
|
||||||
inputs.pia.nixosModules.default
|
|
||||||
inputs.niritiling.nixosModules.default
|
|
||||||
inputs.noctoggle.nixosModules.default
|
|
||||||
(inputs.nixos-extra-modules + "/modules/guests")
|
|
||||||
(inputs.nixos-extra-modules + "/modules/interface-naming.nix")
|
|
||||||
"${self}/hosts/nixos/${arch}/${configName}"
|
|
||||||
"${self}/profiles/nixos"
|
|
||||||
"${self}/modules/nixos"
|
|
||||||
{
|
|
||||||
_module.args.dns = inputs.dns;
|
|
||||||
|
|
||||||
microvm.guest.enable = lib.mkDefault false;
|
|
||||||
|
|
||||||
networking.hostName = lib.swarselsystems.mkStrong configName;
|
|
||||||
|
|
||||||
node = {
|
|
||||||
name = lib.mkForce configName;
|
|
||||||
arch = lib.mkForce arch;
|
|
||||||
type = lib.mkForce "nixos";
|
|
||||||
secretsDir = ../hosts/nixos/${arch}/${configName}/secrets;
|
|
||||||
configDir = ../hosts/nixos/${arch}/${configName};
|
|
||||||
lockFromBootstrapping = lib.swarselsystems.mkStrong true;
|
|
||||||
};
|
|
||||||
|
|
||||||
swarselprofiles = {
|
|
||||||
minimal = lib.swarselsystems.mkStrong true;
|
|
||||||
};
|
|
||||||
|
|
||||||
swarselmodules.server = {
|
|
||||||
ssh = lib.swarselsystems.mkStrong true;
|
|
||||||
};
|
|
||||||
|
|
||||||
swarselsystems = {
|
|
||||||
mainUser = lib.swarselsystems.mkStrong "swarsel";
|
|
||||||
};
|
|
||||||
}
|
|
||||||
];
|
|
||||||
users.swarsel = { };
|
|
||||||
instantiate = inputs.nixpkgs.lib.nixosSystem {
|
|
||||||
specialArgs = {
|
|
||||||
inherit inputs outputs self homeLib configName arch;
|
|
||||||
minimal = false;
|
|
||||||
inherit (outputs.pkgs.${arch}) lib;
|
|
||||||
inherit (outputs) nodes topologyPrivate;
|
|
||||||
globals = outputs.globals.${arch};
|
|
||||||
type = "nixos";
|
|
||||||
withHomeManager = true;
|
|
||||||
extraModules = [ "${self}/modules/nixos/common/globals.nix" ];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
flake = { config, ... }:
|
flake = { config, ... }:
|
||||||
let
|
let
|
||||||
inherit (self) outputs;
|
inherit (self) outputs;
|
||||||
|
|
|
||||||
74
flake/instantiate.nix
Normal file
74
flake/instantiate.nix
Normal file
|
|
@ -0,0 +1,74 @@
|
||||||
|
{ self, inputs, ... }:
|
||||||
|
{
|
||||||
|
flake = { config, ... }: {
|
||||||
|
instantiateNixos = { minimal }: configName: arch: { modules }:
|
||||||
|
let
|
||||||
|
inherit (self) outputs;
|
||||||
|
inherit (outputs) lib homeLib;
|
||||||
|
mkStrong = lib.mkOverride 60;
|
||||||
|
in
|
||||||
|
inputs.nixpkgs.lib.nixosSystem {
|
||||||
|
specialArgs = {
|
||||||
|
inherit inputs outputs self homeLib configName arch minimal;
|
||||||
|
inherit (config.pkgs.${arch}) lib;
|
||||||
|
inherit (config) nodes topologyPrivate;
|
||||||
|
globals = config.globals.${arch};
|
||||||
|
type = "nixos";
|
||||||
|
withHomeManager = true;
|
||||||
|
extraModules = [ "${self}/modules-clone/nixos/common/globals.nix" ];
|
||||||
|
};
|
||||||
|
modules = modules ++ [
|
||||||
|
inputs.disko.nixosModules.disko
|
||||||
|
inputs.home-manager.nixosModules.home-manager
|
||||||
|
inputs.impermanence.nixosModules.impermanence
|
||||||
|
inputs.lanzaboote.nixosModules.lanzaboote
|
||||||
|
inputs.microvm.nixosModules.host
|
||||||
|
inputs.microvm.nixosModules.microvm
|
||||||
|
inputs.nix-index-database.nixosModules.nix-index
|
||||||
|
inputs.nix-minecraft.nixosModules.minecraft-servers
|
||||||
|
inputs.nix-topology.nixosModules.default
|
||||||
|
inputs.nswitch-rcm-nix.nixosModules.nswitch-rcm
|
||||||
|
inputs.simple-nixos-mailserver.nixosModules.default
|
||||||
|
inputs.sops.nixosModules.sops
|
||||||
|
inputs.stylix.nixosModules.stylix
|
||||||
|
inputs.swarsel-nix.nixosModules.default
|
||||||
|
inputs.nixos-nftables-firewall.nixosModules.default
|
||||||
|
inputs.pia.nixosModules.default
|
||||||
|
inputs.niritiling.nixosModules.default
|
||||||
|
inputs.noctoggle.nixosModules.default
|
||||||
|
(inputs.nixos-extra-modules + "/modules/guests")
|
||||||
|
(inputs.nixos-extra-modules + "/modules/interface-naming.nix")
|
||||||
|
"${self}/profiles-clone/nixos"
|
||||||
|
"${self}/modules-clone/nixos"
|
||||||
|
{
|
||||||
|
_module.args.dns = inputs.dns;
|
||||||
|
|
||||||
|
microvm.guest.enable = lib.mkDefault false;
|
||||||
|
|
||||||
|
networking.hostName = mkStrong configName;
|
||||||
|
|
||||||
|
node = {
|
||||||
|
name = lib.mkForce configName;
|
||||||
|
arch = lib.mkForce arch;
|
||||||
|
type = lib.mkForce "nixos";
|
||||||
|
secretsDir = ../hosts/nixos/${arch}/${configName}/secrets;
|
||||||
|
configDir = ../hosts/nixos/${arch}/${configName};
|
||||||
|
lockFromBootstrapping = lib.mkIf (!minimal) (mkStrong true);
|
||||||
|
};
|
||||||
|
|
||||||
|
swarselprofiles = {
|
||||||
|
minimal = lib.mkIf minimal (mkStrong true);
|
||||||
|
};
|
||||||
|
|
||||||
|
swarselmodules.server = {
|
||||||
|
ssh = lib.mkIf (!minimal) (mkStrong true);
|
||||||
|
};
|
||||||
|
|
||||||
|
swarselsystems = {
|
||||||
|
mainUser = mkStrong "swarsel";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
38
modules-clone/home/common/anki-tray.nix
Normal file
38
modules-clone/home/common/anki-tray.nix
Normal file
|
|
@ -0,0 +1,38 @@
|
||||||
|
{ lib, config, ... }:
|
||||||
|
{
|
||||||
|
options.swarselmodules.anki-tray = lib.mkEnableOption "enable anki applet for tray";
|
||||||
|
config = lib.mkIf config.swarselmodules.anki-tray {
|
||||||
|
|
||||||
|
systemd.user.services.anki-applet = {
|
||||||
|
Unit = {
|
||||||
|
Description = "Anki applet";
|
||||||
|
Requires = [ "graphical-session.target" ];
|
||||||
|
After = [
|
||||||
|
"graphical-session.target"
|
||||||
|
"tray.target"
|
||||||
|
];
|
||||||
|
PartOf = [
|
||||||
|
"tray.target"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
Install = {
|
||||||
|
WantedBy = [ "tray.target" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
Service = {
|
||||||
|
# ExecStart = "${lib.getExe config.programs.anki.package}";
|
||||||
|
Type = "simple";
|
||||||
|
ExecStart = "/etc/profiles/per-user/${config.swarselsystems.mainUser}/bin/anki";
|
||||||
|
Environment = [
|
||||||
|
"QT_QPA_PLATFORM=xcb"
|
||||||
|
];
|
||||||
|
TimeoutStopSec = "2s";
|
||||||
|
KillMode = "mixed";
|
||||||
|
KillSignal = "SIGTERM";
|
||||||
|
SendSIGKILL = "yes";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
}
|
||||||
66
modules-clone/home/common/anki.nix
Normal file
66
modules-clone/home/common/anki.nix
Normal file
|
|
@ -0,0 +1,66 @@
|
||||||
|
{ lib, config, pkgs, globals, confLib, type, ... }:
|
||||||
|
let
|
||||||
|
moduleName = "anki";
|
||||||
|
inherit (config.swarselsystems) isPublic isNixos;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.swarselmodules.${moduleName} = lib.mkEnableOption "enable ${moduleName} and settings";
|
||||||
|
config = lib.mkIf config.swarselmodules.${moduleName}
|
||||||
|
({
|
||||||
|
|
||||||
|
programs.anki = {
|
||||||
|
enable = true;
|
||||||
|
package = pkgs.anki;
|
||||||
|
hideBottomBar = true;
|
||||||
|
hideBottomBarMode = "always";
|
||||||
|
hideTopBar = true;
|
||||||
|
hideTopBarMode = "always";
|
||||||
|
reduceMotion = true;
|
||||||
|
spacebarRatesCard = true;
|
||||||
|
# videoDriver = "opengl";
|
||||||
|
profiles."User 1".sync = {
|
||||||
|
autoSync = false; # sync on profile close will delay system shutdown
|
||||||
|
syncMedia = true;
|
||||||
|
autoSyncMediaMinutes = 5;
|
||||||
|
url = "https://${globals.services.ankisync.domain}";
|
||||||
|
usernameFile = confLib.getConfig.sops.secrets.anki-user.path;
|
||||||
|
# this is not the password but the syncKey
|
||||||
|
# get it by logging in or out, saving preferences and then
|
||||||
|
# show details on the "settings wont be saved" dialog
|
||||||
|
keyFile = confLib.getConfig.sops.secrets.anki-pw.path;
|
||||||
|
};
|
||||||
|
addons =
|
||||||
|
let
|
||||||
|
minimize-to-tray = pkgs.anki-utils.buildAnkiAddon
|
||||||
|
(finalAttrs: {
|
||||||
|
pname = "minimize-to-tray";
|
||||||
|
version = "2.0.1";
|
||||||
|
src = pkgs.fetchFromGitHub {
|
||||||
|
owner = "simgunz";
|
||||||
|
repo = "anki21-addons_minimize-to-tray";
|
||||||
|
rev = finalAttrs.version;
|
||||||
|
sparseCheckout = [ "src" ];
|
||||||
|
hash = "sha256-xmvbIOfi9K0yEUtUNKtuvv2Vmqrkaa4Jie6J1s+FuqY=";
|
||||||
|
};
|
||||||
|
sourceRoot = "${finalAttrs.src.name}/src";
|
||||||
|
});
|
||||||
|
in
|
||||||
|
[
|
||||||
|
(minimize-to-tray.withConfig
|
||||||
|
{
|
||||||
|
config = {
|
||||||
|
hide_on_startup = "true";
|
||||||
|
};
|
||||||
|
})
|
||||||
|
];
|
||||||
|
};
|
||||||
|
} // lib.optionalAttrs (type != "nixos") {
|
||||||
|
sops = lib.mkIf (!isPublic && !isNixos) {
|
||||||
|
secrets = {
|
||||||
|
anki-user = { };
|
||||||
|
anki-pw = { };
|
||||||
|
};
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
26
modules-clone/home/common/attic-store-push.nix
Normal file
26
modules-clone/home/common/attic-store-push.nix
Normal file
|
|
@ -0,0 +1,26 @@
|
||||||
|
{ lib, config, pkgs, ... }:
|
||||||
|
{
|
||||||
|
options.swarselmodules.attic-store-push = lib.mkEnableOption "enable automatic attic store push";
|
||||||
|
config = lib.mkIf config.swarselmodules.attic-store-push {
|
||||||
|
|
||||||
|
systemd.user.services.attic-store-push = {
|
||||||
|
Unit = {
|
||||||
|
Description = "Attic store pusher";
|
||||||
|
Requires = [ "graphical-session.target" ];
|
||||||
|
After = [ "graphical-session.target" ];
|
||||||
|
PartOf = [ "graphical-session.target" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
Install = {
|
||||||
|
WantedBy = [ "graphical-session.target" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
Service = {
|
||||||
|
ExecStart = "${lib.getExe pkgs.attic-client} watch-store ${config.swarselsystems.mainUser}:${config.swarselsystems.mainUser}";
|
||||||
|
Restart = "on-failure";
|
||||||
|
RestartSec = 30;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
19
modules-clone/home/common/atuin.nix
Normal file
19
modules-clone/home/common/atuin.nix
Normal file
|
|
@ -0,0 +1,19 @@
|
||||||
|
{ lib, config, globals, ... }:
|
||||||
|
let
|
||||||
|
atuinDomain = globals.services.atuin.domain;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.swarselmodules.atuin = lib.mkEnableOption "atuin settings";
|
||||||
|
config = lib.mkIf config.swarselmodules.atuin {
|
||||||
|
programs.atuin = {
|
||||||
|
enable = true;
|
||||||
|
enableZshIntegration = true;
|
||||||
|
enableBashIntegration = true;
|
||||||
|
settings = {
|
||||||
|
auto_sync = true;
|
||||||
|
sync_frequency = "5m";
|
||||||
|
sync_address = "https://${atuinDomain}";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
14
modules-clone/home/common/autotiling.nix
Normal file
14
modules-clone/home/common/autotiling.nix
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
{ lib, config, ... }:
|
||||||
|
let
|
||||||
|
moduleName = "autotiling";
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.swarselmodules.${moduleName} = lib.mkEnableOption "enable ${moduleName} and settings";
|
||||||
|
config = lib.mkIf config.swarselmodules.${moduleName} {
|
||||||
|
services.${moduleName} = {
|
||||||
|
enable = true;
|
||||||
|
systemdTarget = "sway-session.target";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
20
modules-clone/home/common/bash.nix
Normal file
20
modules-clone/home/common/bash.nix
Normal file
|
|
@ -0,0 +1,20 @@
|
||||||
|
{ config, lib, ... }:
|
||||||
|
{
|
||||||
|
options.swarselmodules.bash = lib.mkEnableOption "bash settings";
|
||||||
|
config = lib.mkIf config.swarselmodules.bash {
|
||||||
|
|
||||||
|
programs.bash = {
|
||||||
|
enable = true;
|
||||||
|
# needed for remote builders
|
||||||
|
bashrcExtra = lib.mkIf (!config.swarselsystems.isNixos) ''
|
||||||
|
export PATH="/nix/var/nix/profiles/default/bin:$PATH"
|
||||||
|
'';
|
||||||
|
historyFile = "${config.home.homeDirectory}/.histfile";
|
||||||
|
historySize = 100000;
|
||||||
|
historyFileSize = 100000;
|
||||||
|
historyControl = [
|
||||||
|
"ignoreboth"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
25
modules-clone/home/common/batsignal.nix
Normal file
25
modules-clone/home/common/batsignal.nix
Normal file
|
|
@ -0,0 +1,25 @@
|
||||||
|
{ lib, config, ... }:
|
||||||
|
let
|
||||||
|
moduleName = "batsignal";
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.swarselmodules.${moduleName} = lib.mkEnableOption "enable ${moduleName} and settings";
|
||||||
|
config = lib.mkIf config.swarselmodules.${moduleName} {
|
||||||
|
services.${moduleName} = {
|
||||||
|
enable = true;
|
||||||
|
extraArgs = [
|
||||||
|
"-W"
|
||||||
|
" Consider charging the battery"
|
||||||
|
"-C"
|
||||||
|
" Battery is low; plug in charger now"
|
||||||
|
"-D"
|
||||||
|
" Device will lose power in a few seconds"
|
||||||
|
"-c"
|
||||||
|
"10"
|
||||||
|
"-d"
|
||||||
|
"5"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
7
modules-clone/home/common/blueman-applet.nix
Normal file
7
modules-clone/home/common/blueman-applet.nix
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
{ lib, config, ... }:
|
||||||
|
{
|
||||||
|
options.swarselmodules.blueman-applet = lib.mkEnableOption "enable blueman applet for tray";
|
||||||
|
config = lib.mkIf config.swarselmodules.blueman-applet {
|
||||||
|
services.blueman-applet.enable = true;
|
||||||
|
};
|
||||||
|
}
|
||||||
42
modules-clone/home/common/custom-packages.nix
Normal file
42
modules-clone/home/common/custom-packages.nix
Normal file
|
|
@ -0,0 +1,42 @@
|
||||||
|
{ lib, config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
options.swarselmodules.ownpackages = lib.mkEnableOption "own packages settings";
|
||||||
|
config = lib.mkIf config.swarselmodules.ownpackages {
|
||||||
|
home.packages = with pkgs; lib.mkIf (!config.swarselsystems.isPublic) [
|
||||||
|
pass-fuzzel
|
||||||
|
cdw
|
||||||
|
cdb
|
||||||
|
cdr
|
||||||
|
bak
|
||||||
|
timer
|
||||||
|
e
|
||||||
|
niri-resize
|
||||||
|
swarselcheck
|
||||||
|
swarselcheck-niri
|
||||||
|
waybarupdate
|
||||||
|
opacitytoggle
|
||||||
|
fs-diff
|
||||||
|
github-notifications
|
||||||
|
hm-specialisation
|
||||||
|
t2ts
|
||||||
|
ts2t
|
||||||
|
vershell
|
||||||
|
eontimer
|
||||||
|
project
|
||||||
|
fhs
|
||||||
|
swarsel-bootstrap
|
||||||
|
swarsel-displaypower
|
||||||
|
swarsel-deploy
|
||||||
|
swarsel-instantiate
|
||||||
|
swarselzellij
|
||||||
|
sshrm
|
||||||
|
endme
|
||||||
|
git-replace
|
||||||
|
prstatus
|
||||||
|
swarsel-gens
|
||||||
|
swarsel-switch
|
||||||
|
swarsel-sops
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
9
modules-clone/home/common/default.nix
Normal file
9
modules-clone/home/common/default.nix
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
{ lib, ... }:
|
||||||
|
let
|
||||||
|
importNames = lib.swarselsystems.readNix "modules-clone/home/common";
|
||||||
|
sharedNames = lib.swarselsystems.readNix "modules-clone/shared";
|
||||||
|
in
|
||||||
|
{
|
||||||
|
imports = lib.swarselsystems.mkImports importNames "modules-clone/home/common" ++
|
||||||
|
lib.swarselsystems.mkImports sharedNames "modules-clone/shared";
|
||||||
|
}
|
||||||
107
modules-clone/home/common/desktop.nix
Normal file
107
modules-clone/home/common/desktop.nix
Normal file
|
|
@ -0,0 +1,107 @@
|
||||||
|
{ lib, config, ... }:
|
||||||
|
{
|
||||||
|
options.swarselmodules.desktop = lib.mkEnableOption "desktop settings";
|
||||||
|
config = lib.mkIf config.swarselmodules.desktop {
|
||||||
|
xdg.desktopEntries = {
|
||||||
|
|
||||||
|
cura = {
|
||||||
|
name = "Ultimaker Cura";
|
||||||
|
genericName = "Cura";
|
||||||
|
exec = "cura";
|
||||||
|
terminal = false;
|
||||||
|
categories = [ "Application" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
teamsNoGpu = {
|
||||||
|
name = "Microsoft Teams (no GPU)";
|
||||||
|
genericName = "Teams (no GPU)";
|
||||||
|
exec = "teams-for-linux --disableGpu=true --trayIconEnabled=true";
|
||||||
|
terminal = false;
|
||||||
|
categories = [ "Application" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
rustdesk-vbc = {
|
||||||
|
name = "Rustdesk VBC";
|
||||||
|
genericName = "rustdesk-vbc";
|
||||||
|
exec = "rustdesk-vbc";
|
||||||
|
terminal = false;
|
||||||
|
categories = [ "Application" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
anki = {
|
||||||
|
name = "Anki Flashcards";
|
||||||
|
genericName = "Anki";
|
||||||
|
exec = "anki";
|
||||||
|
terminal = false;
|
||||||
|
categories = [ "Application" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
element = {
|
||||||
|
name = "Element Matrix Client";
|
||||||
|
genericName = "Element";
|
||||||
|
exec = "element-desktop -enable-features=UseOzonePlatform -ozone-platform=wayland --disable-gpu-driver-bug-workarounds";
|
||||||
|
terminal = false;
|
||||||
|
categories = [ "Application" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
emacsclient-newframe = {
|
||||||
|
name = "Emacs (Client, New Frame)";
|
||||||
|
genericName = "Emacs (Client, New Frame)";
|
||||||
|
exec = "emacsclient -r %u";
|
||||||
|
icon = "emacs";
|
||||||
|
terminal = false;
|
||||||
|
categories = [ "Development" "TextEditor" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
xdg = {
|
||||||
|
configFile."mimeapps.list".force = true;
|
||||||
|
mimeApps = {
|
||||||
|
enable = true;
|
||||||
|
defaultApplications = {
|
||||||
|
"application/epub+zip" = [ "calibre-ebook-viewer.desktop" ];
|
||||||
|
"application/metalink+xml" = [ "emacsclient.desktop" ];
|
||||||
|
"application/msword" = [ "writer.desktop" ];
|
||||||
|
"application/pdf" = [ "org.gnome.Evince.desktop" ];
|
||||||
|
"application/sql" = [ "emacsclient.desktop" ];
|
||||||
|
"application/vnd.ms-excel" = [ "calc.desktop" ];
|
||||||
|
"application/vnd.ms-powerpoint" = [ "impress.desktop" ];
|
||||||
|
"application/x-extension-htm" = [ "firefox.desktop" ];
|
||||||
|
"application/x-extension-html" = [ "firefox.desktop" ];
|
||||||
|
"application/x-extension-shtml" = [ "firefox.desktop" ];
|
||||||
|
"application/x-extension-xht" = [ "firefox.desktop" ];
|
||||||
|
"application/x-extension-xhtml" = [ "firefox.desktop" ];
|
||||||
|
"application/xhtml+xml" = [ "firefox.desktop" ];
|
||||||
|
"audio/flac" = [ "mpv.desktop" ];
|
||||||
|
"audio/mp3" = [ "mpv.desktop" ];
|
||||||
|
"audio/ogg" = [ "mpv.desktop" ];
|
||||||
|
"audio/wav" = [ "mpv.desktop" ];
|
||||||
|
"image/gif" = [ "imv.desktop" ];
|
||||||
|
"image/jpeg" = [ "imv.desktop" ];
|
||||||
|
"image/png" = [ "imv.desktop" ];
|
||||||
|
"image/svg" = [ "imv.desktop" ];
|
||||||
|
"image/vnd.adobe.photoshop" = [ "gimp.desktop" ];
|
||||||
|
"image/vnd.dxf" = [ "org.inkscape.Inkscape.desktop" ];
|
||||||
|
"image/webp" = [ "firefox.desktop" ];
|
||||||
|
"text/csv" = [ "emacsclient.desktop" ];
|
||||||
|
"text/html" = [ "firefox.desktop" ];
|
||||||
|
"text/plain" = [ "emacsclient.desktop" ];
|
||||||
|
"video/3gp" = [ "umpv.desktop" ];
|
||||||
|
"video/flv" = [ "umpv.desktop" ];
|
||||||
|
"video/mkv" = [ "umpv.desktop" ];
|
||||||
|
"video/mp4" = [ "umpv.desktop" ];
|
||||||
|
"x-scheme-handler/chrome" = [ "firefox.desktop" ];
|
||||||
|
"x-scheme-handler/http" = [ "firefox.desktop" ];
|
||||||
|
"x-scheme-handler/https" = [ "firefox.desktop" ];
|
||||||
|
};
|
||||||
|
associations = {
|
||||||
|
added = {
|
||||||
|
"application/x-zerosize" = [ "emacsclient.desktop" ];
|
||||||
|
"application/epub+zip" = [ "calibre-ebook-viewer.desktop" ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
11
modules-clone/home/common/direnv.nix
Normal file
11
modules-clone/home/common/direnv.nix
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
{ lib, config, ... }:
|
||||||
|
{
|
||||||
|
options.swarselmodules.direnv = lib.mkEnableOption "direnv settings";
|
||||||
|
config = lib.mkIf config.swarselmodules.direnv {
|
||||||
|
programs.direnv = {
|
||||||
|
enable = true;
|
||||||
|
silent = true;
|
||||||
|
nix-direnv.enable = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
29
modules-clone/home/common/element-tray.nix
Normal file
29
modules-clone/home/common/element-tray.nix
Normal file
|
|
@ -0,0 +1,29 @@
|
||||||
|
{ lib, config, pkgs, ... }:
|
||||||
|
{
|
||||||
|
options.swarselmodules.element-tray = lib.mkEnableOption "enable element applet for tray";
|
||||||
|
config = lib.mkIf config.swarselmodules.element-tray {
|
||||||
|
|
||||||
|
systemd.user.services.element-applet = {
|
||||||
|
Unit = {
|
||||||
|
Description = "Element applet";
|
||||||
|
Requires = [ "graphical-session.target" ];
|
||||||
|
After = [
|
||||||
|
"graphical-session.target"
|
||||||
|
"tray.target"
|
||||||
|
];
|
||||||
|
PartOf = [
|
||||||
|
"tray.target"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
Install = {
|
||||||
|
WantedBy = [ "tray.target" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
Service = {
|
||||||
|
ExecStart = "${pkgs.element-desktop}/bin/element-desktop --hidden --enable-features=useozoneplatform --ozone-platform=wayland --disable-gpu-driver-bug-workarounds";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
29
modules-clone/home/common/element.nix
Normal file
29
modules-clone/home/common/element.nix
Normal file
|
|
@ -0,0 +1,29 @@
|
||||||
|
{ lib, config, globals, ... }:
|
||||||
|
let
|
||||||
|
moduleName = "element-desktop";
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.swarselmodules.${moduleName} = lib.mkEnableOption "enable ${moduleName} and settings";
|
||||||
|
config = lib.mkIf config.swarselmodules.${moduleName} {
|
||||||
|
programs.element-desktop = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
default_server_config = {
|
||||||
|
"m.homeserver" = {
|
||||||
|
base_url = "https://${globals.services.matrix.domain}/";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
UIFeature = {
|
||||||
|
feedback = false;
|
||||||
|
voip = false;
|
||||||
|
widgets = false;
|
||||||
|
shareSocial = false;
|
||||||
|
registration = false;
|
||||||
|
passwordReset = false;
|
||||||
|
deactivate = false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
126
modules-clone/home/common/emacs.nix
Normal file
126
modules-clone/home/common/emacs.nix
Normal file
|
|
@ -0,0 +1,126 @@
|
||||||
|
{ self, lib, config, pkgs, globals, inputs, type, ... }:
|
||||||
|
let
|
||||||
|
inherit (config.swarselsystems) homeDir mainUser isPublic isNixos;
|
||||||
|
inherit (config.repo.secrets.common.emacs) radicaleUser;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.swarselmodules.emacs = lib.mkEnableOption "emacs settings";
|
||||||
|
config = lib.mkIf config.swarselmodules.emacs ({
|
||||||
|
# needed for elfeed
|
||||||
|
# enable emacs overlay for bleeding edge features
|
||||||
|
# also read init.el file and install use-package packages
|
||||||
|
|
||||||
|
home.activation.setupEmacsOrgFiles =
|
||||||
|
lib.hm.dag.entryAfter [ "writeBoundary" ] ''
|
||||||
|
set -eu
|
||||||
|
|
||||||
|
if [ ! -d ${homeDir}/Org ]; then
|
||||||
|
${pkgs.coreutils}/bin/install -d -m 0755 ${homeDir}/Org
|
||||||
|
${pkgs.coreutils}/bin/chown ${mainUser}:syncthing ${homeDir}/Org
|
||||||
|
fi
|
||||||
|
|
||||||
|
# create dummy files to make Emacs calendar work
|
||||||
|
# these have low modified dates and should be marked as sync-conflicts
|
||||||
|
for file in "Tasks" "Archive" "Journal"; do
|
||||||
|
if [ ! -f ${homeDir}/Org/"$file".org ]; then
|
||||||
|
${pkgs.coreutils}/bin/touch --time=access --time=modify -t 197001010000.00 ${homeDir}/Org/"$file".org
|
||||||
|
${pkgs.coreutils}/bin/chown ${mainUser}:syncthing ${homeDir}/Org/"$file".org
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# when the configuration is build again, these sync-conflicts will be cleaned up
|
||||||
|
for file in $(find ${homeDir}/Org/ -name "*sync-conflict*"); do
|
||||||
|
${pkgs.coreutils}/bin/rm "$file"
|
||||||
|
done
|
||||||
|
'';
|
||||||
|
|
||||||
|
programs.emacs = {
|
||||||
|
enable = true;
|
||||||
|
package = pkgs.emacsWithPackagesFromUsePackage {
|
||||||
|
config = self + /files/emacs/init.el;
|
||||||
|
package = pkgs.emacs-unstable-pgtk;
|
||||||
|
alwaysEnsure = true;
|
||||||
|
alwaysTangle = true;
|
||||||
|
extraEmacsPackages = epkgs: [
|
||||||
|
epkgs.mu4e
|
||||||
|
epkgs.use-package
|
||||||
|
epkgs.lsp-bridge
|
||||||
|
epkgs.doom-themes
|
||||||
|
epkgs.vterm
|
||||||
|
# pkgs.stable.emacs.pkgs.elpaPackages.tramp # use the unstable version from elpa
|
||||||
|
epkgs.treesit-grammars.with-all-grammars
|
||||||
|
|
||||||
|
# build the rest of the packages myself
|
||||||
|
# org-calfw is severely outdated on MELPA and throws many warnings on emacs startup
|
||||||
|
# build the package from the haji-ali fork, which is well-maintained
|
||||||
|
|
||||||
|
(epkgs.trivialBuild rec {
|
||||||
|
pname = "eglot-booster";
|
||||||
|
version = "main-29-10-2024";
|
||||||
|
|
||||||
|
src = pkgs.fetchFromGitHub {
|
||||||
|
owner = "jdtsmith";
|
||||||
|
repo = "eglot-booster";
|
||||||
|
rev = "e6daa6bcaf4aceee29c8a5a949b43eb1b89900ed";
|
||||||
|
hash = "sha256-PLfaXELkdX5NZcSmR1s/kgmU16ODF8bn56nfTh9g6bs=";
|
||||||
|
};
|
||||||
|
|
||||||
|
packageRequires = [ epkgs.jsonrpc epkgs.eglot ];
|
||||||
|
})
|
||||||
|
(inputs.nixpkgs-dev.legacyPackages.${pkgs.stdenv.hostPlatform.system}.emacsPackagesFor pkgs.emacs-git-pgtk).calfw
|
||||||
|
# epkgs.calfw
|
||||||
|
# (epkgs.trivialBuild rec {
|
||||||
|
# pname = "calfw";
|
||||||
|
# version = "1.0.0-20231002";
|
||||||
|
# src = pkgs.fetchFromGitHub {
|
||||||
|
# owner = "haji-ali";
|
||||||
|
# repo = "emacs-calfw";
|
||||||
|
# rev = "bc99afee611690f85f0cd0bd33300f3385ddd3d3";
|
||||||
|
# hash = "sha256-0xMII1KJhTBgQ57tXJks0ZFYMXIanrOl9XyqVmu7a7Y=";
|
||||||
|
# };
|
||||||
|
# packageRequires = [ epkgs.howm ];
|
||||||
|
# })
|
||||||
|
|
||||||
|
(epkgs.trivialBuild rec {
|
||||||
|
pname = "fast-scroll";
|
||||||
|
version = "1.0.0-20191016";
|
||||||
|
src = pkgs.fetchFromGitHub {
|
||||||
|
owner = "ahungry";
|
||||||
|
repo = "fast-scroll";
|
||||||
|
rev = "3f6ca0d5556fe9795b74714304564f2295dcfa24";
|
||||||
|
hash = "sha256-w1wmJW7YwXyjvXJOWdN2+k+QmhXr4IflES/c2bCX3CI=";
|
||||||
|
};
|
||||||
|
packageRequires = [ ];
|
||||||
|
})
|
||||||
|
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
services.emacs = {
|
||||||
|
enable = true;
|
||||||
|
socketActivation.enable = false;
|
||||||
|
startWithUserSession = "graphical";
|
||||||
|
};
|
||||||
|
|
||||||
|
} // lib.optionalAttrs (type != "nixos") {
|
||||||
|
|
||||||
|
sops = lib.mkIf (!isPublic && !isNixos) {
|
||||||
|
secrets = {
|
||||||
|
fever-pw = { path = "${homeDir}/.emacs.d/.fever"; };
|
||||||
|
emacs-radicale-pw = { };
|
||||||
|
github-forge-token = { };
|
||||||
|
};
|
||||||
|
templates = {
|
||||||
|
authinfo = {
|
||||||
|
path = "${homeDir}/.emacs.d/.authinfo";
|
||||||
|
content = ''
|
||||||
|
machine ${globals.services.radicale.domain} login ${radicaleUser} password ${config.sops.placeholder.emacs-radicale-pw}
|
||||||
|
machine api.github.com login ${mainUser}^forge password ${config.sops.placeholder.github-forge-token}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
43
modules-clone/home/common/env.nix
Normal file
43
modules-clone/home/common/env.nix
Normal file
|
|
@ -0,0 +1,43 @@
|
||||||
|
{ lib, config, confLib, globals, ... }:
|
||||||
|
let
|
||||||
|
inherit (confLib.getConfig.repo.secrets.common.mail) address1 address2 address3 address4 allMailAddresses;
|
||||||
|
inherit (confLib.getConfig.repo.secrets.common.calendar) source1 source1-name source2 source2-name source3 source3-name;
|
||||||
|
inherit (confLib.getConfig.repo.secrets.common) fullName openrouterApi instaDomain sportDomain;
|
||||||
|
inherit (config.swarselsystems) isPublic homeDir;
|
||||||
|
|
||||||
|
DISPLAY = ":0";
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.swarselmodules.env = lib.mkEnableOption "env settings";
|
||||||
|
config = lib.mkIf config.swarselmodules.env {
|
||||||
|
home.sessionVariables = {
|
||||||
|
inherit DISPLAY;
|
||||||
|
EDITOR = "e -w";
|
||||||
|
} // (lib.optionalAttrs (!isPublic) { });
|
||||||
|
systemd.user.sessionVariables = {
|
||||||
|
DOCUMENT_DIR_PRIV = lib.mkForce "${homeDir}/Documents/Private";
|
||||||
|
FLAKE = "${config.home.homeDirectory}/.dotfiles";
|
||||||
|
} // lib.optionalAttrs (!isPublic) {
|
||||||
|
SWARSEL_DOMAIN = globals.domains.main;
|
||||||
|
SWARSEL_RSS_DOMAIN = globals.services.freshrss.domain;
|
||||||
|
SWARSEL_MUSIC_DOMAIN = globals.services.navidrome.domain;
|
||||||
|
SWARSEL_FILES_DOMAIN = globals.services.nextcloud.domain;
|
||||||
|
SWARSEL_INSTA_DOMAIN = instaDomain;
|
||||||
|
SWARSEL_SPORT_DOMAIN = sportDomain;
|
||||||
|
SWARSEL_MAIL1 = address1;
|
||||||
|
SWARSEL_MAIL2 = address2;
|
||||||
|
SWARSEL_MAIL3 = address3;
|
||||||
|
SWARSEL_MAIL4 = address4;
|
||||||
|
SWARSEL_CAL1 = source1;
|
||||||
|
SWARSEL_CAL1NAME = source1-name;
|
||||||
|
SWARSEL_CAL2 = source2;
|
||||||
|
SWARSEL_CAL2NAME = source2-name;
|
||||||
|
SWARSEL_CAL3 = source3;
|
||||||
|
SWARSEL_CAL3NAME = source3-name;
|
||||||
|
SWARSEL_FULLNAME = fullName;
|
||||||
|
SWARSEL_MAIL_ALL = lib.mkDefault allMailAddresses;
|
||||||
|
GITHUB_NOTIFICATION_TOKEN_PATH = confLib.getConfig.sops.secrets.github-notifications-token.path;
|
||||||
|
OPENROUTER_API_KEY = openrouterApi;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
15
modules-clone/home/common/eza.nix
Normal file
15
modules-clone/home/common/eza.nix
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
{ lib, config, ... }:
|
||||||
|
{
|
||||||
|
options.swarselmodules.eza = lib.mkEnableOption "eza settings";
|
||||||
|
config = lib.mkIf config.swarselmodules.eza {
|
||||||
|
programs.eza = {
|
||||||
|
enable = true;
|
||||||
|
icons = "auto";
|
||||||
|
git = true;
|
||||||
|
extraOptions = [
|
||||||
|
"-l"
|
||||||
|
"--group-directories-first"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
155
modules-clone/home/common/firefox.nix
Normal file
155
modules-clone/home/common/firefox.nix
Normal file
|
|
@ -0,0 +1,155 @@
|
||||||
|
{ config, pkgs, lib, vars, ... }:
|
||||||
|
{
|
||||||
|
options.swarselmodules.firefox = lib.mkEnableOption "firefox settings";
|
||||||
|
config = lib.mkIf config.swarselmodules.firefox {
|
||||||
|
|
||||||
|
programs.zsh.sessionVariables = {
|
||||||
|
MOZ_DISABLE_RDD_SANDBOX = "1";
|
||||||
|
};
|
||||||
|
|
||||||
|
programs.firefox = {
|
||||||
|
enable = true;
|
||||||
|
package = pkgs.firefox; # uses overrides
|
||||||
|
policies = {
|
||||||
|
# CaptivePortal = false;
|
||||||
|
AppAutoUpdate = false;
|
||||||
|
BackgroundAppUpdate = false;
|
||||||
|
DisableBuiltinPDFViewer = true;
|
||||||
|
DisableFirefoxStudies = true;
|
||||||
|
DisablePocket = true;
|
||||||
|
DisableFirefoxScreenshots = true;
|
||||||
|
DisableTelemetry = true;
|
||||||
|
DisableFirefoxAccounts = false;
|
||||||
|
DisableProfileImport = true;
|
||||||
|
DisableProfileRefresh = true;
|
||||||
|
DisplayBookmarksToolbar = "always";
|
||||||
|
DontCheckDefaultBrowser = true;
|
||||||
|
NoDefaultBookmarks = true;
|
||||||
|
OfferToSaveLogins = false;
|
||||||
|
OfferToSaveLoginsDefault = false;
|
||||||
|
PasswordManagerEnabled = false;
|
||||||
|
DisableMasterPasswordCreation = true;
|
||||||
|
ExtensionUpdate = false;
|
||||||
|
EnableTrackingProtection = {
|
||||||
|
Value = true;
|
||||||
|
Locked = true;
|
||||||
|
Cryptomining = true;
|
||||||
|
Fingerprinting = true;
|
||||||
|
EmailTracking = true;
|
||||||
|
# Exceptions = ["https://example.com"]
|
||||||
|
};
|
||||||
|
PDFjs = {
|
||||||
|
Enabled = false;
|
||||||
|
EnablePermissions = false;
|
||||||
|
};
|
||||||
|
Handlers = {
|
||||||
|
mimeTypes."application/pdf".action = "saveToDisk";
|
||||||
|
};
|
||||||
|
extensions = {
|
||||||
|
pdf = {
|
||||||
|
action = "useHelperApp";
|
||||||
|
ask = true;
|
||||||
|
handlers = [
|
||||||
|
{
|
||||||
|
name = "GNOME Document Viewer";
|
||||||
|
path = "${pkgs.evince}/bin/evince";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
FirefoxHome = {
|
||||||
|
Search = true;
|
||||||
|
TopSites = true;
|
||||||
|
SponsoredTopSites = false;
|
||||||
|
Highlights = true;
|
||||||
|
Pocket = false;
|
||||||
|
SponsoredPocket = false;
|
||||||
|
Snippets = false;
|
||||||
|
Locked = true;
|
||||||
|
};
|
||||||
|
FirefoxSuggest = {
|
||||||
|
WebSuggestions = false;
|
||||||
|
SponsoredSuggestions = false;
|
||||||
|
ImproveSuggest = false;
|
||||||
|
Locked = true;
|
||||||
|
};
|
||||||
|
SanitizeOnShutdown = {
|
||||||
|
Cache = true;
|
||||||
|
Cookies = false;
|
||||||
|
Downloads = true;
|
||||||
|
FormData = true;
|
||||||
|
History = false;
|
||||||
|
Sessions = false;
|
||||||
|
SiteSettings = false;
|
||||||
|
OfflineApps = true;
|
||||||
|
Locked = true;
|
||||||
|
};
|
||||||
|
SearchEngines = {
|
||||||
|
PreventInstalls = true;
|
||||||
|
Remove = [
|
||||||
|
"Bing" # Fuck you
|
||||||
|
];
|
||||||
|
};
|
||||||
|
UserMessaging = {
|
||||||
|
ExtensionRecommendations = false; # Don’t recommend extensions while the user is visiting web pages
|
||||||
|
FeatureRecommendations = false; # Don’t recommend browser features
|
||||||
|
Locked = true; # Prevent the user from changing user messaging preferences
|
||||||
|
MoreFromMozilla = false; # Don’t show the “More from Mozilla” section in Preferences
|
||||||
|
SkipOnboarding = true; # Don’t show onboarding messages on the new tab page
|
||||||
|
UrlbarInterventions = false; # Don’t offer suggestions in the URL bar
|
||||||
|
WhatsNew = false; # Remove the “What’s New” icon and menuitem
|
||||||
|
};
|
||||||
|
ExtensionSettings = {
|
||||||
|
"3rdparty".Extensions = {
|
||||||
|
# https://github.com/gorhill/uBlock/blob/master/platform/common/managed_storage.json
|
||||||
|
"uBlock0@raymondhill.net".adminSettings = {
|
||||||
|
userSettings = rec {
|
||||||
|
uiTheme = "dark";
|
||||||
|
uiAccentCustom = true;
|
||||||
|
uiAccentCustom0 = "#0C8084";
|
||||||
|
cloudStorageEnabled = lib.mkForce false;
|
||||||
|
importedLists = [
|
||||||
|
"https://filters.adtidy.org/extension/ublock/filters/3.txt"
|
||||||
|
"https://github.com/DandelionSprout/adfilt/raw/master/LegitimateURLShortener.txt"
|
||||||
|
];
|
||||||
|
externalLists = lib.concatStringsSep "\n" importedLists;
|
||||||
|
};
|
||||||
|
selectedFilterLists = [
|
||||||
|
"CZE-0"
|
||||||
|
"adguard-generic"
|
||||||
|
"adguard-annoyance"
|
||||||
|
"adguard-social"
|
||||||
|
"adguard-spyware-url"
|
||||||
|
"easylist"
|
||||||
|
"easyprivacy"
|
||||||
|
"https://github.com/DandelionSprout/adfilt/raw/master/LegitimateURLShortener.txt"
|
||||||
|
"plowe-0"
|
||||||
|
"ublock-abuse"
|
||||||
|
"ublock-badware"
|
||||||
|
"ublock-filters"
|
||||||
|
"ublock-privacy"
|
||||||
|
"ublock-quick-fixes"
|
||||||
|
"ublock-unbreak"
|
||||||
|
"urlhaus-1"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
profiles = {
|
||||||
|
default = lib.recursiveUpdate
|
||||||
|
{
|
||||||
|
id = 0;
|
||||||
|
isDefault = true;
|
||||||
|
settings = {
|
||||||
|
"browser.startup.homepage" = "https://lobste.rs";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
vars.firefox;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
29
modules-clone/home/common/firezone-tray.nix
Normal file
29
modules-clone/home/common/firezone-tray.nix
Normal file
|
|
@ -0,0 +1,29 @@
|
||||||
|
{ lib, config, pkgs, ... }:
|
||||||
|
{
|
||||||
|
options.swarselmodules.firezone-tray = lib.mkEnableOption "enable firezone applet for tray";
|
||||||
|
config = lib.mkIf config.swarselmodules.firezone-tray {
|
||||||
|
|
||||||
|
systemd.user.services.firezone-applet = {
|
||||||
|
Unit = {
|
||||||
|
Description = "Firezone applet";
|
||||||
|
Requires = [ "graphical-session.target" ];
|
||||||
|
After = [
|
||||||
|
"graphical-session.target"
|
||||||
|
"tray.target"
|
||||||
|
];
|
||||||
|
PartOf = [
|
||||||
|
"tray.target"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
Install = {
|
||||||
|
WantedBy = [ "tray.target" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
Service = {
|
||||||
|
ExecStart = "${pkgs.firezone-gui-client}/bin/firezone-client-gui";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
17
modules-clone/home/common/fuzzel.nix
Normal file
17
modules-clone/home/common/fuzzel.nix
Normal file
|
|
@ -0,0 +1,17 @@
|
||||||
|
{ lib, config, ... }:
|
||||||
|
{
|
||||||
|
options.swarselmodules.fuzzel = lib.mkEnableOption "fuzzel settings";
|
||||||
|
config = lib.mkIf config.swarselmodules.fuzzel {
|
||||||
|
programs.fuzzel = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
main = {
|
||||||
|
layer = "overlay";
|
||||||
|
lines = "10";
|
||||||
|
width = "40";
|
||||||
|
};
|
||||||
|
border.radius = "0";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
15
modules-clone/home/common/gammastep.nix
Normal file
15
modules-clone/home/common/gammastep.nix
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
{ lib, config, confLib, ... }:
|
||||||
|
let
|
||||||
|
inherit (confLib.getConfig.repo.secrets.common.location) latitude longitude;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.swarselmodules.gammastep = lib.mkEnableOption "gammastep settings";
|
||||||
|
config = lib.mkIf config.swarselmodules.gammastep {
|
||||||
|
systemd.user.services.gammastep = confLib.overrideTarget "sway-session.target";
|
||||||
|
services.gammastep = lib.mkIf (config.swarselsystems.isNixos && !config.swarselsystems.isPublic) {
|
||||||
|
enable = true;
|
||||||
|
provider = "manual";
|
||||||
|
inherit longitude latitude;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
53
modules-clone/home/common/git.nix
Normal file
53
modules-clone/home/common/git.nix
Normal file
|
|
@ -0,0 +1,53 @@
|
||||||
|
{ lib, config, globals, minimal, confLib, ... }:
|
||||||
|
let
|
||||||
|
inherit (confLib.getConfig.repo.secrets.common.mail) address1;
|
||||||
|
inherit (confLib.getConfig.repo.secrets.common) fullName;
|
||||||
|
|
||||||
|
gitUser = globals.user.name;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.swarselmodules.git = lib.mkEnableOption "git settings";
|
||||||
|
config = lib.mkIf config.swarselmodules.git {
|
||||||
|
programs.git = {
|
||||||
|
enable = true;
|
||||||
|
} // lib.optionalAttrs (!minimal) {
|
||||||
|
settings = {
|
||||||
|
alias = {
|
||||||
|
a = "add";
|
||||||
|
c = "commit";
|
||||||
|
cl = "clone";
|
||||||
|
co = "checkout";
|
||||||
|
b = "branch";
|
||||||
|
i = "init";
|
||||||
|
m = "merge";
|
||||||
|
s = "status";
|
||||||
|
r = "restore";
|
||||||
|
p = "pull";
|
||||||
|
pp = "push";
|
||||||
|
};
|
||||||
|
user = {
|
||||||
|
email = lib.mkIf (config.swarselsystems.isNixos && !config.swarselsystems.isPublic) (lib.mkDefault address1);
|
||||||
|
name = lib.mkIf (config.swarselsystems.isNixos && !config.swarselsystems.isPublic) fullName;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
signing = {
|
||||||
|
key = "0x76FD3810215AE097";
|
||||||
|
signByDefault = true;
|
||||||
|
};
|
||||||
|
lfs.enable = true;
|
||||||
|
includes = [
|
||||||
|
{
|
||||||
|
contents = {
|
||||||
|
github = {
|
||||||
|
user = gitUser;
|
||||||
|
};
|
||||||
|
commit = {
|
||||||
|
template = "~/.gitmessage";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
programs.difftastic.enable = lib.mkIf (!minimal) true;
|
||||||
|
};
|
||||||
|
}
|
||||||
9
modules-clone/home/common/gnome-keyring.nix
Normal file
9
modules-clone/home/common/gnome-keyring.nix
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
{ lib, config, ... }:
|
||||||
|
{
|
||||||
|
options.swarselmodules.gnome-keyring = lib.mkEnableOption "gnome keyring settings";
|
||||||
|
config = lib.mkIf config.swarselmodules.gnome-keyring {
|
||||||
|
services.gnome-keyring = lib.mkIf (!config.swarselsystems.isNixos) {
|
||||||
|
enable = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
59
modules-clone/home/common/gpg-agent.nix
Normal file
59
modules-clone/home/common/gpg-agent.nix
Normal file
|
|
@ -0,0 +1,59 @@
|
||||||
|
{ self, lib, config, pkgs, ... }:
|
||||||
|
let
|
||||||
|
inherit (config.swarselsystems) mainUser homeDir;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.swarselmodules.gpgagent = lib.mkEnableOption "gpg agent settings";
|
||||||
|
config = lib.mkIf config.swarselmodules.gpgagent {
|
||||||
|
services.gpg-agent = {
|
||||||
|
enable = true;
|
||||||
|
verbose = true;
|
||||||
|
enableZshIntegration = true;
|
||||||
|
enableScDaemon = true;
|
||||||
|
enableSshSupport = true;
|
||||||
|
enableExtraSocket = true;
|
||||||
|
pinentry.package = pkgs.wayprompt;
|
||||||
|
pinentry.program = "pinentry-wayprompt";
|
||||||
|
# pinentry.package = pkgs.pinentry.gtk2;
|
||||||
|
defaultCacheTtl = 600;
|
||||||
|
maxCacheTtl = 7200;
|
||||||
|
extraConfig = ''
|
||||||
|
allow-loopback-pinentry
|
||||||
|
allow-emacs-pinentry
|
||||||
|
'';
|
||||||
|
sshKeys = [
|
||||||
|
"4BE7925262289B476DBBC17B76FD3810215AE097"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
programs.gpg = {
|
||||||
|
enable = true;
|
||||||
|
scdaemonSettings = {
|
||||||
|
disable-ccid = true; # prevent conflicts between pcscd and scdameon
|
||||||
|
# pcsc-shared = true; # as long as only one key is used, this prevents key from not being detected sometimes
|
||||||
|
};
|
||||||
|
publicKeys = [
|
||||||
|
{
|
||||||
|
source = "${self}/secrets/public/gpg/gpg-public-key-0x76FD3810215AE097.asc";
|
||||||
|
trust = 5;
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
systemd.user.tmpfiles.rules = [
|
||||||
|
"d ${homeDir}/.gnupg 0700 ${mainUser} users - -"
|
||||||
|
];
|
||||||
|
|
||||||
|
# assure correct permissions
|
||||||
|
# systemd.user.tmpfiles.settings."30-gpgagent".rules = {
|
||||||
|
# "${homeDir}/.gnupg" = {
|
||||||
|
# d = {
|
||||||
|
# group = "users";
|
||||||
|
# user = mainUser;
|
||||||
|
# mode = "0700";
|
||||||
|
# };
|
||||||
|
# };
|
||||||
|
# };
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
17
modules-clone/home/common/hexchat.nix
Normal file
17
modules-clone/home/common/hexchat.nix
Normal file
|
|
@ -0,0 +1,17 @@
|
||||||
|
{ lib, config, confLib, ... }:
|
||||||
|
let
|
||||||
|
moduleName = "hexchat";
|
||||||
|
inherit (confLib.getConfig.repo.secrets.common.irc) irc_nick1;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.swarselmodules.${moduleName} = lib.mkEnableOption "enable ${moduleName} and settings";
|
||||||
|
config = lib.mkIf config.swarselmodules.${moduleName} {
|
||||||
|
programs.${moduleName} = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
inherit irc_nick1;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
104
modules-clone/home/common/kanshi.nix
Normal file
104
modules-clone/home/common/kanshi.nix
Normal file
|
|
@ -0,0 +1,104 @@
|
||||||
|
{ self, lib, pkgs, config, confLib, ... }:
|
||||||
|
{
|
||||||
|
options.swarselmodules.kanshi = lib.mkEnableOption "kanshi settings";
|
||||||
|
config = lib.mkIf config.swarselmodules.kanshi {
|
||||||
|
swarselsystems = {
|
||||||
|
monitors = {
|
||||||
|
homedesktop = rec {
|
||||||
|
name = "Philips Consumer Electronics Company PHL BDM3270 AU11806002320";
|
||||||
|
mode = "2560x1440";
|
||||||
|
scale = "1";
|
||||||
|
position = "0,0";
|
||||||
|
workspace = "11:M";
|
||||||
|
output = name;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
systemd.user.services.kanshi = confLib.overrideTarget "sway-session.target";
|
||||||
|
services.kanshi = {
|
||||||
|
enable = true;
|
||||||
|
settings = [
|
||||||
|
{
|
||||||
|
# laptop screen
|
||||||
|
output = {
|
||||||
|
criteria = config.swarselsystems.sharescreen;
|
||||||
|
mode = "${config.swarselsystems.highResolution}@165.000";
|
||||||
|
scale = 1.0;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
{
|
||||||
|
# home main screen
|
||||||
|
output = {
|
||||||
|
criteria = "Philips Consumer Electronics Company PHL BDM3270 AU11806002320";
|
||||||
|
scale = 1.0;
|
||||||
|
mode = "2560x1440";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
{
|
||||||
|
profile = {
|
||||||
|
name = "lidopen";
|
||||||
|
exec = [ "${pkgs.swaybg}/bin/swaybg --output '${config.swarselsystems.sharescreen}' --image ${config.swarselsystems.wallpaper} --mode ${config.stylix.imageScalingMode}" ];
|
||||||
|
outputs = [
|
||||||
|
{
|
||||||
|
criteria = config.swarselsystems.sharescreen;
|
||||||
|
status = "enable";
|
||||||
|
scale = 1.0;
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
|
{
|
||||||
|
profile =
|
||||||
|
let
|
||||||
|
monitor = "Philips Consumer Electronics Company PHL BDM3270 AU11806002320";
|
||||||
|
in
|
||||||
|
{
|
||||||
|
name = "lidopen";
|
||||||
|
exec = [
|
||||||
|
"${pkgs.swaybg}/bin/swaybg --output '${config.swarselsystems.sharescreen}' --image ${config.swarselsystems.wallpaper} --mode ${config.stylix.imageScalingMode}"
|
||||||
|
"${pkgs.swaybg}/bin/swaybg --output '${monitor}' --image ${self}/files/wallpaper/landscape/standwp.png --mode ${config.stylix.imageScalingMode}"
|
||||||
|
];
|
||||||
|
outputs = [
|
||||||
|
{
|
||||||
|
criteria = config.swarselsystems.sharescreen;
|
||||||
|
status = "enable";
|
||||||
|
scale = 1.7;
|
||||||
|
position = "2560,0";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
criteria = monitor;
|
||||||
|
scale = 1.0;
|
||||||
|
mode = "2560x1440";
|
||||||
|
position = "0,0";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
|
{
|
||||||
|
profile =
|
||||||
|
let
|
||||||
|
monitor = "Philips Consumer Electronics Company PHL BDM3270 AU11806002320";
|
||||||
|
in
|
||||||
|
{
|
||||||
|
name = "lidclosed";
|
||||||
|
exec = [ "${pkgs.swaybg}/bin/swaybg --output '${monitor}' --image ${self}/files/wallpaper/landscape/standwp.png --mode ${config.stylix.imageScalingMode}" ];
|
||||||
|
outputs = [
|
||||||
|
{
|
||||||
|
criteria = config.swarselsystems.sharescreen;
|
||||||
|
status = "disable";
|
||||||
|
position = "2560,0";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
criteria = monitor;
|
||||||
|
scale = 1.0;
|
||||||
|
mode = "2560x1440";
|
||||||
|
position = "0,0";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
11
modules-clone/home/common/kdeconnect.nix
Normal file
11
modules-clone/home/common/kdeconnect.nix
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
{ lib, config, ... }:
|
||||||
|
{
|
||||||
|
options.swarselmodules.kdeconnect = lib.mkEnableOption "kdeconnect settings";
|
||||||
|
config = lib.mkIf config.swarselmodules.kdeconnect {
|
||||||
|
services.kdeconnect = {
|
||||||
|
enable = true;
|
||||||
|
indicator = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
14
modules-clone/home/common/khal.nix
Normal file
14
modules-clone/home/common/khal.nix
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
{ lib, config, pkgs, ... }:
|
||||||
|
let
|
||||||
|
moduleName = "khal";
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.swarselmodules.${moduleName} = lib.mkEnableOption "enable ${moduleName} and settings";
|
||||||
|
config = lib.mkIf config.swarselmodules.${moduleName} {
|
||||||
|
programs.${moduleName} = {
|
||||||
|
enable = true;
|
||||||
|
package = pkgs.khal;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
29
modules-clone/home/common/kitty.nix
Normal file
29
modules-clone/home/common/kitty.nix
Normal file
|
|
@ -0,0 +1,29 @@
|
||||||
|
{ lib, config, ... }:
|
||||||
|
{
|
||||||
|
options.swarselmodules.kitty = lib.mkEnableOption "kitty settings";
|
||||||
|
config = lib.mkIf config.swarselmodules.kitty {
|
||||||
|
programs.kitty = {
|
||||||
|
enable = true;
|
||||||
|
keybindings =
|
||||||
|
let
|
||||||
|
bindWithModifier = lib.mapAttrs' (key: lib.nameValuePair ("ctrl+shift" + key));
|
||||||
|
in
|
||||||
|
bindWithModifier {
|
||||||
|
"page_up" = "scroll_page_up";
|
||||||
|
"up" = "scroll_page_up";
|
||||||
|
"page_down" = "scroll_page_down";
|
||||||
|
"down" = "scroll_page_down";
|
||||||
|
"w" = "no_op";
|
||||||
|
};
|
||||||
|
settings = {
|
||||||
|
cursor_blink_interval = 0;
|
||||||
|
disable_ligatures = "cursor";
|
||||||
|
enable_audio_bell = false;
|
||||||
|
notify_on_cmd_finish = "always 20";
|
||||||
|
open_url_with = "xdg-open";
|
||||||
|
scrollback_lines = 100000;
|
||||||
|
scrollback_pager_history_size = 512;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
211
modules-clone/home/common/mail.nix
Normal file
211
modules-clone/home/common/mail.nix
Normal file
|
|
@ -0,0 +1,211 @@
|
||||||
|
{ lib, config, globals, confLib, type, ... }:
|
||||||
|
let
|
||||||
|
inherit (confLib.getConfig.repo.secrets.common.mail) address1 address2 address2-name address3 address3-name address4;
|
||||||
|
inherit (confLib.getConfig.repo.secrets.common) fullName;
|
||||||
|
inherit (config.swarselsystems) xdgDir;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.swarselmodules.mail = lib.mkEnableOption "mail settings";
|
||||||
|
config = lib.mkIf config.swarselmodules.mail
|
||||||
|
({
|
||||||
|
|
||||||
|
programs = {
|
||||||
|
mbsync = {
|
||||||
|
enable = true;
|
||||||
|
};
|
||||||
|
msmtp = {
|
||||||
|
enable = true;
|
||||||
|
};
|
||||||
|
mu = {
|
||||||
|
enable = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
services.mbsync = {
|
||||||
|
enable = true;
|
||||||
|
};
|
||||||
|
# this is needed so that mbsync can use the passwords from sops
|
||||||
|
systemd.user.services.mbsync.Unit.After = [ "sops-nix.service" ];
|
||||||
|
|
||||||
|
programs.thunderbird = {
|
||||||
|
enable = true;
|
||||||
|
profiles.default = {
|
||||||
|
isDefault = true;
|
||||||
|
withExternalGnupg = true;
|
||||||
|
settings = {
|
||||||
|
"mail.identity.default.archive_enabled" = true;
|
||||||
|
"mail.identity.default.archive_keep_folder_structure" = true;
|
||||||
|
"mail.identity.default.compose_html" = false;
|
||||||
|
"mail.identity.default.protectSubject" = true;
|
||||||
|
"mail.identity.default.reply_on_top" = 1;
|
||||||
|
"mail.identity.default.sig_on_reply" = false;
|
||||||
|
"mail.identity.default.sig_bottom" = false;
|
||||||
|
|
||||||
|
"gfx.webrender.all" = true;
|
||||||
|
"gfx.webrender.enabled" = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
settings = {
|
||||||
|
"mail.server.default.allow_utf8_accept" = true;
|
||||||
|
"mail.server.default.max_articles" = 1000;
|
||||||
|
"mail.server.default.check_all_folders_for_new" = true;
|
||||||
|
"mail.show_headers" = 1;
|
||||||
|
"mail.identity.default.auto_quote" = true;
|
||||||
|
"mail.identity.default.attachPgpKey" = true;
|
||||||
|
"mailnews.default_sort_order" = 2;
|
||||||
|
"mailnews.default_sort_type" = 18;
|
||||||
|
"mailnews.default_view_flags" = 0;
|
||||||
|
"mailnews.sort_threads_by_root" = true;
|
||||||
|
"mailnews.headers.showMessageId" = true;
|
||||||
|
"mailnews.headers.showOrganization" = true;
|
||||||
|
"mailnews.headers.showReferences" = true;
|
||||||
|
"mailnews.headers.showUserAgent" = true;
|
||||||
|
"mail.imap.expunge_after_delete" = true;
|
||||||
|
"mail.server.default.delete_model" = 2;
|
||||||
|
"mail.warn_on_delete_from_trash" = false;
|
||||||
|
"mail.warn_on_shift_delete" = false;
|
||||||
|
"toolkit.telemetry.enabled" = false;
|
||||||
|
"toolkit.telemetry.rejected" = true;
|
||||||
|
"toolkit.telemetry.prompted" = 2;
|
||||||
|
"app.update.auto" = false;
|
||||||
|
"privacy.donottrackheader.enabled" = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
xdg.mimeApps.defaultApplications = {
|
||||||
|
"x-scheme-handler/mailto" = [ "thunderbird.desktop" ];
|
||||||
|
"x-scheme-handler/mid" = [ "thunderbird.desktop" ];
|
||||||
|
"message/rfc822" = [ "thunderbird.desktop" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
accounts = lib.mkIf (config.swarselsystems.isNixos && !config.swarselsystems.isPublic) {
|
||||||
|
email =
|
||||||
|
let
|
||||||
|
defaultSettings = {
|
||||||
|
imap = {
|
||||||
|
host = "imap.gmail.com";
|
||||||
|
port = 993;
|
||||||
|
tls.enable = true; # SSL/TLS
|
||||||
|
};
|
||||||
|
smtp = {
|
||||||
|
host = "smtp.gmail.com";
|
||||||
|
port = 465;
|
||||||
|
tls.enable = true; # SSL/TLS
|
||||||
|
};
|
||||||
|
thunderbird = {
|
||||||
|
enable = true;
|
||||||
|
profiles = [ "default" ];
|
||||||
|
};
|
||||||
|
mu.enable = true;
|
||||||
|
msmtp = {
|
||||||
|
enable = true;
|
||||||
|
};
|
||||||
|
mbsync = {
|
||||||
|
enable = true;
|
||||||
|
create = "maildir";
|
||||||
|
expunge = "both";
|
||||||
|
patterns = [ "*" "![Gmail]*" "[Gmail]/Sent Mail" "[Gmail]/Starred" "[Gmail]/All Mail" ];
|
||||||
|
extraConfig = {
|
||||||
|
channel = {
|
||||||
|
Sync = "All";
|
||||||
|
};
|
||||||
|
account = {
|
||||||
|
Timeout = 120;
|
||||||
|
PipelineDepth = 1;
|
||||||
|
AuthMechs = "LOGIN";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
in
|
||||||
|
{
|
||||||
|
maildirBasePath = "Mail";
|
||||||
|
accounts = {
|
||||||
|
swarsel = {
|
||||||
|
imap = {
|
||||||
|
host = globals.services.mailserver.domain;
|
||||||
|
port = 993;
|
||||||
|
tls.enable = true; # SSL/TLS
|
||||||
|
};
|
||||||
|
smtp = {
|
||||||
|
host = globals.services.mailserver.domain;
|
||||||
|
port = 465;
|
||||||
|
tls.enable = true; # SSL/TLS
|
||||||
|
};
|
||||||
|
thunderbird = {
|
||||||
|
enable = true;
|
||||||
|
profiles = [ "default" ];
|
||||||
|
};
|
||||||
|
address = address4;
|
||||||
|
userName = address4;
|
||||||
|
realName = fullName;
|
||||||
|
passwordCommand = "cat ${confLib.getConfig.sops.secrets.address4-token.path}";
|
||||||
|
mu.enable = true;
|
||||||
|
msmtp = {
|
||||||
|
enable = true;
|
||||||
|
};
|
||||||
|
mbsync = {
|
||||||
|
enable = true;
|
||||||
|
create = "maildir";
|
||||||
|
expunge = "both";
|
||||||
|
patterns = [ "*" ];
|
||||||
|
extraConfig = {
|
||||||
|
channel = {
|
||||||
|
Sync = "All";
|
||||||
|
};
|
||||||
|
account = {
|
||||||
|
Timeout = 120;
|
||||||
|
PipelineDepth = 1;
|
||||||
|
AuthMechs = "LOGIN";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
leon = lib.recursiveUpdate
|
||||||
|
{
|
||||||
|
primary = true;
|
||||||
|
address = address1;
|
||||||
|
userName = address1;
|
||||||
|
realName = fullName;
|
||||||
|
passwordCommand = "cat ${confLib.getConfig.sops.secrets.address1-token.path}";
|
||||||
|
gpg = {
|
||||||
|
key = "0x76FD3810215AE097";
|
||||||
|
signByDefault = true;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
defaultSettings;
|
||||||
|
|
||||||
|
nautilus = lib.recursiveUpdate
|
||||||
|
{
|
||||||
|
primary = false;
|
||||||
|
address = address2;
|
||||||
|
userName = address2;
|
||||||
|
realName = address2-name;
|
||||||
|
passwordCommand = "cat ${confLib.getConfig.sops.secrets.address2-token.path}";
|
||||||
|
}
|
||||||
|
defaultSettings;
|
||||||
|
|
||||||
|
mrswarsel = lib.recursiveUpdate
|
||||||
|
{
|
||||||
|
primary = false;
|
||||||
|
address = address3;
|
||||||
|
userName = address3;
|
||||||
|
realName = address3-name;
|
||||||
|
passwordCommand = "cat ${confLib.getConfig.sops.secrets.address3-token.path}";
|
||||||
|
}
|
||||||
|
defaultSettings;
|
||||||
|
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
} // lib.optionalAttrs (type != "nixos") {
|
||||||
|
sops.secrets = lib.mkIf (!config.swarselsystems.isPublic && !config.swarselsystems.isNixos) {
|
||||||
|
address1-token = { path = "${xdgDir}/secrets/address1-token"; };
|
||||||
|
address2-token = { path = "${xdgDir}/secrets/address2-token"; };
|
||||||
|
address3-token = { path = "${xdgDir}/secrets/address3-token"; };
|
||||||
|
address4-token = { path = "${xdgDir}/secrets/address4-token"; };
|
||||||
|
};
|
||||||
|
});
|
||||||
|
}
|
||||||
38
modules-clone/home/common/mako.nix
Normal file
38
modules-clone/home/common/mako.nix
Normal file
|
|
@ -0,0 +1,38 @@
|
||||||
|
{ lib, config, ... }:
|
||||||
|
{
|
||||||
|
options.swarselmodules.mako = lib.mkEnableOption "mako settings";
|
||||||
|
config = lib.mkIf config.swarselmodules.mako {
|
||||||
|
services.mako = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
border-radius = 15;
|
||||||
|
border-size = 1;
|
||||||
|
default-timeout = 5000;
|
||||||
|
ignore-timeout = false;
|
||||||
|
icons = 1;
|
||||||
|
layer = "overlay";
|
||||||
|
sort = "-time";
|
||||||
|
height = 150;
|
||||||
|
width = 300;
|
||||||
|
"urgency=low" = {
|
||||||
|
border-color = lib.mkForce "#cccccc";
|
||||||
|
};
|
||||||
|
"urgency=normal" = {
|
||||||
|
border-color = lib.mkForce "#d08770";
|
||||||
|
};
|
||||||
|
"urgency=high" = {
|
||||||
|
border-color = lib.mkForce "#bf616a";
|
||||||
|
default-timeout = 3000;
|
||||||
|
};
|
||||||
|
"category=mpd" = {
|
||||||
|
default-timeout = 2000;
|
||||||
|
group-by = "category";
|
||||||
|
};
|
||||||
|
"mode=do-not-disturb" = {
|
||||||
|
invisible = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
8
modules-clone/home/common/network-manager-applet.nix
Normal file
8
modules-clone/home/common/network-manager-applet.nix
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
{ lib, config, ... }:
|
||||||
|
{
|
||||||
|
options.swarselmodules.nm-applet = lib.mkEnableOption "enable network manager applet for tray";
|
||||||
|
config = lib.mkIf config.swarselmodules.nm-applet {
|
||||||
|
services.network-manager-applet.enable = true;
|
||||||
|
xsession.preferStatusNotifierItems = true; # needed for indicator icon to show
|
||||||
|
};
|
||||||
|
}
|
||||||
62
modules-clone/home/common/nix-index.nix
Normal file
62
modules-clone/home/common/nix-index.nix
Normal file
|
|
@ -0,0 +1,62 @@
|
||||||
|
{ lib, config, pkgs, ... }:
|
||||||
|
{
|
||||||
|
options.swarselmodules.nix-index = lib.mkEnableOption "nix-index settings";
|
||||||
|
config = lib.mkIf config.swarselmodules.nix-index {
|
||||||
|
programs.nix-index =
|
||||||
|
let
|
||||||
|
commandNotFound = pkgs.runCommandLocal "command-not-found.sh" { } ''
|
||||||
|
mkdir -p $out/etc/profile.d
|
||||||
|
cat > $out/etc/profile.d/command-not-found.sh <<'EOF'
|
||||||
|
# Adapted from https://github.com/bennofs/nix-index/blob/master/command-not-found.sh
|
||||||
|
command_not_found_handle() {
|
||||||
|
if [ -n "''${MC_SID-}" ] || ! [ -t 1 ]; then
|
||||||
|
>&2 echo "$1: command not found"
|
||||||
|
return 127
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo -n "searching nix-index..."
|
||||||
|
ATTRS=$(@nix-locate@ --minimal --no-group --type x --type s --whole-name --at-root "/bin/$1")
|
||||||
|
|
||||||
|
case $(echo -n "$ATTRS" | grep -c "^") in
|
||||||
|
0)
|
||||||
|
>&2 echo -ne "$(@tput@ el1)\r"
|
||||||
|
>&2 echo "$1: command not found"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
>&2 echo -ne "$(@tput@ el1)\r"
|
||||||
|
>&2 echo "The program ‘$(@tput@ setaf 4)$1$(@tput@ sgr0)’ is currently not installed."
|
||||||
|
>&2 echo "It is provided by the following derivation(s):"
|
||||||
|
while read -r ATTR; do
|
||||||
|
ATTR=''${ATTR%.out}
|
||||||
|
>&2 echo " $(@tput@ setaf 12)nixpkgs#$(@tput@ setaf 4)$ATTR$(@tput@ sgr0)"
|
||||||
|
done <<< "$ATTRS"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
return 127
|
||||||
|
}
|
||||||
|
|
||||||
|
command_not_found_handler() {
|
||||||
|
command_not_found_handle "$@"
|
||||||
|
return $?
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
|
||||||
|
substitute $out/etc/profile.d/command-not-found.sh \
|
||||||
|
$out/etc/profile.d/command-not-found.sh \
|
||||||
|
--replace-fail @nix-locate@ ${pkgs.nix-index}/bin/nix-locate \
|
||||||
|
--replace-fail @tput@ ${pkgs.ncurses}/bin/tput
|
||||||
|
'';
|
||||||
|
in
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
enable = true;
|
||||||
|
package = pkgs.symlinkJoin {
|
||||||
|
name = "nix-index";
|
||||||
|
paths = [ commandNotFound ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
programs.nix-index-database.comma.enable = true;
|
||||||
|
};
|
||||||
|
}
|
||||||
13
modules-clone/home/common/nix-your-shell.nix
Normal file
13
modules-clone/home/common/nix-your-shell.nix
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
{ lib, config, ... }:
|
||||||
|
let
|
||||||
|
moduleName = "nix-your-shell";
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.swarselmodules.${moduleName} = lib.mkEnableOption "enable ${moduleName} and settings";
|
||||||
|
config = lib.mkIf config.swarselmodules.${moduleName} {
|
||||||
|
programs.${moduleName} = {
|
||||||
|
enable = true;
|
||||||
|
enableZshIntegration = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
27
modules-clone/home/common/nixgl.nix
Normal file
27
modules-clone/home/common/nixgl.nix
Normal file
|
|
@ -0,0 +1,27 @@
|
||||||
|
{ lib, config, inputs, ... }:
|
||||||
|
{
|
||||||
|
options.swarselmodules.nixgl = lib.mkEnableOption "nixgl settings";
|
||||||
|
options.swarselsystems = {
|
||||||
|
isSecondaryGpu = lib.mkEnableOption "device has a secondary GPU";
|
||||||
|
SecondaryGpuCard = lib.mkOption {
|
||||||
|
type = lib.types.str;
|
||||||
|
default = "";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
config = lib.mkIf config.swarselmodules.nixgl {
|
||||||
|
nixGL = lib.mkIf (!config.swarselsystems.isNixos) {
|
||||||
|
inherit (inputs.nixgl) packages;
|
||||||
|
defaultWrapper = lib.mkDefault "mesa";
|
||||||
|
vulkan.enable = lib.mkDefault false;
|
||||||
|
prime = lib.mkIf config.swarselsystems.isSecondaryGpu {
|
||||||
|
card = config.swarselsystems.secondaryGpuCard;
|
||||||
|
installScript = "mesa";
|
||||||
|
};
|
||||||
|
offloadWrapper = lib.mkIf config.swarselsystem.isSecondaryGpu "mesaPrime";
|
||||||
|
installScripts = [
|
||||||
|
"mesa"
|
||||||
|
"mesaPrime"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
13
modules-clone/home/common/obs-studio.nix
Normal file
13
modules-clone/home/common/obs-studio.nix
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
{ lib, config, ... }:
|
||||||
|
let
|
||||||
|
moduleName = "obs-studio";
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.swarselmodules.${moduleName} = lib.mkEnableOption "enable ${moduleName} and settings";
|
||||||
|
config = lib.mkIf config.swarselmodules.${moduleName} {
|
||||||
|
programs.${moduleName} = {
|
||||||
|
enable = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
29
modules-clone/home/common/obsidian-tray.nix
Normal file
29
modules-clone/home/common/obsidian-tray.nix
Normal file
|
|
@ -0,0 +1,29 @@
|
||||||
|
{ lib, config, ... }:
|
||||||
|
{
|
||||||
|
options.swarselmodules.obsidian-tray = lib.mkEnableOption "enable obsidian applet for tray";
|
||||||
|
config = lib.mkIf config.swarselmodules.obsidian-tray {
|
||||||
|
|
||||||
|
systemd.user.services.obsidian-applet = {
|
||||||
|
Unit = {
|
||||||
|
Description = "Obsidian applet";
|
||||||
|
Requires = [ "graphical-session.target" ];
|
||||||
|
After = [
|
||||||
|
"graphical-session.target"
|
||||||
|
"tray.target"
|
||||||
|
];
|
||||||
|
PartOf = [
|
||||||
|
"tray.target"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
Install = {
|
||||||
|
WantedBy = [ "tray.target" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
Service = {
|
||||||
|
ExecStart = "${lib.getExe config.programs.obsidian.package}";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
155
modules-clone/home/common/obsidian.nix
Normal file
155
modules-clone/home/common/obsidian.nix
Normal file
|
|
@ -0,0 +1,155 @@
|
||||||
|
{ lib, config, pkgs, confLib, ... }:
|
||||||
|
let
|
||||||
|
moduleName = "obsidian";
|
||||||
|
inherit (confLib.getConfig.repo.secrets.common.obsidian) userIgnoreFilters;
|
||||||
|
name = "Main";
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.swarselmodules.${moduleName} = lib.mkEnableOption "enable ${moduleName} with settings";
|
||||||
|
config = lib.mkIf config.swarselmodules.${moduleName} {
|
||||||
|
|
||||||
|
home.file = {
|
||||||
|
"${config.programs.obsidian.vaults.${name}.target}/.obsidian/app.json".force = true;
|
||||||
|
"${config.programs.obsidian.vaults.${name}.target}/.obsidian/appearance.json".force = true;
|
||||||
|
"${config.programs.obsidian.vaults.${name}.target}/.obsidian/core-plugins.json".force = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
programs.obsidian =
|
||||||
|
let
|
||||||
|
pluginSource = pkgs.nur.repos.swarsel;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
enable = true;
|
||||||
|
package = pkgs.obsidian;
|
||||||
|
defaultSettings = {
|
||||||
|
app = {
|
||||||
|
attachmentFolderPath = "attachments";
|
||||||
|
alwaysUpdateLinks = true;
|
||||||
|
spellcheck = false;
|
||||||
|
inherit userIgnoreFilters;
|
||||||
|
vimMode = false;
|
||||||
|
newFileLocation = "current";
|
||||||
|
};
|
||||||
|
hotkeys = {
|
||||||
|
"graph:open" = [ ];
|
||||||
|
"omnisearch:show-modal" = [
|
||||||
|
{
|
||||||
|
modifiers = [
|
||||||
|
"Mod"
|
||||||
|
];
|
||||||
|
key = "S";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
"editor:save-file" = [ ];
|
||||||
|
"editor:delete-paragraph" = [ ];
|
||||||
|
};
|
||||||
|
corePlugins = [
|
||||||
|
"backlink"
|
||||||
|
"bookmarks"
|
||||||
|
"canvas"
|
||||||
|
"command-palette"
|
||||||
|
"daily-notes"
|
||||||
|
"editor-status"
|
||||||
|
"file-explorer"
|
||||||
|
"file-recovery"
|
||||||
|
"global-search"
|
||||||
|
"graph"
|
||||||
|
"note-composer"
|
||||||
|
"outgoing-link"
|
||||||
|
"outline"
|
||||||
|
"page-preview"
|
||||||
|
"properties"
|
||||||
|
"slides"
|
||||||
|
"switcher"
|
||||||
|
"tag-pane"
|
||||||
|
"templates"
|
||||||
|
"word-count"
|
||||||
|
];
|
||||||
|
# communityPlugins = with pkgs.swarsel-nix; [
|
||||||
|
communityPlugins = with pluginSource; [
|
||||||
|
advanced-tables
|
||||||
|
calendar
|
||||||
|
file-hider
|
||||||
|
linter
|
||||||
|
omnisearch
|
||||||
|
sort-and-permute-lines
|
||||||
|
tag-wrangler
|
||||||
|
tray
|
||||||
|
];
|
||||||
|
};
|
||||||
|
vaults = {
|
||||||
|
${name} = {
|
||||||
|
target = "./Obsidian/${name}";
|
||||||
|
settings = {
|
||||||
|
appearance = {
|
||||||
|
baseFontSize = lib.mkForce 19;
|
||||||
|
};
|
||||||
|
# communityPlugins = with pkgs.swarsel-nix; [
|
||||||
|
communityPlugins = with pluginSource; [
|
||||||
|
{
|
||||||
|
pkg = advanced-tables;
|
||||||
|
enable = true;
|
||||||
|
}
|
||||||
|
{
|
||||||
|
pkg = calendar;
|
||||||
|
enable = true;
|
||||||
|
}
|
||||||
|
{
|
||||||
|
pkg = sort-and-permute-lines;
|
||||||
|
enable = true;
|
||||||
|
}
|
||||||
|
{
|
||||||
|
pkg = tag-wrangler;
|
||||||
|
enable = true;
|
||||||
|
}
|
||||||
|
{
|
||||||
|
pkg = tray;
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
launchOnStartup = false;
|
||||||
|
hideOnLaunch = true;
|
||||||
|
runInBackground = true;
|
||||||
|
hideTaskbarIcon = false;
|
||||||
|
createTrayIcon = true;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
{
|
||||||
|
pkg = file-hider;
|
||||||
|
enable = true;
|
||||||
|
settings =
|
||||||
|
{
|
||||||
|
hidden = true;
|
||||||
|
hiddenList = [
|
||||||
|
"attachments"
|
||||||
|
"images"
|
||||||
|
"ltximg"
|
||||||
|
"logseq"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
|
{
|
||||||
|
pkg = linter;
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
auto-correct-common-misspellings = {
|
||||||
|
skip-words-with-multiple-capitals = true;
|
||||||
|
};
|
||||||
|
convert-bullet-list-markers = {
|
||||||
|
enabled = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
{
|
||||||
|
pkg = omnisearch;
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
hideExcluded = true;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
30
modules-clone/home/common/opkssh.nix
Normal file
30
modules-clone/home/common/opkssh.nix
Normal file
|
|
@ -0,0 +1,30 @@
|
||||||
|
{ lib, config, globals, ... }:
|
||||||
|
let
|
||||||
|
moduleName = "opkssh";
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.swarselmodules.${moduleName} = lib.mkEnableOption "enable ${moduleName} and settings";
|
||||||
|
config = lib.mkIf config.swarselmodules.${moduleName} {
|
||||||
|
programs.${moduleName} = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
default_provider = "kanidm";
|
||||||
|
|
||||||
|
providers = [
|
||||||
|
{
|
||||||
|
alias = "kanidm";
|
||||||
|
issuer = "https://${globals.services.kanidm.domain}/oauth2/openid/opkssh";
|
||||||
|
client_id = "opkssh";
|
||||||
|
scopes = "openid email profile";
|
||||||
|
redirect_uris = [
|
||||||
|
"http://localhost:3000/login-callback"
|
||||||
|
"http://localhost:10001/login-callback"
|
||||||
|
"http://localhost:11110/login-callback"
|
||||||
|
];
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
182
modules-clone/home/common/packages.nix
Normal file
182
modules-clone/home/common/packages.nix
Normal file
|
|
@ -0,0 +1,182 @@
|
||||||
|
{ lib, config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
options.swarselmodules.packages = lib.mkEnableOption "packages settings";
|
||||||
|
config = lib.mkIf config.swarselmodules.packages {
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
|
||||||
|
# audio stuff
|
||||||
|
spek # spectrum analyzer
|
||||||
|
losslessaudiochecker
|
||||||
|
ffmpeg_7-full
|
||||||
|
flac
|
||||||
|
mediainfo
|
||||||
|
picard-tools
|
||||||
|
audacity
|
||||||
|
sox
|
||||||
|
calibre
|
||||||
|
|
||||||
|
# printing
|
||||||
|
cups
|
||||||
|
simple-scan
|
||||||
|
cura-appimage
|
||||||
|
|
||||||
|
# ssh login using idm
|
||||||
|
opkssh
|
||||||
|
|
||||||
|
# cache
|
||||||
|
attic-client
|
||||||
|
|
||||||
|
# dict
|
||||||
|
(aspellWithDicts (dicts: with dicts; [ de en en-computers en-science ]))
|
||||||
|
|
||||||
|
# browser
|
||||||
|
vieb
|
||||||
|
mgba
|
||||||
|
|
||||||
|
# utilities
|
||||||
|
util-linux
|
||||||
|
nmap
|
||||||
|
lsof
|
||||||
|
nvd
|
||||||
|
nix-output-monitor
|
||||||
|
hyprpicker # color picker
|
||||||
|
findutils
|
||||||
|
units
|
||||||
|
vim
|
||||||
|
sshfs
|
||||||
|
fuse
|
||||||
|
# ventoy
|
||||||
|
poppler-utils
|
||||||
|
|
||||||
|
# nix
|
||||||
|
alejandra
|
||||||
|
nixpkgs-fmt
|
||||||
|
deadnix
|
||||||
|
statix
|
||||||
|
nix-tree
|
||||||
|
nix-diff
|
||||||
|
nix-visualize
|
||||||
|
nix-init
|
||||||
|
nix-inspect
|
||||||
|
(nixpkgs-review.override { nix = config.nix.package; })
|
||||||
|
manix
|
||||||
|
|
||||||
|
# shellscripts
|
||||||
|
shfmt
|
||||||
|
|
||||||
|
# local file sharing
|
||||||
|
wormhole-rs
|
||||||
|
croc
|
||||||
|
|
||||||
|
# b2 backup @backblaze
|
||||||
|
restic
|
||||||
|
|
||||||
|
# "big" programs
|
||||||
|
# obs-studio
|
||||||
|
gimp
|
||||||
|
inkscape
|
||||||
|
zoom-us
|
||||||
|
# nomacs
|
||||||
|
libreoffice-qt
|
||||||
|
xournalpp
|
||||||
|
# obsidian
|
||||||
|
# spotify
|
||||||
|
# vesktop # discord client
|
||||||
|
# nextcloud-client # enables a systemd service that I do not want
|
||||||
|
# spotify-player
|
||||||
|
# element-desktop
|
||||||
|
|
||||||
|
nicotine-plus
|
||||||
|
transmission_3
|
||||||
|
mktorrent
|
||||||
|
hugo
|
||||||
|
|
||||||
|
# kyria
|
||||||
|
qmk
|
||||||
|
qmk-udev-rules
|
||||||
|
|
||||||
|
# firefox related
|
||||||
|
tridactyl-native
|
||||||
|
|
||||||
|
# mako related
|
||||||
|
# mako
|
||||||
|
libnotify
|
||||||
|
|
||||||
|
# general utilities
|
||||||
|
unrar
|
||||||
|
# samba
|
||||||
|
cifs-utils
|
||||||
|
zbar # qr codes
|
||||||
|
readline
|
||||||
|
autotiling
|
||||||
|
brightnessctl
|
||||||
|
libappindicator-gtk3
|
||||||
|
sqlite
|
||||||
|
speechd
|
||||||
|
networkmanagerapplet
|
||||||
|
psmisc # kill etc
|
||||||
|
lm_sensors
|
||||||
|
# jq # used for searching the i3 tree in check<xxx>.sh files
|
||||||
|
|
||||||
|
# specifically needed for anki
|
||||||
|
# mpv
|
||||||
|
# anki-bin
|
||||||
|
|
||||||
|
# dirvish file previews
|
||||||
|
fd
|
||||||
|
imagemagick
|
||||||
|
# poppler
|
||||||
|
ffmpegthumbnailer
|
||||||
|
mediainfo
|
||||||
|
gnutar
|
||||||
|
unzip
|
||||||
|
|
||||||
|
#nautilus
|
||||||
|
nautilus
|
||||||
|
tumbler
|
||||||
|
libgsf
|
||||||
|
|
||||||
|
# wayland stuff
|
||||||
|
wtype
|
||||||
|
wl-mirror
|
||||||
|
wl-clipboard
|
||||||
|
wf-recorder
|
||||||
|
kanshi
|
||||||
|
|
||||||
|
# screenshotting tools
|
||||||
|
grim
|
||||||
|
slurp
|
||||||
|
|
||||||
|
# the following packages are used (in some way) by waybar
|
||||||
|
pavucontrol
|
||||||
|
|
||||||
|
#keychain
|
||||||
|
qalculate-gtk
|
||||||
|
gcr # needed for gnome-secrets to work
|
||||||
|
seahorse
|
||||||
|
|
||||||
|
# sops-related
|
||||||
|
sops
|
||||||
|
ssh-to-age
|
||||||
|
|
||||||
|
# mail related packages
|
||||||
|
mu
|
||||||
|
|
||||||
|
# latex and related packages
|
||||||
|
(texlive.combine {
|
||||||
|
inherit (pkgs.texlive) scheme-full
|
||||||
|
dvisvgm dvipng# for preview and export as html
|
||||||
|
wrapfig amsmath ulem hyperref capt-of;
|
||||||
|
})
|
||||||
|
|
||||||
|
# font stuff
|
||||||
|
cantarell-fonts
|
||||||
|
nerd-fonts.fira-code
|
||||||
|
(iosevka-bin.override { variant = "Aile"; })
|
||||||
|
nerd-fonts.symbols-only
|
||||||
|
noto-fonts-color-emoji
|
||||||
|
font-awesome_5
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
13
modules-clone/home/common/password-store.nix
Normal file
13
modules-clone/home/common/password-store.nix
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
{ lib, config, pkgs, ... }:
|
||||||
|
{
|
||||||
|
options.swarselmodules.passwordstore = lib.mkEnableOption "passwordstore settings";
|
||||||
|
config = lib.mkIf config.swarselmodules.passwordstore {
|
||||||
|
programs.password-store = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
PASSWORD_STORE_DIR = "$HOME/.local/share/password-store";
|
||||||
|
};
|
||||||
|
package = pkgs.pass.withExtensions (exts: [ exts.pass-otp ]);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
95
modules-clone/home/common/programs.nix
Normal file
95
modules-clone/home/common/programs.nix
Normal file
|
|
@ -0,0 +1,95 @@
|
||||||
|
{ lib, config, pkgs, ... }:
|
||||||
|
{
|
||||||
|
options.swarselmodules.programs = lib.mkEnableOption "programs settings";
|
||||||
|
config = lib.mkIf config.swarselmodules.programs {
|
||||||
|
programs = {
|
||||||
|
bat = {
|
||||||
|
enable = true;
|
||||||
|
extraPackages = [
|
||||||
|
pkgs.bat-extras.batdiff
|
||||||
|
pkgs.bat-extras.batman
|
||||||
|
pkgs.bat-extras.batwatch
|
||||||
|
pkgs.bat-extras.batgrep
|
||||||
|
];
|
||||||
|
# extraPackages = with pkgs.bat-extras; [ batdiff batman batgrep batwatch ];
|
||||||
|
};
|
||||||
|
bottom.enable = true;
|
||||||
|
carapace.enable = true;
|
||||||
|
fzf = {
|
||||||
|
enable = true;
|
||||||
|
enableBashIntegration = false;
|
||||||
|
enableZshIntegration = false;
|
||||||
|
};
|
||||||
|
imv.enable = true;
|
||||||
|
jq.enable = true;
|
||||||
|
less.enable = true;
|
||||||
|
lesspipe.enable = true;
|
||||||
|
mpv.enable = true;
|
||||||
|
pandoc.enable = true;
|
||||||
|
rclone.enable = true;
|
||||||
|
ripgrep.enable = true;
|
||||||
|
sioyek.enable = true;
|
||||||
|
swayr.enable = true;
|
||||||
|
timidity.enable = true;
|
||||||
|
wlogout = {
|
||||||
|
enable = true;
|
||||||
|
layout = [
|
||||||
|
{
|
||||||
|
label = "lock";
|
||||||
|
action = "loginctl lock-session";
|
||||||
|
text = "Lock";
|
||||||
|
keybind = "l";
|
||||||
|
circular = true;
|
||||||
|
}
|
||||||
|
{
|
||||||
|
label = "hibernate";
|
||||||
|
action = "systemctl hibernate";
|
||||||
|
text = "Hibernate";
|
||||||
|
keybind = "h";
|
||||||
|
circular = true;
|
||||||
|
}
|
||||||
|
{
|
||||||
|
label = "logout";
|
||||||
|
action = "loginctl terminate-user $USER";
|
||||||
|
text = "Logout";
|
||||||
|
keybind = "u";
|
||||||
|
circular = true;
|
||||||
|
}
|
||||||
|
{
|
||||||
|
label = "shutdown";
|
||||||
|
action = "systemctl poweroff";
|
||||||
|
text = "Shutdown";
|
||||||
|
keybind = "p";
|
||||||
|
circular = true;
|
||||||
|
}
|
||||||
|
{
|
||||||
|
label = "suspend";
|
||||||
|
action = "systemctl suspend";
|
||||||
|
text = "Suspend";
|
||||||
|
keybind = "s";
|
||||||
|
circular = true;
|
||||||
|
}
|
||||||
|
{
|
||||||
|
label = "reboot";
|
||||||
|
action = "systemctl reboot";
|
||||||
|
text = "Reboot";
|
||||||
|
keybind = "r";
|
||||||
|
circular = true;
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
yt-dlp.enable = true;
|
||||||
|
zoxide = {
|
||||||
|
enable = true;
|
||||||
|
enableZshIntegration = true;
|
||||||
|
options = [
|
||||||
|
"--cmd cd"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
home.sessionVariables = {
|
||||||
|
_ZO_EXCLUDE_DIRS = "$HOME:$HOME/.ansible/*:$HOME/test/*:/persist";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
119
modules-clone/home/common/settings.nix
Normal file
119
modules-clone/home/common/settings.nix
Normal file
|
|
@ -0,0 +1,119 @@
|
||||||
|
{ self, outputs, lib, pkgs, config, globals, confLib, ... }:
|
||||||
|
let
|
||||||
|
inherit (config.swarselsystems) mainUser flakePath isNixos isLinux;
|
||||||
|
inherit (confLib.getConfig.repo.secrets.common) atticPublicKey;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.swarselmodules.general = lib.mkEnableOption "general nix settings";
|
||||||
|
config =
|
||||||
|
let
|
||||||
|
nix-version = "2_30";
|
||||||
|
in
|
||||||
|
lib.mkIf config.swarselmodules.general {
|
||||||
|
nix = lib.mkIf (!config.swarselsystems.isNixos) {
|
||||||
|
package = lib.mkForce pkgs.nixVersions."nix_${nix-version}";
|
||||||
|
# extraOptions = ''
|
||||||
|
# plugin-files = ${pkgs.dev.nix-plugins}/lib/nix/plugins
|
||||||
|
# extra-builtins-file = ${self + /nix/extra-builtins.nix}
|
||||||
|
# '';
|
||||||
|
extraOptions =
|
||||||
|
let
|
||||||
|
nix-plugins = pkgs.nix-plugins.override {
|
||||||
|
nixComponents = pkgs.nixVersions."nixComponents_${nix-version}";
|
||||||
|
};
|
||||||
|
in
|
||||||
|
''
|
||||||
|
plugin-files = ${nix-plugins}/lib/nix/plugins
|
||||||
|
extra-builtins-file = ${self + /files/nix/extra-builtins.nix}
|
||||||
|
'';
|
||||||
|
settings = {
|
||||||
|
experimental-features = [
|
||||||
|
"nix-command"
|
||||||
|
"flakes"
|
||||||
|
"ca-derivations"
|
||||||
|
"cgroups"
|
||||||
|
"pipe-operators"
|
||||||
|
];
|
||||||
|
substituters = [
|
||||||
|
"https://${globals.services.attic.domain}/${mainUser}"
|
||||||
|
];
|
||||||
|
trusted-public-keys = [
|
||||||
|
atticPublicKey
|
||||||
|
];
|
||||||
|
trusted-users = [
|
||||||
|
"@wheel"
|
||||||
|
"${mainUser}"
|
||||||
|
(lib.mkIf ((config.swarselmodules ? server) ? ssh-builder) "builder")
|
||||||
|
];
|
||||||
|
connect-timeout = 5;
|
||||||
|
bash-prompt-prefix = lib.mkIf config.swarselsystems.isClient "[33m$SHLVL:\\w [0m";
|
||||||
|
bash-prompt = lib.mkIf config.swarselsystems.isClient "$(if [[ $? -gt 0 ]]; then printf \"[31m\"; else printf \"[32m\"; fi)λ [0m";
|
||||||
|
fallback = true;
|
||||||
|
min-free = 128000000;
|
||||||
|
max-free = 1000000000;
|
||||||
|
auto-optimise-store = true;
|
||||||
|
warn-dirty = false;
|
||||||
|
max-jobs = 1;
|
||||||
|
use-cgroups = lib.mkIf isLinux true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
nixpkgs = lib.mkIf (!isNixos) {
|
||||||
|
overlays = [
|
||||||
|
outputs.overlays.default
|
||||||
|
outputs.overlays.stables
|
||||||
|
outputs.overlays.modifications
|
||||||
|
(final: prev:
|
||||||
|
let
|
||||||
|
additions = final: _: import "${self}/pkgs/config" {
|
||||||
|
inherit self config lib;
|
||||||
|
pkgs = final;
|
||||||
|
homeConfig = config;
|
||||||
|
};
|
||||||
|
in
|
||||||
|
additions final prev
|
||||||
|
)
|
||||||
|
];
|
||||||
|
config = {
|
||||||
|
allowUnfree = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
programs = {
|
||||||
|
# home-manager.enable = lib.mkIf (!isNixos) true;
|
||||||
|
man = {
|
||||||
|
enable = true;
|
||||||
|
generateCaches = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
targets.genericLinux.enable = lib.mkIf (!isNixos) true;
|
||||||
|
|
||||||
|
home = {
|
||||||
|
username = lib.mkDefault mainUser;
|
||||||
|
homeDirectory = lib.mkDefault "/home/${mainUser}";
|
||||||
|
stateVersion = lib.mkDefault "23.05";
|
||||||
|
keyboard.layout = "us";
|
||||||
|
sessionVariables = {
|
||||||
|
FLAKE = "/home/${mainUser}/.dotfiles";
|
||||||
|
};
|
||||||
|
extraOutputsToInstall = [
|
||||||
|
"doc"
|
||||||
|
"info"
|
||||||
|
"devdoc"
|
||||||
|
];
|
||||||
|
packages = lib.mkIf (!isNixos) [
|
||||||
|
(pkgs.symlinkJoin {
|
||||||
|
name = "home-manager";
|
||||||
|
buildInputs = [ pkgs.makeWrapper ];
|
||||||
|
paths = [ pkgs.home-manager ];
|
||||||
|
postBuild = ''
|
||||||
|
wrapProgram $out/bin/home-manager \
|
||||||
|
--append-flags '--flake ${flakePath}#$(hostname)'
|
||||||
|
'';
|
||||||
|
})
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
11
modules-clone/home/common/sharedoptions.nix
Normal file
11
modules-clone/home/common/sharedoptions.nix
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
{ lib, config, nixosConfig ? null, ... }:
|
||||||
|
let
|
||||||
|
# mirrorAttrs = lib.mapAttrs (_: v: lib.mkDefault v) nixosConfig.swarselsystems;
|
||||||
|
mkDefaultCommonAttrs = base: defaults:
|
||||||
|
lib.mapAttrs (_: v: lib.mkDefault v)
|
||||||
|
(lib.filterAttrs (k: _: base ? ${k}) defaults);
|
||||||
|
in
|
||||||
|
{
|
||||||
|
# config.swarselsystems = mirrorAttrs;
|
||||||
|
config.swarselsystems = lib.mkIf (nixosConfig != null) (mkDefaultCommonAttrs config.swarselsystems (nixosConfig.swarselsystems or { }));
|
||||||
|
}
|
||||||
77
modules-clone/home/common/shikane.nix
Normal file
77
modules-clone/home/common/shikane.nix
Normal file
|
|
@ -0,0 +1,77 @@
|
||||||
|
{ lib, config, confLib, ... }:
|
||||||
|
{
|
||||||
|
options.swarselmodules.shikane = lib.mkEnableOption "kanshi settings";
|
||||||
|
config = lib.mkIf config.swarselmodules.shikane {
|
||||||
|
|
||||||
|
systemd.user.services.shikane = confLib.overrideTarget "noctalia-shell.target";
|
||||||
|
services.shikane = {
|
||||||
|
enable = true;
|
||||||
|
settings =
|
||||||
|
let
|
||||||
|
homeMonitor = [
|
||||||
|
"m=PHL BDM3270"
|
||||||
|
"s=AU11806002320"
|
||||||
|
"v=Philips Consumer Electronics Company"
|
||||||
|
];
|
||||||
|
exec = [ "notify-send shikane \"Profile $SHIKANE_PROFILE_NAME has been applied\"" ];
|
||||||
|
in
|
||||||
|
{
|
||||||
|
profile = [
|
||||||
|
|
||||||
|
{
|
||||||
|
name = "internal-on";
|
||||||
|
inherit exec;
|
||||||
|
output = [
|
||||||
|
{
|
||||||
|
match = config.swarselsystems.sharescreen;
|
||||||
|
enable = true;
|
||||||
|
mode = "${config.swarselsystems.highResolution}@165.000";
|
||||||
|
scale = 1.0;
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
name = "home-internal-on";
|
||||||
|
inherit exec;
|
||||||
|
output = [
|
||||||
|
{
|
||||||
|
match = config.swarselsystems.sharescreen;
|
||||||
|
enable = true;
|
||||||
|
scale = 1.7;
|
||||||
|
position = "2560,0";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
match = homeMonitor;
|
||||||
|
enable = true;
|
||||||
|
scale = 1.0;
|
||||||
|
mode = "2560x1440";
|
||||||
|
position = "0,0";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
name = "home-internal-off";
|
||||||
|
inherit exec;
|
||||||
|
output = [
|
||||||
|
{
|
||||||
|
match = config.swarselsystems.sharescreen;
|
||||||
|
enable = false;
|
||||||
|
position = "2560,0";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
match = homeMonitor;
|
||||||
|
scale = 1.0;
|
||||||
|
enable = true;
|
||||||
|
mode = "2560x1440";
|
||||||
|
position = "0,0";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
16
modules-clone/home/common/sops.nix
Normal file
16
modules-clone/home/common/sops.nix
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
{ self, config, lib, type, ... }:
|
||||||
|
let
|
||||||
|
inherit (config.swarselsystems) homeDir;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.swarselmodules.sops = lib.mkEnableOption "sops settings";
|
||||||
|
config = lib.optionalAttrs (type != "nixos") {
|
||||||
|
sops = lib.mkIf (!config.swarselsystems.isNixos) {
|
||||||
|
age.sshKeyPaths = [ "${if config.swarselsystems.isImpermanence then "/persist" else ""}${homeDir}/.ssh/sops" ];
|
||||||
|
# defaultSopsFile = "${if config.swarselsystems.isImpermanence then "/persist" else ""}${homeDir}/.dotfiles/secrets/repo/common.yaml";
|
||||||
|
defaultSopsFile = self + "/secrets/repo/common.yaml";
|
||||||
|
|
||||||
|
validateSopsFiles = false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
23
modules-clone/home/common/spicetify.nix
Normal file
23
modules-clone/home/common/spicetify.nix
Normal file
|
|
@ -0,0 +1,23 @@
|
||||||
|
{ inputs, lib, config, pkgs, ... }:
|
||||||
|
let
|
||||||
|
moduleName = "spicetify";
|
||||||
|
spicePkgs = inputs.spicetify-nix.legacyPackages.${pkgs.stdenv.system};
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.swarselmodules.${moduleName} = lib.mkEnableOption "${moduleName} settings";
|
||||||
|
config = lib.mkIf config.swarselmodules.${moduleName} {
|
||||||
|
programs.spicetify = {
|
||||||
|
enable = true;
|
||||||
|
# spotifyPackage = pkgs.stable24_11.spotify;
|
||||||
|
spotifyPackage = pkgs.spotify;
|
||||||
|
enabledExtensions = with spicePkgs.extensions; [
|
||||||
|
fullAppDisplay
|
||||||
|
shuffle
|
||||||
|
hidePodcasts
|
||||||
|
fullAlbumDate
|
||||||
|
skipStats
|
||||||
|
history
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
13
modules-clone/home/common/spotify-player.nix
Normal file
13
modules-clone/home/common/spotify-player.nix
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
{ lib, config, ... }:
|
||||||
|
let
|
||||||
|
moduleName = "spotify-player";
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.swarselmodules.${moduleName} = lib.mkEnableOption "enable ${moduleName} and settings";
|
||||||
|
config = lib.mkIf config.swarselmodules.${moduleName} {
|
||||||
|
programs.${moduleName} = {
|
||||||
|
enable = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
32
modules-clone/home/common/ssh.nix
Normal file
32
modules-clone/home/common/ssh.nix
Normal file
|
|
@ -0,0 +1,32 @@
|
||||||
|
{ lib, config, confLib, type, ... }:
|
||||||
|
{
|
||||||
|
options.swarselmodules.ssh = lib.mkEnableOption "ssh settings";
|
||||||
|
config = lib.mkIf config.swarselmodules.ssh ({
|
||||||
|
programs.ssh = {
|
||||||
|
enable = true;
|
||||||
|
enableDefaultConfig = false;
|
||||||
|
extraConfig = ''
|
||||||
|
SetEnv TERM=xterm-256color
|
||||||
|
ServerAliveInterval 20
|
||||||
|
'';
|
||||||
|
matchBlocks = {
|
||||||
|
"*" = {
|
||||||
|
forwardAgent = false;
|
||||||
|
addKeysToAgent = "no";
|
||||||
|
compression = false;
|
||||||
|
serverAliveInterval = 0;
|
||||||
|
serverAliveCountMax = 3;
|
||||||
|
hashKnownHosts = false;
|
||||||
|
userKnownHostsFile = "~/.ssh/known_hosts";
|
||||||
|
controlMaster = "no";
|
||||||
|
controlPath = "~/.ssh/master-%r@%n:%p";
|
||||||
|
controlPersist = "no";
|
||||||
|
};
|
||||||
|
} // confLib.getConfig.repo.secrets.common.ssh.hosts;
|
||||||
|
};
|
||||||
|
} // lib.optionalAttrs (type != "nixos") {
|
||||||
|
sops.secrets = lib.mkIf (!config.swarselsystems.isPublic && !config.swarselsystems.isNixos) {
|
||||||
|
builder-key = { path = "${config.home.homeDirectory}/.ssh/builder"; mode = "0600"; };
|
||||||
|
};
|
||||||
|
});
|
||||||
|
}
|
||||||
124
modules-clone/home/common/starship.nix
Normal file
124
modules-clone/home/common/starship.nix
Normal file
|
|
@ -0,0 +1,124 @@
|
||||||
|
{ lib, config, ... }:
|
||||||
|
{
|
||||||
|
options.swarselmodules.starship = lib.mkEnableOption "starship settings";
|
||||||
|
config = lib.mkIf config.swarselmodules.starship {
|
||||||
|
programs.starship = {
|
||||||
|
enable = true;
|
||||||
|
enableZshIntegration = true;
|
||||||
|
settings = {
|
||||||
|
add_newline = false;
|
||||||
|
format = "$shlvl$character";
|
||||||
|
right_format = "$all";
|
||||||
|
command_timeout = 3000;
|
||||||
|
|
||||||
|
directory.substitutions = {
|
||||||
|
"Documents" = " ";
|
||||||
|
"Downloads" = " ";
|
||||||
|
"Music" = " ";
|
||||||
|
"Pictures" = " ";
|
||||||
|
};
|
||||||
|
|
||||||
|
git_status = {
|
||||||
|
style = "bg:#394260";
|
||||||
|
format = "[[($all_status$ahead_behind)](fg:#769ff0 bg:#394260)]($style) ";
|
||||||
|
};
|
||||||
|
|
||||||
|
character = {
|
||||||
|
success_symbol = "[λ](bold green)";
|
||||||
|
error_symbol = "[λ](bold red)";
|
||||||
|
};
|
||||||
|
|
||||||
|
shlvl = {
|
||||||
|
disabled = false;
|
||||||
|
symbol = "↳";
|
||||||
|
format = "[$symbol]($style) ";
|
||||||
|
repeat = true;
|
||||||
|
repeat_offset = 1;
|
||||||
|
style = "blue";
|
||||||
|
};
|
||||||
|
|
||||||
|
nix_shell = {
|
||||||
|
disabled = false;
|
||||||
|
heuristic = true;
|
||||||
|
format = "[$symbol$name]($style)";
|
||||||
|
symbol = " ";
|
||||||
|
};
|
||||||
|
|
||||||
|
aws.symbol = " ";
|
||||||
|
buf.symbol = " ";
|
||||||
|
c.symbol = " ";
|
||||||
|
conda.symbol = " ";
|
||||||
|
dart.symbol = " ";
|
||||||
|
directory.read_only = " ";
|
||||||
|
docker_context.symbol = " ";
|
||||||
|
elixir.symbol = " ";
|
||||||
|
elm.symbol = " ";
|
||||||
|
fossil_branch.symbol = " ";
|
||||||
|
git_branch.symbol = " ";
|
||||||
|
golang.symbol = " ";
|
||||||
|
guix_shell.symbol = " ";
|
||||||
|
haskell.symbol = " ";
|
||||||
|
haxe.symbol = " ";
|
||||||
|
hg_branch.symbol = " ";
|
||||||
|
hostname.ssh_symbol = " ";
|
||||||
|
java.symbol = " ";
|
||||||
|
julia.symbol = " ";
|
||||||
|
lua.symbol = " ";
|
||||||
|
memory_usage.symbol = " ";
|
||||||
|
meson.symbol = " ";
|
||||||
|
nim.symbol = " ";
|
||||||
|
nodejs.symbol = " ";
|
||||||
|
|
||||||
|
os.symbols = {
|
||||||
|
Alpaquita = " ";
|
||||||
|
Alpine = " ";
|
||||||
|
Amazon = " ";
|
||||||
|
Android = " ";
|
||||||
|
Arch = " ";
|
||||||
|
Artix = " ";
|
||||||
|
CentOS = " ";
|
||||||
|
Debian = " ";
|
||||||
|
DragonFly = " ";
|
||||||
|
Emscripten = " ";
|
||||||
|
EndeavourOS = " ";
|
||||||
|
Fedora = " ";
|
||||||
|
FreeBSD = " ";
|
||||||
|
Garuda = " ";
|
||||||
|
Gentoo = " ";
|
||||||
|
HardenedBSD = " ";
|
||||||
|
Illumos = " ";
|
||||||
|
Linux = " ";
|
||||||
|
Mabox = " ";
|
||||||
|
Macos = " ";
|
||||||
|
Manjaro = " ";
|
||||||
|
Mariner = " ";
|
||||||
|
MidnightBSD = " ";
|
||||||
|
Mint = " ";
|
||||||
|
NetBSD = " ";
|
||||||
|
NixOS = " ";
|
||||||
|
OpenBSD = " ";
|
||||||
|
openSUSE = " ";
|
||||||
|
OracleLinux = " ";
|
||||||
|
Pop = " ";
|
||||||
|
Raspbian = " ";
|
||||||
|
Redhat = " ";
|
||||||
|
RedHatEnterprise = " ";
|
||||||
|
Redox = " ";
|
||||||
|
Solus = " ";
|
||||||
|
SUSE = " ";
|
||||||
|
Ubuntu = " ";
|
||||||
|
Unknown = " ";
|
||||||
|
Windows = " ";
|
||||||
|
};
|
||||||
|
|
||||||
|
package.symbol = " ";
|
||||||
|
pijul_channel.symbol = " ";
|
||||||
|
python.symbol = " ";
|
||||||
|
rlang.symbol = " ";
|
||||||
|
ruby.symbol = " ";
|
||||||
|
rust.symbol = " ";
|
||||||
|
scala.symbol = " ";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
13
modules-clone/home/common/stylix.nix
Normal file
13
modules-clone/home/common/stylix.nix
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
{ self, lib, config, vars, ... }:
|
||||||
|
{
|
||||||
|
options.swarselmodules.stylix = lib.mkEnableOption "stylix settings";
|
||||||
|
config = lib.mkIf config.swarselmodules.stylix {
|
||||||
|
stylix = lib.mkIf (!config.swarselsystems.isNixos && config.swarselmodules.stylix) (lib.recursiveUpdate
|
||||||
|
{
|
||||||
|
enable = true;
|
||||||
|
base16Scheme = "${self}/files/stylix/swarsel.yaml";
|
||||||
|
targets = vars.stylixHomeTargets;
|
||||||
|
}
|
||||||
|
vars.stylix);
|
||||||
|
};
|
||||||
|
}
|
||||||
429
modules-clone/home/common/sway.nix
Normal file
429
modules-clone/home/common/sway.nix
Normal file
|
|
@ -0,0 +1,429 @@
|
||||||
|
{ config, lib, vars, confLib, ... }:
|
||||||
|
let
|
||||||
|
eachOutput = _: monitor: {
|
||||||
|
inherit (monitor) name;
|
||||||
|
value = builtins.removeAttrs monitor [ "mode" "name" "scale" "transform" "position" ];
|
||||||
|
};
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.swarselmodules.sway = lib.mkEnableOption "sway settings";
|
||||||
|
options.swarselsystems = {
|
||||||
|
inputs = lib.mkOption {
|
||||||
|
type = lib.types.attrsOf (lib.types.attrsOf lib.types.str);
|
||||||
|
default = { };
|
||||||
|
};
|
||||||
|
monitors = lib.mkOption {
|
||||||
|
type = lib.types.attrsOf (lib.types.attrsOf lib.types.str);
|
||||||
|
default = { };
|
||||||
|
};
|
||||||
|
keybindings = lib.mkOption {
|
||||||
|
type = lib.types.attrsOf lib.types.str;
|
||||||
|
default = { };
|
||||||
|
};
|
||||||
|
|
||||||
|
startup = lib.mkOption {
|
||||||
|
type = lib.types.listOf (lib.types.attrsOf lib.types.str);
|
||||||
|
default = [
|
||||||
|
# { command = "nextcloud --background"; }
|
||||||
|
# { command = "vesktop --start-minimized --enable-speech-dispatcher --ozone-platform-hint=auto --enable-features=WaylandWindowDecorations --enable-wayland-ime"; }
|
||||||
|
# { command = "element-desktop --hidden --enable-features=useozoneplatform --ozone-platform=wayland --disable-gpu-driver-bug-workarounds"; }
|
||||||
|
# { command = "anki"; }
|
||||||
|
# { command = "obsidian"; }
|
||||||
|
# { command = "nm-applet"; }
|
||||||
|
# { command = "feishin"; }
|
||||||
|
];
|
||||||
|
};
|
||||||
|
kyria = lib.mkOption {
|
||||||
|
type = lib.types.attrsOf (lib.types.attrsOf lib.types.str);
|
||||||
|
default = {
|
||||||
|
"36125:53060:splitkb.com_splitkb.com_Kyria_rev3" = {
|
||||||
|
xkb_layout = "us";
|
||||||
|
xkb_variant = "altgr-intl";
|
||||||
|
};
|
||||||
|
"7504:24926:Kyria_Keyboard" = {
|
||||||
|
xkb_layout = "us";
|
||||||
|
xkb_variant = "altgr-intl";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
internal = true;
|
||||||
|
};
|
||||||
|
standardinputs = lib.mkOption {
|
||||||
|
type = lib.types.attrsOf (lib.types.attrsOf lib.types.str);
|
||||||
|
default = lib.recursiveUpdate (lib.recursiveUpdate config.swarselsystems.touchpad config.swarselsystems.kyria) config.swarselsystems.inputs;
|
||||||
|
internal = true;
|
||||||
|
};
|
||||||
|
touchpad = lib.mkOption {
|
||||||
|
type = lib.types.attrsOf (lib.types.attrsOf lib.types.str);
|
||||||
|
default = { };
|
||||||
|
internal = true;
|
||||||
|
};
|
||||||
|
swayfxConfig = lib.mkOption {
|
||||||
|
type = lib.types.str;
|
||||||
|
default = ''
|
||||||
|
blur enable
|
||||||
|
blur_xray disable
|
||||||
|
blur_passes 1
|
||||||
|
blur_radius 1
|
||||||
|
shadows enable
|
||||||
|
corner_radius 2
|
||||||
|
titlebar_separator disable
|
||||||
|
default_dim_inactive 0.02
|
||||||
|
'';
|
||||||
|
internal = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
config = lib.mkIf config.swarselmodules.sway {
|
||||||
|
swarselsystems = {
|
||||||
|
touchpad = lib.mkIf config.swarselsystems.isLaptop {
|
||||||
|
"type:touchpad" = {
|
||||||
|
dwt = "enabled";
|
||||||
|
tap = "enabled";
|
||||||
|
natural_scroll = "enabled";
|
||||||
|
middle_emulation = "enabled";
|
||||||
|
drag_lock = "disabled";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
swayfxConfig = lib.mkIf (!config.swarselsystems.isNixos) " ";
|
||||||
|
};
|
||||||
|
|
||||||
|
wayland.windowManager.sway = {
|
||||||
|
enable = true;
|
||||||
|
# checkConfig = false; # delete this line once SwayFX is fixed upstream
|
||||||
|
package = lib.mkIf config.swarselsystems.isNixos null;
|
||||||
|
systemd = {
|
||||||
|
enable = true;
|
||||||
|
xdgAutostart = true;
|
||||||
|
variables = [
|
||||||
|
"DISPLAY"
|
||||||
|
"WAYLAND_DISPLAY"
|
||||||
|
"SWAYSOCK"
|
||||||
|
"XDG_CURRENT_DESKTOP"
|
||||||
|
"XDG_SESSION_TYPE"
|
||||||
|
"NIXOS_OZONE_WL"
|
||||||
|
"XCURSOR_THEME"
|
||||||
|
"XCURSOR_SIZE"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
wrapperFeatures = {
|
||||||
|
base = true;
|
||||||
|
gtk = true;
|
||||||
|
};
|
||||||
|
config = rec {
|
||||||
|
modifier = "Mod4";
|
||||||
|
# terminal = "kitty";
|
||||||
|
menu = "fuzzel";
|
||||||
|
bars = [{
|
||||||
|
command = "waybar";
|
||||||
|
mode = "hide";
|
||||||
|
hiddenState = "hide";
|
||||||
|
position = "top";
|
||||||
|
extraConfig = "modifier Mod4";
|
||||||
|
}];
|
||||||
|
keybindings =
|
||||||
|
let
|
||||||
|
inherit (config.wayland.windowManager.sway.config) modifier;
|
||||||
|
in
|
||||||
|
lib.recursiveUpdate
|
||||||
|
{
|
||||||
|
"${modifier}+0" = "workspace 10:十";
|
||||||
|
"${modifier}+1" = "workspace 1:一";
|
||||||
|
"${modifier}+2" = "workspace 2:二";
|
||||||
|
"${modifier}+3" = "workspace 3:三";
|
||||||
|
"${modifier}+4" = "workspace 4:四";
|
||||||
|
"${modifier}+5" = "workspace 5:五";
|
||||||
|
"${modifier}+6" = "workspace 6:六";
|
||||||
|
"${modifier}+7" = "workspace 7:七";
|
||||||
|
"${modifier}+8" = "workspace 8:八";
|
||||||
|
"${modifier}+9" = "workspace 9:九";
|
||||||
|
"${modifier}+Ctrl+Shift+c" = "reload";
|
||||||
|
"${modifier}+Ctrl+Shift+e" = "move container to workspace 13:E";
|
||||||
|
"${modifier}+Ctrl+Shift+f" = "move container to workspace 16:F";
|
||||||
|
"${modifier}+Ctrl+Shift+l" = "move container to workspace 15:L";
|
||||||
|
"${modifier}+Ctrl+Shift+m" = "move container to workspace 11:M";
|
||||||
|
"${modifier}+Ctrl+Shift+r" = "exec swarsel-displaypower";
|
||||||
|
"${modifier}+Ctrl+Shift+s" = "move container to workspace 12:S";
|
||||||
|
"${modifier}+Ctrl+Shift+t" = "move container to workspace 14:T";
|
||||||
|
"${modifier}+Ctrl+e" = "workspace 13:E";
|
||||||
|
"${modifier}+Ctrl+f" = "workspace 16:F";
|
||||||
|
"${modifier}+Ctrl+l" = "workspace 15:L";
|
||||||
|
"${modifier}+Ctrl+m" = "workspace 11:M";
|
||||||
|
"${modifier}+Ctrl+p" = "exec 1password --quick-acces";
|
||||||
|
"${modifier}+Ctrl+s" = "workspace 12:S";
|
||||||
|
"${modifier}+Ctrl+t" = "workspace 14:T";
|
||||||
|
"${modifier}+Down" = "focus down";
|
||||||
|
"${modifier}+Escape" = "exec wlogout";
|
||||||
|
"${modifier}+F12" = "scratchpad show";
|
||||||
|
"${modifier}+Left" = "focus left";
|
||||||
|
"${modifier}+Return" = "exec swarselzellij";
|
||||||
|
"${modifier}+Right" = "focus right";
|
||||||
|
"${modifier}+Shift+0" = "move container to workspace 10:十";
|
||||||
|
"${modifier}+Shift+1" = "move container to workspace 1:一";
|
||||||
|
"${modifier}+Shift+2" = "move container to workspace 2:二";
|
||||||
|
"${modifier}+Shift+3" = "move container to workspace 3:三";
|
||||||
|
"${modifier}+Shift+4" = "move container to workspace 4:四";
|
||||||
|
"${modifier}+Shift+5" = "move container to workspace 5:五";
|
||||||
|
"${modifier}+Shift+6" = "move container to workspace 6:六";
|
||||||
|
"${modifier}+Shift+7" = "move container to workspace 7:七";
|
||||||
|
"${modifier}+Shift+8" = "move container to workspace 8:八";
|
||||||
|
"${modifier}+Shift+9" = "move container to workspace 9:九";
|
||||||
|
"${modifier}+Shift+Down" = "move down 40px";
|
||||||
|
"${modifier}+Shift+Escape" = "exec kitty -o confirm_os_window_close=0 btm";
|
||||||
|
"${modifier}+Shift+F12" = "move scratchpad";
|
||||||
|
"${modifier}+Shift+Left" = "move left 40px";
|
||||||
|
"${modifier}+Shift+Right" = "move right 40px";
|
||||||
|
"${modifier}+Shift+Space" = "floating toggle";
|
||||||
|
"${modifier}+Shift+Up" = "move up 40px";
|
||||||
|
"${modifier}+Shift+a" = "exec emacsclient -cF '((name . \"Emacs Popup Anchor\"))' -e '(prot-window-popup-swarsel/open-calendar)'";
|
||||||
|
"${modifier}+Shift+c" = "exec qalculate-gtk";
|
||||||
|
"${modifier}+Shift+e" = "exec swaynag -t warning -m 'You pressed the exit shortcut. Do you really want to exit sway? This will end your Wayland session.' -b 'Yes, exit sway' 'swaymsg exit'";
|
||||||
|
"${modifier}+Shift+f" = "exec swaymsg fullscreen";
|
||||||
|
"${modifier}+Shift+m" = "exec emacsclient -cF '((name . \"Emacs Popup Anchor\"))' -e '(prot-window-popup-mu4e)'";
|
||||||
|
"${modifier}+Shift+o" = "exec pass-fuzzel --otp --type";
|
||||||
|
"${modifier}+Shift+p" = "exec pass-fuzzel --type";
|
||||||
|
"${modifier}+Shift+s" = "exec slurp | grim -g - Pictures/Screenshots/$(date +'screenshot_%Y-%m-%d-%H%M%S.png')";
|
||||||
|
"${modifier}+Shift+t" = "exec opacitytoggle";
|
||||||
|
"${modifier}+Shift+v" = "exec wf-recorder -g '$(slurp -f %o -or)' -f ~/Videos/screenrecord_$(date +%Y-%m-%d-%H%M%S).mkv";
|
||||||
|
"${modifier}+Space" = "exec fuzzel";
|
||||||
|
"${modifier}+Up" = "focus up";
|
||||||
|
"${modifier}+a" = "exec swarselcheck -s";
|
||||||
|
"${modifier}+c" = "exec emacsclient -cF '((name . \"Emacs Popup Anchor\"))' -e '(prot-window-popup-org-capture)'";
|
||||||
|
"${modifier}+d" = "exec swarselcheck -d";
|
||||||
|
"${modifier}+e" = "exec emacsclient -nquc -a emacs -e \"(dashboard-open)\"";
|
||||||
|
"${modifier}+f" = "exec firefox";
|
||||||
|
"${modifier}+h" = "exec hyprpicker | wl-copy";
|
||||||
|
"${modifier}+m" = "exec swaymsg workspace back_and_forth";
|
||||||
|
"${modifier}+o" = "exec pass-fuzzel --otp";
|
||||||
|
"${modifier}+p" = "exec pass-fuzzel";
|
||||||
|
"${modifier}+q" = "kill";
|
||||||
|
"${modifier}+r" = "mode resize";
|
||||||
|
"${modifier}+s" = "exec grim -g \"$(slurp)\" -t png - | wl-copy -t image/png";
|
||||||
|
"${modifier}+t" = "exec emacsclient -cF '((name . \"Emacs Popup Anchor\"))' -e '(prot-window-popup-org-agenda)'";
|
||||||
|
"${modifier}+w" = "exec swarselcheck -e";
|
||||||
|
"${modifier}+x" = "exec swarselcheck -k";
|
||||||
|
# "${modifier}+Escape" = "mode $exit";
|
||||||
|
# "${modifier}+Return" = "exec kitty";
|
||||||
|
"XF86AudioRaiseVolume" = "exec swayosd-client --output-volume raise";
|
||||||
|
"XF86AudioLowerVolume" = "exec swayosd-client --output-volume lower";
|
||||||
|
"XF86AudioMute" = "exec swayosd-client --output-volume mute-toggle";
|
||||||
|
"XF86MonBrightnessUp" = "exec swayosd-client --brightness raise";
|
||||||
|
"XF86MonBrightnessDown" = "exec swayosd-client --brightness lower";
|
||||||
|
"XF86Display" = "exec wl-mirror eDP-1";
|
||||||
|
# "--no-repeat Super_L" = "exec killall -SIGUSR1 .waybar-wrapped";
|
||||||
|
# "${modifier}+z" = "exec killall -SIGUSR1 .waybar-wrapped";
|
||||||
|
}
|
||||||
|
config.swarselsystems.keybindings;
|
||||||
|
modes = {
|
||||||
|
resize = {
|
||||||
|
Down = "resize grow height 10 px or 10 ppt";
|
||||||
|
Escape = "mode default";
|
||||||
|
Left = "resize shrink width 10 px or 10 ppt";
|
||||||
|
Return = "mode default";
|
||||||
|
Right = "resize grow width 10 px or 10 ppt";
|
||||||
|
Up = "resize shrink height 10 px or 10 ppt";
|
||||||
|
Tab = "move position center, resize set width 50 ppt height 50 ppt";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
defaultWorkspace = "workspace 1:一";
|
||||||
|
# output = {
|
||||||
|
# "${config.swarselsystems.sharescreen}" = {
|
||||||
|
# bg = "${self}/files/wallpaper/lenovowp.png ${config.stylix.imageScalingMode}";
|
||||||
|
# };
|
||||||
|
# "Philips Consumer Electronics Company PHL BDM3270 AU11806002320" = {
|
||||||
|
# bg = "${self}/files/wallpaper/standwp.png ${config.stylix.imageScalingMode}";
|
||||||
|
# };
|
||||||
|
# };
|
||||||
|
input = config.swarselsystems.standardinputs;
|
||||||
|
workspaceOutputAssign =
|
||||||
|
let
|
||||||
|
workplaceSets = lib.mapAttrs' eachOutput config.swarselsystems.monitors;
|
||||||
|
workplaceOutputs = map (key: lib.getAttr key workplaceSets) (lib.attrNames workplaceSets);
|
||||||
|
in
|
||||||
|
workplaceOutputs;
|
||||||
|
startup = config.swarselsystems.startup ++ [
|
||||||
|
{ command = "kitty -T kittyterm -o confirm_os_window_close=0 zellij attach --create kittyterm"; }
|
||||||
|
{ command = "sleep 60; kitty -T spotifytui -o confirm_os_window_close=0 spotify_player"; }
|
||||||
|
{ command = "mako"; }
|
||||||
|
];
|
||||||
|
seat = {
|
||||||
|
"*" = {
|
||||||
|
hide_cursor = "when-typing enable";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
window = {
|
||||||
|
border = 1;
|
||||||
|
titlebar = false;
|
||||||
|
};
|
||||||
|
assigns = {
|
||||||
|
"15:L" = [{ app_id = "teams-for-linux"; }];
|
||||||
|
};
|
||||||
|
floating = {
|
||||||
|
border = 1;
|
||||||
|
criteria = [
|
||||||
|
{ app_id = "qalculate-gtk"; }
|
||||||
|
{ app_id = "blueman"; }
|
||||||
|
{ app_id = "pavucontrol"; }
|
||||||
|
{ app_id = "syncthingtray"; }
|
||||||
|
{ app_id = "Element"; }
|
||||||
|
{ app_id = "1Password"; }
|
||||||
|
{ app_id = "com.nextcloud.desktopclient.nextcloud"; }
|
||||||
|
{ title = "(?:Open|Save) (?:File|Folder|As)"; }
|
||||||
|
{ title = "^Add$"; }
|
||||||
|
{ title = "^Picture-in-Picture$"; }
|
||||||
|
{ title = "Syncthing Tray"; }
|
||||||
|
{ title = "^Emacs Popup Frame$"; }
|
||||||
|
{ title = "^Emacs Popup Anchor$"; }
|
||||||
|
{ title = "^spotifytui$"; }
|
||||||
|
{ title = "^kittyterm$"; }
|
||||||
|
{ app_id = "vesktop"; }
|
||||||
|
{ window_role = "pop-up"; }
|
||||||
|
{ window_role = "bubble"; }
|
||||||
|
{ window_role = "dialog"; }
|
||||||
|
{ window_role = "task_dialog"; }
|
||||||
|
{ window_role = "menu"; }
|
||||||
|
{ window_role = "Preferences"; }
|
||||||
|
];
|
||||||
|
titlebar = false;
|
||||||
|
};
|
||||||
|
window = {
|
||||||
|
commands = [
|
||||||
|
{
|
||||||
|
command = "opacity 0.95";
|
||||||
|
criteria = {
|
||||||
|
class = ".*";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
{
|
||||||
|
command = "opacity 1";
|
||||||
|
criteria = {
|
||||||
|
app_id = "at.yrlf.wl_mirror";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
{
|
||||||
|
command = "opacity 1";
|
||||||
|
criteria = {
|
||||||
|
app_id = "Gimp-2.10";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
{
|
||||||
|
command = "opacity 0.99";
|
||||||
|
criteria = {
|
||||||
|
app_id = "firefox";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
{
|
||||||
|
command = "opacity 0.99";
|
||||||
|
criteria = {
|
||||||
|
app_id = "chromium-browser";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
{
|
||||||
|
command = "sticky enable, shadows enable";
|
||||||
|
criteria = {
|
||||||
|
title = "^Picture-in-Picture$";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
{
|
||||||
|
command = "resize set width 60 ppt height 60 ppt, opacity 0.99, sticky enable";
|
||||||
|
criteria = {
|
||||||
|
title = "^Emacs Popup Frame$";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
{
|
||||||
|
command = "move container to scratchpad";
|
||||||
|
criteria = {
|
||||||
|
title = "^Emacs Popup Anchor$";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
{
|
||||||
|
command = "resize set width 60 ppt height 60 ppt, opacity 0.8, sticky enable, border normal, move container to scratchpad";
|
||||||
|
criteria = {
|
||||||
|
title = "^kittyterm$";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
{
|
||||||
|
command = "resize set width 60 ppt height 60 ppt, opacity 0.95, sticky enable, border normal, move container to scratchpad";
|
||||||
|
criteria = {
|
||||||
|
title = "^spotifytui$";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
{
|
||||||
|
|
||||||
|
command = "resize set width 60 ppt height 60 ppt, sticky enable, move container to scratchpad";
|
||||||
|
criteria = {
|
||||||
|
class = "Spotify";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
{
|
||||||
|
command = "resize set width 60 ppt height 60 ppt, sticky enable";
|
||||||
|
criteria = {
|
||||||
|
app_id = "vesktop";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
{
|
||||||
|
command = "resize set width 60 ppt height 60 ppt, sticky enable";
|
||||||
|
criteria = {
|
||||||
|
class = "Element";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
# {
|
||||||
|
# command = "resize set width 60 ppt height 60 ppt, sticky enable, move container to scratchpad";
|
||||||
|
# criteria = {
|
||||||
|
# app_id="^$";
|
||||||
|
# class="^$";
|
||||||
|
# };
|
||||||
|
# }
|
||||||
|
];
|
||||||
|
};
|
||||||
|
gaps = {
|
||||||
|
inner = 5;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
extraSessionCommands = ''
|
||||||
|
export XDG_CURRENT_DESKTOP=sway;
|
||||||
|
export XDG_SESSION_DESKTOP=sway;
|
||||||
|
export _JAVA_AWT_WM_NONREPARENTING=1;
|
||||||
|
export GITHUB_NOTIFICATION_TOKEN_PATH=${confLib.getConfig.sops.secrets.github-notifications-token.path};
|
||||||
|
'' + vars.waylandExports;
|
||||||
|
# extraConfigEarly = "
|
||||||
|
# exec systemctl --user import-environment DISPLAY WAYLAND_DISPLAY SWAYSOCK
|
||||||
|
# exec hash dbus-update-activation-environment 2>/dev/null && dbus-update-activation-environment --systemd DISPLAY WAYLAND_DISPLAY SWAYSOCK
|
||||||
|
# ";
|
||||||
|
extraConfig =
|
||||||
|
let
|
||||||
|
inherit (config.wayland.windowManager.sway.config) modifier;
|
||||||
|
swayfxSettings = config.swarselsystems.swayfxConfig;
|
||||||
|
in
|
||||||
|
"
|
||||||
|
# exec_always autotiling
|
||||||
|
# set $exit \"exit: [s]leep, [l]ock, [p]oweroff, [r]eboot, [u]ser logout\"
|
||||||
|
|
||||||
|
# mode $exit {
|
||||||
|
# bindsym --to-code {
|
||||||
|
# s exec \"systemctl suspend\", mode \"default\"
|
||||||
|
# h exec \"systemctl hibernate\", mode \"default\"
|
||||||
|
# l exec \"swaylock --screenshots --clock --effect-blur 7x5 --effect-vignette 0.5:0.5 --fade-in 0.2 --daemonize\", mode \"default\
|
||||||
|
# p exec \"systemctl poweroff\"
|
||||||
|
# r exec \"systemctl reboot\"
|
||||||
|
# u exec \"swaymsg exit\"
|
||||||
|
|
||||||
|
# Return mode \"default\"
|
||||||
|
# Escape mode \"default\"
|
||||||
|
# ${modifier}+Escape mode \"default\"
|
||||||
|
# }
|
||||||
|
# }
|
||||||
|
|
||||||
|
exec systemctl --user import-environment
|
||||||
|
# exec swayidle -w
|
||||||
|
|
||||||
|
seat * hide_cursor 2000
|
||||||
|
|
||||||
|
exec_always kill -1 $(pidof kanshi)
|
||||||
|
|
||||||
|
bindswitch --locked lid:on exec kanshictl switch lidclosed
|
||||||
|
bindswitch --locked lid:off exec kanshictl switch lidopen
|
||||||
|
|
||||||
|
${swayfxSettings}
|
||||||
|
";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
37
modules-clone/home/common/swayidle.nix
Normal file
37
modules-clone/home/common/swayidle.nix
Normal file
|
|
@ -0,0 +1,37 @@
|
||||||
|
{ lib, config, pkgs, ... }:
|
||||||
|
let
|
||||||
|
moduleName = "swayidle";
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.swarselmodules.${moduleName} = lib.mkEnableOption "enable ${moduleName} and settings";
|
||||||
|
config = lib.mkIf config.swarselmodules.${moduleName} {
|
||||||
|
services.${moduleName} =
|
||||||
|
let
|
||||||
|
brightnessctl = "${lib.getExe pkgs.brightnessctl}";
|
||||||
|
swaylock = "${lib.getExe pkgs.swaylock-effects}";
|
||||||
|
suspend = "${pkgs.systemd}/bin/systemctl suspend";
|
||||||
|
noctalia = "/etc/profiles/per-user/${config.swarselsystems.mainUser}/bin/noctalia-shell ipc call";
|
||||||
|
in
|
||||||
|
{
|
||||||
|
enable = true;
|
||||||
|
# systemdTarget = "sway-session.target";
|
||||||
|
extraArgs = [ "-w" ];
|
||||||
|
timeouts = [
|
||||||
|
{ timeout = 60; command = "${brightnessctl} -s; ${brightnessctl} set 80%-"; resumeCommand = "${brightnessctl} -r"; }
|
||||||
|
# { timeout = 300; command = "${lib.getExe pkgs.swaylock-effects} -f --screenshots --clock --effect-blur 7x5 --effect-vignette 0.5:0.5 --fade-in 0.2"; }
|
||||||
|
# { timeout = 300; command = "${swaylock} -f"; }
|
||||||
|
{ timeout = 300; command = "${noctalia} lockScreen lock || ${swaylock} -f"; }
|
||||||
|
# { timeout = 600; command = ''${pkgs.sway}/bin/swaymsg "output * dpms off"; resumeCommand = "${pkgs.sway}/bin/swaymsg output * dpms on''; }
|
||||||
|
# { timeout = 600; command = "${noctalia} sessionMenu lockAndSuspend || ${suspend}"; }
|
||||||
|
{ timeout = 600; command = "${suspend}"; }
|
||||||
|
];
|
||||||
|
events = {
|
||||||
|
# { event = "before-sleep"; command = "${noctalia} lockScreen lock || ${lib.getExe pkgs.swaylock-effects} -f --screenshots --clock --effect-blur 7x5 --effect-vignette 0.5:0.5 --fade-in 0.2"; }
|
||||||
|
# { event = "after-resume"; command = "${swaylock} -f "; }
|
||||||
|
before-sleep = "${noctalia} lockScreen lock || ${swaylock} -f ";
|
||||||
|
# lock = "${swaylock} -f ";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
21
modules-clone/home/common/swaylock.nix
Normal file
21
modules-clone/home/common/swaylock.nix
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
{ lib, config, pkgs, ... }:
|
||||||
|
let
|
||||||
|
moduleName = "swaylock";
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.swarselmodules.${moduleName} = lib.mkEnableOption "enable ${moduleName} and settings";
|
||||||
|
config = lib.mkIf config.swarselmodules.${moduleName} {
|
||||||
|
programs.${moduleName} = {
|
||||||
|
enable = true;
|
||||||
|
package = pkgs.swaylock-effects;
|
||||||
|
settings = {
|
||||||
|
screenshots = true;
|
||||||
|
clock = true;
|
||||||
|
effect-blur = "7x5";
|
||||||
|
effect-vignette = "0.5:0.5";
|
||||||
|
fade-in = "0.2";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
12
modules-clone/home/common/swayosd.nix
Normal file
12
modules-clone/home/common/swayosd.nix
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
{ lib, pkgs, config, confLib, ... }:
|
||||||
|
{
|
||||||
|
options.swarselmodules.swayosd = lib.mkEnableOption "swayosd settings";
|
||||||
|
config = lib.mkIf config.swarselmodules.swayosd {
|
||||||
|
systemd.user.services.swayosd = confLib.overrideTarget "sway-session.target";
|
||||||
|
services.swayosd = {
|
||||||
|
enable = true;
|
||||||
|
package = pkgs.swayosd;
|
||||||
|
topMargin = 0.5;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
32
modules-clone/home/common/symlink.nix
Normal file
32
modules-clone/home/common/symlink.nix
Normal file
|
|
@ -0,0 +1,32 @@
|
||||||
|
{ self, lib, config, ... }:
|
||||||
|
{
|
||||||
|
options.swarselmodules.symlink = lib.mkEnableOption "symlink settings";
|
||||||
|
config = lib.mkIf config.swarselmodules.symlink {
|
||||||
|
home.file = {
|
||||||
|
"init.el" = lib.mkDefault {
|
||||||
|
source = self + /files/emacs/init.el;
|
||||||
|
target = ".emacs.d/init.el";
|
||||||
|
};
|
||||||
|
"early-init.el" = {
|
||||||
|
source = self + /files/emacs/early-init.el;
|
||||||
|
target = ".emacs.d/early-init.el";
|
||||||
|
};
|
||||||
|
# on NixOS, Emacs does not find the aspell dicts easily. Write the configuration manually
|
||||||
|
".aspell.conf" = {
|
||||||
|
source = self + /files/config/.aspell.conf;
|
||||||
|
target = ".aspell.conf";
|
||||||
|
};
|
||||||
|
".gitmessage" = {
|
||||||
|
source = self + /files/git/.gitmessage;
|
||||||
|
target = ".gitmessage";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
xdg.configFile = {
|
||||||
|
"tridactyl/tridactylrc".source = self + /files/firefox/tridactyl/tridactylrc;
|
||||||
|
"tridactyl/themes/base16-codeschool.css".source = self + /files/firefox/tridactyl/themes/base16-codeschool.css;
|
||||||
|
"tridactyl/themes/swarsel.css".source = self + /files/firefox/tridactyl/themes/swarsel.css;
|
||||||
|
# "swayidle/config".source = self + /files/swayidle/config;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
120
modules-clone/home/common/syncthing-tray.nix
Normal file
120
modules-clone/home/common/syncthing-tray.nix
Normal file
|
|
@ -0,0 +1,120 @@
|
||||||
|
{ lib, config, pkgs, ... }:
|
||||||
|
{
|
||||||
|
options.swarselmodules.syncthing-tray = lib.mkEnableOption "enable syncthing applet for tray";
|
||||||
|
config = lib.mkIf config.swarselmodules.syncthing-tray {
|
||||||
|
|
||||||
|
home.activation.setupSyncthingIni =
|
||||||
|
let
|
||||||
|
syncthingApiEnvVarName = "SYNCTHING_API_KEY";
|
||||||
|
syncthingIni = {
|
||||||
|
file = "${config.home.homeDirectory}/.config/syncthingtray.ini";
|
||||||
|
content = ''
|
||||||
|
[General]
|
||||||
|
v=2.0.2
|
||||||
|
|
||||||
|
[qt]
|
||||||
|
customfont=false
|
||||||
|
customicontheme=false
|
||||||
|
customlocale=false
|
||||||
|
custompalette=false
|
||||||
|
customstylesheet=false
|
||||||
|
customwidgetstyle=false
|
||||||
|
font="Cantarell,11,-1,5,400,0,0,0,0,0,0,0,0,0,0,1"
|
||||||
|
icontheme=hicolor
|
||||||
|
iconthemepath=
|
||||||
|
locale=en_US
|
||||||
|
palette="@Variant(\0\0\0\x44\x1\x1\xff\xff\xa0\xa0\xb3\xb3\xc5\xc5\0\0\x1\x1\xff\xff jj\x86\x86\0\0\x1\x1\xff\xff\0\0::ff\0\0\x1\x1\xff\xff\0\0::ff\0\0\x1\x1\xff\xff\x1d\x1d%%,,\0\0\x1\x1\xff\xff\x1d\x1d%%,,\0\0\x1\x1\xff\xff\xa0\xa0\xb3\xb3\xc5\xc5\0\0\x1\x1\xff\xff\xff\xff\xff\xff\xff\xff\0\0\x1\x1\xff\xff\xa0\xa0\xb3\xb3\xc5\xc5\0\0\x1\x1\xff\xff\x1d\x1d%%,,\0\0\x1\x1\xff\xff\x17\x17\x1d\x1d##\0\0\x1\x1\xff\xff\0\0\0\0\0\0\0\0\x1\x1\xff\xff\0\0::ff\0\0\x1\x1\xff\xff\xa0\xa0\xb3\xb3\xc5\xc5\0\0\x1\x1\xff\xff^^\xc4\xc4\xff\xff\0\0\x1\x1\xff\xff\xc0\xc0nn\xce\xce\0\0\x1\x1\xff\xff\x17\x17\x1d\x1d##\0\0\x1\x1\xff\xff^^\xc4\xc4\xff\xff\0\0\x1\x1\xff\xff jj\x86\x86\0\0\x1\x1\xff\xff\0\0::ff\0\0\x1\x1\xff\xff\0\0::ff\0\0\x1\x1\xff\xff\x1d\x1d%%,,\0\0\x1\x1\xff\xff\x1d\x1d%%,,\0\0\x1\x1\xff\xff^^\xc4\xc4\xff\xff\0\0\x1\x1\xff\xff\xff\xff\xff\xff\xff\xff\0\0\x1\x1\xff\xff^^\xc4\xc4\xff\xff\0\0\x1\x1\xff\xff\x1d\x1d%%,,\0\0\x1\x1\xff\xff\x17\x17\x1d\x1d##\0\0\x1\x1\xff\xff\0\0\0\0\0\0\0\0\x1\x1\xff\xff\0\0::ff\0\0\x1\x1\x66\x66\xa0\xa0\xb3\xb3\xc5\xc5\0\0\x1\x1\xff\xff^^\xc4\xc4\xff\xff\0\0\x1\x1\xff\xff\xc0\xc0nn\xce\xce\0\0\x1\x1\xff\xff\x17\x17\x1d\x1d##\0\0\x1\x1\xff\xff\xa0\xa0\xb3\xb3\xc5\xc5\0\0\x1\x1\xff\xff jj\x86\x86\0\0\x1\x1\xff\xff\0\0::ff\0\0\x1\x1\xff\xff\0\0::ff\0\0\x1\x1\xff\xff\x1d\x1d%%,,\0\0\x1\x1\xff\xff\x1d\x1d%%,,\0\0\x1\x1\xff\xff\xa0\xa0\xb3\xb3\xc5\xc5\0\0\x1\x1\xff\xff\xff\xff\xff\xff\xff\xff\0\0\x1\x1\xff\xff\xa0\xa0\xb3\xb3\xc5\xc5\0\0\x1\x1\xff\xff\x1d\x1d%%,,\0\0\x1\x1\xff\xff\x17\x17\x1d\x1d##\0\0\x1\x1\xff\xff\0\0\0\0\0\0\0\0\x1\x2\xff\xffP\x14\xff\xff\x65\x65\0\0\x1\x1\xff\xff\xa0\xa0\xb3\xb3\xc5\xc5\0\0\x1\x1\xff\xff^^\xc4\xc4\xff\xff\0\0\x1\x1\xff\xff\xc0\xc0nn\xce\xce\0\0\x1\x1\xff\xff\x17\x17\x1d\x1d##\0\0)"
|
||||||
|
plugindir=
|
||||||
|
stylesheetpath=
|
||||||
|
trpath=
|
||||||
|
widgetstyle=
|
||||||
|
|
||||||
|
[startup]
|
||||||
|
considerForReconnect=false
|
||||||
|
considerLauncherForReconnect=false
|
||||||
|
showButton=false
|
||||||
|
showLauncherButton=false
|
||||||
|
stopOnMetered=false
|
||||||
|
stopServiceOnMetered=false
|
||||||
|
syncthingArgs="serve --no-browser --logflags=3"
|
||||||
|
syncthingAutostart=false
|
||||||
|
syncthingPath=syncthing
|
||||||
|
syncthingUnit=syncthing.service
|
||||||
|
systemUnit=false
|
||||||
|
useLibSyncthing=false
|
||||||
|
|
||||||
|
[tray]
|
||||||
|
connections\1\apiKey=@ByteArray(''$${syncthingApiEnvVarName})
|
||||||
|
connections\1\authEnabled=falsex
|
||||||
|
connections\1\autoConnect=true
|
||||||
|
connections\1\devStatsPollInterval=60000
|
||||||
|
connections\1\diskEventLimit=200
|
||||||
|
connections\1\errorsPollInterval=30000
|
||||||
|
connections\1\httpsCertPath=${config.home.homeDirectory}/.config/syncthing/https-cert.pem
|
||||||
|
connections\1\label=Primary instance
|
||||||
|
connections\1\localPath=
|
||||||
|
connections\1\longPollingTimeout=0
|
||||||
|
connections\1\password=
|
||||||
|
connections\1\pauseOnMetered=false
|
||||||
|
connections\1\reconnectInterval=30000
|
||||||
|
connections\1\requestTimeout=0
|
||||||
|
connections\1\statusComputionFlags=123
|
||||||
|
connections\1\syncthingUrl=http://${config.services.syncthing.guiAddress}
|
||||||
|
connections\1\trafficPollInterval=5000
|
||||||
|
connections\1\userName=
|
||||||
|
connections\size=1
|
||||||
|
dbusNotifications=true
|
||||||
|
distinguishTrayIcons=false
|
||||||
|
frameStyle=16
|
||||||
|
ignoreInavailabilityAfterStart=15
|
||||||
|
notifyOnDisconnect=true
|
||||||
|
notifyOnErrors=true
|
||||||
|
notifyOnLauncherErrors=true
|
||||||
|
notifyOnLocalSyncComplete=false
|
||||||
|
notifyOnNewDeviceConnects=false
|
||||||
|
notifyOnNewDirectoryShared=false
|
||||||
|
notifyOnRemoteSyncComplete=false
|
||||||
|
positioning\assumedIconPos=@Point(0 0)
|
||||||
|
positioning\useAssumedIconPosition=false
|
||||||
|
positioning\useCursorPos=true
|
||||||
|
preferIconsFromTheme=false
|
||||||
|
showDownloads=false
|
||||||
|
showSyncthingNotifications=true
|
||||||
|
showTabTexts=true
|
||||||
|
showTraffic=true
|
||||||
|
statusIcons="#ff26b6db,#ff0882c8,#ffffffff;#ffdb3c26,#ffc80828,#ffffffff;#ffc9ce3b,#ffebb83b,#ffffffff;#ff2d9d69,#ff2d9d69,#ffffffff;#ff26b6db,#ff0882c8,#ffffffff;#ff26b6db,#ff0882c8,#ffffffff;#ffa9a9a9,#ff58656c,#ffffffff;#ffa9a9a9,#ff58656c,#ffffffff;#ffa9a9a9,#ff58656c,#ffffffff"
|
||||||
|
statusIconsRenderSize=@Size(32 32)
|
||||||
|
statusIconsStrokeWidth=0
|
||||||
|
tabPos=1
|
||||||
|
trayIcons="#ff26b6db,#ff0882c8,#ffffffff;#ffdb3c26,#ffc80828,#ffffffff;#ffc9ce3b,#ffebb83b,#ffffffff;#ff2d9d69,#ff2d9d69,#ffffffff;#ff26b6db,#ff0882c8,#ffffffff;#ff26b6db,#ff0882c8,#ffffffff;#ffa9a9a9,#ff58656c,#ffffffff;#ffa9a9a9,#ff58656c,#ffffffff;#ffa9a9a9,#ff58656c,#ffffffff"
|
||||||
|
trayIconsRenderSize=@Size(32 32)
|
||||||
|
trayIconsStrokeWidth=0
|
||||||
|
trayMenuSize=@Size(575 475)
|
||||||
|
usePaletteForStatusIcons=false
|
||||||
|
usePaletteForTrayIcons=false
|
||||||
|
windowType=0
|
||||||
|
|
||||||
|
[webview]
|
||||||
|
customCommand=
|
||||||
|
disabled=false
|
||||||
|
mode=0
|
||||||
|
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
in
|
||||||
|
lib.hm.dag.entryAfter [ "writeBoundary" ] ''
|
||||||
|
set -eu
|
||||||
|
|
||||||
|
if [ ! -f ${syncthingIni.file} ]; then
|
||||||
|
cat >${syncthingIni.file} <<'EOF'
|
||||||
|
${syncthingIni.content}
|
||||||
|
EOF
|
||||||
|
export ${syncthingApiEnvVarName}=$(cat /run/syncthing-init/api_key)
|
||||||
|
${lib.getExe pkgs.envsubst} -i ${syncthingIni.file} -o ${syncthingIni.file}
|
||||||
|
unset ${syncthingApiEnvVarName}
|
||||||
|
fi
|
||||||
|
'';
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
99
modules-clone/home/common/tmux.nix
Normal file
99
modules-clone/home/common/tmux.nix
Normal file
|
|
@ -0,0 +1,99 @@
|
||||||
|
{ lib, config, pkgs, ... }:
|
||||||
|
let
|
||||||
|
tmux-super-fingers = pkgs.tmuxPlugins.mkTmuxPlugin
|
||||||
|
{
|
||||||
|
pluginName = "tmux-super-fingers";
|
||||||
|
version = "unstable-2023-01-06";
|
||||||
|
src = pkgs.fetchFromGitHub {
|
||||||
|
owner = "artemave";
|
||||||
|
repo = "tmux_super_fingers";
|
||||||
|
rev = "2c12044984124e74e21a5a87d00f844083e4bdf7";
|
||||||
|
sha256 = "sha256-cPZCV8xk9QpU49/7H8iGhQYK6JwWjviL29eWabuqruc=";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.swarselmodules.tmux = lib.mkEnableOption "tmux settings";
|
||||||
|
config = lib.mkIf config.swarselmodules.tmux {
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
lsof
|
||||||
|
sesh
|
||||||
|
];
|
||||||
|
|
||||||
|
programs.tmux = {
|
||||||
|
enable = true;
|
||||||
|
shell = "${pkgs.zsh}/bin/zsh";
|
||||||
|
terminal = "tmux-256color";
|
||||||
|
historyLimit = 100000;
|
||||||
|
plugins = with pkgs;
|
||||||
|
[
|
||||||
|
tmuxPlugins.tmux-thumbs
|
||||||
|
{
|
||||||
|
plugin = tmux-super-fingers;
|
||||||
|
extraConfig = "set -g @super-fingers-key f";
|
||||||
|
}
|
||||||
|
|
||||||
|
tmuxPlugins.sensible
|
||||||
|
# must be before continuum edits right status bar
|
||||||
|
{
|
||||||
|
plugin = tmuxPlugins.catppuccin;
|
||||||
|
extraConfig = ''
|
||||||
|
set -g @catppuccin_flavour 'frappe'
|
||||||
|
set -g @catppuccin_window_tabs_enabled on
|
||||||
|
set -g @catppuccin_date_time "%H:%M"
|
||||||
|
'';
|
||||||
|
}
|
||||||
|
{
|
||||||
|
plugin = tmuxPlugins.resurrect;
|
||||||
|
extraConfig = ''
|
||||||
|
set -g @resurrect-strategy-vim 'session'
|
||||||
|
set -g @resurrect-strategy-nvim 'session'
|
||||||
|
set -g @resurrect-capture-pane-contents 'on'
|
||||||
|
'';
|
||||||
|
}
|
||||||
|
{
|
||||||
|
plugin = tmuxPlugins.continuum;
|
||||||
|
extraConfig = ''
|
||||||
|
set -g @continuum-restore 'on'
|
||||||
|
set -g @continuum-boot 'on'
|
||||||
|
set -g @continuum-save-interval '10'
|
||||||
|
'';
|
||||||
|
}
|
||||||
|
tmuxPlugins.better-mouse-mode
|
||||||
|
tmuxPlugins.yank
|
||||||
|
];
|
||||||
|
extraConfig = ''
|
||||||
|
set -g default-terminal "tmux-256color"
|
||||||
|
set -ag terminal-overrides ",xterm-256color:RGB"
|
||||||
|
|
||||||
|
set-option -g prefix C-a
|
||||||
|
unbind-key C-b
|
||||||
|
bind-key C-a send-prefix
|
||||||
|
|
||||||
|
set -g mouse on
|
||||||
|
|
||||||
|
# Open new split at cwd of current split
|
||||||
|
bind | split-window -h -c "#{pane_current_path}"
|
||||||
|
bind - split-window -v -c "#{pane_current_path}"
|
||||||
|
|
||||||
|
# Use vim keybindings in copy mode
|
||||||
|
set-window-option -g mode-keys vi
|
||||||
|
|
||||||
|
# v in copy mode starts making selection
|
||||||
|
bind-key -T copy-mode-vi v send-keys -X begin-selection
|
||||||
|
bind-key -T copy-mode-vi C-v send-keys -X rectangle-toggle
|
||||||
|
bind-key -T copy-mode-vi y send-keys -X copy-selection-and-cancel
|
||||||
|
|
||||||
|
# Escape turns on copy mode
|
||||||
|
bind Escape copy-mode
|
||||||
|
|
||||||
|
set-option -g status-position top
|
||||||
|
|
||||||
|
# make Prefix p paste the buffer.
|
||||||
|
unbind p
|
||||||
|
bind p paste-buffer
|
||||||
|
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
29
modules-clone/home/common/vesktop-tray.nix
Normal file
29
modules-clone/home/common/vesktop-tray.nix
Normal file
|
|
@ -0,0 +1,29 @@
|
||||||
|
{ lib, config, pkgs, ... }:
|
||||||
|
{
|
||||||
|
options.swarselmodules.vesktop-tray = lib.mkEnableOption "enable vesktop applet for tray";
|
||||||
|
config = lib.mkIf config.swarselmodules.vesktop-tray {
|
||||||
|
|
||||||
|
systemd.user.services.vesktop-applet = {
|
||||||
|
Unit = {
|
||||||
|
Description = "Vesktop applet";
|
||||||
|
Requires = [ "graphical-session.target" ];
|
||||||
|
After = [
|
||||||
|
"graphical-session.target"
|
||||||
|
"tray.target"
|
||||||
|
];
|
||||||
|
PartOf = [
|
||||||
|
"tray.target"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
Install = {
|
||||||
|
WantedBy = [ "tray.target" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
Service = {
|
||||||
|
ExecStart = "${pkgs.vesktop}/bin/vesktop --start-minimized --ozone-platform-hint=auto --enable-features=WaylandWindowDecorations --enable-wayland-ime";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
80
modules-clone/home/common/vesktop.nix
Normal file
80
modules-clone/home/common/vesktop.nix
Normal file
|
|
@ -0,0 +1,80 @@
|
||||||
|
{ lib, pkgs, config, ... }:
|
||||||
|
let
|
||||||
|
moduleName = "vesktop";
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.swarselmodules.${moduleName} = lib.mkEnableOption "enable ${moduleName} and settings";
|
||||||
|
config = lib.mkIf config.swarselmodules.${moduleName} {
|
||||||
|
programs.${moduleName} = {
|
||||||
|
enable = true;
|
||||||
|
package = pkgs.vesktop;
|
||||||
|
settings = {
|
||||||
|
appBadge = false;
|
||||||
|
arRPC = false;
|
||||||
|
checkUpdates = false;
|
||||||
|
customTitleBar = false;
|
||||||
|
disableMinSize = true;
|
||||||
|
minimizeToTray = true;
|
||||||
|
tray = true;
|
||||||
|
staticTitle = true;
|
||||||
|
hardwareAcceleration = true;
|
||||||
|
discordBranch = "stable";
|
||||||
|
};
|
||||||
|
vencord = {
|
||||||
|
useSystem = true;
|
||||||
|
settings = {
|
||||||
|
autoUpdate = false;
|
||||||
|
autoUpdateNotification = false;
|
||||||
|
enableReactDevtools = false;
|
||||||
|
frameless = false;
|
||||||
|
transparent = false;
|
||||||
|
winCtrlQ = false;
|
||||||
|
notifyAboutUpdates = false;
|
||||||
|
useQuickCss = true;
|
||||||
|
disableMinSize = true;
|
||||||
|
winNativeTitleBar = false;
|
||||||
|
plugins = {
|
||||||
|
MessageLogger = {
|
||||||
|
enabled = true;
|
||||||
|
ignoreSelf = true;
|
||||||
|
};
|
||||||
|
ChatInputButtonAPI = {
|
||||||
|
enabled = false;
|
||||||
|
};
|
||||||
|
CommandsAPI = {
|
||||||
|
enabled = true;
|
||||||
|
};
|
||||||
|
MemberListDecoratorsAPI = {
|
||||||
|
enabled = false;
|
||||||
|
};
|
||||||
|
MessageAccessoriesAPI = {
|
||||||
|
enabled = true;
|
||||||
|
};
|
||||||
|
MessageDecorationsAPI = {
|
||||||
|
enabled = false;
|
||||||
|
};
|
||||||
|
MessageEventsAPI = {
|
||||||
|
enabled = false;
|
||||||
|
};
|
||||||
|
MessagePopoverAPI = {
|
||||||
|
enabled = false;
|
||||||
|
};
|
||||||
|
MessageUpdaterAPI = {
|
||||||
|
enabled = false;
|
||||||
|
};
|
||||||
|
ServerListAPI = {
|
||||||
|
enabled = false;
|
||||||
|
};
|
||||||
|
UserSettingsAPI = {
|
||||||
|
enabled = true;
|
||||||
|
};
|
||||||
|
FakeNitro = {
|
||||||
|
enabled = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
328
modules-clone/home/common/waybar.nix
Normal file
328
modules-clone/home/common/waybar.nix
Normal file
|
|
@ -0,0 +1,328 @@
|
||||||
|
{ self, config, lib, pkgs, type, ... }:
|
||||||
|
let
|
||||||
|
inherit (config.swarselsystems) xdgDir;
|
||||||
|
generateIcons = n: lib.concatStringsSep " " (builtins.map (x: "{icon" + toString x + "}") (lib.range 0 (n - 1)));
|
||||||
|
modulesLeft = [
|
||||||
|
"custom/outer-left-arrow-dark"
|
||||||
|
"mpris"
|
||||||
|
"custom/left-arrow-light"
|
||||||
|
"network"
|
||||||
|
"custom/vpn"
|
||||||
|
"custom/left-arrow-dark"
|
||||||
|
"pulseaudio"
|
||||||
|
"custom/left-arrow-light"
|
||||||
|
];
|
||||||
|
modulesRight = [
|
||||||
|
"custom/left-arrow-dark"
|
||||||
|
"group/hardware"
|
||||||
|
"custom/left-arrow-light"
|
||||||
|
"clock#2"
|
||||||
|
"custom/left-arrow-dark"
|
||||||
|
"clock#1"
|
||||||
|
];
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.swarselmodules.waybar = lib.mkEnableOption "waybar settings";
|
||||||
|
options.swarselsystems = {
|
||||||
|
cpuCount = lib.mkOption {
|
||||||
|
type = lib.types.int;
|
||||||
|
default = 8;
|
||||||
|
};
|
||||||
|
temperatureHwmon = {
|
||||||
|
isAbsolutePath = lib.mkEnableOption "absolute temperature path";
|
||||||
|
path = lib.mkOption {
|
||||||
|
type = lib.types.str;
|
||||||
|
default = "";
|
||||||
|
};
|
||||||
|
input-filename = lib.mkOption {
|
||||||
|
type = lib.types.str;
|
||||||
|
default = "";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
waybarModules = lib.mkOption {
|
||||||
|
type = lib.types.listOf lib.types.str;
|
||||||
|
default = modulesLeft ++ [
|
||||||
|
"custom/pseudobat"
|
||||||
|
] ++ modulesRight;
|
||||||
|
};
|
||||||
|
cpuString = lib.mkOption {
|
||||||
|
type = lib.types.str;
|
||||||
|
default = generateIcons config.swarselsystems.cpuCount;
|
||||||
|
description = "The generated icons string for use by Waybar.";
|
||||||
|
internal = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
config = lib.mkIf config.swarselmodules.waybar ({
|
||||||
|
|
||||||
|
swarselsystems = {
|
||||||
|
waybarModules = lib.mkIf config.swarselsystems.isLaptop (modulesLeft ++ [
|
||||||
|
"battery"
|
||||||
|
] ++ modulesRight);
|
||||||
|
};
|
||||||
|
|
||||||
|
services.playerctld.enable = true;
|
||||||
|
|
||||||
|
programs.waybar = {
|
||||||
|
enable = true;
|
||||||
|
systemd = {
|
||||||
|
enable = false;
|
||||||
|
target = "sway-session.target";
|
||||||
|
# inherit (config.wayland.systemd) target;
|
||||||
|
};
|
||||||
|
settings = {
|
||||||
|
mainBar = {
|
||||||
|
ipc = true;
|
||||||
|
id = "bar-0";
|
||||||
|
# mode = "hide";
|
||||||
|
# mode = "overlay";
|
||||||
|
# passthrough = false;
|
||||||
|
# start_hidden = true;
|
||||||
|
layer = "top";
|
||||||
|
position = "top";
|
||||||
|
modules-left = [ "sway/workspaces" "niri/workspaces" "custom/outer-right-arrow-dark" "niri/window" "sway/window" ];
|
||||||
|
modules-center = [ "sway/mode" "privacy" "custom/github" "custom/configwarn" "custom/nix-updates" ];
|
||||||
|
"sway/mode" = {
|
||||||
|
format = "<span style=\"italic\" font-weight=\"bold\">{}</span>";
|
||||||
|
};
|
||||||
|
|
||||||
|
"niri/window" = {
|
||||||
|
format = "<span style=\"italic\" font-weight=\"bold\">{title} ({app_id})</span>";
|
||||||
|
};
|
||||||
|
|
||||||
|
modules-right = config.swarselsystems.waybarModules;
|
||||||
|
|
||||||
|
"custom/pseudobat" = lib.mkIf (!config.swarselsystems.isLaptop) {
|
||||||
|
format = "";
|
||||||
|
on-click-right = "${pkgs.wlogout}/bin/wlogout -p layer-shell";
|
||||||
|
};
|
||||||
|
|
||||||
|
"custom/configwarn" = {
|
||||||
|
exec = "${pkgs.waybarupdate}/bin/waybarupdate";
|
||||||
|
interval = 60;
|
||||||
|
};
|
||||||
|
|
||||||
|
"custom/scratchpad-indicator" = {
|
||||||
|
interval = 3;
|
||||||
|
exec = "${pkgs.swayfx}/bin/swaymsg -t get_tree | ${pkgs.jq}/bin/jq 'recurse(.nodes[]) | first(select(.name==\"__i3_scratch\")) | .floating_nodes | length | select(. >= 1)'";
|
||||||
|
format = "{} ";
|
||||||
|
on-click = "${pkgs.swayfx}/bin/swaymsg 'scratchpad show'";
|
||||||
|
on-click-right = "${pkgs.swayfx}/bin/swaymsg 'move scratchpad'";
|
||||||
|
};
|
||||||
|
|
||||||
|
"custom/github" = {
|
||||||
|
format = "{} ";
|
||||||
|
return-type = "json";
|
||||||
|
interval = 60;
|
||||||
|
exec = "${pkgs.github-notifications}/bin/github-notifications";
|
||||||
|
on-click = "${pkgs.xdg-utils}/bin/xdg-open https://github.com/notifications";
|
||||||
|
};
|
||||||
|
|
||||||
|
idle_inhibitor = {
|
||||||
|
format = "{icon}";
|
||||||
|
format-icons = {
|
||||||
|
activated = "";
|
||||||
|
deactivated = "";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
"group/hardware" = {
|
||||||
|
orientation = "inherit";
|
||||||
|
drawer = {
|
||||||
|
"transition-left-to-right" = false;
|
||||||
|
};
|
||||||
|
modules = [
|
||||||
|
"tray"
|
||||||
|
"temperature"
|
||||||
|
"power-profiles-daemon"
|
||||||
|
"custom/left-arrow-light"
|
||||||
|
"custom/left-arrow-dark"
|
||||||
|
"custom/scratchpad-indicator"
|
||||||
|
"custom/left-arrow-light"
|
||||||
|
"disk"
|
||||||
|
"custom/left-arrow-dark"
|
||||||
|
"memory"
|
||||||
|
"custom/left-arrow-light"
|
||||||
|
"cpu"
|
||||||
|
"custom/left-arrow-dark"
|
||||||
|
"backlight/slider"
|
||||||
|
"idle_inhibitor"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
"backlight/slider" = {
|
||||||
|
min = 0;
|
||||||
|
max = 100;
|
||||||
|
orientation = "horizontal";
|
||||||
|
device = "intel_backlight";
|
||||||
|
};
|
||||||
|
|
||||||
|
power-profiles-daemon = {
|
||||||
|
format = "{icon}";
|
||||||
|
tooltip-format = "Power profile: {profile}\nDriver: {driver}";
|
||||||
|
tooltip = true;
|
||||||
|
format-icons = {
|
||||||
|
"default" = "";
|
||||||
|
"performance" = "";
|
||||||
|
"balanced" = "";
|
||||||
|
"power-saver" = "";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
temperature = {
|
||||||
|
hwmon-path = lib.mkIf (!config.swarselsystems.temperatureHwmon.isAbsolutePath) config.swarselsystems.temperatureHwmon.path;
|
||||||
|
hwmon-path-abs = lib.mkIf config.swarselsystems.temperatureHwmon.isAbsolutePath config.swarselsystems.temperatureHwmon.path;
|
||||||
|
input-filename = lib.mkIf config.swarselsystems.temperatureHwmon.isAbsolutePath config.swarselsystems.temperatureHwmon.input-filename;
|
||||||
|
critical-threshold = 80;
|
||||||
|
format-critical = " {temperatureC}°C";
|
||||||
|
format = " {temperatureC}°C";
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
mpris = {
|
||||||
|
format = "{player_icon} {title} <small>[{position}/{length}]</small>";
|
||||||
|
format-paused = "{player_icon} <i>{title} <small>[{position}/{length}]</small></i>";
|
||||||
|
player-icons = {
|
||||||
|
"default" = "▶ ";
|
||||||
|
"mpv" = "🎵 ";
|
||||||
|
"spotify" = " ";
|
||||||
|
};
|
||||||
|
status-icons = {
|
||||||
|
"paused" = " ";
|
||||||
|
};
|
||||||
|
interval = 1;
|
||||||
|
title-len = 20;
|
||||||
|
artist-len = 20;
|
||||||
|
album-len = 10;
|
||||||
|
};
|
||||||
|
"custom/left-arrow-dark" = {
|
||||||
|
format = "";
|
||||||
|
tooltip = false;
|
||||||
|
};
|
||||||
|
"custom/outer-left-arrow-dark" = {
|
||||||
|
format = "";
|
||||||
|
tooltip = false;
|
||||||
|
};
|
||||||
|
"custom/left-arrow-light" = {
|
||||||
|
format = "";
|
||||||
|
tooltip = false;
|
||||||
|
};
|
||||||
|
"custom/right-arrow-dark" = {
|
||||||
|
format = "";
|
||||||
|
tooltip = false;
|
||||||
|
};
|
||||||
|
"custom/outer-right-arrow-dark" = {
|
||||||
|
format = "";
|
||||||
|
tooltip = false;
|
||||||
|
};
|
||||||
|
"custom/right-arrow-light" = {
|
||||||
|
format = "";
|
||||||
|
tooltip = false;
|
||||||
|
};
|
||||||
|
"sway/workspaces" = {
|
||||||
|
disable-scroll = true;
|
||||||
|
format = "{name}";
|
||||||
|
};
|
||||||
|
|
||||||
|
"clock#1" = {
|
||||||
|
min-length = 8;
|
||||||
|
interval = 1;
|
||||||
|
format = "{:%H:%M:%S}";
|
||||||
|
# on-click-right= "gnome-clocks";
|
||||||
|
tooltip-format = "<big>{:%Y %B}</big>\n<tt><small>{calendar}</small></tt>";
|
||||||
|
};
|
||||||
|
|
||||||
|
"clock#2" = {
|
||||||
|
format = "{:%d. %B %Y}";
|
||||||
|
# on-click-right= "gnome-clocks";
|
||||||
|
tooltip-format = "<big>{:%Y %B}</big>\n<tt><small>{calendar}</small></tt>";
|
||||||
|
};
|
||||||
|
|
||||||
|
pulseaudio = {
|
||||||
|
format = "{icon} {volume:2}%";
|
||||||
|
format-bluetooth = "{icon} {volume}%";
|
||||||
|
format-muted = "MUTE";
|
||||||
|
format-icons = {
|
||||||
|
headphones = "";
|
||||||
|
default = [
|
||||||
|
""
|
||||||
|
""
|
||||||
|
];
|
||||||
|
};
|
||||||
|
scroll-step = 1;
|
||||||
|
on-click = "${pkgs.pamixer}/bin/pamixer -t";
|
||||||
|
on-click-right = "${pkgs.pavucontrol}/bin/pavucontrol";
|
||||||
|
};
|
||||||
|
|
||||||
|
memory = {
|
||||||
|
interval = 5;
|
||||||
|
format = " {}%";
|
||||||
|
tooltip-format = "Memory: {used:0.1f}G/{total:0.1f}G\nSwap: {swapUsed}G/{swapTotal}G";
|
||||||
|
};
|
||||||
|
cpu = {
|
||||||
|
format = config.swarselsystems.cpuString;
|
||||||
|
min-length = 6;
|
||||||
|
interval = 5;
|
||||||
|
format-icons = [ "▁" "▂" "▃" "▄" "▅" "▆" "▇" "█" ];
|
||||||
|
# on-click-right= "com.github.stsdc.monitor";
|
||||||
|
on-click-right = "${pkgs.kitty}/bin/kitty -o confirm_os_window_close=0 btm";
|
||||||
|
|
||||||
|
};
|
||||||
|
"custom/vpn" = {
|
||||||
|
format = "()";
|
||||||
|
exec = "echo '{\"class\": \"connected\"}'";
|
||||||
|
exec-if = "${pkgs.toybox}/bin/test -d /proc/sys/net/ipv4/conf/tun0";
|
||||||
|
return-type = "json";
|
||||||
|
interval = 5;
|
||||||
|
};
|
||||||
|
battery = {
|
||||||
|
states = {
|
||||||
|
"warning" = 60;
|
||||||
|
"error" = 30;
|
||||||
|
"critical" = 15;
|
||||||
|
};
|
||||||
|
interval = 5;
|
||||||
|
format = "{icon} {capacity}%";
|
||||||
|
format-charging = "{capacity}% ";
|
||||||
|
format-plugged = "{capacity}% ";
|
||||||
|
format-icons = [
|
||||||
|
""
|
||||||
|
""
|
||||||
|
""
|
||||||
|
""
|
||||||
|
""
|
||||||
|
];
|
||||||
|
on-click-right = "wlogout -p layer-shell";
|
||||||
|
};
|
||||||
|
disk = {
|
||||||
|
interval = 30;
|
||||||
|
format = "Disk {percentage_used:2}%";
|
||||||
|
path = "/";
|
||||||
|
states = {
|
||||||
|
"warning" = 80;
|
||||||
|
"critical" = 90;
|
||||||
|
};
|
||||||
|
tooltip-format = "{used} used out of {total} on {path} ({percentage_used}%)\n{free} free on {path} ({percentage_free}%)";
|
||||||
|
};
|
||||||
|
tray = {
|
||||||
|
icon-size = 20;
|
||||||
|
};
|
||||||
|
network = {
|
||||||
|
interval = 5;
|
||||||
|
format-wifi = "{signalStrength}% ";
|
||||||
|
format-ethernet = "";
|
||||||
|
format-linked = "{ifname} (No IP) ";
|
||||||
|
format-disconnected = "Disconnected ⚠";
|
||||||
|
format-alt = "{ifname}: {ipaddr}/{cidr}";
|
||||||
|
tooltip-format-ethernet = "{ifname} via {gwaddr}: {essid} {ipaddr}/{cidr}\n\n⇡{bandwidthUpBytes} ⇣{bandwidthDownBytes}";
|
||||||
|
tooltip-format-wifi = "{ifname} via {gwaddr}: {essid} {ipaddr}/{cidr} \n{signaldBm}dBm @ {frequency}MHz\n\n⇡{bandwidthUpBytes} ⇣{bandwidthDownBytes}";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
style = builtins.readFile (self + /files/waybar/style.css);
|
||||||
|
};
|
||||||
|
} // lib.optionalAttrs (type != "nixos") {
|
||||||
|
sops.secrets = lib.mkIf (!config.swarselsystems.isPublic && !config.swarselsystems.isNixos) {
|
||||||
|
github-notifications-token = { path = "${xdgDir}/secrets/github-notifications-token"; };
|
||||||
|
};
|
||||||
|
});
|
||||||
|
}
|
||||||
32
modules-clone/home/common/yubikey-touch-detector.nix
Normal file
32
modules-clone/home/common/yubikey-touch-detector.nix
Normal file
|
|
@ -0,0 +1,32 @@
|
||||||
|
{ lib, config, pkgs, ... }:
|
||||||
|
{
|
||||||
|
options.swarselmodules.yubikeytouch = lib.mkEnableOption "yubikey touch detector service settings";
|
||||||
|
config = lib.mkIf config.swarselmodules.yubikeytouch {
|
||||||
|
systemd.user.services.yubikey-touch-detector = {
|
||||||
|
Unit = {
|
||||||
|
Description = "Detects when your YubiKey is waiting for a touch";
|
||||||
|
Requires = [ "yubikey-touch-detector.socket" ];
|
||||||
|
};
|
||||||
|
Service = {
|
||||||
|
ExecStart = "${pkgs.yubikey-touch-detector}/bin/yubikey-touch-detector --libnotify";
|
||||||
|
EnvironmentFile = "-%E/yubikey-touch-detector/service.conf";
|
||||||
|
};
|
||||||
|
Install = {
|
||||||
|
Also = [ "yubikey-touch-detector.socket" ];
|
||||||
|
WantedBy = [ "default.target" ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
systemd.user.sockets.yubikey-touch-detector = {
|
||||||
|
Unit = {
|
||||||
|
Description = "Unix socket activation for YubiKey touch detector service";
|
||||||
|
};
|
||||||
|
Socket = {
|
||||||
|
ListenStream = "%t/yubikey-touch-detector.socket";
|
||||||
|
RemoveOnStop = true;
|
||||||
|
};
|
||||||
|
Install = {
|
||||||
|
WantedBy = [ "sockets.target" ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
21
modules-clone/home/common/yubikey.nix
Normal file
21
modules-clone/home/common/yubikey.nix
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
{ lib, config, confLib, type, ... }:
|
||||||
|
let
|
||||||
|
inherit (config.swarselsystems) homeDir;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.swarselmodules.yubikey = lib.mkEnableOption "yubikey settings";
|
||||||
|
|
||||||
|
config = lib.mkIf config.swarselmodules.yubikey ({
|
||||||
|
|
||||||
|
pam.yubico.authorizedYubiKeys = lib.mkIf (config.swarselsystems.isNixos && !config.swarselsystems.isPublic) {
|
||||||
|
ids = [
|
||||||
|
confLib.getConfig.repo.secrets.common.yubikeys.dev1
|
||||||
|
confLib.getConfig.secrets.common.yubikeys.dev2
|
||||||
|
];
|
||||||
|
};
|
||||||
|
} // lib.optionalAttrs (type != "nixos") {
|
||||||
|
sops.secrets = lib.mkIf (!config.swarselsystems.isPublic) {
|
||||||
|
u2f-keys = { path = "${homeDir}/.config/Yubico/u2f_keys"; };
|
||||||
|
};
|
||||||
|
});
|
||||||
|
}
|
||||||
1144
modules-clone/home/common/zellij-keybinds.nix
Normal file
1144
modules-clone/home/common/zellij-keybinds.nix
Normal file
File diff suppressed because it is too large
Load diff
59
modules-clone/home/common/zellij.nix
Normal file
59
modules-clone/home/common/zellij.nix
Normal file
|
|
@ -0,0 +1,59 @@
|
||||||
|
{ self, lib, config, pkgs, ... }:
|
||||||
|
{
|
||||||
|
options.swarselmodules.zellij = lib.mkEnableOption "zellij settings";
|
||||||
|
config = lib.mkIf config.swarselmodules.zellij {
|
||||||
|
programs.zellij = {
|
||||||
|
enable = true;
|
||||||
|
enableZshIntegration = true;
|
||||||
|
attachExistingSession = false;
|
||||||
|
exitShellOnExit = true;
|
||||||
|
settings = {
|
||||||
|
pane_frames = false;
|
||||||
|
simplified_ui = false;
|
||||||
|
default_shell = "zsh";
|
||||||
|
copy_on_select = true;
|
||||||
|
on_force_close = "quit";
|
||||||
|
show_startup_tips = false;
|
||||||
|
support_kitty_keyboard_protocol = true;
|
||||||
|
default_layout = "swarsel";
|
||||||
|
layout_dir = "${config.home.homeDirectory}/.config/zellij/layouts";
|
||||||
|
theme_dir = "${config.home.homeDirectory}/.config/zellij/themes";
|
||||||
|
scrollback_lines_to_serialize = config.programs.kitty.settings.scrollback_lines;
|
||||||
|
session_serialization = true;
|
||||||
|
|
||||||
|
copy_command =
|
||||||
|
if pkgs.stdenv.hostPlatform.isLinux then
|
||||||
|
"wl-copy"
|
||||||
|
else if pkgs.stdenv.hostPlatform.isDarwin then
|
||||||
|
"pbcopy"
|
||||||
|
else
|
||||||
|
"";
|
||||||
|
ui.pane_frames = {
|
||||||
|
rounded_corners = true;
|
||||||
|
hide_session_name = true;
|
||||||
|
};
|
||||||
|
plugins = {
|
||||||
|
tab-bar.path = "tab-bar";
|
||||||
|
status-bar.path = "status-bar";
|
||||||
|
strider.path = "strider";
|
||||||
|
compact-bar.path = "compact-bar";
|
||||||
|
# configuration.path = "configuration";
|
||||||
|
# filepicker.path = "strider";
|
||||||
|
# plugin-manager.path = "plugin-manager";
|
||||||
|
# session-manager.path = "session-manager";
|
||||||
|
# welcome-screen.path = "session-manager";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
zjstatus
|
||||||
|
];
|
||||||
|
|
||||||
|
xdg.configFile = {
|
||||||
|
# "zellij/config.kdl".text = import "${self}/files/zellij/config.kdl.nix" { inherit config; };
|
||||||
|
"zellij/layouts/swarsel.kdl".text = import "${self}/files/zellij/layouts/swarsel.kdl.nix" { inherit config pkgs; };
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
149
modules-clone/home/common/zsh.nix
Normal file
149
modules-clone/home/common/zsh.nix
Normal file
|
|
@ -0,0 +1,149 @@
|
||||||
|
{ self, config, pkgs, lib, minimal, globals, confLib, type, arch, ... }:
|
||||||
|
let
|
||||||
|
inherit (config.swarselsystems) flakePath isNixos homeDir;
|
||||||
|
crocDomain = globals.services.croc.domain;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.swarselmodules.zsh = lib.mkEnableOption "zsh settings";
|
||||||
|
options.swarselsystems = {
|
||||||
|
shellAliases = lib.mkOption {
|
||||||
|
type = lib.types.attrsOf lib.types.str;
|
||||||
|
default = { };
|
||||||
|
};
|
||||||
|
};
|
||||||
|
config = lib.mkIf config.swarselmodules.zsh
|
||||||
|
({
|
||||||
|
|
||||||
|
programs.zsh = {
|
||||||
|
enable = true;
|
||||||
|
}
|
||||||
|
// lib.optionalAttrs (!minimal) {
|
||||||
|
shellAliases = lib.recursiveUpdate
|
||||||
|
{
|
||||||
|
nb = "nix build";
|
||||||
|
nbl = "nix build --builders \"\"";
|
||||||
|
nbo = "nix build --offline --builders \"\"";
|
||||||
|
nd = "nix develop";
|
||||||
|
ns = "nix shell";
|
||||||
|
hmswitch = lib.mkIf (!isNixos) "${lib.getExe pkgs.home-manager} --flake ${flakePath}#$(hostname) switch |& nom";
|
||||||
|
nswitch = lib.mkIf isNixos "cd ${flakePath}; swarsel-deploy $(hostname) switch; cd -;";
|
||||||
|
ntest = lib.mkIf isNixos "cd ${flakePath}; swarsel-deploy $(hostname) test; cd -;";
|
||||||
|
nboot = lib.mkIf isNixos "cd ${flakePath}; swarsel-deploy $(hostname) boot; cd -;";
|
||||||
|
ndry = lib.mkIf isNixos "cd ${flakePath}; swarsel-deploy $(hostname) dry-activate; cd -;";
|
||||||
|
magit = "emacsclient -nc -e \"(magit-status)\"";
|
||||||
|
config = "git --git-dir=$HOME/.cfg/ --work-tree=$HOME";
|
||||||
|
g = "git";
|
||||||
|
c = "git --git-dir=$FLAKE/.git --work-tree=$FLAKE/";
|
||||||
|
passpush = "cd ~/.local/share/password-store; git add .; git commit -m 'pass file changes'; git push; cd -;";
|
||||||
|
passpull = "cd ~/.local/share/password-store; git pull; cd -;";
|
||||||
|
hotspot = "nmcli connection up local; nmcli device wifi hotspot;";
|
||||||
|
youtube-dl = "yt-dlp";
|
||||||
|
cat-orig = "cat";
|
||||||
|
# cdr = "cd \"$( (find $DOCUMENT_DIR_WORK $DOCUMENT_DIR_PRIV -maxdepth 1 && echo $FLAKE) | fzf )\"";
|
||||||
|
cdr = "source cdr";
|
||||||
|
nix-ldd-ldd = "LD_LIBRARY_PATH=$NIX_LD_LIBRARY_PATH ldd";
|
||||||
|
nix-ldd = "LD_LIBRARY_PATH=$NIX_LD_LIBRARY_PATH ldd";
|
||||||
|
nix-ldd-locate = "nix-locate --minimal --top-level -w ";
|
||||||
|
nix-store-search = "ls /nix/store | grep";
|
||||||
|
fs-diff = "sudo mount -o subvol=/ /dev/mapper/cryptroot /mnt ; fs-diff";
|
||||||
|
lt = "eza -las modified --total-size";
|
||||||
|
boot-diff = "nix store diff-closures /run/*-system";
|
||||||
|
gen-diff = "nix profile diff-closures --profile /nix/var/nix/profiles/system";
|
||||||
|
cc = "wl-copy";
|
||||||
|
build-topology = "nix build --override-input topologyPrivate ${self}/files/topology/private ${flakePath}#topology.${arch}.config.output";
|
||||||
|
build-topology-dev = "nix build --show-trace --override-input nix-topology ${homeDir}/Documents/Private/nix-topology --override-input topologyPrivate ${self}/files/topology/private ${flakePath}#topology.${arch}.config.output";
|
||||||
|
build-iso = "nix build --print-out-paths .#live-iso";
|
||||||
|
nix-review-local = "nix run nixpkgs#nixpkgs-review -- rev HEAD";
|
||||||
|
nix-review-post = "nix run nixpkgs#nixpkgs-review -- pr --post-result --systems linux";
|
||||||
|
}
|
||||||
|
config.swarselsystems.shellAliases;
|
||||||
|
autosuggestion.enable = true;
|
||||||
|
enableCompletion = true;
|
||||||
|
syntaxHighlighting.enable = true;
|
||||||
|
autocd = false;
|
||||||
|
cdpath = [
|
||||||
|
"~/.dotfiles"
|
||||||
|
# "~/Documents/GitHub"
|
||||||
|
];
|
||||||
|
defaultKeymap = "emacs";
|
||||||
|
dirHashes = {
|
||||||
|
dl = "$HOME/Downloads";
|
||||||
|
gh = "$HOME/Documents/GitHub";
|
||||||
|
};
|
||||||
|
history = {
|
||||||
|
expireDuplicatesFirst = true;
|
||||||
|
append = true;
|
||||||
|
ignoreSpace = true;
|
||||||
|
ignoreDups = true;
|
||||||
|
path = "${config.home.homeDirectory}/.histfile";
|
||||||
|
save = 100000;
|
||||||
|
size = 100000;
|
||||||
|
};
|
||||||
|
historySubstringSearch = {
|
||||||
|
enable = true;
|
||||||
|
searchDownKey = "^[OB";
|
||||||
|
searchUpKey = "^[OA";
|
||||||
|
};
|
||||||
|
plugins = [
|
||||||
|
# {
|
||||||
|
# name = "fzf-tab";
|
||||||
|
# src = pkgs.zsh-fzf-tab;
|
||||||
|
# }
|
||||||
|
];
|
||||||
|
initContent = ''
|
||||||
|
my-forward-word() {
|
||||||
|
local WORDCHARS=$WORDCHARS
|
||||||
|
WORDCHARS="''${WORDCHARS//:}"
|
||||||
|
WORDCHARS="''${WORDCHARS//\/}"
|
||||||
|
WORDCHARS="''${WORDCHARS//.}"
|
||||||
|
zle forward-word
|
||||||
|
}
|
||||||
|
zle -N my-forward-word
|
||||||
|
# ctrl + right
|
||||||
|
bindkey "^[[1;5C" my-forward-word
|
||||||
|
|
||||||
|
# shift + right
|
||||||
|
bindkey "^[[1;2C" forward-word
|
||||||
|
|
||||||
|
my-backward-word() {
|
||||||
|
local WORDCHARS=$WORDCHARS
|
||||||
|
WORDCHARS="''${WORDCHARS//:}"
|
||||||
|
WORDCHARS="''${WORDCHARS//\/}"
|
||||||
|
WORDCHARS="''${WORDCHARS//.}"
|
||||||
|
zle backward-word
|
||||||
|
}
|
||||||
|
zle -N my-backward-word
|
||||||
|
# ctrl + left
|
||||||
|
bindkey "^[[1;5D" my-backward-word
|
||||||
|
|
||||||
|
# shift + left
|
||||||
|
bindkey "^[[1;2D" backward-word
|
||||||
|
|
||||||
|
my-backward-delete-word() {
|
||||||
|
local WORDCHARS=$WORDCHARS
|
||||||
|
WORDCHARS="''${WORDCHARS//:}"
|
||||||
|
WORDCHARS="''${WORDCHARS//\/}"
|
||||||
|
WORDCHARS="''${WORDCHARS//.}"
|
||||||
|
zle backward-delete-word
|
||||||
|
}
|
||||||
|
zle -N my-backward-delete-word
|
||||||
|
# ctrl + del
|
||||||
|
bindkey '^H' my-backward-delete-word
|
||||||
|
'';
|
||||||
|
sessionVariables = lib.mkIf (!config.swarselsystems.isPublic) {
|
||||||
|
CROC_RELAY = crocDomain;
|
||||||
|
CROC_PASS = "$(cat ${confLib.getConfig.sops.secrets.croc-password.path or ""})";
|
||||||
|
GITHUB_TOKEN = "$(cat ${confLib.getConfig.sops.secrets.github-nixpkgs-review-token.path or ""})";
|
||||||
|
QT_QPA_PLATFORM_PLUGIN_PATH = "${pkgs.libsForQt5.qt5.qtbase.bin}/lib/qt-${pkgs.libsForQt5.qt5.qtbase.version}/plugins";
|
||||||
|
# QTWEBENGINE_CHROMIUM_FLAGS = "--no-sandbox";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
} // lib.optionalAttrs (type != "nixos") {
|
||||||
|
|
||||||
|
sops.secrets = lib.mkIf (!config.swarselsystems.isPublic) {
|
||||||
|
croc-password = { };
|
||||||
|
github-nixpkgs-review-token = { };
|
||||||
|
};
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
9
modules-clone/home/darwin/default.nix
Normal file
9
modules-clone/home/darwin/default.nix
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
{ self, ... }:
|
||||||
|
{
|
||||||
|
home.stateVersion = "23.05";
|
||||||
|
imports = [
|
||||||
|
"${self}/modules-clone/home/common/settings.nix"
|
||||||
|
"${self}/modules-clone/shared/options.nix"
|
||||||
|
"${self}/modules-clone/shared/vars.nix"
|
||||||
|
];
|
||||||
|
}
|
||||||
8
modules-clone/home/default.nix
Normal file
8
modules-clone/home/default.nix
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
# @ future me: dont panic, this file is not read in by readNix
|
||||||
|
{ lib, ... }:
|
||||||
|
let
|
||||||
|
importNames = lib.swarselsystems.readNix "modules-clone/home";
|
||||||
|
in
|
||||||
|
{
|
||||||
|
imports = lib.swarselsystems.mkImports importNames "modules-clone/home";
|
||||||
|
}
|
||||||
7
modules-clone/home/optional/default.nix
Normal file
7
modules-clone/home/optional/default.nix
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
{ lib, ... }:
|
||||||
|
let
|
||||||
|
importNames = lib.swarselsystems.readNix "modules-clone/home/optional";
|
||||||
|
in
|
||||||
|
{
|
||||||
|
imports = lib.swarselsystems.mkImports importNames "modules-clone/home/optional";
|
||||||
|
}
|
||||||
13
modules-clone/home/optional/framework.nix
Normal file
13
modules-clone/home/optional/framework.nix
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
_:
|
||||||
|
{
|
||||||
|
config = {
|
||||||
|
swarselsystems = {
|
||||||
|
inputs = {
|
||||||
|
"12972:18:Framework_Laptop_16_Keyboard_Module_-_ANSI_Keyboard" = {
|
||||||
|
xkb_layout = "us";
|
||||||
|
xkb_variant = "altgr-intl";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
57
modules-clone/home/optional/gaming.nix
Normal file
57
modules-clone/home/optional/gaming.nix
Normal file
|
|
@ -0,0 +1,57 @@
|
||||||
|
{ config, pkgs, confLib, ... }:
|
||||||
|
let
|
||||||
|
inherit (config.swarselsystems) isNixos;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
config = {
|
||||||
|
# specialisation = {
|
||||||
|
# gaming.configuration = {
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
# lutris
|
||||||
|
wine
|
||||||
|
protonplus
|
||||||
|
winetricks
|
||||||
|
libudev-zero
|
||||||
|
dwarfs
|
||||||
|
fuse-overlayfs
|
||||||
|
# steam
|
||||||
|
steam-run
|
||||||
|
patchelf
|
||||||
|
gamescope
|
||||||
|
vulkan-tools
|
||||||
|
moonlight-qt
|
||||||
|
ns-usbloader
|
||||||
|
|
||||||
|
quark-goldleaf
|
||||||
|
|
||||||
|
# gog games installing
|
||||||
|
heroic
|
||||||
|
|
||||||
|
# minecraft
|
||||||
|
prismlauncher # has overrides
|
||||||
|
temurin-bin-17
|
||||||
|
|
||||||
|
pokefinder
|
||||||
|
retroarch
|
||||||
|
flips
|
||||||
|
];
|
||||||
|
|
||||||
|
programs.lutris = {
|
||||||
|
enable = true;
|
||||||
|
extraPackages = with pkgs; [
|
||||||
|
winetricks
|
||||||
|
gamescope
|
||||||
|
umu-launcher
|
||||||
|
];
|
||||||
|
steamPackage = if isNixos then confLib.getConfig.programs.steam.package else pkgs.steam;
|
||||||
|
winePackages = with pkgs; [
|
||||||
|
wineWow64Packages.waylandFull
|
||||||
|
];
|
||||||
|
protonPackages = with pkgs; [
|
||||||
|
proton-ge-bin
|
||||||
|
];
|
||||||
|
};
|
||||||
|
# };
|
||||||
|
# };
|
||||||
|
};
|
||||||
|
}
|
||||||
259
modules-clone/home/optional/niri.nix
Normal file
259
modules-clone/home/optional/niri.nix
Normal file
|
|
@ -0,0 +1,259 @@
|
||||||
|
{ inputs, config, pkgs, lib, vars, type, ... }:
|
||||||
|
{
|
||||||
|
imports = lib.optionals (type != "nixos") [
|
||||||
|
inputs.niri-flake.homeModules.niri
|
||||||
|
];
|
||||||
|
config = {
|
||||||
|
programs.niri = {
|
||||||
|
package = pkgs.niri-stable; # which package to use for niri validation
|
||||||
|
settings = {
|
||||||
|
gestures.hot-corners.enable = false;
|
||||||
|
hotkey-overlay.skip-at-startup = true;
|
||||||
|
debug = {
|
||||||
|
honor-xdg-activation-with-invalid-serial = [ ];
|
||||||
|
};
|
||||||
|
xwayland-satellite = {
|
||||||
|
enable = true;
|
||||||
|
path = "${lib.getExe pkgs.xwayland-satellite-unstable}";
|
||||||
|
};
|
||||||
|
prefer-no-csd = true;
|
||||||
|
layer-rules = [
|
||||||
|
{ matches = [{ namespace = "^notificatioans$"; }]; block-out-from = "screen-capture"; }
|
||||||
|
{ matches = [{ namespace = "^wallpaper$"; }]; place-within-backdrop = true; }
|
||||||
|
{ matches = [{ namespace = "^noctalia-overview*"; }]; place-within-backdrop = true; }
|
||||||
|
];
|
||||||
|
window-rules = [
|
||||||
|
{
|
||||||
|
matches = [{ app-id = ".*"; }];
|
||||||
|
opacity = 0.95;
|
||||||
|
default-column-width = { proportion = 0.5; };
|
||||||
|
shadow = {
|
||||||
|
enable = true;
|
||||||
|
draw-behind-window = true;
|
||||||
|
};
|
||||||
|
clip-to-geometry = true;
|
||||||
|
geometry-corner-radius = { top-left = 5.0; top-right = 5.0; bottom-left = 5.0; bottom-right = 5.0; };
|
||||||
|
}
|
||||||
|
{ matches = [{ app-id = "at.yrlf.wl_mirror"; }]; opacity = 1.0; }
|
||||||
|
{ matches = [{ app-id = "Gimp"; }]; opacity = 1.0; }
|
||||||
|
{ matches = [{ app-id = "^firefox$"; }]; opacity = 0.95; }
|
||||||
|
{ matches = [{ app-id = "^special.*"; }]; default-column-width = { proportion = 0.9; }; open-on-workspace = "Scratchpad"; }
|
||||||
|
{ matches = [{ app-id = "chromium-browser"; }]; opacity = 0.99; }
|
||||||
|
{ matches = [{ app-id = "^qalculate-gtk$"; }]; open-floating = true; }
|
||||||
|
{ matches = [{ app-id = "^blueman$"; }]; open-floating = true; }
|
||||||
|
{ matches = [{ app-id = "^pavucontrol$"; }]; open-floating = true; }
|
||||||
|
{ matches = [{ app-id = "^syncthingtray$"; }]; open-floating = true; }
|
||||||
|
{ matches = [{ app-id = "^Element$"; }]; open-floating = true; default-column-width = { proportion = 0.5; }; block-out-from = "screen-capture"; }
|
||||||
|
# { matches = [{ app-id = "^Element$"; }]; default-column-width = { proportion = 0.9; }; open-on-workspace = "Scratchpad"; block-out-from = "screencast"; }
|
||||||
|
{ matches = [{ app-id = "^vesktop$"; }]; open-floating = true; default-column-width = { proportion = 0.5; }; block-out-from = "screen-capture"; }
|
||||||
|
# { matches = [{ app-id = "^vesktop$"; }]; default-column-width = { proportion = 0.9; }; open-on-workspace = "Scratchpad"; block-out-from = "screencast"; }
|
||||||
|
{ matches = [{ app-id = "^com.nextcloud.desktopclient.nextcloud$"; }]; open-floating = true; }
|
||||||
|
{ matches = [{ title = ".*1Password.*"; }]; excludes = [{ app-id = "^firefox$"; } { app-id = "^emacs$"; } { app-id = "^kitty$"; }]; open-floating = true; block-out-from = "screen-capture"; }
|
||||||
|
{ matches = [{ title = "(?:Open|Save) (?:File|Folder|As)"; }]; open-floating = true; }
|
||||||
|
{ matches = [{ title = "^Add$"; }]; open-floating = true; }
|
||||||
|
{ matches = [{ title = "^Picture-in-Picture$"; }]; open-floating = true; }
|
||||||
|
{ matches = [{ title = "Syncthing Tray"; }]; open-floating = true; }
|
||||||
|
{ matches = [{ title = "^Emacs Popup Frame$"; }]; open-floating = true; }
|
||||||
|
{ matches = [{ title = "^Emacs Popup Anchor$"; }]; open-floating = true; }
|
||||||
|
{ matches = [{ app-id = "^spotifytui$"; }]; open-floating = true; default-column-width = { proportion = 0.5; }; }
|
||||||
|
{ matches = [{ app-id = "^kittyterm$"; }]; open-floating = true; default-column-width = { proportion = 0.5; }; }
|
||||||
|
];
|
||||||
|
environment = vars.waylandSessionVariables // {
|
||||||
|
DISPLAY = ":0";
|
||||||
|
QT_QPA_PLATFORM = lib.mkForce "wayland";
|
||||||
|
EDITOR = "emacsclient -c";
|
||||||
|
};
|
||||||
|
screenshot-path = "~/Pictures/Screenshots/screenshot_%Y-%m-%d-%H%M%S.png";
|
||||||
|
input = {
|
||||||
|
mod-key = "Super";
|
||||||
|
keyboard = {
|
||||||
|
xkb = {
|
||||||
|
layout = "us";
|
||||||
|
variant = "altgr-intl";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
mouse = {
|
||||||
|
natural-scroll = false;
|
||||||
|
};
|
||||||
|
touchpad = {
|
||||||
|
enable = true;
|
||||||
|
tap = true;
|
||||||
|
tap-button-map = "left-right-middle";
|
||||||
|
natural-scroll = true;
|
||||||
|
scroll-method = "two-finger";
|
||||||
|
click-method = "clickfinger";
|
||||||
|
disabled-on-external-mouse = true;
|
||||||
|
drag = true;
|
||||||
|
drag-lock = false;
|
||||||
|
dwt = true;
|
||||||
|
dwtp = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
cursor = {
|
||||||
|
hide-after-inactive-ms = 2000;
|
||||||
|
hide-when-typing = true;
|
||||||
|
};
|
||||||
|
layout = {
|
||||||
|
background-color = "transparent";
|
||||||
|
border = {
|
||||||
|
enable = true;
|
||||||
|
width = 1;
|
||||||
|
};
|
||||||
|
focus-ring = {
|
||||||
|
enable = false;
|
||||||
|
};
|
||||||
|
gaps = 5;
|
||||||
|
};
|
||||||
|
binds = with config.lib.niri.actions; let
|
||||||
|
sh = spawn "sh" "-c";
|
||||||
|
in
|
||||||
|
{
|
||||||
|
"Mod+Shift+t".action = toggle-window-rule-opacity;
|
||||||
|
"Mod+m".action = focus-workspace-previous;
|
||||||
|
"Mod+Shift+Space".action = toggle-window-floating;
|
||||||
|
"Mod+Shift+f".action = fullscreen-window;
|
||||||
|
# "Mod+q".action = sh "${resizer} && niri msg action close-window";
|
||||||
|
"Mod+q".action = sh "niri msg action close-window";
|
||||||
|
# "Mod+f".action = sh "${resizer} && exec firefox";
|
||||||
|
"Mod+f".action = sh "exec firefox";
|
||||||
|
# "Mod+Space".action = spawn "noctalia-shell" "ipc" "call" "launcher" "toggle";
|
||||||
|
# "Mod+Space".action = sh "${resizer} && exec noctalia-shell ipc call launcher toggle";
|
||||||
|
"Mod+Space".action = sh "exec noctalia-shell ipc call launcher toggle";
|
||||||
|
# "Mod+Space".action = sh "${resizer} & exec fuzzel";
|
||||||
|
"Mod+z".action = spawn "noctalia-shell" "ipc" "call" "bar" "toggle";
|
||||||
|
"Mod+Shift+c".action = spawn "qalculate-gtk";
|
||||||
|
"Mod+Ctrl+p".action = spawn "1password" "--quick-acces";
|
||||||
|
"Mod+Shift+Escape".action = spawn "kitty" "-o" "confirm_os_window_close=0" "btm";
|
||||||
|
"Mod+h".action = sh ''hyprpicker | wl-copy'';
|
||||||
|
# "Mod+s".action = spawn "grim" "-g" "\"$(slurp)\"" "-t" "png" "-" "|" "wl-copy" "-t" "image/png";
|
||||||
|
# "Mod+s".action = screenshot { show-pointer = false; };
|
||||||
|
"Mod+s".action.screenshot = { show-pointer = false; };
|
||||||
|
# "Mod+Shift+s".action = spawn "slurp" "|" "grim" "-g" "-" "Pictures/Screenshots/$(date +'screenshot_%Y-%m-%d-%H%M%S.png')";
|
||||||
|
# "Mod+Shift+s".action = screenshot-window { write-to-disk = true; };
|
||||||
|
"Mod+Shift+s".action.screenshot-window = { write-to-disk = true; };
|
||||||
|
# "Mod+Shift+v".action = spawn "wf-recorder" "-g" "'$(slurp -f %o -or)'" "-f" "~/Videos/screenrecord_$(date +%Y-%m-%d-%H%M%S).mkv";
|
||||||
|
|
||||||
|
# "Mod+e".action = sh "${resizer} && exec emacsclient -nquc -a emacs -e '(dashboard-open)'";
|
||||||
|
"Mod+e".action = sh "exec emacsclient -nquc -a emacs -e '(dashboard-open)'";
|
||||||
|
# "Mod+c".action = sh "${resizer} && exec emacsclient -ce '(org-capture)'";
|
||||||
|
"Mod+c".action = sh "exec emacsclient -ce '(org-capture)'";
|
||||||
|
# "Mod+t".action = sh "${resizer} && exec emacsclient -ce '(org-agenda)'";
|
||||||
|
"Mod+t".action = sh "exec emacsclient -ce '(org-agenda)'";
|
||||||
|
# "Mod+Shift+m".action = sh "${resizer} && exec emacsclient -ce '(mu4e)'";
|
||||||
|
"Mod+Shift+m".action = sh "exec emacsclient -ce '(mu4e)'";
|
||||||
|
# "Mod+Shift+a".action = sh "${resizer} && exec emacsclient -ce '(swarsel/open-calendar)'";
|
||||||
|
"Mod+Shift+a".action = sh "exec emacsclient -ce '(swarsel/open-calendar)'";
|
||||||
|
|
||||||
|
"Mod+a".action = spawn "swarselcheck-niri" "-s";
|
||||||
|
"Mod+x".action = spawn "swarselcheck-niri" "-k";
|
||||||
|
"Mod+d".action = spawn "swarselcheck-niri" "-d";
|
||||||
|
"Mod+w".action = spawn "swarselcheck-niri" "-e";
|
||||||
|
|
||||||
|
"Mod+p".action = spawn "pass-fuzzel";
|
||||||
|
"Mod+o".action = spawn "pass-fuzzel" "--otp";
|
||||||
|
"Mod+Shift+p".action = spawn "pass-fuzzel" "--type";
|
||||||
|
"Mod+Shift+o".action = spawn "pass-fuzzel" "--otp" "--type";
|
||||||
|
|
||||||
|
"Mod+Left".action = focus-column-or-monitor-left;
|
||||||
|
"Mod+Right".action = focus-column-or-monitor-right;
|
||||||
|
"Mod+Down".action = focus-window-or-workspace-down;
|
||||||
|
"Mod+Up".action = focus-window-or-workspace-up;
|
||||||
|
"Mod+Shift+Left".action = move-column-left-or-to-monitor-left;
|
||||||
|
"Mod+Shift+Right".action = move-column-right-or-to-monitor-right;
|
||||||
|
"Mod+Shift+Down".action = move-window-down-or-to-workspace-down;
|
||||||
|
"Mod+Shift+Up".action = move-window-up-or-to-workspace-up;
|
||||||
|
# "Mod+Ctrl+Shift+c".action = "reload";
|
||||||
|
# "Mod+Ctrl+Shift+r".action = "exec swarsel-displaypower";
|
||||||
|
# "Mod+Shift+e".action = "exec swaynag -t warning -m 'You pressed the exit shortcut. Do you really want to exit sway? This will end your Wayland session.' -b 'Yes, exit sway' 'swaymsg exit'";
|
||||||
|
# "Mod+r".action = "mode resize";
|
||||||
|
# "Mod+Return".action = "exec kitty";
|
||||||
|
# "Mod+Return".action = sh "${resizer} && exec kitty -o confirm_os_window_close=0";
|
||||||
|
"Mod+Return".action = sh "exec kitty -o confirm_os_window_close=0";
|
||||||
|
"XF86AudioRaiseVolume".action = spawn "noctalia-shell" "ipc" "call" "volume" "increase";
|
||||||
|
"XF86AudioLowerVolume".action = spawn "noctalia-shell" "ipc" "call" "volume" "decrease";
|
||||||
|
"XF86AudioMute".action = spawn "noctalia-shell" "ipc" "call" "volume" "muteOutput";
|
||||||
|
"XF86AudioPrev".action = spawn "noctalia-shell" "ipc" "call" "media" "previous";
|
||||||
|
"XF86AudioPlay".action = spawn "noctalia-shell" "ipc" "call" "media" "playPause";
|
||||||
|
"XF86AudioNext".action = spawn "noctalia-shell" "ipc" "call" "media" "next";
|
||||||
|
"XF86MonBrightnessUp".action = spawn "noctalia-shell" "ipc" "call" "brightness" "increase";
|
||||||
|
"XF86MonBrightnessDown".action = spawn "noctalia-shell" "ipc" "call" "brightness" "decrease";
|
||||||
|
"XF86Display".action = spawn "wl-mirror" "eDP-1";
|
||||||
|
"Mod+Escape".action = spawn "noctalia-shell" "ipc" "call" "sessionMenu" "toggle";
|
||||||
|
"Mod+i".action = spawn "noctalia-shell" "ipc" "call" "launcher" "emoji";
|
||||||
|
"Mod+Equal".action = set-column-width "+10%";
|
||||||
|
"Mod+Minus".action = set-column-width "-10%";
|
||||||
|
|
||||||
|
"Mod+1".action = focus-workspace 1;
|
||||||
|
"Mod+2".action = focus-workspace 2;
|
||||||
|
"Mod+3".action = focus-workspace 3;
|
||||||
|
"Mod+4".action = focus-workspace 4;
|
||||||
|
"Mod+5".action = focus-workspace 5;
|
||||||
|
"Mod+6".action = focus-workspace 6;
|
||||||
|
"Mod+7".action = focus-workspace 7;
|
||||||
|
"Mod+8".action = focus-workspace 8;
|
||||||
|
"Mod+9".action = focus-workspace 9;
|
||||||
|
"Mod+0".action = focus-workspace 0;
|
||||||
|
|
||||||
|
"Mod+Shift+1".action = move-column-to-index 1;
|
||||||
|
"Mod+Shift+2".action = move-column-to-index 2;
|
||||||
|
"Mod+Shift+3".action = move-column-to-index 3;
|
||||||
|
"Mod+Shift+4".action = move-column-to-index 4;
|
||||||
|
"Mod+Shift+5".action = move-column-to-index 5;
|
||||||
|
"Mod+Shift+6".action = move-column-to-index 6;
|
||||||
|
"Mod+Shift+7".action = move-column-to-index 7;
|
||||||
|
"Mod+Shift+8".action = move-column-to-index 8;
|
||||||
|
"Mod+Shift+9".action = move-column-to-index 9;
|
||||||
|
"Mod+Shift+0".action = move-column-to-index 0;
|
||||||
|
};
|
||||||
|
spawn-at-startup = [
|
||||||
|
# { command = [ "vesktop" "--start-minimized" "--enable-speech-dispatcher" "--ozone-platform-hint=auto" "--enable-features=WaylandWindowDecorations" "--enable-wayland-ime" ]; }
|
||||||
|
# { command = [ "element-desktop" "--hidden" "--enable-features=UseOzonePlatform" "--ozone-platform=wayland" "--disable-gpu-driver-bug-workarounds" ]; }
|
||||||
|
# { command = [ "anki" ]; }
|
||||||
|
# { command = [ "obsidian" ]; }
|
||||||
|
# { command = [ "nm-applet" ]; }
|
||||||
|
# { command = [ "niri" "msg" "action" "focus-workspace" "2" ]; }
|
||||||
|
# { command = [ "noctalia-shell" ]; }
|
||||||
|
# { argv = [ "pkill" "mako" ]; }
|
||||||
|
{ argv = [ "systemctl" "--user" "restart" "noctalia-shell.target" ]; }
|
||||||
|
];
|
||||||
|
# workspaces = {
|
||||||
|
# "01-Main" = {
|
||||||
|
# name = "Scratchpad";
|
||||||
|
# };
|
||||||
|
# "99-Scratchpad" = {
|
||||||
|
# name = "";
|
||||||
|
# };
|
||||||
|
# };
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
xdg.portal = {
|
||||||
|
enable = true;
|
||||||
|
xdgOpenUsePortal = true;
|
||||||
|
config.niri = {
|
||||||
|
default = [
|
||||||
|
"gtk"
|
||||||
|
"gnome"
|
||||||
|
];
|
||||||
|
"org.freedesktop.impl.portal.Access" = [ "gtk" ];
|
||||||
|
"org.freedesktop.impl.portal.Notification" = [ "gtk" ];
|
||||||
|
"org.freedesktop.impl.portal.Secret" = [ "gnome-keyring" ];
|
||||||
|
"org.freedesktop.impl.portal.FileChooser" = [ "gtk" ];
|
||||||
|
"org.freedesktop.impl.portal.ScreenCast" = [ "xdg-desktop-portal-gnome" ];
|
||||||
|
"org.freedesktop.impl.portal.Screenshot" = [ "xdg-desktop-portal-gnome" ];
|
||||||
|
};
|
||||||
|
extraPortals = [
|
||||||
|
pkgs.gnome-keyring
|
||||||
|
pkgs.xdg-desktop-portal-gtk
|
||||||
|
pkgs.xdg-desktop-portal-gnome
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
swarselmodules.gnome-keyring = lib.swarselsystems.mkStrong true;
|
||||||
|
|
||||||
|
home.packages = [
|
||||||
|
pkgs.nirius
|
||||||
|
];
|
||||||
|
|
||||||
|
};
|
||||||
|
}
|
||||||
677
modules-clone/home/optional/noctalia.nix
Normal file
677
modules-clone/home/optional/noctalia.nix
Normal file
|
|
@ -0,0 +1,677 @@
|
||||||
|
{ self, inputs, config, pkgs, lib, confLib, type, ... }:
|
||||||
|
let
|
||||||
|
inherit (confLib.getConfig.repo.secrets.common) caldavTasksEndpoint;
|
||||||
|
inherit (config.swarselsystems) xdgDir;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
inputs.noctalia.homeModules.default
|
||||||
|
];
|
||||||
|
options.swarselmodules.optional-noctalia = lib.swarselsystems.mkTrueOption;
|
||||||
|
config = {
|
||||||
|
systemd.user = {
|
||||||
|
targets = {
|
||||||
|
noctalia-shell.Unit = {
|
||||||
|
After = [ "graphical-session.target" ];
|
||||||
|
};
|
||||||
|
tray = {
|
||||||
|
Unit = {
|
||||||
|
Wants = [ "noctalia-init.service" ];
|
||||||
|
After = [
|
||||||
|
"noctalia-shell.service"
|
||||||
|
"noctalia-init.service"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
Install.WantedBy = [ "noctalia-shell.target" ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
services = {
|
||||||
|
noctalia-shell = {
|
||||||
|
Unit.PartOf = [ "noctalia-shell.target" ];
|
||||||
|
Install.WantedBy = [ "noctalia-shell.target" ];
|
||||||
|
};
|
||||||
|
noctalia-init = {
|
||||||
|
|
||||||
|
Unit = {
|
||||||
|
Requires = [ "noctalia-shell.service" ];
|
||||||
|
After = [ "noctalia-shell.service" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
Service = {
|
||||||
|
Type = "oneshot";
|
||||||
|
ExecStart = "${pkgs.coreutils}/bin/sleep 3";
|
||||||
|
RemainAfterExit = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
Install = {
|
||||||
|
WantedBy = [ "tray.target" ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
programs = {
|
||||||
|
fastfetch.enable = true;
|
||||||
|
noctalia-shell = {
|
||||||
|
enable = true;
|
||||||
|
package = pkgs.noctalia-shell;
|
||||||
|
systemd.enable = true;
|
||||||
|
settings = {
|
||||||
|
bar = {
|
||||||
|
barType = "simple";
|
||||||
|
position = "top";
|
||||||
|
monitors = [ ];
|
||||||
|
density = "default";
|
||||||
|
showCapsule = false;
|
||||||
|
showOutline = false;
|
||||||
|
capsuleOpacity = lib.mkForce 1;
|
||||||
|
backgroundOpacity = lib.mkForce 0.5;
|
||||||
|
useSeparateOpacity = true;
|
||||||
|
floating = false;
|
||||||
|
marginVertical = 4;
|
||||||
|
marginHorizontal = 0;
|
||||||
|
frameThickness = 8;
|
||||||
|
frameRadius = 12;
|
||||||
|
outerCorners = false;
|
||||||
|
hideOnOverview = false;
|
||||||
|
displayMode = "non_exclusive";
|
||||||
|
autoHideDelay = 100;
|
||||||
|
autoShowDelay = 300;
|
||||||
|
screenOverrides = [ ];
|
||||||
|
widgets = {
|
||||||
|
left = [
|
||||||
|
{
|
||||||
|
characterCount = 4;
|
||||||
|
colorizeIcons = false;
|
||||||
|
emptyColor = "primary";
|
||||||
|
enableScrollWheel = false;
|
||||||
|
focusedColor = "secondary";
|
||||||
|
followFocusedScreen = false;
|
||||||
|
groupedBorderOpacity = 1;
|
||||||
|
hideUnoccupied = false;
|
||||||
|
iconScale = 0.5;
|
||||||
|
id = "Workspace";
|
||||||
|
labelMode = "name";
|
||||||
|
occupiedColor = "primary";
|
||||||
|
pillSize = 0.4;
|
||||||
|
reverseScroll = false;
|
||||||
|
showApplications = true;
|
||||||
|
showBadge = true;
|
||||||
|
showLabelsOnlyWhenOccupied = false;
|
||||||
|
unfocusedIconsOpacity = 0.25;
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
defaultSettings = {
|
||||||
|
completedCount = 0;
|
||||||
|
count = 0;
|
||||||
|
current_page_id = 0;
|
||||||
|
isExpanded = false;
|
||||||
|
pages = [
|
||||||
|
{
|
||||||
|
id = 0;
|
||||||
|
name = "General";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
priorityColors = {
|
||||||
|
high = "#f44336";
|
||||||
|
low = "#9e9e9e";
|
||||||
|
medium = "#2196f3";
|
||||||
|
};
|
||||||
|
showBackground = true;
|
||||||
|
showCompleted = true;
|
||||||
|
todos = [ ];
|
||||||
|
useCustomColors = false;
|
||||||
|
};
|
||||||
|
id = "plugin:ba7043:todo";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
center = [
|
||||||
|
{
|
||||||
|
colorizeIcons = true;
|
||||||
|
hideMode = "hidden";
|
||||||
|
id = "ActiveWindow";
|
||||||
|
maxWidth = 145;
|
||||||
|
scrollingMode = "hover";
|
||||||
|
showIcon = true;
|
||||||
|
useFixedWidth = false;
|
||||||
|
}
|
||||||
|
{
|
||||||
|
id = "plugin:privacy-indicator";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
id = "plugin:screen-recorder";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
right = [
|
||||||
|
{
|
||||||
|
blacklist = [
|
||||||
|
"bluetooth*"
|
||||||
|
];
|
||||||
|
colorizeIcons = false;
|
||||||
|
drawerEnabled = true;
|
||||||
|
hidePassive = true;
|
||||||
|
id = "Tray";
|
||||||
|
pinned = [ ];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
displayMode = "alwaysShow";
|
||||||
|
id = "Volume";
|
||||||
|
middleClickCommand = "pavucontrol";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
id = "NotificationHistory";
|
||||||
|
hideWhenZero = false;
|
||||||
|
showUnreadBadge = true;
|
||||||
|
}
|
||||||
|
{
|
||||||
|
id = "plugin:github-feed";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
id = "plugin:clipper";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
displayMode = "onhover";
|
||||||
|
id = "Network";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
displayMode = "onhover";
|
||||||
|
id = "Bluetooth";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
displayMode = "onhover";
|
||||||
|
id = "VPN";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
deviceNativePath = "__default__";
|
||||||
|
hideIfIdle = true;
|
||||||
|
hideIfNotDetected = true;
|
||||||
|
id = "Battery";
|
||||||
|
showNoctaliaPerformance = false;
|
||||||
|
showPowerProfiles = true;
|
||||||
|
}
|
||||||
|
{
|
||||||
|
iconColor = "none";
|
||||||
|
id = "SessionMenu";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
customFont = "FiraCode Nerd Font Mono";
|
||||||
|
formatHorizontal = "ddd dd. MMM HH:mm:ss";
|
||||||
|
formatVertical = "";
|
||||||
|
id = "Clock";
|
||||||
|
tooltipFormat = "ddd dd. MMM HH:mm:ss";
|
||||||
|
useCustomFont = true;
|
||||||
|
usePrimaryColor = true;
|
||||||
|
}
|
||||||
|
{
|
||||||
|
colorizeDistroLogo = false;
|
||||||
|
colorizeSystemIcon = "none";
|
||||||
|
customIconPath = "${self}/files/icons/swarsel.png";
|
||||||
|
enableColorization = true;
|
||||||
|
icon = "noctalia";
|
||||||
|
id = "ControlCenter";
|
||||||
|
useDistroLogo = false;
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
general = {
|
||||||
|
avatarImage = "${self}/files/icons/swarsel.png";
|
||||||
|
dimmerOpacity = 0.2;
|
||||||
|
showScreenCorners = false;
|
||||||
|
forceBlackScreenCorners = false;
|
||||||
|
scaleRatio = 1;
|
||||||
|
radiusRatio = 0.2;
|
||||||
|
iRadiusRatio = 1;
|
||||||
|
boxRadiusRatio = 1;
|
||||||
|
screenRadiusRatio = 1;
|
||||||
|
animationSpeed = 1.5;
|
||||||
|
animationDisabled = false;
|
||||||
|
compactLockScreen = true;
|
||||||
|
lockOnSuspend = true;
|
||||||
|
showSessionButtonsOnLockScreen = true;
|
||||||
|
showHibernateOnLockScreen = false;
|
||||||
|
enableShadows = true;
|
||||||
|
shadowDirection = "center";
|
||||||
|
shadowOffsetX = 0;
|
||||||
|
shadowOffsetY = 0;
|
||||||
|
language = "";
|
||||||
|
allowPanelsOnScreenWithoutBar = true;
|
||||||
|
showChangelogOnStartup = true;
|
||||||
|
telemetryEnabled = false;
|
||||||
|
enableLockScreenCountdown = true;
|
||||||
|
lockScreenCountdownDuration = 10000;
|
||||||
|
autoStartAuth = true;
|
||||||
|
allowPasswordWithFprintd = true;
|
||||||
|
};
|
||||||
|
ui = {
|
||||||
|
fontDefaultScale = 1;
|
||||||
|
fontFixedScale = 1;
|
||||||
|
tooltipsEnabled = true;
|
||||||
|
panelBackgroundOpacity = lib.mkForce 1;
|
||||||
|
panelsAttachedToBar = true;
|
||||||
|
settingsPanelMode = "centered";
|
||||||
|
wifiDetailsViewMode = "grid";
|
||||||
|
bluetoothDetailsViewMode = "grid";
|
||||||
|
networkPanelView = "wifi";
|
||||||
|
bluetoothHideUnnamedDevices = false;
|
||||||
|
boxBorderEnabled = false;
|
||||||
|
};
|
||||||
|
location = {
|
||||||
|
name = confLib.getConfig.repo.secrets.common.location.timezoneSpecific;
|
||||||
|
weatherEnabled = true;
|
||||||
|
weatherShowEffects = false;
|
||||||
|
useFahrenheit = false;
|
||||||
|
use12hourFormat = false;
|
||||||
|
showWeekNumberInCalendar = true;
|
||||||
|
showCalendarEvents = true;
|
||||||
|
showCalendarWeather = true;
|
||||||
|
analogClockInCalendar = false;
|
||||||
|
firstDayOfWeek = 1;
|
||||||
|
hideWeatherTimezone = false;
|
||||||
|
hideWeatherCityName = false;
|
||||||
|
};
|
||||||
|
calendar = {
|
||||||
|
cards = [
|
||||||
|
{
|
||||||
|
enabled = true;
|
||||||
|
id = "calendar-header-card";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
enabled = true;
|
||||||
|
id = "calendar-month-card";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
enabled = true;
|
||||||
|
id = "weather-card";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
wallpaper = {
|
||||||
|
enabled = true;
|
||||||
|
overviewEnabled = true;
|
||||||
|
directory = "${self}/files/wallpaper/landscape";
|
||||||
|
monitorDirectories = [ ];
|
||||||
|
enableMultiMonitorDirectories = true;
|
||||||
|
showHiddenFiles = false;
|
||||||
|
viewMode = "single";
|
||||||
|
setWallpaperOnAllMonitors = false;
|
||||||
|
fillMode = "crop";
|
||||||
|
fillColor = "#000000";
|
||||||
|
useSolidColor = false;
|
||||||
|
solidColor = "#1a1a2e";
|
||||||
|
automationEnabled = true;
|
||||||
|
wallpaperChangeMode = "random";
|
||||||
|
randomIntervalSec = 300;
|
||||||
|
transitionDuration = 500;
|
||||||
|
transitionType = "random";
|
||||||
|
transitionEdgeSmoothness = 0.05;
|
||||||
|
panelPosition = "follow_bar";
|
||||||
|
hideWallpaperFilenames = false;
|
||||||
|
useWallhaven = false;
|
||||||
|
wallhavenQuery = "";
|
||||||
|
wallhavenSorting = "relevance";
|
||||||
|
wallhavenOrder = "desc";
|
||||||
|
wallhavenCategories = "111";
|
||||||
|
wallhavenPurity = "100";
|
||||||
|
wallhavenRatios = "";
|
||||||
|
wallhavenApiKey = "";
|
||||||
|
wallhavenResolutionMode = "atleast";
|
||||||
|
wallhavenResolutionWidth = "";
|
||||||
|
wallhavenResolutionHeight = "";
|
||||||
|
sortOrder = "name";
|
||||||
|
};
|
||||||
|
appLauncher = {
|
||||||
|
enableClipboardHistory = false;
|
||||||
|
autoPasteClipboard = false;
|
||||||
|
enableClipPreview = true;
|
||||||
|
clipboardWrapText = true;
|
||||||
|
clipboardWatchTextCommand = "wl-paste --type text --watch cliphist store";
|
||||||
|
clipboardWatchImageCommand = "wl-paste --type image --watch cliphist store";
|
||||||
|
position = "center";
|
||||||
|
pinnedApps = [ ];
|
||||||
|
useApp2Unit = false;
|
||||||
|
sortByMostUsed = true;
|
||||||
|
terminalCommand = "kitty -e";
|
||||||
|
customLaunchPrefixEnabled = false;
|
||||||
|
customLaunchPrefix = "";
|
||||||
|
viewMode = "list";
|
||||||
|
showCategories = false;
|
||||||
|
iconMode = "native";
|
||||||
|
density = "compact";
|
||||||
|
overviewLayer = false;
|
||||||
|
showIconBackground = false;
|
||||||
|
enableSettingsSearch = false;
|
||||||
|
enableWindowsSearch = false;
|
||||||
|
enableSessionSearch = false;
|
||||||
|
ignoreMouseInput = true;
|
||||||
|
screenshotAnnotationTool = "";
|
||||||
|
};
|
||||||
|
controlCenter = {
|
||||||
|
position = "close_to_bar_button";
|
||||||
|
diskPath = "/";
|
||||||
|
shortcuts = {
|
||||||
|
left = [
|
||||||
|
{
|
||||||
|
id = "Network";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
id = "Bluetooth";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
right = [
|
||||||
|
{
|
||||||
|
id = "Notifications";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
id = "PowerProfile";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
id = "KeepAwake";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
id = "plugin:screen-recorder";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
cards = [
|
||||||
|
{
|
||||||
|
enabled = true;
|
||||||
|
id = "profile-card";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
enabled = true;
|
||||||
|
id = "shortcuts-card";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
enabled = true;
|
||||||
|
id = "audio-card";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
enabled = true;
|
||||||
|
id = "brightness-card";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
enabled = true;
|
||||||
|
id = "weather-card";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
enabled = true;
|
||||||
|
id = "media-sysmon-card";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
systemMonitor = {
|
||||||
|
cpuWarningThreshold = 80;
|
||||||
|
cpuCriticalThreshold = 90;
|
||||||
|
tempWarningThreshold = 80;
|
||||||
|
tempCriticalThreshold = 90;
|
||||||
|
gpuWarningThreshold = 80;
|
||||||
|
gpuCriticalThreshold = 90;
|
||||||
|
memWarningThreshold = 80;
|
||||||
|
memCriticalThreshold = 90;
|
||||||
|
swapWarningThreshold = 80;
|
||||||
|
swapCriticalThreshold = 90;
|
||||||
|
diskWarningThreshold = 80;
|
||||||
|
diskCriticalThreshold = 90;
|
||||||
|
diskAvailWarningThreshold = 20;
|
||||||
|
diskAvailCriticalThreshold = 10;
|
||||||
|
cpuPollingInterval = 1000;
|
||||||
|
gpuPollingInterval = 3000;
|
||||||
|
enableDgpuMonitoring = false;
|
||||||
|
memPollingInterval = 1000;
|
||||||
|
diskPollingInterval = 30000;
|
||||||
|
networkPollingInterval = 1000;
|
||||||
|
loadAvgPollingInterval = 3000;
|
||||||
|
useCustomColors = true;
|
||||||
|
warningColor = "#5ec4ff";
|
||||||
|
criticalColor = "#d95468";
|
||||||
|
externalMonitor = "btm";
|
||||||
|
};
|
||||||
|
dock = {
|
||||||
|
enabled = false;
|
||||||
|
};
|
||||||
|
network = {
|
||||||
|
wifiEnabled = true;
|
||||||
|
bluetoothRssiPollingEnabled = false;
|
||||||
|
bluetoothRssiPollIntervalMs = 10000;
|
||||||
|
wifiDetailsViewMode = "grid";
|
||||||
|
bluetoothDetailsViewMode = "grid";
|
||||||
|
bluetoothHideUnnamedDevices = false;
|
||||||
|
};
|
||||||
|
sessionMenu = {
|
||||||
|
enableCountdown = true;
|
||||||
|
countdownDuration = 3000;
|
||||||
|
position = "center";
|
||||||
|
showHeader = true;
|
||||||
|
largeButtonsStyle = true;
|
||||||
|
largeButtonsLayout = "grid";
|
||||||
|
showNumberLabels = true;
|
||||||
|
powerOptions = [
|
||||||
|
{
|
||||||
|
action = "lock";
|
||||||
|
command = "";
|
||||||
|
countdownEnabled = true;
|
||||||
|
enabled = true;
|
||||||
|
keybind = "L";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
action = "suspend";
|
||||||
|
command = "";
|
||||||
|
countdownEnabled = true;
|
||||||
|
enabled = true;
|
||||||
|
keybind = "S";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
action = "hibernate";
|
||||||
|
command = "";
|
||||||
|
countdownEnabled = true;
|
||||||
|
enabled = true;
|
||||||
|
keybind = "H";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
action = "reboot";
|
||||||
|
command = "";
|
||||||
|
countdownEnabled = true;
|
||||||
|
enabled = true;
|
||||||
|
keybind = "R";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
action = "logout";
|
||||||
|
command = "";
|
||||||
|
countdownEnabled = true;
|
||||||
|
enabled = true;
|
||||||
|
keybind = "U";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
action = "shutdown";
|
||||||
|
command = "";
|
||||||
|
countdownEnabled = true;
|
||||||
|
enabled = true;
|
||||||
|
keybind = "P";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
action = "rebootToUefi";
|
||||||
|
command = "";
|
||||||
|
countdownEnabled = true;
|
||||||
|
enabled = true;
|
||||||
|
keybind = "B";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
notifications = {
|
||||||
|
enabled = true;
|
||||||
|
monitors = [ ];
|
||||||
|
location = "top_right";
|
||||||
|
overlayLayer = true;
|
||||||
|
backgroundOpacity = 0.5;
|
||||||
|
respectExpireTimeout = true;
|
||||||
|
lowUrgencyDuration = 3;
|
||||||
|
normalUrgencyDuration = 8;
|
||||||
|
criticalUrgencyDuration = 15;
|
||||||
|
enableMediaToast = false;
|
||||||
|
enableKeyboardLayoutToast = true;
|
||||||
|
batteryWarningThreshold = 20;
|
||||||
|
batteryCriticalThreshold = 5;
|
||||||
|
saveToHistory = {
|
||||||
|
low = true;
|
||||||
|
normal = true;
|
||||||
|
critical = true;
|
||||||
|
};
|
||||||
|
sounds.enabled = false;
|
||||||
|
};
|
||||||
|
osd = {
|
||||||
|
enabled = true;
|
||||||
|
location = "right";
|
||||||
|
autoHideMs = 2000;
|
||||||
|
overlayLayer = true;
|
||||||
|
backgroundOpacity = 0.5;
|
||||||
|
monitors = [ ];
|
||||||
|
enabledTypes = [ 0 1 2 3 ];
|
||||||
|
};
|
||||||
|
audio = {
|
||||||
|
volumeStep = 5;
|
||||||
|
volumeOverdrive = false;
|
||||||
|
cavaFrameRate = 30;
|
||||||
|
visualizerType = "linear";
|
||||||
|
mprisBlacklist = [ ];
|
||||||
|
preferredPlayer = "";
|
||||||
|
volumeFeedback = false;
|
||||||
|
};
|
||||||
|
brightness = {
|
||||||
|
brightnessStep = 5;
|
||||||
|
enforceMinimum = true;
|
||||||
|
enableDdcSupport = false;
|
||||||
|
};
|
||||||
|
nightLight = {
|
||||||
|
enabled = true;
|
||||||
|
autoSchedule = true;
|
||||||
|
nightTemp = "3700";
|
||||||
|
dayTemp = "5500";
|
||||||
|
manualSunrise = "06:30";
|
||||||
|
manualSunset = "18:30";
|
||||||
|
};
|
||||||
|
hooks.enabled = false;
|
||||||
|
desktopWidgets.enabled = false;
|
||||||
|
|
||||||
|
plugins = {
|
||||||
|
sources = [
|
||||||
|
{
|
||||||
|
enabled = true;
|
||||||
|
name = "Official Noctalia Plugins";
|
||||||
|
url = "https://github.com/noctalia-dev/noctalia-plugins";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
enabled = true;
|
||||||
|
name = "Dev";
|
||||||
|
url = "https://github.com/Swarsel/noctalia-plugins";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
states = lib.listToAttrs
|
||||||
|
(map
|
||||||
|
(plugin:
|
||||||
|
lib.nameValuePair plugin {
|
||||||
|
enabled = true;
|
||||||
|
sourceUrl = "https://github.com/noctalia-dev/noctalia-plugins";
|
||||||
|
})
|
||||||
|
[
|
||||||
|
"clipper"
|
||||||
|
"github-feed"
|
||||||
|
"privacy-indicator"
|
||||||
|
"kaomoji-provider"
|
||||||
|
"unicode-picker"
|
||||||
|
"screen-recorder"
|
||||||
|
]) // {
|
||||||
|
todo = {
|
||||||
|
enabled = true;
|
||||||
|
sourceUrl = "https://github.com/Swarsel/noctalia-plugins";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
pluginSettings = {
|
||||||
|
clipper = {
|
||||||
|
enableTodoIntegration = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
todo = {
|
||||||
|
|
||||||
|
caldavEnabled = true;
|
||||||
|
caldavUrl = caldavTasksEndpoint;
|
||||||
|
caldavUsername = config.swarselsystems.mainUser;
|
||||||
|
caldavPasswordType = "file";
|
||||||
|
caldavPasswordCmd = "";
|
||||||
|
caldavPasswordFile = confLib.getConfig.sops.secrets.radicale-token.path;
|
||||||
|
caldavSyncInterval = 300;
|
||||||
|
current_page_id = 1;
|
||||||
|
pages = [
|
||||||
|
{
|
||||||
|
id = 0;
|
||||||
|
name = "General";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
id = 1;
|
||||||
|
name = "Work";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
privacy-indicator = {
|
||||||
|
hideInactive = true;
|
||||||
|
iconSpacing = 4;
|
||||||
|
removeMargins = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
screen-recorder = {
|
||||||
|
hideInactive = true;
|
||||||
|
directory = "";
|
||||||
|
filenamePattern = "recording_yyyyMMdd_HHmmss";
|
||||||
|
frameRate = "60";
|
||||||
|
audioCodec = "opus";
|
||||||
|
videoCodec = "h264";
|
||||||
|
quality = "very_high";
|
||||||
|
colorRange = "limited";
|
||||||
|
showCursor = true;
|
||||||
|
copyToClipboard = true;
|
||||||
|
audioSource = "default_output";
|
||||||
|
videoSource = "portal";
|
||||||
|
resolution = "original";
|
||||||
|
};
|
||||||
|
|
||||||
|
github-feed = {
|
||||||
|
username = lib.toUpper config.swarselsystems.mainUser;
|
||||||
|
token = confLib.getConfig.repo.secrets.common.noctaliaGithubToken;
|
||||||
|
refreshInterval = 300;
|
||||||
|
maxEvents = 50;
|
||||||
|
showStars = false;
|
||||||
|
showForks = false;
|
||||||
|
showPRs = false;
|
||||||
|
showRepoCreations = false;
|
||||||
|
showMyRepoStars = true;
|
||||||
|
showMyRepoForks = true;
|
||||||
|
openInBrowser = true;
|
||||||
|
# my fork:
|
||||||
|
showNotificationBadge = true;
|
||||||
|
colorizationEnabled = true;
|
||||||
|
colorizationIcon = "None";
|
||||||
|
colorizationBadge = "Primary";
|
||||||
|
colorizationBadgeText = "None";
|
||||||
|
defaultTab = 1;
|
||||||
|
enableSystemNotifications = true;
|
||||||
|
notifyGitHubNotifications = true;
|
||||||
|
notifyStars = true;
|
||||||
|
notifyForks = true;
|
||||||
|
notifyPRs = true;
|
||||||
|
notifyRepoCreations = true;
|
||||||
|
notifyMyRepoStars = true;
|
||||||
|
notifyMyRepoForks = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
} // lib.optionalAttrs (type != "nixos") {
|
||||||
|
sops.secrets = lib.mkIf (!config.swarselsystems.isPublic && !config.swarselsystems.isNixos) {
|
||||||
|
radicale-token = { path = "${xdgDir}/secrets/radicaleToken"; };
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
22
modules-clone/home/optional/uni.nix
Normal file
22
modules-clone/home/optional/uni.nix
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
{ confLib, ... }:
|
||||||
|
{
|
||||||
|
config = {
|
||||||
|
services.pizauth = {
|
||||||
|
enable = true;
|
||||||
|
accounts = {
|
||||||
|
uni = {
|
||||||
|
authUri = "https://login.microsoftonline.com/common/oauth2/v2.0/authorize";
|
||||||
|
tokenUri = "https://login.microsoftonline.com/common/oauth2/v2.0/token";
|
||||||
|
clientId = "08162f7c-0fd2-4200-a84a-f25a4db0b584";
|
||||||
|
clientSecret = "TxRBilcHdC6WGBee]fs?QR:SJ8nI[g82";
|
||||||
|
scopes = [
|
||||||
|
"https://outlook.office365.com/IMAP.AccessAsUser.All"
|
||||||
|
"https://outlook.office365.com/SMTP.Send"
|
||||||
|
"offline_access"
|
||||||
|
];
|
||||||
|
loginHint = "${confLib.getConfig.repo.secrets.local.uni.mailAddress}";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
10
modules-clone/home/server/default.nix
Normal file
10
modules-clone/home/server/default.nix
Normal file
|
|
@ -0,0 +1,10 @@
|
||||||
|
{ self, lib, ... }:
|
||||||
|
let
|
||||||
|
importNames = lib.swarselsystems.readNix "modules-clone/home/server";
|
||||||
|
modulesPath = "${self}/modules-clone";
|
||||||
|
in
|
||||||
|
{
|
||||||
|
imports = lib.swarselsystems.mkImports importNames "modules-clone/home/server" ++ [
|
||||||
|
"${modulesPath}/home/common/settings.nix"
|
||||||
|
];
|
||||||
|
}
|
||||||
12
modules-clone/home/server/symlink.nix
Normal file
12
modules-clone/home/server/symlink.nix
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
{ self, lib, config, ... }:
|
||||||
|
{
|
||||||
|
options.swarselmodules.server.dotfiles = lib.mkEnableOption "server dotfiles settings";
|
||||||
|
config = lib.mkIf config.swarselmodules.server.dotfiles {
|
||||||
|
home.file = {
|
||||||
|
"init.el" = lib.mkForce {
|
||||||
|
source = self + /files/emacs/server.el;
|
||||||
|
target = ".emacs.d/init.el";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
11
modules-clone/nixos/client/appimage.nix
Normal file
11
modules-clone/nixos/client/appimage.nix
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
{ lib, config, ... }:
|
||||||
|
{
|
||||||
|
options.swarselmodules.appimage = lib.mkEnableOption "appimage config";
|
||||||
|
config = lib.mkIf config.swarselmodules.appimage {
|
||||||
|
programs.appimage = {
|
||||||
|
enable = true;
|
||||||
|
binfmt = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
13
modules-clone/nixos/client/autologin.nix
Normal file
13
modules-clone/nixos/client/autologin.nix
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
{ lib, config, ... }:
|
||||||
|
let
|
||||||
|
inherit (config.swarselsystems) mainUser;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.swarselmodules.autologin = lib.mkEnableOption "optional autologin settings";
|
||||||
|
config = lib.mkIf config.swarselmodules.autologin {
|
||||||
|
services = {
|
||||||
|
getty.autologinUser = mainUser;
|
||||||
|
greetd.settings.initial_session.user = mainUser;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
8
modules-clone/nixos/client/blueman.nix
Normal file
8
modules-clone/nixos/client/blueman.nix
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
{ lib, config, ... }:
|
||||||
|
{
|
||||||
|
options.swarselmodules.blueman = lib.mkEnableOption "blueman config";
|
||||||
|
config = lib.mkIf config.swarselmodules.blueman {
|
||||||
|
services.blueman.enable = true;
|
||||||
|
services.hardware.bolt.enable = true;
|
||||||
|
};
|
||||||
|
}
|
||||||
7
modules-clone/nixos/client/default.nix
Normal file
7
modules-clone/nixos/client/default.nix
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
{ lib, ... }:
|
||||||
|
let
|
||||||
|
importNames = lib.swarselsystems.readNix "modules-clone/nixos/client";
|
||||||
|
in
|
||||||
|
{
|
||||||
|
imports = lib.swarselsystems.mkImports importNames "modules-clone/nixos/client";
|
||||||
|
}
|
||||||
16
modules-clone/nixos/client/distrobox.nix
Normal file
16
modules-clone/nixos/client/distrobox.nix
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
{ lib, config, pkgs, ... }:
|
||||||
|
{
|
||||||
|
options.swarselmodules.distrobox = lib.mkEnableOption "distrobox config";
|
||||||
|
config = lib.mkIf config.swarselmodules.distrobox {
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
distrobox
|
||||||
|
boxbuddy
|
||||||
|
];
|
||||||
|
|
||||||
|
virtualisation.podman = {
|
||||||
|
enable = true;
|
||||||
|
dockerCompat = true;
|
||||||
|
package = pkgs.podman;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
21
modules-clone/nixos/client/env.nix
Normal file
21
modules-clone/nixos/client/env.nix
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
{ lib, config, pkgs, ... }:
|
||||||
|
{
|
||||||
|
options.swarselmodules.env = lib.mkEnableOption "environment config";
|
||||||
|
config = lib.mkIf config.swarselmodules.env {
|
||||||
|
|
||||||
|
environment = {
|
||||||
|
wordlist.enable = true;
|
||||||
|
sessionVariables = {
|
||||||
|
NIXOS_OZONE_WL = "1";
|
||||||
|
SWARSEL_LO_RES = config.swarselsystems.lowResolution;
|
||||||
|
SWARSEL_HI_RES = config.swarselsystems.highResolution;
|
||||||
|
GST_PLUGIN_SYSTEM_PATH_1_0 = lib.makeSearchPathOutput "lib" "lib/gstreamer-1.0" (with pkgs.gst_all_1; [
|
||||||
|
gst-plugins-good
|
||||||
|
gst-plugins-bad
|
||||||
|
gst-plugins-ugly
|
||||||
|
gst-libav
|
||||||
|
]);
|
||||||
|
} // (lib.optionalAttrs (!config.swarselsystems.isPublic) { });
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
15
modules-clone/nixos/client/firezone-client.nix
Normal file
15
modules-clone/nixos/client/firezone-client.nix
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
{ lib, config, ... }:
|
||||||
|
let
|
||||||
|
moduleName = "firezone-client";
|
||||||
|
inherit (config.swarselsystems) mainUser;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
options.swarselmodules.${moduleName} = lib.mkEnableOption "${moduleName} settings";
|
||||||
|
config = lib.mkIf config.swarselmodules.${moduleName} {
|
||||||
|
services.firezone.gui-client = {
|
||||||
|
enable = true;
|
||||||
|
inherit (config.node) name;
|
||||||
|
allowedUsers = [ mainUser ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
11
modules-clone/nixos/client/gnome-keyring.nix
Normal file
11
modules-clone/nixos/client/gnome-keyring.nix
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
{ lib, config, ... }:
|
||||||
|
{
|
||||||
|
options.swarselmodules.gnome-keyring = lib.mkEnableOption "gnome-keyring config";
|
||||||
|
config = lib.mkIf config.swarselmodules.gnome-keyring {
|
||||||
|
services.gnome.gnome-keyring = {
|
||||||
|
enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
programs.seahorse.enable = true;
|
||||||
|
};
|
||||||
|
}
|
||||||
7
modules-clone/nixos/client/gvfs.nix
Normal file
7
modules-clone/nixos/client/gvfs.nix
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
{ lib, config, ... }:
|
||||||
|
{
|
||||||
|
options.swarselmodules.gvfs = lib.mkEnableOption "gvfs config for nautilus";
|
||||||
|
config = lib.mkIf config.swarselmodules.gvfs {
|
||||||
|
services.gvfs.enable = true;
|
||||||
|
};
|
||||||
|
}
|
||||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue