feat: big refactor

This commit is contained in:
Jacob Bachmann 2024-09-07 15:10:22 +02:00
parent 2c09c21833
commit ebedec9768
No known key found for this signature in database
GPG key ID: 7753026D577922A6
159 changed files with 1927 additions and 2222 deletions

View file

@ -1,36 +0,0 @@
{
ls = "eza --group-directories-first --hyperlink --icons";
la = "eza --group-directories-first --hyperlink --icons -la";
lt = "eza --group-directories-first --hyperlink --icons -la --tree";
llt = "unbuffer eza --group-directories-first --hyperlink --icons -la --tree | less -r";
# ls = "lsd --color=auto --hyperlink=auto";
# la = "lsd -lAh --group-directories-first --hyperlink=auto";
# lt = "lsd -lAh --group-directories-first --tree --hyperlink=auto";
# llt = "unbuffer lsd -lAh --group-directories-first --tree --hyperlink=auto | less -r";
gg = "cd ~/code";
# gs = "git status";
gl = "git log --oneline";
glg = "git log --oneline --graph --decorate --all";
gaa = "git add --all";
gc = "git commit -m";
gp = "git push";
ta = "tmux attach";
nec = "nvim --cmd \"cd $(readlink -f /etc/nixos)\"";
ncc = "sudo nixos-rebuild switch --upgrade-all --flake \"$(readlink -f /etc/nixos)\"";
nup = "sudo nix-channel --update";
ngc = "sudo nix-collect-garbage -d";
dcup = "docker-compose up --detach --remove-orphans";
dka = "docker kill $(docker ps -q)";
drmc = "docker container rm $(docker container ls -aq)";
drmi = "docker image rm $(docker image ls -aq)";
drmv = "docker volume rm $(docker volume ls -q)";
lsip = "curl -s 'https://nordvpn.com/wp-admin/admin-ajax.php?action=get_user_info_data' | jq";
xo = "xdg-open";
y = "yazi";
}

View file

@ -1,24 +0,0 @@
{
services.jackett = {
enable = true;
};
virtualisation = {
oci-containers = {
containers = {
flare-solvarr = {
image = "ghcr.io/flaresolverr/flaresolverr:latest";
autoStart = true;
ports = [ "127.0.0.1:8191:8191" ];
environment = {
LOG_LEVEL = "info";
LOG_HTML = "false";
CAPTCHA_SOLVER = "hcaptcha-solver";
TZ = "Europe/Berlin";
};
};
};
};
};
}

View file

@ -1,35 +0,0 @@
{ pkgs, config, lib, ... }: lib.mkIf config.bchmnn.audio.enable {
services.pipewire = lib.mkIf (!builtins.elem "gnome" config.bchmnn.gui.flavour) {
enable = true;
audio.enable = true;
pulse.enable = true;
alsa.enable = true;
alsa.support32Bit = true;
jack.enable = true;
wireplumber.enable = true;
extraConfig.pipewire = lib.mkIf config.bchmnn.audio.pipewire-wine-fix.enable {
"90-wine-config" = {
"context.properties" = {
# "default.clock.rate" = 48000;
"default.clock.allowed-rates" = [ 44100 48000 ];
# "default.clock.quantum" = 2048;
# "default.clock.min-quantum" = 1024;
};
};
};
extraConfig.pipewire-pulse = lib.mkIf config.bchmnn.audio.pipewire-wine-fix.enable {
"90-wine-config" = {
"pulse.properties" = {
"pulse.min.req" = "1024/48000";
# "pulse.min.frag" = "1024/48000";
# "pulse.min.quantum" = "1024/48000";
};
};
};
};
environment.systemPackages = with pkgs; [
alsa-utils
pulseaudio
];
}

View file

@ -1,6 +0,0 @@
{ config, lib, ... }: lib.mkIf config.bchmnn.gui.enable {
programs.ausweisapp = {
enable = true;
openFirewall = true;
};
}

View file

@ -1,8 +0,0 @@
{ config, lib, ... }: lib.mkIf config.bchmnn.bluetooth.enable {
hardware.bluetooth = {
enable = true;
powerOnBoot = true;
};
services.blueman.enable = true;
}

View file

@ -1,5 +0,0 @@
{
programs.ccache = {
enable = true;
};
}

View file

@ -0,0 +1,65 @@
{
pkgs,
config,
lib,
...
}:
{
environment.systemPackages =
lib.optionals config.bchmnn.collections.cli-utils.enable [
pkgs.pciutils # a collection of programs for inspecting and manipulating configuration of pci devices
pkgs.usbutils # tools for working with usb devices, such as lsusb
pkgs.lshw # provide detailed information on the hardware configuration of the machine
pkgs.git # distributed version control system
pkgs.gnumake # a tool to control the generation of non-source files from sources
pkgs.parallel # shell tool for executing jobs in parallel
pkgs.mercurial # a fast, lightweight scm system for very large distributed projects
pkgs.wget # tool for retrieving files using http, https, and ftp
pkgs.unstable.neovim-unwrapped # vim text editor fork focused on extensibility and agility
pkgs.neofetch # a fast, highly customizable system info script
pkgs.eza # a modern, maintained replacement for ls
pkgs.ripgrep # a utility that combines the usability of the silver searcher with the raw speed of grep
pkgs.ripgrep-all # ripgrep, but also search in pdfs, e-books, office documents, zip, tar.gz, and more
pkgs.expect # a tool for automating interactive applications
pkgs.jq # a lightweight and flexible command-line json processor
pkgs.unzip # an extraction utility for archives compressed in .zip format
pkgs.unrar # utility for rar archives
pkgs.libsecret # a library for storing and retrieving passwords and other secrets
pkgs.xidel # command line tool to download and extract data from html/xml pages as well as json apis
pkgs.nvd # nix/nixos package version diff tool
pkgs.inotify-tools # a c library and a set of command-line programs providing a simple interface to inotify
pkgs.mkcert # a simple tool for making locally-trusted development certificates
pkgs.hexedit
]
++ lib.optionals (config.bchmnn.collections.cli-utils.enable && config.bchmnn.nvidia.enable) [
pkgs.nvtopPackages.full
]
++ lib.optionals config.bchmnn.collections.development.enable [
pkgs.gcc13
pkgs.clang
pkgs.universal-ctags # a maintained ctags implementation
pkgs.rustc
pkgs.cargo # downloads your rust project's dependencies and builds your project
pkgs.go # go programming language
(pkgs.python312.withPackages (
p: with p; [
ptpython # an advanced python repl
ipython # ipython: productive interactive computing
pycryptodome # self-contained cryptographic library
gmpy2 # interface to gmp, mpfr, and mpc for python 3.7+
]
))
pkgs.lua
pkgs.nixpkgs-fmt
pkgs.openjdk17
pkgs.javaPackages.openjfx17
pkgs.gradle_7
pkgs.maven
pkgs.ant
pkgs.nodejs_20
pkgs.nodenv
pkgs.nodePackages.yarn
pkgs.nodePackages.pnpm
];
}

57
modules/core/audio.nix Normal file
View file

@ -0,0 +1,57 @@
{
pkgs,
config,
lib,
...
}:
{
options.bchmnn = {
audio = {
enable = lib.mkEnableOption "audio";
pipewire-wine-fix = {
enable = lib.mkEnableOption "pipewire-wine-fix";
};
};
};
config = {
services.pipewire =
lib.mkIf (config.bchmnn.audio.enable && (!builtins.elem "gnome" config.bchmnn.gui.flavour))
{
enable = true;
audio.enable = true;
pulse.enable = true;
alsa.enable = true;
alsa.support32Bit = true;
jack.enable = true;
wireplumber.enable = true;
extraConfig.pipewire = lib.mkIf config.bchmnn.audio.pipewire-wine-fix.enable {
"90-wine-config" = {
"context.properties" = {
# "default.clock.rate" = 48000;
"default.clock.allowed-rates" = [
44100
48000
];
# "default.clock.quantum" = 2048;
# "default.clock.min-quantum" = 1024;
};
};
};
extraConfig.pipewire-pulse = lib.mkIf config.bchmnn.audio.pipewire-wine-fix.enable {
"90-wine-config" = {
"pulse.properties" = {
"pulse.min.req" = "1024/48000";
# "pulse.min.frag" = "1024/48000";
# "pulse.min.quantum" = "1024/48000";
};
};
};
};
environment.systemPackages = lib.optionals config.bchmnn.audio.enable [
pkgs.alsa-utils
pkgs.pulseaudio
];
};
}

View file

@ -0,0 +1,17 @@
{ config, lib, ... }:
{
options.bchmnn = {
bluetooth = {
enable = lib.mkEnableOption "bluetooth";
};
};
config = lib.mkIf config.bchmnn.bluetooth.enable {
hardware.bluetooth = {
enable = true;
powerOnBoot = true;
};
services.blueman.enable = true;
};
}

33
modules/core/common.nix Normal file
View file

@ -0,0 +1,33 @@
{
aliases = {
ls = "eza --group-directories-first --hyperlink --icons";
la = "eza --group-directories-first --hyperlink --icons -la";
lt = "eza --group-directories-first --hyperlink --icons -la --tree";
llt = "unbuffer eza --group-directories-first --hyperlink --icons -la --tree | less -r";
gg = "cd ~/code";
# gs = "git status";
gl = "git log --oneline";
glg = "git log --oneline --graph --decorate --all";
gaa = "git add --all";
gc = "git commit -m";
gp = "git push";
ta = "tmux attach";
nec = "nvim --cmd \"cd $(readlink -f /etc/nixos)\"";
ncc = "sudo nixos-rebuild switch --upgrade-all --flake \"$(readlink -f /etc/nixos)\"";
nup = "sudo nix-channel --update";
ngc = "sudo nix-collect-garbage -d";
dcup = "docker-compose up --detach --remove-orphans";
dka = "docker kill $(docker ps -q)";
drmc = "docker container rm $(docker container ls -aq)";
drmi = "docker image rm $(docker image ls -aq)";
drmv = "docker volume rm $(docker volume ls -q)";
lsip = "curl -s 'https://nordvpn.com/wp-admin/admin-ajax.php?action=get_user_info_data' | jq";
xo = "xdg-open";
y = "yazi";
};
}

89
modules/core/default.nix Normal file
View file

@ -0,0 +1,89 @@
{ pkgs, ... }@inputs:
{
imports = [
./applications.nix
./audio.nix
./bluetooth.nix
./keyd.nix
./network.nix
./nvidia.nix
./power.nix
./printing.nix
./profiling.nix
./security.nix
./shell.nix
./virtualisation.nix
];
nix = {
settings = {
experimental-features = [
"nix-command"
"flakes"
];
auto-optimise-store = true;
};
};
nixpkgs = {
overlays = [
(self: super: {
unstable = import inputs.nixpkgs-unstable { system = super.system; };
mfcl3750cdwlpr = (super.callPackage ../../overlays/mfcl3750cdw.nix { }).driver;
mfcl3750cdwcupswrapper = (super.callPackage ../../overlays/mfcl3750cdw.nix { }).cupswrapper;
pppdf = (super.python3Packages.callPackage ../../overlays/pppdf { });
iglesia-light = (super.callPackage ../../overlays/fonts/iglesia-light.nix { });
})
];
config = {
allowUnfree = true;
allowUnfreePredicate = (_: true);
};
};
# provide libraries for non-nix binaries
# programs.nix-ld = {
# enable = true;
# libraries = [
# # glibc
# # libcxx
# # libllvm
# # ncurses
# ];
# };
system.stateVersion = "23.05";
time.timeZone = "Europe/Berlin";
i18n = {
defaultLocale = "en_US.UTF-8";
supportedLocales = [
"en_US.UTF-8/UTF-8"
"de_DE.UTF-8/UTF-8"
];
};
console = {
font = "Lat2-Terminus16";
keyMap = "us";
};
programs.dconf.enable = true;
services.dbus = {
enable = true;
packages = with pkgs; [
gcr # gnome crypto services (daemon and tools)
dconf
];
};
programs.ccache = {
enable = true;
};
services.openssh = {
enable = true;
openFirewall = true;
};
}

View file

@ -27,9 +27,7 @@ let
};
in
{
environment.systemPackages = with pkgs; [
keyd
];
environment.systemPackages = with pkgs; [ keyd ];
# Enable keyd and remap keys
services.keyd = {
enable = true;

19
modules/core/network.nix Normal file
View file

@ -0,0 +1,19 @@
{
config,
lib,
pkgs,
...
}:
{
networking.networkmanager.enable = true;
systemd.services = {
NetworkManager-wait-online.enable = false;
};
environment.systemPackages = lib.optionals (config.bchmnn.collections.vpn.enable) [
pkgs.openvpn3
pkgs.mullvad-vpn
pkgs.wireguard-tools # tools for the wireguard secure network tunnel
];
services.mullvad-vpn.enable = config.bchmnn.collections.vpn.enable;
services.tailscale.enable = config.bchmnn.collections.vpn.enable;
}

17
modules/core/nvidia.nix Normal file
View file

@ -0,0 +1,17 @@
{ config, lib, ... }:
{
options.bchmnn = {
nvidia = {
enable = lib.mkEnableOption "nvidia";
};
};
config = lib.mkIf config.bchmnn.nvidia.enable {
services.xserver.videoDrivers = [ "nvidia" ];
hardware.nvidia = {
modesetting.enable = true;
powerManagement.enable = true;
nvidiaSettings = true;
};
};
}

55
modules/core/power.nix Normal file
View file

@ -0,0 +1,55 @@
{
pkgs,
lib,
config,
...
}:
{
options.bchmnn = {
power = {
tlp = {
settings = lib.mkOption {
type =
with lib.types;
attrsOf (oneOf [
bool
int
float
str
(listOf str)
]);
default = {
# performance | powersave
CPU_SCALING_GOVERNOR_ON_AC = "performance";
CPU_SCALING_GOVERNOR_ON_BAT = "powersave";
# performance | balance_performance | default | balance_power | power
CPU_ENERGY_PERF_POLICY_ON_AC = "performance";
CPU_ENERGY_PERF_POLICY_ON_BAT = "power";
# performance | balanced | low-power
PLATFORM_PROFILE_ON_AC = "performance";
PLATFORM_PROFILE_ON_BAT = "low-power";
CPU_MIN_PERF_ON_AC = 0;
CPU_MAX_PERF_ON_AC = 100;
CPU_MIN_PERF_ON_BAT = 0;
CPU_MAX_PERF_ON_BAT = 100;
};
};
};
};
};
config = {
powerManagement = {
enable = true;
};
services.tlp = {
enable = !builtins.elem "gnome" config.bchmnn.gui.flavour;
settings = config.bchmnn.power.tlp.settings;
};
environment.systemPackages = with pkgs; [ powertop ];
};
}

38
modules/core/printing.nix Normal file
View file

@ -0,0 +1,38 @@
{
pkgs,
lib,
config,
...
}:
{
options.bchmnn = {
printing = {
enable = lib.mkEnableOption "printing";
};
};
config = lib.mkIf config.bchmnn.printing.enable {
services.printing = {
enable = true;
drivers = [ pkgs.mfcl3750cdwcupswrapper ];
};
services.avahi = {
enable = true;
nssmdns4 = true;
openFirewall = true;
};
hardware.printers = {
ensurePrinters = [
{
name = "Brother-MFC-L3750CDW-series";
location = "Home";
deviceUri = "dnssd://Brother%20MFC-L3750CDW%20series._ipp._tcp.local/?uuid=e3248000-80ce-11db-8000-b4220094c09b";
model = "brother_mfcl3750cdw_printer_en.ppd";
}
];
ensureDefaultPrinter = "Brother-MFC-L3750CDW-series";
};
};
}

View file

@ -1,4 +1,5 @@
{ config, ... }: {
{ config, lib, ... }:
lib.mkIf config.bchmnn.collections.profiling.enable {
boot.loader.systemd-boot.memtest86.enable = config.boot.loader.systemd-boot.enable;
boot.loader.grub.memtest86.enable = config.boot.loader.grub.enable;
}

13
modules/core/security.nix Normal file
View file

@ -0,0 +1,13 @@
{ config, lib, ... }:
{
security.polkit.enable = true;
security.rtkit.enable = true;
networking.firewall = {
enable = true;
allowedTCPPorts = lib.optionals (config.bchmnn.collections.development.enable) [
3000
6969
8080
];
};
}

44
modules/core/shell.nix Normal file
View file

@ -0,0 +1,44 @@
{ pkgs, ... }:
let
common = import ./common.nix;
in
{
programs.zsh = {
enable = true;
};
users.users.gandalf = {
shell = pkgs.zsh;
};
environment = {
shellAliases = common.aliases;
};
programs = {
htop.enable = true;
iftop.enable = true;
};
documentation = {
enable = true;
doc.enable = true;
dev.enable = true;
man = {
enable = true;
generateCaches = true;
man-db.enable = true;
};
};
environment.systemPackages = with pkgs; [
man-pages
man-pages-posix
ncurses
];
programs.nh = {
enable = true;
};
}

View file

@ -0,0 +1,32 @@
{
config,
lib,
pkgs,
...
}:
lib.mkIf config.bchmnn.collections.virtualisation.enable {
virtualisation = {
libvirtd.enable = true;
/*
podman = {
enable = true;
# create a `docker` alias for podman, to use it as a drop-in replacement
dockerCompat = true;
# required for containers under podman-compose to be able to talk to each other.
defaultNetwork.settings.dns_enabled = true;
};
*/
docker = {
enable = true;
};
oci-containers = {
backend = "docker";
# backend = "podman";
};
containers = {
enable = true;
};
};
hardware.nvidia-container-toolkit.enable = config.bchmnn.nvidia.enable;
environment.systemPackages = with pkgs; [ virtiofsd ];
}

View file

@ -1,6 +0,0 @@
{ pkgs, ... }: {
services.dbus = {
enable = true;
packages = with pkgs; [ gcr dconf ];
};
}

View file

@ -1,133 +1,54 @@
{ lib, ... }: {
# options affecting multiple modules
{ lib, ... }:
{
options.bchmnn = with lib; {
user = {
extraGroups = mkOption {
type = types.listOf types.str;
default = [
"wheel"
"networkmanager"
"libvirtd"
"docker"
"wireshark"
];
};
};
power = {
tlp = {
settings = mkOption {
type = with types; attrsOf (oneOf [ bool int float str (listOf str) ]);
default = {
# performance | powersave
CPU_SCALING_GOVERNOR_ON_AC = "performance";
CPU_SCALING_GOVERNOR_ON_BAT = "powersave";
# performance | balance_performance | default | balance_power | power
CPU_ENERGY_PERF_POLICY_ON_AC = "performance";
CPU_ENERGY_PERF_POLICY_ON_BAT = "power";
# performance | balanced | low-power
PLATFORM_PROFILE_ON_AC = "performance";
PLATFORM_PROFILE_ON_BAT = "low-power";
CPU_MIN_PERF_ON_AC = 0;
CPU_MAX_PERF_ON_AC = 100;
CPU_MIN_PERF_ON_BAT = 0;
CPU_MAX_PERF_ON_BAT = 100;
};
git = {
signing = {
key = mkOption {
type = types.str;
default = "732A612DAD28067D";
};
};
};
gui = {
enable = mkEnableOption "gui";
greeter = {
enable = mkEnableOption "greeter";
collections = {
cli-utils = {
enable = mkEnableOption "cli-utils";
};
flavour = mkOption {
type = types.listOf types.str;
default = [ "sway" ];
example = [ "sway" "i3" ];
description = ''
The flavour (WM) for your system to use
'';
profiling = {
enable = mkEnableOption "profiling";
};
development = {
enable = mkEnableOption "development";
};
vpn = {
enable = mkEnableOption "vpn";
};
virtualisation = {
enable = mkEnableOption "virtualisation";
};
games = {
enable = mkEnableOption "games";
};
};
nvidia = {
enable = mkEnableOption "nvidia";
};
audio = {
enable = mkEnableOption "audio";
pipewire-wine-fix = {
enable = mkEnableOption "pipewire-wine-fix";
};
};
bluetooth = {
enable = mkEnableOption "bluetooth";
};
printing = {
enable = mkEnableOption "printing";
};
vpn = {
enable = mkEnableOption "vpn";
};
sync = {
enable = mkEnableOption "sync";
};
devenv = {
enable = mkEnableOption "devenv";
};
virtualisation = {
enable = mkEnableOption "virtualisation";
};
games = {
enable = mkEnableOption "games";
};
ai = {
enable = mkEnableOption "ai";
};
ratbag = {
enable = mkEnableOption "ratbag";
};
};
imports = [
./arr.nix
./audio.nix
./ausweisapp.nix
./bluetooth.nix
./ccache.nix
./desktop.nix
./dbus.nix
./fonts.nix
./gstreamer.nix
./i18n.nix
./kdeconnect.nix
./keyd.nix
./man.nix
./memtest86.nix
./nautilus.nix
./network.nix
./nh.nix
./nix-ld.nix
./nix.nix
./nvidia.nix
./ollama.nix
./opengl.nix
./openssh.nix
./power.nix
./packages.nix
./printing.nix
./ratbag.nix
./security.nix
./shell.nix
./steam.nix
./syncthing.nix
./tts.nix
./udisks2.nix
./virtualisation.nix
./vpn.nix
./wine.nix
./xdg-portal.nix
./core
./desktop
./home-manager
./services
];
}

View file

@ -1,69 +0,0 @@
{ lib, pkgs, config, ... }: with config.bchmnn; lib.mkIf (gui.enable && gui.flavour != [ ]) {
environment.pathsToLink = [ "/libexec" ]; # links /libexec from derivations to /run/current-system/sw
programs.sway.enable = builtins.elem "sway" gui.flavour;
services.xserver.windowManager.i3.enable = builtins.elem "i3" gui.flavour;
services.libinput.enable = true;
services.xserver = {
enable = (builtins.elem "i3" gui.flavour || builtins.elem "gnome" gui.flavour);
desktopManager.gnome.enable = builtins.elem "gnome" gui.flavour;
displayManager = {
gdm.enable = builtins.elem "gnome" gui.flavour;
startx.enable = builtins.elem "i3" gui.flavour;
};
};
environment.systemPackages = with pkgs; [
(writeShellScriptBin "sway-run" ''
export WLR_NO_HARDWARE_CURSORS=1
exec ${sway}/bin/sway "$@"
'')
];
environment = {
etc = {
"greetd/environments".text = (lib.strings.concatLines gui.flavour);
"greetd/kanshi-config".text = ''
profile nomad {
output "LVDS-1" enable
}
profile iroh {
output "DP-3" enable mode 2560x1440 position 0,0
output "DP-2" enable mode 2560x1440 position 2560,0
output "DP-1" enable mode 2560x1440 position 5120,0
}
profile station {
output "LVDS-1" disable
output "Dell Inc. DELL U2515H 9X2VY5490XUL" enable mode 1920x1080 position 0,0
output "Dell Inc. DELL U2515H 9X2VY5C7138L" enable mode 1920x1080 position 1920,0
output "HJW VGA TO HDMI 0x00000100" enable mode 1920x1080 position 3840,0
}
'';
"greetd/sway-config".text = ''
exec "${pkgs.kanshi}/bin/kanshi --config /etc/greetd/kanshi-config"
exec "${pkgs.greetd.gtkgreet}/bin/gtkgreet -l; swaymsg exit"
bindsym Mod4+shift+e exec swaynag \
-t warning \
-m 'What do you want to do?' \
-b 'Poweroff' 'systemctl poweroff' \
-b 'Reboot' 'systemctl reboot'
include /etc/sway/config.d/*
'';
};
};
services.greetd = {
enable = gui.greeter.enable;
settings = {
default_session = {
command = "sway-run --config /etc/greetd/sway-config" + lib.optionalString nvidia.enable " --unsupported-gpu";
};
};
};
}

View file

@ -0,0 +1,39 @@
{
config,
lib,
pkgs,
...
}:
lib.mkIf config.bchmnn.gui.enable {
environment.systemPackages =
lib.optionals (config.bchmnn.collections.cli-utils.enable) [
pkgs.libnotify # a library that sends desktop notifications to a notification daemon
pkgs.xdg-utils # a set of command line tools that assist applications with a variety of desktop integration tasks
]
++ lib.optionals (config.bchmnn.collections.development.enable) [
pkgs.ghidra-bin
pkgs.mongodb-compass
]
++ lib.optionals (lib.elem "sway" config.bchmnn.gui.flavour) [
pkgs.qt5.qtwayland
pkgs.qt6.qtwayland
pkgs.wineWowPackages.waylandFull
];
programs = {
kdeconnect.enable = true;
ausweisapp = {
enable = true;
openFirewall = true;
};
wireshark.enable = config.bchmnn.collections.development.enable;
virt-manager.enable = config.bchmnn.collections.virtualisation.enable;
};
services.ratbagd.enable = true;
# needed for udiskie
services.udisks2.enable = true;
# enable gvfs to mount android devices
services.gvfs.enable = true;
}

132
modules/desktop/default.nix Normal file
View file

@ -0,0 +1,132 @@
{
config,
lib,
pkgs,
...
}:
{
imports = [
./applications.nix
./fonts.nix
./games.nix
./nautilus.nix
];
options.bchmnn = {
gui = {
enable = lib.mkEnableOption "gui";
greeter = {
enable = lib.mkEnableOption "greeter";
};
flavour = lib.mkOption {
type = lib.types.listOf lib.types.str;
default = [ "sway" ];
example = [
"sway"
"i3"
];
description = ''
The flavour (WM) for your system to use
'';
};
};
};
config = lib.mkIf (config.bchmnn.gui.enable && config.bchmnn.gui.flavour != [ ]) {
environment.pathsToLink = [ "/libexec" ]; # links /libexec from derivations to /run/current-system/sw
programs.sway.enable = builtins.elem "sway" config.bchmnn.gui.flavour;
services.xserver.windowManager.i3.enable = builtins.elem "i3" config.bchmnn.gui.flavour;
services.libinput.enable = true;
services.xserver = {
enable = (
builtins.elem "i3" config.bchmnn.gui.flavour || builtins.elem "gnome" config.bchmnn.gui.flavour
);
desktopManager.gnome.enable = builtins.elem "gnome" config.bchmnn.gui.flavour;
displayManager = {
gdm.enable = builtins.elem "gnome" config.bchmnn.gui.flavour;
startx.enable = builtins.elem "i3" config.bchmnn.gui.flavour;
};
};
environment.systemPackages = [
(pkgs.writeShellScriptBin "sway-run" ''
export WLR_NO_HARDWARE_CURSORS=1
exec ${pkgs.sway}/bin/sway "$@"
'')
];
environment = {
etc = {
"greetd/environments".text = (lib.strings.concatLines config.bchmnn.gui.flavour);
"greetd/kanshi-config".text = ''
profile nomad {
output "LVDS-1" enable
}
profile iroh {
output "DP-3" enable mode 2560x1440 position 0,0
output "DP-2" enable mode 2560x1440 position 2560,0
output "DP-1" enable mode 2560x1440 position 5120,0
}
profile station {
output "LVDS-1" disable
output "Dell Inc. DELL U2515H 9X2VY5490XUL" enable mode 1920x1080 position 0,0
output "Dell Inc. DELL U2515H 9X2VY5C7138L" enable mode 1920x1080 position 1920,0
output "HJW VGA TO HDMI 0x00000100" enable mode 1920x1080 position 3840,0
}
'';
"greetd/sway-config".text = ''
exec "${pkgs.kanshi}/bin/kanshi --config /etc/greetd/kanshi-config"
exec "${pkgs.greetd.gtkgreet}/bin/gtkgreet -l; swaymsg exit"
bindsym Mod4+shift+e exec swaynag \
-t warning \
-m 'What do you want to do?' \
-b 'Poweroff' 'systemctl poweroff' \
-b 'Reboot' 'systemctl reboot'
include /etc/sway/config.d/*
'';
};
};
services.greetd = {
enable = config.bchmnn.gui.greeter.enable;
settings = {
default_session = {
command =
"sway-run --config /etc/greetd/sway-config"
+ lib.optionalString config.bchmnn.nvidia.enable " --unsupported-gpu";
};
};
};
# TODO workaround to get swaylock accepting pw
# https://github.com/NixOS/nixpkgs/issues/158025
security.pam.services = lib.mkIf (lib.elem "sway" config.bchmnn.gui.flavour) { swaylock = { }; };
xdg.portal = {
enable = true;
wlr.enable = true;
config.common.default = "*";
extraPortals = lib.optionals (lib.elem "sway" config.bchmnn.gui.flavour) [
pkgs.xdg-desktop-portal-wlr
];
};
environment.sessionVariables.GST_PLUGIN_SYSTEM_PATH_1_0 =
lib.makeSearchPathOutput "lib" "lib/gstreamer-1.0"
(
with pkgs.gst_all_1;
[
gst-plugins-base
gst-plugins-good
gst-plugins-bad
gst-plugins-ugly
]
);
hardware.opengl = {
enable = true;
driSupport = true;
driSupport32Bit = true;
};
environment.variables =
lib.mkIf (builtins.elem pkgs.intel-media-driver config.hardware.opengl.extraPackages)
{ LIBVA_DRIVER_NAME = "iHD"; };
};
}

View file

@ -1,4 +1,10 @@
{ pkgs, ... }: {
{
pkgs,
lib,
config,
...
}:
lib.mkIf (config.bchmnn.gui.enable) {
# Add fonts
fonts = {
enableDefaultPackages = true;

16
modules/desktop/games.nix Normal file
View file

@ -0,0 +1,16 @@
{
pkgs,
config,
lib,
...
}:
lib.mkIf config.bchmnn.collections.games.enable {
programs.steam = {
enable = true;
};
environment.systemPackages = [
pkgs.mangohud
pkgs.gamemode
];
}

View file

@ -1,4 +1,10 @@
{ pkgs, lib, config, ... }: with config.bchmnn; lib.mkIf (gui.enable && gui.flavour != [ ]) {
{
pkgs,
lib,
config,
...
}:
lib.mkIf (config.bchmnn.gui.enable && config.bchmnn.gui.flavour != [ ]) {
programs.nautilus-open-any-terminal = {
enable = true;
terminal = "kitty";
@ -6,9 +12,7 @@
environment = {
sessionVariables.NAUTILUS_4_EXTENSION_DIR = "${pkgs.gnome.nautilus-python}/lib/nautilus/extensions-4";
pathsToLink = [
"/share/nautilus-python/extensions"
];
pathsToLink = [ "/share/nautilus-python/extensions" ];
systemPackages = with pkgs; [
gnome.nautilus

View file

@ -1,8 +0,0 @@
{ lib, pkgs, ... }: {
environment.sessionVariables.GST_PLUGIN_SYSTEM_PATH_1_0 = lib.makeSearchPathOutput "lib" "lib/gstreamer-1.0" (with pkgs.gst_all_1; [
gst-plugins-base
gst-plugins-good
gst-plugins-bad
gst-plugins-ugly
]);
}

View file

@ -0,0 +1,22 @@
{ pkgs, ... }:
{
home.packages = [
pkgs.gopass # slightly more awesome standard unix password manager for teams. written in go
pkgs.gopass-jsonapi # enables communication with gopass via json messages
pkgs.yt-dlp # command-line tool to download videos from youtube.com and other sites (youtube-dl fork)
pkgs.gdu # fast disk usage analyzer with console interface written in go
pkgs.duf # disk usage/free utility - a better 'df' alternative
pkgs.stress # simple workload generator for posix systems. it imposes a configurable amount of cpu, memory, i/o, and disk stress on the system
pkgs.s-tui # stress-terminal ui monitoring tool
pkgs.fio # flexible io tester - an io benchmark tool
pkgs.ffmpeg # complete, cross-platform solution to record, convert and stream audio and video
pkgs.texliveFull # tex live environment
pkgs.imagemagick # software suite to create, edit, compose, or convert bitmap images
pkgs.ghostscript # postscript interpreter (mainline version)
pkgs.pdftk # command-line tool for working with pdfs
pkgs.ventoy-full # bootable usb solution
pkgs.unstable.isisdl # downloader for isis of tu-berlin
pkgs.sage # open source mathematics software, free alternative to magma, maple, mathematica, and matlab
pkgs.filebrowser # filebrowser is a web application for managing files and directories
];
}

View file

@ -0,0 +1,28 @@
{ lib, nixosConfig, ... }:
lib.mkIf nixosConfig.bchmnn.audio.enable {
xdg.configFile."wireplumber/wireplumber.conf.d/51-scarlett-samplerate.conf" = {
text = ''
monitor.alsa.rules = [
{
matches = [
{
node.name = "~alsa_input.pci.*"
cpu.vm.name = "~.*"
}
{
node.name = "~alsa_output.pci.*"
cpu.vm.name = "~.*"
}
]
actions = {
update-props = {
api.alsa.period-size = 2048
api.alsa.headroom = 2048
session.suspend-timeout-seconds = 0
}
}
}
]
'';
};
}

View file

@ -0,0 +1,16 @@
{ lib, nixosConfig, ... }:
{
dconf.settings = {
"org/virt-manager/virt-manager/connections" =
lib.mkIf nixosConfig.bchmnn.collections.virtualisation.enable
{
autoconnect = [ "qemu:///system" ];
uris = [ "qemu:///system" ];
};
"org/gnome/desktop/interface" = {
"color-scheme" = "prefer-light";
};
};
}

View file

@ -0,0 +1,57 @@
{ config, ... }@inputs:
let
common = import ../core/common.nix;
in
{
imports = [ inputs.home-manager.nixosModules.home-manager ];
users.users.gandalf = {
isNormalUser = true;
extraGroups = config.bchmnn.user.extraGroups;
};
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.extraSpecialArgs = {
inherit inputs;
};
home-manager.users.gandalf = rec {
imports = [
./gui
./scripts
./applications.nix
./audio.nix
./dconf.nix
./git.nix
./gnupg.nix
./keyd.nix
./neovim.nix
./shell.nix
./zsh.nix
];
config = {
home = {
username = "gandalf";
homeDirectory = "/home/gandalf";
shellAliases = common.aliases;
stateVersion = "23.05";
};
xdg.userDirs = {
enable = true;
createDirectories = true;
desktop = "${config.home.homeDirectory}/tmp";
documents = "${config.home.homeDirectory}/docs";
download = "${config.home.homeDirectory}/dl";
music = "${config.home.homeDirectory}/music";
pictures = "${config.home.homeDirectory}/pics";
publicShare = "${config.home.homeDirectory}/public";
templates = "${config.home.homeDirectory}/templates";
videos = "${config.home.homeDirectory}/vids";
};
};
};
}

View file

@ -0,0 +1,21 @@
{ nixosConfig, ... }:
{
programs.git = {
enable = true;
lfs.enable = true;
signing = {
signByDefault = true;
key = nixosConfig.bchmnn.git.signing.key;
};
userEmail = "jacob.bachmann@posteo.de";
userName = "Jacob Bachmann";
extraConfig = {
init = {
defaultBranch = "main";
};
core.editor = "nvim";
pull.rebase = false;
push.autoSetupRemote = true;
};
};
}

View file

@ -0,0 +1,13 @@
{ pkgs, ... }:
{
programs.gpg = {
enable = true;
};
services.gpg-agent = {
enable = true;
enableBashIntegration = true;
enableZshIntegration = true;
pinentryPackage = pkgs.pinentry-gnome3;
};
}

View file

@ -0,0 +1,47 @@
{ pkgs, lib, ... }:
{
colorschemes = rec {
custom = {
black = "#000000";
_black = "000000";
white = "#ffffff";
_white = "ffffff";
# https://yeun.github.io/open-color/
active = "#ffffff"; # white
activeDark = "#4276b9"; # blue
_activeDark = "4276b9"; # blue
inactive = "#495057"; # gray7
inactiveDark = "#212529"; # gray9
alert = "#c92a2a"; # red9
# active = "#ffdeeb"; # pink1
# activeDark = "#f783ac"; # pink4
# _activeDark = "f783ac"; # pink4
# inactive = "#495057"; # gray7
# inactiveDark = "#212529"; # gray9
# alert = "#c92a2a"; # red9
};
default = custom;
};
font = "DejaVuSansM Nerd Font";
font-size = "14";
gtk = "Adwaita";
wallpaper = rec {
neptun = pkgs.fetchurl {
url = "https://live.staticflickr.com/65535/52797919139_2444712a38_o_d.png";
sha256 = "1a9148d8911fa25afa82d3b843ee620173955a7ca705d525f3e9d00e00696308";
meta.licenses = lib.licenses.cc0;
};
everest = pkgs.fetchurl {
url = "https://images7.alphacoders.com/546/546508.jpg";
sha256 = "90774d977a5f9cde2264fc1c46417b34046f491b5caca7805c9cd17e3463777b";
meta.licenses = lib.licenses.cc0;
};
default = everest;
};
}

View file

@ -0,0 +1,10 @@
{ pkgs, ... }:
{
home.pointerCursor = {
name = "macOS-Monterey";
package = pkgs.apple-cursor;
size = 32;
gtk.enable = true;
x11.enable = true;
};
}

View file

@ -0,0 +1,13 @@
{ lib, nixosConfig, ... }:
{
imports =
with lib;
with nixosConfig.bchmnn;
optionals gui.enable [
./cursor.nix
./gtk.nix
./programs
]
++ optionals (gui.enable && elem "sway" gui.flavour) [ ./sway ]
++ optionals (gui.enable && elem "i3" gui.flavour) [ ./i3 ];
}

View file

@ -0,0 +1,12 @@
{ ... }:
{
gtk = {
enable = true;
gtk3.extraConfig = {
gtk-application-prefer-dark-theme = 0;
};
gtk4.extraConfig = {
gtk-application-prefer-dark-theme = 0;
};
};
}

View file

@ -0,0 +1,55 @@
{ ... }:
{
programs.autorandr = {
enable = true;
profiles = {
nomad = {
config = {
"LVDS-1" = {
enable = false;
};
};
};
samsung = {
fingerprint = {
"HDMI-0" = "00ffffffffffff004c2d830e000e0001011c0103806b3c780a23ada4544d99260f474abdef80714f81c0810081809500a9c0b300010104740030f2705a80b0588a00501d7400001e023a801871382d40582c4500501d7400001e000000fd00184b0f511e000a202020202020000000fc0053414d53554e470a202020202001b902034cf0535f101f041305142021225d5e626364071603122909070715075057070183010000e2004fe30503016e030c001000b83c20008001020304e3060d01e50e60616566e5018b849001011d80d0721c1620102c2580501d7400009e662156aa51001e30468f3300501d7400001e000000000000000000000000000000a3";
};
config = {
"HDMI-0" = {
enable = true;
primary = true;
mode = "3840x2160";
rate = "59.94";
position = "0x0";
};
};
};
station = {
config = {
"LVDS-1" = {
enable = false;
};
"DP-1-3" = {
enable = false;
mode = "1920x1080";
position = "0x0";
};
"DP-1-2" = {
enable = false;
mode = "1920x1080";
position = "1920x0";
};
"VGA-1-2" = {
enable = false;
mode = "1920x1080";
position = "3840x0";
};
};
};
};
};
}

View file

@ -0,0 +1,257 @@
{
pkgs,
lib,
config,
...
}:
let
cfg = config.xsession.windowManager.i3.config;
# common = (import ../common.nix) { pkgs = pkgs; lib = lib; };
common = (import ../common.nix) {
inherit pkgs;
inherit lib;
};
start-polybar = pkgs.writeShellScript "start-polybar" ''
${pkgs.polybarFull}/bin/polybar-msg cmd quit
echo "---" | tee -a /tmp/polybar.log
${pkgs.polybarFull}/bin/polybar 2>&1 | tee -a /tmp/polybar.log & disown
'';
in
{
imports = [
./autorandr.nix
./polybar.nix
./rofi.nix
];
home.packages = with pkgs; [
dmenu
xclip # tool to access the x clipboard from a console application
wireplumber
feh # lightweight image viewer (also sets wallpaper)
brightnessctl # control screen brightness
pavucontrol # control audio
playerctl # control player
networkmanagerapplet # control network
udiskie # automount usb
blueman # control bluetooth
nextcloud-client # nextcloud client to connect to any instance
libsForQt5.kdeconnect-kde # sync phone and pc
system-config-printer # printer manager
gnome3.adwaita-icon-theme
maim
];
xsession = {
initExtra = "xset s off";
windowManager.i3 = {
enable = true;
config = {
modifier = "Mod4";
bars = [ ];
terminal = "${config.programs.kitty.package}/bin/kitty";
menu = "${config.programs.rofi.package}/bin/rofi -show drun";
startup = with pkgs; [
{ command = "${start-polybar}"; }
{
command = "${gnome.gnome-keyring}/bin/gnome-keyring-daemon --start --components=ssh,secrets,pkcs11";
}
{ command = "${autorandr}/bin/autorandr -c"; }
{ command = "${feh}/bin/feh --bg-fill ${common.wallpaper.default}"; }
{ command = "${networkmanagerapplet}/bin/nm-applet"; }
{ command = "${blueman}/bin/blueman-applet"; }
{ command = "${udiskie}/bin/udiskie --tray"; }
{ command = "${nextcloud-client}/bin/nextcloud"; }
{ command = "${plasma5Packages.kdeconnect-kde}/bin/kdeconnect-indicator"; }
{ command = "${system-config-printer}/bin/system-config-printer-applet"; }
{
command = "${config.programs.kitty.package}/bin/kitty --class dropdown --title dropdown";
always = true;
}
];
fonts = {
names = [ common.font ];
style = "Bold";
size = 12.0;
};
window = {
titlebar = false;
border = 4;
commands = [
{
command = "floating enable";
criteria = {
instance = "dropdown";
};
}
{
command = "resize set 1400 800";
criteria = {
instance = "dropdown";
};
}
{
command = "move scratchpad";
criteria = {
instance = "dropdown";
};
}
];
};
gaps = {
inner = 5;
};
colors = {
focused = {
border = common.colorschemes.default.active;
background = common.colorschemes.default.active;
text = common.colorschemes.default.black;
indicator = common.colorschemes.default.activeDark;
childBorder = common.colorschemes.default.active;
};
focusedInactive = {
border = common.colorschemes.default.inactive;
background = common.colorschemes.default.inactive;
text = common.colorschemes.default.white;
indicator = common.colorschemes.default.inactive;
childBorder = common.colorschemes.default.inactive;
};
unfocused = {
border = common.colorschemes.default.inactiveDark;
background = common.colorschemes.default.inactiveDark;
text = common.colorschemes.default.white;
indicator = common.colorschemes.default.inactiveDark;
childBorder = common.colorschemes.default.inactiveDark;
};
urgent = {
border = common.colorschemes.default.alert;
background = common.colorschemes.default.alert;
text = common.colorschemes.default.white;
indicator = common.colorschemes.default.black;
childBorder = common.colorschemes.default.alert;
};
placeholder = {
border = common.colorschemes.default.active;
background = common.colorschemes.default.active;
text = common.colorschemes.default.black;
indicator = common.colorschemes.default.activeDark;
childBorder = common.colorschemes.default.active;
};
};
keybindings = {
# Basics
"${cfg.modifier}+Return" = "exec ${cfg.terminal}";
"${cfg.modifier}+q" = "kill";
"${cfg.modifier}+i" = "exec ${cfg.menu}";
"${cfg.modifier}+space" = "exec ${cfg.menu}";
"${cfg.modifier}+Shift+c" = "reload";
"${cfg.modifier}+Shift+q" = "exec i3-nagbar -t warning -m 'Do you want to exit i3?' -b 'Yes' 'i3-msg exit'";
"${cfg.modifier}+Shift+r" = "restart";
# Focus
"${cfg.modifier}+h" = "focus left";
"${cfg.modifier}+j" = "focus down";
"${cfg.modifier}+k" = "focus up";
"${cfg.modifier}+l" = "focus right";
"${cfg.modifier}+p" = "focus output left";
"${cfg.modifier}+n" = "focus output right";
# Moving
"${cfg.modifier}+Shift+h" = "move left";
"${cfg.modifier}+Shift+j" = "move down";
"${cfg.modifier}+Shift+k" = "move up";
"${cfg.modifier}+Shift+l" = "move right";
# Workspaces
"${cfg.modifier}+1" = "workspace number 1";
"${cfg.modifier}+2" = "workspace number 2";
"${cfg.modifier}+3" = "workspace number 3";
"${cfg.modifier}+4" = "workspace number 4";
"${cfg.modifier}+5" = "workspace number 5";
"${cfg.modifier}+6" = "workspace number 6";
"${cfg.modifier}+7" = "workspace number 7";
"${cfg.modifier}+8" = "workspace number 8";
"${cfg.modifier}+9" = "workspace number 9";
"${cfg.modifier}+0" = "workspace number 10";
"${cfg.modifier}+Shift+1" = "move container to workspace number 1";
"${cfg.modifier}+Shift+2" = "move container to workspace number 2";
"${cfg.modifier}+Shift+3" = "move container to workspace number 3";
"${cfg.modifier}+Shift+4" = "move container to workspace number 4";
"${cfg.modifier}+Shift+5" = "move container to workspace number 5";
"${cfg.modifier}+Shift+6" = "move container to workspace number 6";
"${cfg.modifier}+Shift+7" = "move container to workspace number 7";
"${cfg.modifier}+Shift+8" = "move container to workspace number 8";
"${cfg.modifier}+Shift+9" = "move container to workspace number 9";
"${cfg.modifier}+Shift+0" = "move container to workspace number 10";
"${cfg.modifier}+Control+j" = "workspace prev";
"${cfg.modifier}+Control+k" = "workspace next";
"${cfg.modifier}+Control+Shift+j" = "move workspace to output left";
"${cfg.modifier}+Control+Shift+k" = "move workspace to output right";
# Splits
"${cfg.modifier}+b" = "split h";
"${cfg.modifier}+v" = "split v";
# Layouts
"${cfg.modifier}+s" = "layout stacking";
"${cfg.modifier}+w" = "layout tabbed";
"${cfg.modifier}+e" = "layout toggle split";
"${cfg.modifier}+f" = "fullscreen toggle";
"${cfg.modifier}+a" = "focus parent";
"${cfg.modifier}+d" = "floating toggle";
"${cfg.modifier}+Shift+d" = "focus mode_toggle";
# Scratchpad
# "${cfg.modifier}+Shift+minus" = "move scratchpad";
# "${cfg.modifier}+minus" = "scratchpad show";
# Resize mode
"${cfg.modifier}+r" = "mode resize";
# Outer gaps
"${cfg.modifier}+equal" = "gaps horizontal current minus 200; gaps vertical current minus 100";
"${cfg.modifier}+minus" = "gaps horizontal current plus 200; gaps vertical current plus 100";
"${cfg.modifier}+bracketright" = "gaps outer current set 5";
"${cfg.modifier}+bracketleft" = "gaps horizontal current set 800; gaps vertical current set 400";
# Dropdown term
"${cfg.modifier}+grave" = "[instance=\"dropdown\"] scratchpad show; [instance=\"dropdown\"] move position center";
"${cfg.modifier}+Escape" = "[instance=\"dropdown\"] scratchpad show; [instance=\"dropdown\"] move position center";
# Multimedia Keys
"XF86AudioRaiseVolume" = "exec ${pkgs.wireplumber}/bin/wpctl set-volume -l 1.5 @DEFAULT_AUDIO_SINK@ 5%+";
"XF86AudioLowerVolume" = "exec ${pkgs.wireplumber}/bin/wpctl set-volume -l 1.5 @DEFAULT_AUDIO_SINK@ 5%-";
"XF86AudioMute" = "exec ${pkgs.wireplumber}/bin/wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle";
"XF86AudioMicMute" = "exec ${pkgs.wireplumber}/bin/wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle";
"XF86MonBrightnessDown" = "exec ${pkgs.brightnessctl}/bin/brightnessctl -q set 5%-";
"XF86MonBrightnessUp" = "exec ${pkgs.brightnessctl}/bin/brightnessctl -q set 5%+";
"XF86AudioPrev" = "exec ${pkgs.playerctl}/bin/playerctl previous";
"XF86AudioNext" = "exec ${pkgs.playerctl}/bin/playerctl next";
"XF86AudioPlay" = "exec ${pkgs.playerctl}/bin/playerctl play-pause";
"XF86AudioPause" = "exec ${pkgs.playerctl}/bin/playerctl play-pause";
# Screenshot
"Print" = "exec ${pkgs.maim}/bin/maim --select | xclip -selection clipboard -t image/png";
# Programs
"${cfg.modifier}+Shift+v" = "exec ${pkgs.pavucontrol}/bin/pavucontrol";
"${cfg.modifier}+Shift+b" = "exec ${pkgs.blueman}/bin/blueman-manager";
"${cfg.modifier}+Shift+n" = "exec ${pkgs.networkmanagerapplet}/bin/nm-connection-editor";
"${cfg.modifier}+Shift+a" = "exec ${pkgs.swaynotificationcenter}/bin/swaync-client -t -sw";
};
};
extraConfig = ''
exec --no-startup-id ${pkgs.i3}/bin/i3-msg 'workspace 1'
'';
};
};
}

View file

@ -0,0 +1,176 @@
{ pkgs, ... }: {
home.packages = with pkgs; [
polybarFull
];
xdg.configFile."polybar/config.ini" = {
text = ''
[colors]
background = #FFFFFF
background-alt = #D3D3D3
foreground = #000000
primary = #F0C674
secondary = #8ABEB7
blue = #4276b9
alert = #A54242
disabled = #707880
[bar/main]
width = 100%
height = 24pt
radius = 10
background = ''${colors.background}
foreground = ''${colors.foreground}
line-size = 3pt
border-size = 4pt
border-color = #00000000
padding-left = 0
padding-right = 1
module-margin = 1
separator =
separator-foreground = ''${colors.disabled}
font-0 = DejaVuSansM Nerd Font:pixelsize=12;3
modules-left = xworkspaces xwindow
modules-right = systray wlan eth pulseaudio filesystem cpu temperature memory date
cursor-click = pointer
cursor-scroll = ns-resize
enable-ipc = true
[module/systray]
type = internal/tray
format-margin = 8pt
tray-spacing = 4pt
tray-size = 55%
tray-background = ''${colors.blue}
format-background = ''${colors.blue}
format-padding = 10px
format-radius = 5.0
[module/xworkspaces]
type = internal/xworkspaces
label-active = %name%
label-active-background = ''${colors.background-alt}
label-active-padding = 1
label-occupied = %name%
label-occupied-padding = 1
label-urgent = %name%
label-urgent-background = ''${colors.alert}
label-urgent-padding = 1
label-empty = %name%
label-empty-foreground = ''${colors.disabled}
label-empty-padding = 1
[module/xwindow]
type = internal/xwindow
label = %title:0:60:...%
[module/filesystem]
type = internal/fs
interval = 25
mount-0 = /home
label-mounted = %free%
format-mounted = <label-mounted>
[module/pulseaudio]
type = internal/pulseaudio
format-volume = <label-volume> <ramp-volume>
label-volume = %percentage%%
label-muted = 󰖁
ramp-volume-0 = 󰕿
ramp-volume-1 = 󰖀
ramp-volume-2 = 󰕾
click-right = pavucontrol
[module/xkeyboard]
type = internal/xkeyboard
blacklist-0 = num lock
label-layout = %layout%
label-layout-foreground = ''${colors.primary}
label-indicator-padding = 2
label-indicator-margin = 1
label-indicator-foreground = ''${colors.background}
label-indicator-background = ''${colors.secondary}
[module/memory]
type = internal/memory
interval = 2
label = %gb_used:2%
format = <label>
format-margin = 5px
[module/temperature]
type = internal/temperature
internal = 1
warn-temperature = 80
format-warn-padding = 10px
format = <label> <ramp>
format-warn = <label-warn> <ramp>
format-warn-background = #eb4d4b
format-warn-foreground = #ffffff
ramp-0 =
ramp-1 =
ramp-2 =
[module/cpu]
type = internal/cpu
interval = 2
label = %percentage:2%%
format = <label>
[network-base]
type = internal/network
interval = 5
format-connected = <label-connected>
format-disconnected = <label-disconnected>
[module/wlan]
inherit = network-base
interface-type = wireless
label-connected = %signal%
label-disconnected = 󰖪
[module/eth]
inherit = network-base
interface-type = wired
label-connected = eth 󰈁
label-disconnected = 󰈂
[module/date]
type = internal/date
interval = 1
date = %a %b %d %H:%M
label = %date%
[settings]
screenchange-reload = true
pseudo-transparency = true
; vim:ft=dosini
'';
};
}

View file

@ -0,0 +1,50 @@
{ config, pkgs, lib, ... }:
let
common = (import ../common.nix) { pkgs = pkgs; lib = lib; };
inherit (config.lib.formats.rasi) mkLiteral;
in
{
programs.rofi = {
enable = true;
font = common.font + " " + common.font-size;
location = "center";
extraConfig = {
show-icons = mkLiteral "true";
};
theme = {
"prompt" = {
"text-color" = mkLiteral common.colorschemes.default.inactive;
};
"textbox-prompt-colon" = {
expand = false;
str = ":";
margin = mkLiteral "0px 0.3em 0em 0em";
"text-color" = mkLiteral common.colorschemes.default.inactive;
};
"inputbar" = {
"padding" = mkLiteral "10px 20px 10px 20px";
"border" = mkLiteral "0px 0px 1px dash 0px";
"border-color" = mkLiteral common.colorschemes.default.activeDark;
"children" = map mkLiteral [ "prompt" "textbox-prompt-colon" "entry" ];
};
"listview" = {
"padding" = mkLiteral "10px";
};
"element" = {
"padding" = mkLiteral "10px";
};
"element-text" = {
"margin" = mkLiteral "0px 0px 0px 20px";
};
} // lib.foldl'
(acc: elem: acc // {
${elem} = { "background-color" = mkLiteral common.colorschemes.default.activeDark; };
})
{ }
(lib.mapCartesianProduct ({ a, b, c }: lib.concatStringsSep "." [ a b c ]) {
a = [ "element" "element-text" "element-icon" ];
b = [ "selected" ];
c = [ "normal" "urgent" "active" ];
});
};
}

View file

@ -0,0 +1,57 @@
{ pkgs, lib, ... }:
let
common = (import ../common.nix) {
pkgs = pkgs;
lib = lib;
};
alabaster-theme-patch = builtins.toFile "alabaster.patch" ''
diff --git a/alabaster.toml b/alabaster.toml
index df312d3..f5e5499 100644
--- a/alabaster.toml
+++ b/alabaster.toml
@@ -2,11 +2,11 @@
# author tonsky
[colors.primary]
-background = '#F7F7F7'
+background = '#FFFFFF'
foreground = '#434343'
[colors.cursor]
-text = '#F7F7F7'
+text = '#FFFFFF'
cursor = '#434343'
[colors.normal]
'';
alacritty-theme-patched = pkgs.alacritty-theme.overrideAttrs (
final: previous: { patches = [ alabaster-theme-patch ]; }
);
in
{
programs.alacritty = {
enable = true;
settings = {
import = [
# Available themes:
# https://github.com/alacritty/alacritty-theme
"${alacritty-theme-patched}/alabaster.toml"
];
env.TERM = "xterm-256color";
font = {
size = 12;
normal = {
family = common.font;
};
};
scrolling.multiplier = 5;
selection.save_to_clipboard = true;
window = {
padding = {
x = 5;
y = 5;
};
};
};
};
}

View file

@ -0,0 +1,64 @@
{ config, pkgs, ... }:
let
icons = {
chromium = ./icons/chromium.png;
spotify = ./icons/spotify.png;
teams = ./icons/teams.png;
outlook = ./icons/outlook.png;
whatsapp = ./icons/whatsapp.png;
};
in
{
programs.chromium = {
enable = true;
package = (pkgs.chromium.override { enableWideVine = true; });
extensions = [
{ id = "cjpalhdlnbpafiamejdnhcphjbkeiagm"; } # ublock origin
{ id = "dbepggeogbaibhgnhhndojpepiihcmeb"; } # vimium
];
};
xdg.dataFile = {
"applications/chromium-development.desktop".text = ''
[Desktop Entry]
Type=Application
Name=Chromium (Development Modus)
Exec=${pkgs.chromium}/bin/chromium --allow-file-access-from-files --disable-site-isolation-trials --allow-running-insecure-content --no-referrers --unlimited-storage --user-data-dir=${config.xdg.dataHome}/chromium-development/data --disable-web-security
Terminal=false
Icon=${icons.chromium}
'';
"applications/spotify.desktop".text = ''
[Desktop Entry]
Type=Application
Name=Spotify
Exec=${pkgs.chromium}/bin/chromium --app=https://spotify.com
Terminal=false
Icon=${icons.spotify}
'';
"applications/teams.desktop".text = ''
[Desktop Entry]
Type=Application
Name=Microsoft Teams
Exec=${pkgs.chromium}/bin/chromium --app=https://teams.microsoft.com
Terminal=false
Icon=${icons.teams}
'';
"applications/outlook.desktop".text = ''
[Desktop Entry]
Type=Application
Name=Microsoft Outlook
Exec=${pkgs.chromium}/bin/chromium --app=https://outlook.office365.com/mail
Terminal=false
Icon=${icons.outlook}
'';
"applications/whatsapp.desktop".text = ''
[Desktop Entry]
Type=Application
Name=WhatsApp
Exec=${pkgs.chromium}/bin/chromium --app=https://web.whatsapp.com
Terminal=false
Icon=${icons.whatsapp}
'';
};
}

View file

@ -0,0 +1,21 @@
### `chromium.png`
- Source: [https://commons.wikimedia.org/wiki/File:Chromium_Logo.svg](https://commons.wikimedia.org/wiki/File:Chromium_Logo.svg)
- Licensing
> The Chromium project is published under Creative Commons attribution 2.5 and BSD. The logo is in the public domain, as it does not meet the threshold of originality.
### `outlook.png`
- Source: [https://developer.microsoft.com/en-us/fluentui#/styles/web/m365-product-icons](https://developer.microsoft.com/en-us/fluentui#/styles/web/m365-product-icons)
- Microsoft Fabric Assets License Agreement: [https://aka.ms/fluentui-assets-license](https://aka.ms/fluentui-assets-license)
### `spotify.png`
- Source: [https://commons.wikimedia.org/wiki/File:Spotify_icon.svg](https://commons.wikimedia.org/wiki/File:Spotify_icon.svg)
- Attribution: [https://developer.spotify.com/documentation/design#attribution](https://developer.spotify.com/documentation/design#attribution)
### `teams.png`
- Source: [https://developer.microsoft.com/en-us/fluentui#/styles/web/m365-product-icons](https://developer.microsoft.com/en-us/fluentui#/styles/web/m365-product-icons)
- Attribution: [https://developer.spotify.com/documentation/design#attribution](https://developer.spotify.com/documentation/design#attribution)
### `whatsapp.png`
- Source: [https://commons.wikimedia.org/wiki/File:WhatsApp_logo.svg](https://commons.wikimedia.org/wiki/File:WhatsApp_logo.svg)
- WhatsApp brand assets and guidelines: [https://about.meta.com/brand/resources/whatsapp/whatsapp-brand/](https://about.meta.com/brand/resources/whatsapp/whatsapp-brand/)

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

View file

@ -0,0 +1,62 @@
{
pkgs,
lib,
nixosConfig,
...
}:
{
imports = [
./alacritty.nix
./chromium
./discord.nix
./games.nix
./keyring.nix
./kitty.nix
./obs.nix
./vscode.nix
./zathura.nix
];
home.packages =
with pkgs;
[
firefox # a web browser built from firefox source tree
thunderbird # a full-featured e-mail client
speechd # common interface to speech synthesis - https://support.mozilla.org/en-us/kb/speechd-setup
tor-browser # privacy-focused browser routing traffic through the tor network
qbittorrent # featureful free software bittorrent client
element-desktop # a feature-rich client for matrix.org
telegram-desktop # telegram desktop messaging app
signal-desktop # private, simple, and secure messenger
zoom-us # zoom.us video conferencing application
gnome.simple-scan # simple scanning utility
gnome.gnome-font-viewer # program that can preview fonts and create thumbnails for fonts
pppdf
feh # a light-weight image viewer
mpv
vlc # cross-platform media player and streaming server
zathura # a highly customizable and functional pdf viewer
neovide # a simple graphical user interface for neovim
gimp # the gnu image manipulation program
(calibre.override { unrarSupport = true; })
libreoffice # comprehensive, professional-quality productivity suite, a variant of openoffice.org
xournalpp # a handwriting notetaking software with pdf annotation support
libsForQt5.okular # kde document viewer
carla # audio plugin host
picard # musicbrainz picard audio file tagger
anki # spaced repetition flashcard program
]
++ lib.optionals nixosConfig.bchmnn.printing.enable [
system-config-printer # graphical user interface for cups administration
]
++ lib.optionals nixosConfig.services.ratbagd.enable [
piper # gtk frontend for ratbagd mouse config daemon
];
}

View file

@ -0,0 +1,6 @@
{ pkgs, ... }:
{
home.packages = with pkgs; [
vesktop # alternate client for discord with vencord built-in
];
}

View file

@ -0,0 +1,15 @@
{
nixosConfig,
lib,
pkgs,
...
}:
lib.mkIf nixosConfig.bchmnn.collections.games.enable {
home.packages = with pkgs; [
openjdk17 # the open-source java development kit
prismlauncher # a free, open source launcher for minecraft
# retroarchFull # multi-platform emulator frontend for libretro cores
celestia # real-time 3d simulation of space
extremetuxracer # high speed arctic racing game based on tux racer
];
}

View file

@ -0,0 +1,13 @@
{ pkgs, ... }:
{
services.gnome-keyring = {
enable = true;
components = [
"pkcs11"
"secrets"
"ssh"
];
};
home.packages = with pkgs; [ gnome.seahorse ];
}

View file

@ -0,0 +1,65 @@
{ pkgs, lib, ... }:
let
common = (import ../common.nix) {
pkgs = pkgs;
lib = lib;
};
kitty-alabaster-theme-patch = builtins.toFile "kitty-theme-alabaster.patch" ''
diff --git a/themes/Alabaster.conf b/themes/Alabaster.conf
index 7989049..b0c180e 100644
--- a/themes/Alabaster.conf
+++ b/themes/Alabaster.conf
@@ -6,17 +6,17 @@
#: The basic colors
-foreground #000000
-background #f7f7f7
+foreground #434343
+background #ffffff
-selection_foreground #000000
+selection_foreground #434343
selection_background #bfdbfe
#: Cursor colors
-cursor #007acc
-cursor_text_color #bfdbfe
+cursor #434343
+cursor_text_color #ffffff
#: URL underline color when hovering with mouse
@@ -55,8 +55,8 @@ color6 #0083b2
color14 #00aacb
#: white
-color7 #f7f7f7
-color15 #f7f7f7
+color7 #bbbbbb
+color15 #ffffff
#: kitty window border colors and terminal bell colors
'';
kitty-theme-patched = pkgs.kitty-themes.overrideAttrs (
final: previous: { patches = [ kitty-alabaster-theme-patch ]; }
);
in
{
programs.kitty = {
enable = true;
font.name = common.font;
font.size = 12;
shellIntegration = {
enableBashIntegration = true;
enableZshIntegration = true;
};
extraConfig = ''
include ${kitty-theme-patched}/share/kitty-themes/themes/Alabaster.conf
text_composition_strategy legacy
'';
};
}

View file

@ -0,0 +1,7 @@
{ pkgs, ... }:
{
programs.obs-studio = {
enable = true;
plugins = [ pkgs.obs-studio-plugins.wlrobs ];
};
}

View file

@ -0,0 +1,174 @@
{ pkgs, lib, ... }:
let
common = (import ../common.nix) {
pkgs = pkgs;
lib = lib;
};
in
{
programs.vscode = {
enable = true;
enableExtensionUpdateCheck = true;
enableUpdateCheck = false;
extensions = with pkgs.vscode-extensions; [
vscodevim.vim
editorconfig.editorconfig
dbaeumer.vscode-eslint
waderyan.gitblame
bierner.markdown-mermaid
pkief.material-icon-theme
christian-kohler.path-intellisense
johnpapa.vscode-peacock
esbenp.prettier-vscode
bradlc.vscode-tailwindcss
jnoortheen.nix-ide
ms-vscode.cpptools
ms-vscode.cmake-tools
james-yu.latex-workshop
];
userSettings = {
"window.titleBarStyle" = "custom";
"window.menuBarVisibility" = "toggle";
"workbench.colorTheme" = "Default Light Modern";
"workbench.iconTheme" = "material-icon-theme";
"extensions.ignoreRecommendations" = true;
"explorer.confirmDragAndDrop" = false;
"explorer.confirmDelete" = false;
"editor.renderControlCharacters" = true;
"editor.renderWhitespace" = "all";
"editor.renderFinalNewline" = "on";
"editor.tabSize" = 4;
"editor.cursorStyle" = "line";
"editor.insertSpaces" = false;
"editor.lineNumbers" = "on";
"editor.wordSeparators" = "/\\()\"':,.;<>~!@#$%^&*|+=[]{}`?-";
"editor.wordWrap" = "on";
"editor.suggestSelection" = "first";
"editor.fontFamily" = common.font;
"editor.fontSize" = 16;
"editor.bracketPairColorization.enabled" = true;
"editor.guides.bracketPairs" = "active";
"editor.quickSuggestions" = {
strings = "on";
};
"editor.codeActionsOnSave" = {
".source.organizeImports" = "explicit";
};
"terminal.integrated.fontFamily" = common.font;
"files.exclude" = {
"**/.classpath" = true;
"**/.project" = true;
"**/.settings" = true;
"**/.factorypath" = true;
"**/__pycache__" = true;
};
"vim.normalModeKeyBindingsNonRecursive" = [
{
"before" = [ "<C-p>" ];
"commands" = [ "workbench.action.quickOpen" ];
}
{
"before" = [ "<C-b>" ];
"commands" = [
"workbench.view.explorer"
"workbench.action.toggleSidebarVisibility"
];
}
];
"[html]" = {
"editor.tabSize" = 2;
"editor.insertSpaces" = true;
"editor.defaultFormatter" = "esbenp.prettier-vscode";
};
"[javascript]" = {
"editor.tabSize" = 2;
"editor.insertSpaces" = true;
"editor.defaultFormatter" = "esbenp.prettier-vscode";
};
"[typescript]" = {
"editor.tabSize" = 2;
"editor.insertSpaces" = true;
"editor.defaultFormatter" = "esbenp.prettier-vscode";
};
"[typescriptreact]" = {
"editor.tabSize" = 2;
"editor.insertSpaces" = true;
"editor.defaultFormatter" = "esbenp.prettier-vscode";
};
"[python]" = {
"editor.tabSize" = 4;
"editor.insertSpaces" = true;
"editor.formatOnType" = true;
};
"[yaml]" = {
"editor.insertSpaces" = true;
"editor.tabSize" = 2;
"editor.autoIndent" = "advanced";
};
"[json]" = {
"editor.defaultFormatter" = "vscode.json-language-features";
};
"[jsonc]" = {
"editor.defaultFormatter" = "esbenp.prettier-vscode";
};
"[java]" = {
"editor.defaultFormatter" = "redhat.java";
};
"[markdown]" = {
"editor.defaultFormatter" = "esbenp.prettier-vscode";
};
"[css]" = {
"editor.defaultFormatter" = "esbenp.prettier-vscode";
};
"[nix]" = {
"editor.defaultFormatter" = "jnoortheen.nix-ide";
};
"git.autofetch" = true;
"json.schemaDownload.enable" = true;
"javascript.updateImportsOnFileMove.enabled" = "always";
"typescript.updateImportsOnFileMove.enabled" = "always";
"nix.enableLanguageServer" = true;
"nix.serverPath" = "${pkgs.nil}/bin/nil";
"nix.formatterPath" = "${pkgs.nixpkgs-fmt}/bin/nixpkgs-fmt";
};
keybindings = [
{
key = "ctrl+tab";
command = "workbench.action.nextEditor";
}
{
key = "ctrl+shift+tab";
command = "workbench.action.previousEditor";
}
{
key = "alt+left";
command = "workbench.action.navigateBack";
}
{
key = "alt+right";
command = "workbench.action.navigateForward";
}
{
key = "ctrl+escape";
command = "workbench.action.terminal.toggleTerminal";
when = "terminal.active";
}
{
key = "ctrl+f";
command = "editor.action.formatDocument";
when = "editorHasDocumentFormattingProvider && editorTextFocus && !editorReadonly && !inCompositeEditor";
}
];
};
}

View file

@ -0,0 +1,10 @@
{ ... }:
{
# a highly customizable and functional pdf viewer
programs.zathura = {
enable = true;
options = {
selection-clipboard = "clipboard";
};
};
}

View file

@ -0,0 +1,355 @@
{
pkgs,
lib,
config,
nixosConfig,
...
}:
let
cfg = config.wayland.windowManager.sway.config;
common = (import ../common.nix) {
pkgs = pkgs;
lib = lib;
};
in
{
imports = [
./kanshi.nix
./swaync
./wofi.nix
../waybar.nix
];
home.packages = with pkgs; [
brightnessctl # this program allows you read and control device brightness
pavucontrol # pulseaudio volume control
playerctl # command-line utility and library for controlling media players that implement mpris
networkmanagerapplet # networkmanager control applet for gnome
udiskie # removable disk automounter for udisks
dracula-theme # dracula variant of the ant theme
gnome3.adwaita-icon-theme
wl-clipboard # command-line copy/paste utilities for wayland
sway-contrib.grimshot # a helper for screenshots within sway
wdisplays # a graphical application for configuring displays in wayland compositors
wlr-randr # an xrandr clone for wlroots compositors
kanshi # dynamic display configuration tool
nextcloud-client # nextcloud themed desktop client
libsForQt5.kdeconnect-kde # kde connect provides several features to integrate your phone and your computer
system-config-printer # graphical user interface for cups administration
emote # modern emoji picker for linux
];
programs.swaylock = {
enable = true;
package = pkgs.swaylock-effects;
};
wayland.windowManager.sway = {
enable = true;
wrapperFeatures = {
base = true;
gtk = true;
};
xwayland = true;
extraSessionCommands =
with lib;
with nixosConfig.bchmnn;
''
export CLUTTER_BACKEND=wayland;
export GDK_BACKEND=wayland;
export GDK_DPI_SCALE=1;
export NIXOS_OZONE_WL=1;
export MOZ_ENABLE_WAYLAND=1;
export MOZ_USE_XINPUT2=1;
export XDG_SESSION_TYPE=wayland;
export XDG_CURRENT_DESKTOP=sway;
# sdl
export SDL_VIDEODRIVER=wayland
# qt
export QT_QPA_PLATFORM=wayland-egl
export QT_WAYLAND_DISABLE_WINDOWDECORATION=1
# java
export _JAVA_AWT_WM_NONREPARENTING=1
export _JAVA_OPTIONS="-Dawt.useSystemAAFontSettings=on";
''
+ optionalString nvidia.enable ''
# nvidia
export WLR_RENDERER=vulkan;
# export LIBVA_DRIVER_NAME,nvidia;
# export GBM_BACKEND=nvidia-drm;
export __GL_GSYNC_ALLOWED=0;
export __GL_VRR_ALLOWED=0;
export __GLX_VENDOR_LIBRARY_NAME=nvidia;
export WLR_NO_HARDWARE_CURSORS=1;
# xwayland compat
export XWAYLAND_NO_GLAMOR=1;
'';
config = {
modifier = "Mod4";
terminal = "${config.programs.kitty.package}/bin/kitty";
menu = "${pkgs.wofi}/bin/wofi";
# TODO for some reason bar only works when used with exec
bars = [ ];
startup = with pkgs; [
# TODO activate with systemd prbly requires a graphical.target?
# { command = "${nixosConfig.systemd.package}/bin/systemctl --user import-environment XDG_SESSION_TYPE XDG_CURRENT_DESKTOP"; }
# { command = "${dbus}/bin/dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP=sway"; }
# { command = "${nixosConfig.systemd.package}/bin/systemctl --user stop xdg-desktop-portal xdg-desktop-portal-wlr"; }
# { command = "${nixosConfig.systemd.package}/bin/systemctl --user start xdg-desktop-portal xdg-desktop-portal-wlr"; }
# { command = "${dbus}/bin/dbus-update-activation-environment --systemd DISPLAY WAYLAND_DISPLAY SWAYSOCK"; }
{
command = "${config.programs.waybar.package}/bin/waybar -c ${config.xdg.configHome}/waybar/swaybar.json -s ${config.xdg.configHome}/waybar/swaybar.css";
}
{ command = "${dbus}/bin/dbus-update-activation-environment --all"; }
{ command = "${kanshi}/bin/kanshi"; }
{ command = "${networkmanagerapplet}/bin/nm-applet"; }
{ command = "${blueman}/bin/blueman-applet"; }
{ command = "${udiskie}/bin/udiskie --tray"; }
{ command = "${swaynotificationcenter}/bin/swaync"; }
{ command = "${nextcloud-client}/bin/nextcloud"; }
{ command = "${plasma5Packages.kdeconnect-kde}/bin/kdeconnect-indicator"; }
{ command = "${system-config-printer}/bin/system-config-printer-applet"; }
{ command = "${emote}/bin/emote"; }
{ command = "${polkit_gnome}/libexec/polkit-gnome-authentication-agent-1"; }
];
input = {
"2:7:SynPS/2_Synaptics_TouchPad" = {
accel_profile = "flat";
dwt = "enabled";
dwtp = "enabled";
tap = "enabled";
natural_scroll = "enabled";
middle_emulation = "enabled";
scroll_factor = "0.3";
};
"2:10:TPPS/2_IBM_TrackPoint" = {
accel_profile = "flat";
scroll_factor = "0.5";
};
};
output = {
"*".bg = "${common.wallpaper.default} fill";
};
left = "h";
down = "j";
up = "k";
right = "l";
keybindings = {
"${cfg.modifier}+Ctrl+Shift+l" = "exec ${pkgs.swaylock-effects}/bin/swaylock --screenshots --clock --indicator --indicator-radius 100 --indicator-thickness 7 --effect-blur 7x5 --effect-vignette 0.5:0.5 --ring-color ffffff --key-hl-color ${common.colorschemes.default._black} --line-color 00000000 --inside-color 00000088 --inside-ver-color ${common.colorschemes.default._white} --separator-color 00000000 --text-color ${common.colorschemes.default._white} --fade-in 0.1";
# Basics
"${cfg.modifier}+Return" = "exec ${cfg.terminal}";
"${cfg.modifier}+q" = "kill";
"${cfg.modifier}+Space" = "exec ${cfg.menu}";
"${cfg.modifier}+Shift+c" = "reload";
"${cfg.modifier}+Shift+q" = "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'";
# Focus
"${cfg.modifier}+${cfg.left}" = "focus left";
"${cfg.modifier}+${cfg.down}" = "focus down";
"${cfg.modifier}+${cfg.up}" = "focus up";
"${cfg.modifier}+${cfg.right}" = "focus right";
"${cfg.modifier}+p" = "focus output left";
"${cfg.modifier}+n" = "focus output right";
# Moving
"${cfg.modifier}+Shift+${cfg.left}" = "move left";
"${cfg.modifier}+Shift+${cfg.down}" = "move down";
"${cfg.modifier}+Shift+${cfg.up}" = "move up";
"${cfg.modifier}+Shift+${cfg.right}" = "move right";
# Workspaces
"${cfg.modifier}+1" = "workspace number 1";
"${cfg.modifier}+2" = "workspace number 2";
"${cfg.modifier}+3" = "workspace number 3";
"${cfg.modifier}+4" = "workspace number 4";
"${cfg.modifier}+5" = "workspace number 5";
"${cfg.modifier}+6" = "workspace number 6";
"${cfg.modifier}+7" = "workspace number 7";
"${cfg.modifier}+8" = "workspace number 8";
"${cfg.modifier}+9" = "workspace number 9";
"${cfg.modifier}+0" = "workspace number 10";
"${cfg.modifier}+Shift+1" = "move container to workspace number 1";
"${cfg.modifier}+Shift+2" = "move container to workspace number 2";
"${cfg.modifier}+Shift+3" = "move container to workspace number 3";
"${cfg.modifier}+Shift+4" = "move container to workspace number 4";
"${cfg.modifier}+Shift+5" = "move container to workspace number 5";
"${cfg.modifier}+Shift+6" = "move container to workspace number 6";
"${cfg.modifier}+Shift+7" = "move container to workspace number 7";
"${cfg.modifier}+Shift+8" = "move container to workspace number 8";
"${cfg.modifier}+Shift+9" = "move container to workspace number 9";
"${cfg.modifier}+Shift+0" = "move container to workspace number 10";
"${cfg.modifier}+Control+${cfg.down}" = "workspace prev";
"${cfg.modifier}+Control+${cfg.up}" = "workspace next";
"${cfg.modifier}+Control+Shift+${cfg.down}" = "move workspace to output left";
"${cfg.modifier}+Control+Shift+${cfg.up}" = "move workspace to output right";
# Splits
"${cfg.modifier}+b" = "splith";
"${cfg.modifier}+v" = "splitv";
# Layouts
"${cfg.modifier}+s" = "layout stacking";
"${cfg.modifier}+w" = "layout tabbed";
"${cfg.modifier}+e" = "layout toggle split";
"${cfg.modifier}+f" = "fullscreen toggle";
"${cfg.modifier}+a" = "focus parent";
"${cfg.modifier}+d" = "floating toggle";
"${cfg.modifier}+Shift+d" = "focus mode_toggle";
# Scratchpad
"${cfg.modifier}+Shift+minus" = "move scratchpad";
"${cfg.modifier}+minus" = "scratchpad show";
# Resize mode
"${cfg.modifier}+r" = "mode resize";
# Multimedia Keys
"XF86AudioRaiseVolume" = "exec ${pkgs.wireplumber}/bin/wpctl set-volume -l 1.5 @DEFAULT_AUDIO_SINK@ 5%+";
"XF86AudioLowerVolume" = "exec ${pkgs.wireplumber}/bin/wpctl set-volume -l 1.5 @DEFAULT_AUDIO_SINK@ 5%-";
"XF86AudioMute" = "exec ${pkgs.wireplumber}/bin/wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle";
"XF86AudioMicMute" = "exec ${pkgs.wireplumber}/bin/wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle";
"XF86MonBrightnessDown" = "exec ${pkgs.brightnessctl}/bin/brightnessctl -q set 5%-";
"XF86MonBrightnessUp" = "exec ${pkgs.brightnessctl}/bin/brightnessctl -q set 5%+";
"XF86AudioPrev" = "exec ${pkgs.playerctl}/bin/playerctl previous";
"XF86AudioNext" = "exec ${pkgs.playerctl}/bin/playerctl next";
"XF86AudioPlay" = "exec ${pkgs.playerctl}/bin/playerctl play-pause";
"XF86AudioPause" = "exec ${pkgs.playerctl}/bin/playerctl play-pause";
# Screenshot
"Print" = "exec ${pkgs.sway-contrib.grimshot}/bin/grimshot copy area";
# Programs
"${cfg.modifier}+Shift+v" = "exec ${pkgs.pavucontrol}/bin/pavucontrol";
"${cfg.modifier}+Shift+b" = "exec ${pkgs.blueman}/bin/blueman-manager";
"${cfg.modifier}+Shift+n" = "exec ${pkgs.networkmanagerapplet}/bin/nm-connection-editor";
"${cfg.modifier}+Shift+a" = "exec ${pkgs.swaynotificationcenter}/bin/swaync-client -t -sw";
"${cfg.modifier}+period" = "exec ${pkgs.emote}/bin/emote";
};
fonts = {
names = [ common.font ];
style = "Bold";
size = 12.0;
};
seat = {
"*" = {
xcursor_theme = "macOS-Monterey 32";
};
};
window = {
titlebar = false;
border = 4;
};
colors = {
focused = {
border = common.colorschemes.default.active;
background = common.colorschemes.default.active;
text = common.colorschemes.default.black;
indicator = common.colorschemes.default.activeDark;
childBorder = common.colorschemes.default.active;
};
focusedInactive = {
border = common.colorschemes.default.inactive;
background = common.colorschemes.default.inactive;
text = common.colorschemes.default.white;
indicator = common.colorschemes.default.inactive;
childBorder = common.colorschemes.default.inactive;
};
unfocused = {
border = common.colorschemes.default.inactiveDark;
background = common.colorschemes.default.inactiveDark;
text = common.colorschemes.default.white;
indicator = common.colorschemes.default.inactiveDark;
childBorder = common.colorschemes.default.inactiveDark;
};
urgent = {
border = common.colorschemes.default.alert;
background = common.colorschemes.default.alert;
text = common.colorschemes.default.white;
indicator = common.colorschemes.default.black;
childBorder = common.colorschemes.default.alert;
};
placeholder = {
border = common.colorschemes.default.active;
background = common.colorschemes.default.active;
text = common.colorschemes.default.black;
indicator = common.colorschemes.default.activeDark;
childBorder = common.colorschemes.default.active;
};
};
};
extraConfig = ''
for_window [title="Firefox Sharing Indicator"] {
floating enable
}
for_window [title="Bluetooth Devices"] {
floating enable
resize set 700px 450px
move position 100ppt 0
move left 700px
}
for_window [title="Volume Control"] {
floating enable
resize set 700px 450px
move position 100ppt 0
move left 700px
}
for_window [app_id="nm-connection-editor" title="Network Connections"] {
floating enable
resize set 700px 450px
move position 100ppt 0
move left 700px
}
for_window [app_id="thunderbird" title="Reminder"] {
floating enable
resize set 700px 450px
move position 100ppt 0
move left 700px
}
for_window [app_id="com.nextcloud.desktopclient.nextcloud" title="Nextcloud"] {
floating enable
resize set 700px 450px
move position 100ppt 0
move left 700px
}
for_window [title="Extension: \(Gopass Bridge\) - gopass bridge Mozilla Firefox"] {
floating enable
resize set 700px 450px
move position 100ppt 0
move left 700px
}
set $ddterm-id dropdown-terminal
set $ddterm ${cfg.terminal} --class $ddterm-id
set $ddterm-resize resize set 100ppt 40ppt, move position 0 0
# resize/move new dropdown terminal windows
for_window [app_id="$ddterm-id"] {
floating enable
$ddterm-resize
move to scratchpad
scratchpad show
}
# show existing or start new dropdown terminal
bindsym ${cfg.modifier}+grave exec swaymsg '[app_id="$ddterm-id"] scratchpad show' || $ddterm && sleep .1 && swaymsg '[app_id="$ddterm-id"] $ddterm-resize'
bindsym ${cfg.modifier}+Escape exec swaymsg '[app_id="$ddterm-id"] scratchpad show' || $ddterm && sleep .1 && swaymsg '[app_id="$ddterm-id"] $ddterm-resize'
# ^-- resize again, case moving to different output
workspace 1
'';
};
}

View file

@ -0,0 +1,72 @@
{ ... }:
{
services.kanshi = {
enable = true;
# TODO: profiles is deprecated
profiles = {
nomad = {
outputs = [
{
criteria = "LVDS-1";
status = "enable";
}
];
};
iroh = {
outputs = [
{
criteria = "DP-3";
status = "enable";
mode = "2560x1440";
position = "0,0";
}
{
criteria = "DP-2";
status = "enable";
mode = "2560x1440";
position = "2560,0";
}
{
criteria = "DP-1";
status = "enable";
mode = "2560x1440";
position = "5120,0";
}
];
};
station = {
outputs = [
{
criteria = "LVDS-1";
status = "disable";
}
{
criteria = "DP-3";
# criteria = "Dell Inc. DELL U2515H 9X2VY5490XUL";
status = "enable";
mode = "1920x1080";
position = "0,0";
}
{
criteria = "DP-2";
# criteria = "Dell Inc. DELL U2515H 9X2VY5C7138L";
status = "enable";
mode = "1920x1080";
position = "1920,0";
}
{
criteria = "VGA-1";
# criteria = "HJW VGA TO HDMI 0x00000100";
status = "enable";
mode = "1920x1080";
position = "3840,0";
}
];
};
};
};
}

View file

@ -0,0 +1,94 @@
{
"positionX": "right",
"positionY": "top",
"notification-icon-size": 64,
"notification-body-image-height": 100,
"notification-body-image-width": 200,
"timeout": 10,
"timeout-low": 5,
"timeout-critical": 0,
"fit-to-screen": true,
"keyboard-shortcuts": true,
"image-visibility": "when-available",
"transition-time": 200,
"hide-on-clear": false,
"hide-on-action": true,
"script-fail-notify": true,
"widgets": [
"mpris",
"volume",
"backlight",
"title",
"dnd",
"notifications"
],
"widget-config": {
"title": {
"text": "Notifications",
"clear-all-button": true,
"button-text": "Clear All"
},
"dnd": {
"text": "Do Not Disturb"
},
"label": {
"max-lines": 1,
"text": "Notification Center"
},
"mpris": {
"image-size": 96,
"image-radius": 12
},
"volume": {
"label": "󰕾 "
},
"backlight": {
"label": "󰃟 "
},
"buttons-grid": {
"actions": [
{
"label": "󰐥",
"command": "systemctl poweroff"
},
{
"label": "󰜉",
"command": "systemctl reboot"
},
{
"label": "󰌾",
"command": "swaylock"
},
{
"label": "󰍃",
"command": "swaymsg exit"
},
{
"label": "󰏥",
"command": "systemctl suspend"
},
{
"label": "󰕾",
"command": "pactl set-sink-mute @DEFAULT_SINK@ toggle"
},
{
"label": "󰍬",
"command": "pactl set-source-mute @DEFAULT_SOURCE@ toggle"
},
{
"label": "󰖩",
"command": "iwgtk"
},
{
"label": "󰂯",
"command": "blueman-manager"
},
{
"label": "",
"command": "kooha"
}
]
}
}
}

View file

@ -0,0 +1,5 @@
{
imports = [
./swaync.nix
];
}

View file

@ -0,0 +1,340 @@
@define-color cc-bg rgba(0, 0, 0, 1);
@define-color noti-border-color rgba(255, 255, 255, 0.15);
@define-color noti-bg rgb(17, 17, 27);
@define-color noti-bg-darker rgb(43, 43, 57);
@define-color noti-bg-hover rgb(27, 27, 43);
@define-color noti-bg-focus rgba(27, 27, 27, 0.6);
@define-color noti-close-bg rgba(255, 255, 255, 0.1);
@define-color noti-close-bg-hover rgba(255, 255, 255, 0.15);
@define-color text-color rgba(169, 177, 214, 1);
@define-color text-color-disabled rgb(150, 150, 150);
@define-color bg-selected rgb(0, 128, 255);
* {
font-family: DejaVuSansM Nerd Font;
font-weight: bolder;
}
.control-center .notification-row:focus,
.control-center .notification-row:hover {
opacity: 1;
background: @noti-bg-darker
}
.notification-row {
outline: none;
}
.notification {
border-radius: 12px;
margin: 10px;
padding: 0;
border: 2px solid #7aa2f7
}
.notification-content {
background: transparent;
padding: 10px;
border-radius: 12px
}
.close-button {
background: @noti-close-bg;
color: @text-color;
text-shadow: none;
padding: 0;
border-radius: 100%;
margin-top: 10px;
margin-right: 16px;
box-shadow: none;
border: none;
min-width: 24px;
min-height: 24px
}
.close-button:hover {
box-shadow: none;
background: @noti-close-bg-hover;
transition: all .15s ease-in-out;
border: none
}
.notification-default-action,
.notification-action {
padding: 4px;
margin: 0;
box-shadow: none;
background: @noti-bg;
border: none;
color: @text-color;
transition: all .15s ease-in-out
}
.notification-default-action:hover,
.notification-action:hover {
-gtk-icon-effect: none;
background: @noti-bg-hover
}
.notification-default-action {
border-radius: 12px
}
.notification-default-action:not(:only-child) {
border-bottom-left-radius: 0;
border-bottom-right-radius: 0
}
.notification-action {
border-radius: 0;
border-top: none;
border-right: none
}
.notification-action:first-child {
border-bottom-left-radius: 10px;
background: #1b1b2b
}
.notification-action:last-child {
border-bottom-right-radius: 10px;
background: #1b1b2b
}
.inline-reply {
margin-top: 8px
}
.inline-reply-entry {
background: @noti-bg-darker;
color: @text-color;
caret-color: @text-color;
border: 1px solid @noti-border-color;
border-radius: 12px
}
.inline-reply-button {
margin-left: 4px;
background: @noti-bg;
border: 1px solid @noti-border-color;
border-radius: 12px;
color: @text-color
}
.inline-reply-button:disabled {
background: initial;
color: @text-color-disabled;
border: 1px solid transparent
}
.inline-reply-button:hover {
background: @noti-bg-hover
}
.body-image {
margin-top: 6px;
background-color: #fff;
border-radius: 12px
}
.summary {
font-size: 16px;
font-weight: 700;
background: transparent;
color: rgba(158, 206, 106, 1);
text-shadow: none
}
.time {
font-size: 16px;
font-weight: 700;
background: transparent;
color: @text-color;
text-shadow: none;
margin-right: 18px
}
.body {
font-size: 15px;
font-weight: 400;
background: transparent;
color: @text-color;
text-shadow: none
}
.control-center {
background: @cc-bg;
border: 1px solid #7aa2f7;
border-radius: 10px;
}
.control-center-list {
background: transparent
}
.control-center-list-placeholder {
opacity: .5
}
.floating-notifications {
background: transparent
}
.blank-window {
background: alpha(black, 0.25)
}
.widget-title {
color: @text-color;
margin: 10px;
font-size: 1.5rem
}
.widget-title>button {
font-size: initial;
color: @text-color;
text-shadow: none;
background: @noti-bg;
border: 1px solid @noti-border-color;
box-shadow: none;
border-radius: 12px
}
.widget-title>button:hover {
background: @noti-bg-hover
}
.widget-dnd {
color: @text-color;
margin: 10px;
font-size: 1.1rem
}
.widget-dnd>switch {
font-size: initial;
border-radius: 12px;
background: @noti-bg;
border: 1px solid @noti-border-color;
box-shadow: none
}
.widget-dnd>switch:checked {
background: @bg-selected
}
.widget-dnd>switch slider {
background: @noti-bg-hover;
border-radius: 12px
}
.widget-label {
margin: 10px;
}
.widget-label>label {
font-size: 1.5rem;
color: @text-color;
}
.widget-mpris {
color: @text-color;
background: @noti-bg-darker;
padding: 10px;
margin: 10px;
border-radius: 10px;
}
.widget-mpris-player {
padding: 8px;
margin: 8px
}
.widget-mpris-title {
font-weight: 700;
font-size: 1.25rem
}
.widget-mpris-subtitle {
font-size: 1.1rem
}
.widget-buttons-grid {
font-size: x-large;
padding: 8px;
margin: 20px 10px 10px;
border-radius: 12px;
background: @noti-bg-darker;
}
.widget-buttons-grid>flowbox>flowboxchild>button {
margin: 3px;
background: #343b58;
border-radius: 12px;
color: @text-color
}
.widget-buttons-grid>flowbox>flowboxchild>button:hover {
/* background: @noti-bg-hover; */
color: rgba(158, 206, 106, 1)
}
.widget-menubar>box>.menu-button-bar>button {
border: none;
background: transparent
}
.topbar-buttons>button {
border: none;
background: transparent
}
.widget-volume {
background: @noti-bg-darker;
padding: 8px;
margin: 10px;
border-radius: 12px;
font-size: x-large;
color: @text-color
}
.widget-volume>box>button {
background: transparent;
border: none
}
.per-app-volume {
background-color: @noti-bg;
padding: 4px 8px 8px;
margin: 0 8px 8px;
border-radius: 12px
}
.widget-backlight {
background: @noti-bg-darker;
padding: 8px;
margin: 10px;
border-radius: 12px;
font-size: x-large;
color: @text-color
}
.widget-inhibitors {
margin: 8px;
font-size: 1.5rem
}
.widget-inhibitors>button {
font-size: initial;
color: @text-color;
text-shadow: none;
background: @noti-bg;
border: 1px solid @noti-border-color;
box-shadow: none;
border-radius: 12px
}
.widget-inhibitors>button:hover {
background: @noti-bg-hover
}

View file

@ -0,0 +1,13 @@
{ pkgs, ... }: {
home.packages = with pkgs; [
swaynotificationcenter
libnotify
];
xdg.configFile = {
"swaync/config.json".source = ./config.json;
"swaync/style.css".source = ./style.css;
};
}

View file

@ -0,0 +1,69 @@
{ pkgs, lib, ... }:
let
common = (import ../common.nix) {
pkgs = pkgs;
lib = lib;
};
in
{
programs.wofi = {
enable = true;
settings = {
show = "drun";
allow_images = true;
image_size = 24;
no_actions = true;
};
style = ''
* {
font-family: '${common.font}', monospace;
font-size: ${common.font-size}px;
color: ${common.colorschemes.default.black};
}
window {
background-color: transparent;
}
#input {
background-color: ${common.colorschemes.default.active};
border: 5px;
border-color: ${common.colorschemes.default.activeDark};
border-radius: 0px;
padding-top: 10px;
padding-bottom: 10px;
padding-left: 20px;
padding-right: 20px;
margin-bottom: 10px;
}
#scroll {
background-color: ${common.colorschemes.default.active};
border: 5px;
border-color: ${common.colorschemes.default.activeDark};
border-radius: 0px;
padding: 10px;
}
#entry {
padding: 10px;
}
#entry #text {
margin-left: 20px;
}
#entry:selected {
background-color: ${common.colorschemes.default.activeDark};
}
#entry:selected #img {
background-color: ${common.colorschemes.default.activeDark};
}
#entry:selected #text {
background-color: ${common.colorschemes.default.activeDark};
}
'';
};
}

View file

@ -0,0 +1,396 @@
{ pkgs, nixosConfig, ... }:
let
check-battery = pkgs.writeShellScript "check-battery" ''
bat=/sys/class/power_supply/BAT0
CRIT=''${1:-15}
FILE=~/.config/waybar/.notified.target
stat=$(cat $bat/status)
perc=$(cat $bat/capacity)
if [[ $perc -le $CRIT ]] && [[ $stat == "Discharging" ]]; then
if [[ ! -f "$FILE" ]]; then
notify-send --urgency=critical --icon=dialog-warning "Battery Low" "Current charge: $perc%"
touch $FILE
fi
elif [[ -f "$FILE" ]]; then
rm $FILE
fi
'';
tailscale-status = pkgs.writeShellScript "tailscale-status" ''
if ${nixosConfig.services.tailscale.package}/bin/tailscale status > /dev/null 2>&1; then
echo " "
else
echo " "
fi
'';
tailscale-toggle = pkgs.writeShellScript "tailscale-toggle" ''
if ${nixosConfig.services.tailscale.package}/bin/tailscale status > /dev/null 2>&1; then
pkexec ${nixosConfig.services.tailscale.package}/bin/tailscale down
else
pkexec ${nixosConfig.services.tailscale.package}/bin/tailscale up --accept-routes --exit-node=j4m35-bl0nd
fi
'';
in
{
xdg.configFile = {
"waybar/swaybar.json".text = ''
[
{
"backlight": {
"device": "intel_backlight",
"format": "{percent}% {icon} ",
"format-icons": [
"󰌶",
"󱩎",
"󱩏",
"󱩐",
"󱩑",
"󱩒",
"󱩓",
"󱩔",
"󱩕",
"󱩖",
"󰛨"
]
},
"battery": {
"format": "{capacity}% {icon} ",
"format-alt": "{time} {icon} ",
"format-charging": "{capacity}% 󰂄 ",
"format-icons": [
"󰂃",
"󰁺",
"󰁻",
"󰁼",
"󰁽",
"󰁾",
"󰁿",
"󰂀",
"󰂁",
"󰂂",
"󰁹"
],
"format-plugged": "{capacity}% ",
"on-update": "${check-battery}",
"states": {
"critical": 15,
"warning": 30
}
},
"clock": {
"format": "{:%a %b %d %H:%M}",
"timezones": [
"Europe/Berlin"
],
"tooltip-format": "<big>{:%Y %B}</big>\n<tt><small>{calendar}</small></tt>"
},
"custom/mem": {
"exec": "free -h | awk '/Mem:/{printf $3}'",
"format": "{} 󰍛 ",
"interval": 3,
"tooltip": false
},
"custom/separator": {
"format": "|",
"interval": "once",
"tooltip": false
},
"disk": {
"format": "{specific_free:0.0f}GB ",
"unit": "GB"
},
"sway/mode": {
"format": "<span style=\"italic\">{}</span>"
},
"sway/window": {
"format": "{title}",
},
"sway/workspaces": {
"disable-scroll": true,
"persistent-workspaces": {
"1": [],
"2": [],
"3": [],
"4": [],
"5": [],
"6": [],
"7": [],
"8": [],
"9": [],
"10": [],
}
},
"layer": "top",
"modules-center": [
],
"modules-left": [
"sway/workspaces",
"sway/window",
"sway/mode"
],
"modules-right": [
"tray",
"network",
"custom/tailscale",
"custom/separator",
"pulseaudio",
"custom/separator",
"disk",
"custom/separator",
"custom/mem",
"custom/separator",
"temperature",
"custom/separator",
"backlight",
"custom/separator",
"battery",
"custom/separator",
"clock"
],
"name": "swaybar",
"network": {
"format": "{ifname}",
"format-disconnected": "󰈂 ",
"format-ethernet": "eth 󰈁 ",
"format-wifi": "{signalStrength}% ",
"interval": 1,
"tooltip-format": "{ifname} via {gwaddr} 󰈁 ",
"tooltip-format-disconnected": "Disconnected",
"tooltip-format-ethernet": "{ifname} ",
"tooltip-format-wifi": "{essid} ({signalStrength}%) "
},
"custom/tailscale": {
"exec": "${tailscale-status}",
"interval": 1,
"on-click": "${tailscale-toggle}",
},
"pulseaudio": {
"format": "{volume}% {icon} {format_source}",
"format-bluetooth": "{volume}% {icon} {format_source}",
"format-bluetooth-muted": "󰖁 {icon} {format_source}",
"format-icons": {
"car": "",
"default": [
"󰕿",
"󰖀",
"󰕾"
],
"hands-free": "󰋎",
"headphone": "",
"headset": "󰋎",
"phone": "",
"portable": ""
},
"format-muted": "󰖁 {format_source}",
"format-source": "{volume}% ",
"format-source-muted": " ",
"on-click": "${pkgs.pavucontrol}/bin/pavucontrol",
"reverse-scrolling": 1
},
"temperature": {
"critical-threshold": 80,
"format": "{temperatureC}°C {icon} ",
"format-icons": [
"",
"",
"",
"",
""
],
"tooltip": false
},
"tray": {
"icon-size": 16,
"show-passive-items": true,
"spacing": 4
}
}
]
'';
"waybar/swaybar.css".text = ''
window.swaybar,
window.swaybar * {
border: none;
font-family: DejaVuSansM Nerd Font;
font-size: 13px;
}
window.swaybar #custom-separator {
padding-right: 6px;
color: #d3d3d3;
}
window.swaybar#waybar {
background: linear-gradient(to bottom, #ffffff, #f9f9f9);
}
window.swaybar#waybar.hidden {
opacity: 0.2;
}
window.swaybar #workspaces {
padding-left: 8px;
padding-right: 8px;
margin-right: 8px;
transition: none;
}
window.swaybar #workspaces button {
transition: none;
color: black;
background: transparent;
padding: 2px;
/* font-size: 18px; */
border-radius: 0px;
}
window.swaybar #workspaces button.empty {
color: #7c818c;
}
window.swaybar #workspaces button.persistent {
/* font-size: 12px; */
}
window.swaybar #workspaces button.visible {
color: black;
/* font-size: 18px; */
}
window.swaybar #workspaces button.focused {
background: lightgray;
}
window.swaybar #workspaces button:hover {
color: white;
background: black;
}
window.swaybar #window {
padding-left: 8px;
padding-right: 8px;
transition: none;
color: black;
background: transparent;
}
window.swaybar #mode {
padding-left: 16px;
padding-right: 16px;
transition: none;
color: black;
background: transparent;
}
window.swaybar #tray {
margin-right: 10px;
padding-left: 10px;
padding-right: 10px;
border-radius: 10px;
transition: none;
color: white;
background: rgb(66, 118, 185);
}
window.swaybar #network {
padding-left: 6px;
transition: none;
color: black;
background: transparent;
}
window.swaybar #custom-tailscale {
padding-right: 6px;
transition: none;
color: black;
background: transparent;
}
window.swaybar #pulseaudio {
transition: none;
color: black;
background: transparent;
}
window.swaybar #pulseaudio.muted {
color: gray;
}
window.swaybar #disk {
transition: none;
color: black;
background: transparent;
}
window.swaybar #custom-mem {
transition: none;
color: black;
background: transparent;
}
window.swaybar #temperature {
transition: none;
color: black;
background: transparent;
}
window.swaybar #temperature.critical {
color: #eb4d4b;
}
window.swaybar #backlight {
transition: none;
color: black;
background: transparent;
}
window.swaybar #battery {
transition: none;
color: black;
background: transparent;
}
window.swaybar #battery.charging {
color: #ffffff;
background-color: #26A65B;
}
window.swaybar #battery.warning:not(.charging) {
background-color: #ffbe61;
color: black;
}
window.swaybar #battery.critical:not(.charging) {
background-color: #f53c3c;
color: #ffffff;
animation-name: blink;
animation-duration: 0.5s;
animation-timing-function: linear;
animation-iteration-count: infinite;
animation-direction: alternate;
}
window.swaybar #clock {
padding-right: 6px;
margin-right: 8px;
transition: none;
color: black;
background: transparent;
}
@keyframes blink {
to {
background-color: #ffffff;
color: #000000;
}
}
'';
};
programs.waybar = {
enable = true;
};
}

View file

@ -0,0 +1,4 @@
{ pkgs, ... }:
{
home.file.".XCompose".source = "${pkgs.keyd}/share/keyd/keyd.compose";
}

View file

@ -0,0 +1,38 @@
{ pkgs, ... }:
{
home.packages = with pkgs; [
gcc
nodejs_20
tree-sitter # parser generator tool and an incremental parsing library
lua-language-server # language server that offers lua language support
clang-tools # standalone command line tools for c++ development
rust-analyzer # modular compiler frontend for the rust language
rustfmt # tool for formatting rust code according to style guidelines
gopls # official language server for the go language
nixd # nix language server
nil # yet another language server for nix
nixfmt-rfc-style # official formatter for nix code
nodePackages.pyright # type checker for the python language
ruff # an extremely fast python linter
black # uncompromising python code formatter
isort # python utility / library to sort python imports
vscode-langservers-extracted # html/css/json/eslint language servers extracted from vscode
nodePackages.typescript-language-server
tailwindcss-language-server
nodePackages.prettier # prettier is an opinionated code formatter
prettierd # prettier, as a daemon, for improved formatting speed
texlab # implementation of the language server protocol for latex
yamlfmt # extensible command line tool or library to format yaml files
yamlfix # python yaml formatter that keeps your comments
marksman # language server for markdown
markdownlint-cli2 # fast, flexible, configuration-based command-line interface for linting markdown/commonmark files with the markdownlint library
mdformat # commonmark compliant markdown formatter
];
programs.neovim = {
enable = true;
package = pkgs.unstable.neovim-unwrapped;
defaultEditor = true;
vimAlias = true;
};
}

View file

@ -0,0 +1,8 @@
{ pkgs, nixosConfig, ... }:
{
imports = [ ./pomodoro.nix ];
home.packages = [
(import ./git-clone-list.nix { inherit pkgs; })
(import ./nix-update.nix { inherit pkgs nixosConfig; })
];
}

View file

@ -0,0 +1,63 @@
{ pkgs }:
pkgs.writeShellScriptBin "git-clone-list" ''
reset="\e[0m"
bold="\e[1m"
underline="\e[4m"
red="\e[31m"
green="\e[32m"
XPATH='//*[@id="user-list-repositories"]//a[not(@class)]/@href'
function help_screen {
echo
echo -e "''${bold}''${underline}Usage:''${reset} ''${bold}$0''${reset} <USER> <LIST>"
echo
echo -e "''${bold}''${underline}Arguments''${reset}:"
echo -e " ''${bold}USER''${reset} Github username of target user"
echo -e " ''${bold}LIST''${reset} List name of target list"
echo
}
function error {
echo
echo -e "''${red}>>> ''${bold}Error''${reset}''${red}: $1''${reset}"
if [ "$2" == "help" ]; then
help_screen
fi
exit 1
}
if [ $# -ne 2 ]; then
error "Expected 2 arguments, got $#" help
fi
USER=$1
LIST=$2
NOT_VISITED=("/stars/$USER/lists/$LIST?page=1")
VISITED=()
REPOS=()
while [[ "''${#NOT_VISITED[@]}" != 0 ]]; do
echo -e "''${green}>>> Fetching https://github.com''${NOT_VISITED[0]} ...''${reset}"
while IFS= read -r line; do
VISITED+=("''${NOT_VISITED[0]}")
unset NOT_VISITED[0]
if [[ "$line" == "/stars/$USER/lists/$LIST"* ]]; then
if [[ ! "''${VISITED[@]}" =~ "''${line}" ]]; then
NOT_VISITED+=("$line")
fi
else
REPOS+=("$line")
fi
done < <(${pkgs.xidel}/bin/xidel "https://github.com''${NOT_VISITED[0]}" --xpath $XPATH)
done
IT=1
for repo in "''${REPOS[@]}"; do
echo -e "''${green}>>> [$IT/''${#REPOS[@]}] Cloning https://github.com$repo.git ...''${reset}"
${pkgs.git}/bin/git clone "https://github.com$repo.git" "''${repo:1}"
IT=$((IT + 1))
done
''

View file

@ -0,0 +1,37 @@
{ pkgs, nixosConfig }:
pkgs.writeShellScriptBin "nuf" ''
reset="\e[0m"
red="\e[31m"
green="\e[32m"
yellow="\e[33m"
white_bold="\e[1;37m"
tmp=$(mktemp -d)
function error {
rm -rf tmp
echo ""
echo -e "''${red}>>> ''${bold}Error''${reset}''${red}: $1''${reset}"
exit 1
}
FLAKE=$(readlink -f /etc/nixos)
echo -e "''${green}>>> Updating flake $FLAKE ...''${reset}"
${nixosConfig.nix.package}/bin/nix flake update --flake "$FLAKE" || error "Updating failed"
cd $tmp
echo ""
echo -e "''${green}>>> Building configuration ...''${reset}"
nixos-rebuild build --flake "$FLAKE" || error "Building failed"
echo ""
echo -e "''${green}>>> Running diff ...''${reset}";
${pkgs.nvd}/bin/nvd diff /run/current-system result || error "Diff failed"
cd - > /dev/null
rm -rf $tmp
echo ""
echo -e "''${yellow}>>> The new configuration has not been activated.''${reset}"
echo -e "''${yellow}>>> Use ''${white_bold}nixos-rebuild switch''${reset}''${yellow} to activate.''${reset}"
''

View file

@ -0,0 +1,19 @@
{ pkgs, ... }:
let
pootis = ./pootis.m4a;
in
{
home.packages = [
pkgs.openpomodoro-cli
(pkgs.writeShellScriptBin "pomostart" ''
clear
${pkgs.openpomodoro-cli}/bin/openpomodoro-cli start --wait $@
while ${pkgs.mpv}/bin/mpv ${pootis} > /dev/null 2>&1; do :; done
'')
(pkgs.writeShellScriptBin "pomobreak" ''
clear
${pkgs.openpomodoro-cli}/bin/openpomodoro-cli break --wait $@
while ${pkgs.mpv}/bin/mpv ${pootis} > /dev/null 2>&1; do :; done
'')
];
}

Binary file not shown.

View file

@ -0,0 +1,56 @@
{
nixosConfig,
lib,
pkgs,
...
}:
{
home.file.".XCompose".source = "${pkgs.keyd}/share/keyd/keyd.compose";
programs.ssh = {
enable = true;
addKeysToAgent = "yes";
includes = [ "config.d/*" ];
};
home.file.".ssh/config.d/.keep".source = builtins.toFile "keep" "";
services.ssh-agent = {
enable = true;
};
programs.tmux = {
enable = true;
newSession = true;
terminal = "screen-256color";
clock24 = true;
escapeTime = 0;
historyLimit = 10000;
mouse = true;
keyMode = "vi";
};
programs.eza = {
enable = true;
enableBashIntegration = true;
enableZshIntegration = true;
};
programs.fzf = {
enable = true;
enableBashIntegration = true;
enableZshIntegration = true;
};
programs.yazi = {
enable = true;
};
home.packages = [
pkgs.exiftool
pkgs.mediainfo
] ++ lib.optionals nixosConfig.bchmnn.gui.enable [ pkgs.ueberzugpp ];
}

View file

@ -0,0 +1,42 @@
{ config, ... }:
{
programs.zsh = {
enable = true;
enableCompletion = true;
autosuggestion.enable = true;
syntaxHighlighting.enable = true;
oh-my-zsh = {
enable = true;
theme = "terminalparty";
plugins = [
"git"
"z"
];
};
history = {
path = "${config.xdg.dataHome}/zsh/histfile";
size = 10000;
save = 10000;
};
initExtra = ''
nix_dev_env() {
FLAKE="$PWD/flake.nix"
[[ -z "$CURRENT_FLAKE_ENV" ]] && \
[[ -f $FLAKE ]] && \
echo -n "Enter nix develop? (Y/N): " && \
read confirm && \
[[ $confirm == [yY] || $confirm == [yY][eE][sS] ]] && \
ZSH_PREFIX="$ZSH_PREFIX(flake)" \
CURRENT_FLAKE_ENV=$FLAKE \
nix develop -c $SHELL
}
autoload -U add-zsh-hook
add-zsh-hook chpwd nix_dev_env
export PS1="$ZSH_PREFIX$PS1"
'';
};
}

View file

@ -1,14 +0,0 @@
{ ... }: {
# Set your time zone.
time.timeZone = "Europe/Berlin";
# Select internationalisation properties.
i18n = {
defaultLocale = "en_US.UTF-8";
supportedLocales = [ "en_US.UTF-8/UTF-8" "de_DE.UTF-8/UTF-8" ];
};
console = {
font = "Lat2-Terminus16";
keyMap = "us";
};
}

View file

@ -1,3 +0,0 @@
{ config, ... }: {
programs.kdeconnect.enable = config.bchmnn.gui.enable;
}

View file

@ -1,21 +0,0 @@
{ pkgs, ... }: {
documentation = {
enable = true;
doc.enable = true;
dev.enable = true;
man = {
enable = true;
generateCaches = true;
man-db.enable = true;
};
};
environment.systemPackages = with pkgs; [
man-pages
man-pages-posix
ncurses
];
}

View file

@ -1,12 +0,0 @@
{ pkgs, ... }: {
networking.networkmanager.enable = true;
systemd.services = {
NetworkManager-wait-online.enable = false;
};
programs.wireshark = {
enable = true;
package = pkgs.wireshark;
};
}

View file

@ -1,8 +0,0 @@
{
programs.nh = {
enable = true;
# clean.enable = true;
# clean.extraArgs = "--keep-since 4d --keep 3";
# flake = "/etc/nixos";
};
}

View file

@ -1,12 +0,0 @@
{ pkgs, ... }: {
# provide libraries for non-nix binaries
programs.nix-ld = {
enable = true;
libraries = with pkgs; [
glibc
libcxx
libllvm
ncurses
];
};
}

View file

@ -1,28 +0,0 @@
{ ... }@inputs: {
nix = {
settings = {
experimental-features = [ "nix-command" "flakes" ];
auto-optimise-store = true;
};
};
nixpkgs = {
overlays = [
(self: super: {
unstable = import inputs.nixpkgs-unstable {
system = super.system;
};
mfcl3750cdwlpr = (super.callPackage ../overlays/mfcl3750cdw.nix { }).driver;
mfcl3750cdwcupswrapper = (super.callPackage ../overlays/mfcl3750cdw.nix { }).cupswrapper;
pppdf = (super.python3Packages.callPackage ../overlays/pppdf { });
iglesia-light = (super.callPackage ../overlays/fonts/iglesia-light.nix { });
})
];
config = {
allowUnfree = true;
allowUnfreePredicate = (_: true);
};
};
system.stateVersion = "23.05";
}

View file

@ -1,11 +0,0 @@
{ config, lib, ... }: lib.mkIf config.bchmnn.nvidia.enable {
services.xserver.videoDrivers = [ "nvidia" ];
hardware.nvidia = {
modesetting.enable = true;
powerManagement.enable = true;
nvidiaSettings = true;
};
}

View file

@ -1,6 +0,0 @@
{ lib, config, ... }: lib.mkIf config.bchmnn.ai.enable {
services.ollama = {
enable = true;
acceleration = if config.bchmnn.nvidia.enable then "cuda" else null;
};
}

View file

@ -1,16 +0,0 @@
{ config, lib, pkgs, ... }: {
hardware.opengl = {
enable = true;
driSupport = true;
driSupport32Bit = true;
};
environment.variables = lib.mkIf (
builtins.elem
pkgs.intel-media-driver
config.hardware.opengl.extraPackages
) {
LIBVA_DRIVER_NAME = "iHD";
};
}

View file

@ -1,8 +0,0 @@
{ ... }: {
services.openssh = {
enable = true;
openFirewall = true;
};
}

View file

@ -1,64 +0,0 @@
{ lib, pkgs, config, ... }: {
environment.systemPackages = with pkgs; with config.bchmnn; [
pciutils # a collection of programs for inspecting and manipulating configuration of pci devices
usbutils # tools for working with usb devices, such as lsusb
lshw # provide detailed information on the hardware configuration of the machine
git # distributed version control system
gnumake # a tool to control the generation of non-source files from sources
parallel # shell tool for executing jobs in parallel
mercurial # a fast, lightweight scm system for very large distributed projects
wget # tool for retrieving files using http, https, and ftp
unstable.neovim-unwrapped # vim text editor fork focused on extensibility and agility
neofetch # a fast, highly customizable system info script
lsd # the next gen ls command
eza # a modern, maintained replacement for ls
ripgrep # a utility that combines the usability of the silver searcher with the raw speed of grep
ripgrep-all # ripgrep, but also search in pdfs, e-books, office documents, zip, tar.gz, and more
expect # a tool for automating interactive applications
jq # a lightweight and flexible command-line json processor
unzip # an extraction utility for archives compressed in .zip format
unrar # utility for rar archives
libsecret # a library for storing and retrieving passwords and other secrets
xidel # command line tool to download and extract data from html/xml pages as well as json apis
nvd # nix/nixos package version diff tool
inotify-tools # a c library and a set of command-line programs providing a simple interface to inotify
wireguard-tools # tools for the wireguard secure network tunnel
mkcert # a simple tool for making locally-trusted development certificates
] ++ lib.optionals (devenv.enable) [
# languages
gcc13
clang
universal-ctags # a maintained ctags implementation
rustc
cargo # downloads your rust project's dependencies and builds your project
go # go programming language
(python312.withPackages (p: with p; [
ptpython # an advanced python repl
ipython # ipython: productive interactive computing
pycryptodome # self-contained cryptographic library
gmpy2 # interface to gmp, mpfr, and mpc for python 3.7+
]))
lua
nixpkgs-fmt
openjdk17
javaPackages.openjfx17
gradle_7
maven
ant
nodejs_20
nodenv
nodePackages.yarn
nodePackages.pnpm
mongodb-compass
ghidra-bin
hexedit
] ++ lib.optionals (gui.enable) [
libnotify # a library that sends desktop notifications to a notification daemon
xdg-utils # a set of command line tools that assist applications with a variety of desktop integration tasks
] ++ lib.optionals (gui.enable && lib.elem "sway" gui.flavour) [
qt5.qtwayland
qt6.qtwayland
] ++ lib.optionals (nvidia.enable) [
nvtopPackages.full
];
}

View file

@ -1,14 +0,0 @@
{ pkgs, config, ... }: with config.bchmnn; {
powerManagement = {
enable = true;
};
services.tlp = {
enable = !builtins.elem "gnome" gui.flavour;
settings = power.tlp.settings;
};
environment.systemPackages = with pkgs; [
powertop
];
}

View file

@ -1,26 +0,0 @@
{ pkgs, lib, config, ... }: lib.mkIf config.bchmnn.printing.enable {
services.printing = {
enable = true;
drivers = [
pkgs.mfcl3750cdwcupswrapper
];
};
services.avahi = {
enable = true;
nssmdns4 = true;
openFirewall = true;
};
hardware.printers = {
ensurePrinters = [
{
name = "Brother-MFC-L3750CDW-series";
location = "Home";
deviceUri = "dnssd://Brother%20MFC-L3750CDW%20series._ipp._tcp.local/?uuid=e3248000-80ce-11db-8000-b4220094c09b";
model = "brother_mfcl3750cdw_printer_en.ppd";
}
];
ensureDefaultPrinter = "Brother-MFC-L3750CDW-series";
};
}

View file

@ -1,3 +0,0 @@
{
services.ratbagd.enable = true;
}

View file

@ -1,19 +0,0 @@
{ config, lib, ... }: {
security.polkit.enable = true;
security.rtkit.enable = true;
networking.firewall.enable = true;
} // (lib.mkIf (lib.elem "sway" config.bchmnn.gui.flavour) {
# TODO workaround to get swaylock accepting pw
# https://github.com/NixOS/nixpkgs/issues/158025
security.pam.services.swaylock = { };
}) // (lib.mkIf (config.bchmnn.devenv.enable) {
networking.firewall = {
allowedTCPPorts = [ 3000 6969 8080 ];
};
})

View file

@ -0,0 +1,6 @@
{
imports = [
./flare-solvarr.nix
./jackett.nix
];
}

View file

@ -0,0 +1,26 @@
{ config, lib, ... }:
{
options.bchmnn.services.flare-solvarr = {
enable = lib.mkEnableOption "flare-solvarr";
};
config = lib.mkIf (config.bchmnn.services.flare-solvarr.enable) {
virtualisation = {
oci-containers = {
containers = {
flare-solvarr = {
image = "ghcr.io/flaresolverr/flaresolverr:latest";
autoStart = true;
ports = [ "127.0.0.1:8191:8191" ];
environment = {
LOG_LEVEL = "info";
LOG_HTML = "false";
CAPTCHA_SOLVER = "hcaptcha-solver";
TZ = "Europe/Berlin";
};
};
};
};
};
};
}

View file

@ -0,0 +1,12 @@
{ config, lib, ... }:
{
options.bchmnn.services.jackett = {
enable = lib.mkEnableOption "jackett";
};
config = {
services.jackett = {
enable = config.bchmnn.services.jackett.enable;
};
};
}

View file

@ -0,0 +1,90 @@
{ lib, config, ... }:
lib.mkIf config.bchmnn.sync.enable {
options.bchmnn.services.syncthing = {
enable = lib.mkEnableOption "syncthing";
};
config = lib.mkIf (config.bchmnn.services.syncthing.enable) {
services.syncthing = {
enable = false;
openDefaultPorts = true;
settings = {
devices = {
T430 = {
id = "UGQINNI-SC6F24X-5JE7YTP-LZLORTX-7GQ5NKK-YMRDRPK-JHRTWUV-4ILUJQQ";
};
IROH = {
id = "PJA2MBA-66PQQEO-5KICONS-FGHDH46-YRV2X5Y-47UUP77-QXI2WNS-R33FPAK";
};
};
folders = {
"dl" = {
path = "~/dl";
id = "z97eb-myxtp";
devices = [
"IROH"
"T430"
];
};
"docs" = {
path = "~/docs";
id = "rhh6x-dmymv";
devices = [
"IROH"
"T430"
];
};
"music" = {
path = "~/music";
id = "umzur-ncrf6";
devices = [
"IROH"
"T430"
];
};
"orgfiles" = {
path = "~/orgfiles";
id = "0f5t9-dl5l5";
devices = [ ];
versioning = {
type = "simple";
params.keep = "5";
};
};
"pics" = {
path = "~/pics";
id = "cuejs-esf7u";
devices = [
"IROH"
"T430"
];
};
"tmp" = {
path = "~/tmp";
id = "d6k5d-hdxyh";
devices = [
"IROH"
"T430"
];
};
"vids" = {
path = "~/vids";
id = "bjx9u-ujjwi";
devices = [
"IROH"
"T430"
];
};
};
};
user = "gandalf";
group = "users";
dataDir = "/home/gandalf";
};
};
}

View file

@ -1,22 +0,0 @@
{ pkgs, ... }:
let
aliases = import ./aliases.nix;
in
{
programs.zsh = {
enable = true;
};
users.users.gandalf = {
shell = pkgs.zsh;
};
environment = {
shellAliases = aliases;
};
programs = {
htop.enable = true;
iftop.enable = true;
};
}

View file

@ -1,10 +0,0 @@
{ pkgs, config, lib, ... }: lib.mkIf config.bchmnn.games.enable {
programs.steam = {
enable = true;
};
environment.systemPackages = with pkgs; [
mangohud
gamemode
];
}

View file

@ -1,89 +0,0 @@
{ lib, config, ... }: lib.mkIf config.bchmnn.sync.enable {
services.syncthing = {
enable = true;
openDefaultPorts = true;
settings = {
devices = {
T430 = {
id = "UGQINNI-SC6F24X-5JE7YTP-LZLORTX-7GQ5NKK-YMRDRPK-JHRTWUV-4ILUJQQ";
};
IROH = {
id = "PJA2MBA-66PQQEO-5KICONS-FGHDH46-YRV2X5Y-47UUP77-QXI2WNS-R33FPAK";
};
J4M35-BL0ND = {
id = "R32FFUU-KZXHRUY-GPUOSQV-7ZBDQ5J-3EW2LHG-VAT6VZ7-WRTG46A-7CYCAQL";
};
};
folders = {
"dl" = {
path = "~/dl";
id = "z97eb-myxtp";
devices = [
"IROH"
"T430"
];
};
"docs" = {
path = "~/docs";
id = "rhh6x-dmymv";
devices = [
"IROH"
"T430"
];
};
"music" = {
path = "~/music";
id = "umzur-ncrf6";
devices = [
"IROH"
"T430"
];
};
"orgfiles" = {
path = "~/orgfiles";
id = "0f5t9-dl5l5";
devices = [
"J4M35-BL0ND"
];
versioning = {
type = "simple";
params.keep = "5";
};
};
"pics" = {
path = "~/pics";
id = "cuejs-esf7u";
devices = [
"IROH"
"T430"
];
};
"tmp" = {
path = "~/tmp";
id = "d6k5d-hdxyh";
devices = [
"IROH"
"T430"
];
};
"vids" = {
path = "~/vids";
id = "bjx9u-ujjwi";
devices = [
"IROH"
"T430"
];
};
};
};
user = "gandalf";
group = "users";
dataDir = "/home/gandalf";
};
}

View file

@ -1,17 +0,0 @@
{ lib, config, ... }: lib.mkIf config.bchmnn.ai.enable {
virtualisation = {
oci-containers = {
containers = {
coqui-ai-tts = {
image = "ghcr.io/coqui-ai/tts:latest";
autoStart = true;
ports = ["127.0.0.1:5002:5002"];
entrypoint = "/bin/bash";
cmd = [];
};
};
};
};
}

Some files were not shown because too many files have changed in this diff Show more