Compare commits
230 Commits
63b3f5c9fa
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| 16980bf9f4 | |||
| 4fc8b0f4fa | |||
| 3a9d27adb8 | |||
| 079ba8a9d5 | |||
| 48c40f8124 | |||
| c3171bd792 | |||
| a64a137724 | |||
| d776ce0667 | |||
| 70a7c6d30a | |||
| f648311d04 | |||
| 8f5a18577f | |||
| 4a49961bc0 | |||
| 9f51eaf5fc | |||
| bfc2435b43 | |||
| 86abbf360e | |||
| f33924569f | |||
| 72558d3d07 | |||
| 03f7b779bd | |||
| 21f1600fdc | |||
| c55f1eb9d7 | |||
| c7d7cb845b | |||
| 30441810be | |||
| 531fafcb52 | |||
| 89a15a63e8 | |||
| 66e7e4fdc0 | |||
| f66ef91e85 | |||
| d5d9396b6d | |||
| fb5b7abbd4 | |||
| 4684925c97 | |||
| c4b4e682b1 | |||
| 950fe60383 | |||
| 6c69dab6fa | |||
| 8a3698ce15 | |||
| 869c6b4707 | |||
| 25158bedf1 | |||
| 363f42c829 | |||
| 38f691cacd | |||
| e592ca5e0a | |||
| bf6f379a4f | |||
| 6378246c2c | |||
| 300c36245e | |||
| 9ef91f7ab5 | |||
| 249afa0b65 | |||
| 730b115bf8 | |||
| 499900014e | |||
| 80c13f0ee3 | |||
| 7049373384 | |||
| 12cab79679 | |||
| cf9b2a0cdb | |||
| 6a45fca8d5 | |||
| db9826339f | |||
| 00b67e55bc | |||
| 3d037d2dbd | |||
| 7adcf7baa5 | |||
| ac5216413e | |||
| 93cee2d49a | |||
| 0a9037abaa | |||
| 49bca53aa7 | |||
| 3fe1471c0f | |||
| 226188b263 | |||
| d3bf4cce17 | |||
| a8480384e7 | |||
| a60c7b8ca5 | |||
| a3073c0895 | |||
| 8b472eae63 | |||
| 190c58639f | |||
| 03efdeddc5 | |||
| edd7dbccfa | |||
| 41dc3f8112 | |||
| e7233faed1 | |||
| dd4ca5a69e | |||
| cd1aac83b2 | |||
| 20d5a43dd7 | |||
| 6ecc69eb2e | |||
| beac80516d | |||
| d6d6603df6 | |||
| 4e6e74b2f8 | |||
| 03e1cf00a1 | |||
| ab7b90bcb2 | |||
| e230dea138 | |||
| 19fa7c2fc1 | |||
| c5d34c86b8 | |||
| 3b557449c9 | |||
| 074962e7a9 | |||
| e4b45eeb4a | |||
| 36264583b2 | |||
| c2dd8138aa | |||
| 7d0c3d2751 | |||
| 7a16c9dc40 | |||
| b7ada15fb9 | |||
| bd5507a366 | |||
| d8538369ef | |||
| 8233861699 | |||
| b9e7e22ddd | |||
| c08da164ac | |||
| 2fbd529e59 | |||
| 0dec323af5 | |||
| 27b3ec6a46 | |||
| 4c06e18113 | |||
| 617cf08fc8 | |||
| 761000913a | |||
| e5503bbf58 | |||
| a997dee6ba | |||
| 739518cdac | |||
| 72ae66c403 | |||
| fe9531c732 | |||
| a1f96ee51d | |||
| 7b4c789cae | |||
| 52d33c1204 | |||
| ed349bd4e6 | |||
| 55c0df89fd | |||
| 6981f2cee2 | |||
| 5a63b14c5b | |||
| 730bfc0d28 | |||
| 56467e6f40 | |||
| 9fed42aba1 | |||
| c2472925bf | |||
| e192b9401d | |||
| 60b79b65b5 | |||
| 55a3afc085 | |||
| 7acbaa0a6d | |||
| 347cc444b9 | |||
| 5159cf50c9 | |||
| 2c1dfb7eb8 | |||
| 2b1fa4df5b | |||
| f72b5ef8a8 | |||
| c1ad79003d | |||
| f9e672cb8f | |||
| ae21fe1426 | |||
| 0e6929eeed | |||
| 7767ff77ba | |||
| a04a6b81f1 | |||
| 57901ae14e | |||
| 73325a848c | |||
| 7da24cbbfb | |||
| fc60f584cf | |||
| 95608f2bfa | |||
| 64eae63335 | |||
| f34bf9c853 | |||
| ce675dd168 | |||
| aa9a9df476 | |||
| 32355dd7ee | |||
| 218f8fa0e7 | |||
| 3466a8aba0 | |||
| 72cbcd5551 | |||
| 340a2ab92f | |||
| 6046f90c81 | |||
| 3221c78b23 | |||
| ee264ae42d | |||
| 8f5e6d6c10 | |||
| f83178aa06 | |||
| 9c35d324b9 | |||
| e8ee2672c9 | |||
| 82cbe88da2 | |||
| 3aa4557971 | |||
| 18c9a5d628 | |||
| dbbfc3d8ff | |||
| 769dc917b5 | |||
| 5e771a9c2c | |||
| 632a1f13c5 | |||
| e0d0619dcb | |||
| d89718daa3 | |||
| 36fa73a3b6 | |||
| 13a7e9b0db | |||
| 89ceac6561 | |||
| aa1c23af60 | |||
| 7ffb78ab59 | |||
| d8ff719ba7 | |||
| 68bdb4862f | |||
| ac0d3e85a0 | |||
| 88bc79b530 | |||
| bbc1933f92 | |||
|
|
6b166adadf | ||
|
|
9bc902cb90 | ||
|
|
3bda156ab4 | ||
| b1199a7eda | |||
| b05de0fb22 | |||
| 6c3b82e000 | |||
| 441bda36b5 | |||
| 8d7bb62014 | |||
| 99768f0b4a | |||
| ea4e20e990 | |||
| a3e808d71d | |||
| ead919a8ce | |||
| 28628f2269 | |||
| 138d1bd1b3 | |||
| 6d0f9224be | |||
| dc11021b22 | |||
| 4cc8a23bd8 | |||
| 8b71743b00 | |||
| 92418c9f81 | |||
| 26d4d42153 | |||
| 0241c5ce3a | |||
| b31503e82b | |||
| 27e4661529 | |||
| d13a65eed6 | |||
| 9374493029 | |||
| 12fb7ab7b0 | |||
| 47e153f9a3 | |||
| 20eeefc476 | |||
| ec307680fa | |||
| ce84616e1c | |||
| 39ae22d7dc | |||
| 4e91adfd14 | |||
| 320bbfda29 | |||
| bf2a27399b | |||
| ec92d8ee9c | |||
| 98b968b8bb | |||
| f00ba797a3 | |||
| 33fdd4cb2b | |||
| dd5f6e9e04 | |||
| 2a7822d868 | |||
| 4d3cbe3409 | |||
| 2c5429982a | |||
| 9f616076eb | |||
| 284945f7c0 | |||
| 064c2b8490 | |||
| d1629cd8b0 | |||
| 8896c27e13 | |||
| 5e5e1334aa | |||
| d164b95f21 | |||
| d530fd3d23 | |||
| eafba50214 | |||
| 3062a5d444 | |||
| 239ffe5083 | |||
| d08153e691 | |||
| 3b7d162a5a | |||
| 2a017e1523 | |||
| b1d59bbb9e | |||
| ed2d9c57f8 |
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
result
|
||||
13
configuration/base/default.nix
Normal file
13
configuration/base/default.nix
Normal file
@@ -0,0 +1,13 @@
|
||||
{ ... }:
|
||||
|
||||
{
|
||||
imports = [
|
||||
./fonts.nix
|
||||
./location-time.nix
|
||||
./networking.nix
|
||||
./nix-settings.nix
|
||||
./oomd.nix
|
||||
./pipewire.nix
|
||||
./programs.nix
|
||||
];
|
||||
}
|
||||
29
configuration/base/fonts.nix
Normal file
29
configuration/base/fonts.nix
Normal file
@@ -0,0 +1,29 @@
|
||||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
fonts = {
|
||||
enableDefaultPackages = true;
|
||||
fontconfig.useEmbeddedBitmaps = true;
|
||||
packages = with pkgs; [
|
||||
noto-fonts
|
||||
noto-fonts-cjk-sans
|
||||
noto-fonts-cjk-serif
|
||||
];
|
||||
};
|
||||
|
||||
# Select internationalisation properties.
|
||||
i18n = {
|
||||
defaultLocale = "en_GB.UTF-8";
|
||||
supportedLocales = [
|
||||
"en_GB.UTF-8/UTF-8"
|
||||
"en_US.UTF-8/UTF-8"
|
||||
"ja_JP.UTF-8/UTF-8"
|
||||
];
|
||||
};
|
||||
|
||||
console = {
|
||||
# font = "Lat2-Terminus16";
|
||||
keyMap = "uk";
|
||||
# useXkbConfig = true; # use xkb.options in tty.
|
||||
};
|
||||
}
|
||||
14
configuration/base/location-time.nix
Normal file
14
configuration/base/location-time.nix
Normal file
@@ -0,0 +1,14 @@
|
||||
{ ... }:
|
||||
|
||||
{
|
||||
# Set your time zone.
|
||||
# time.timeZone = "Europe/London";
|
||||
services.automatic-timezoned.enable = true;
|
||||
services.chrony = {
|
||||
enable = true;
|
||||
};
|
||||
services.geoclue2 = {
|
||||
enable = true;
|
||||
geoProviderUrl = "https://api.beacondb.net/v1/geolocate";
|
||||
};
|
||||
}
|
||||
41
configuration/base/networking.nix
Normal file
41
configuration/base/networking.nix
Normal file
@@ -0,0 +1,41 @@
|
||||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
# networking.hostName = "nixos"; # Define your hostname.
|
||||
# Pick only one of the below networking options.
|
||||
# networking.wireless.enable = true; # Enables wireless support via wpa_supplicant.
|
||||
networking = {
|
||||
networkmanager = {
|
||||
# Easiest to use and most distros use this by default.
|
||||
enable = true;
|
||||
wifi.powersave = false;
|
||||
};
|
||||
firewall = {
|
||||
enable = true;
|
||||
};
|
||||
};
|
||||
|
||||
# Configure network proxy if necessary
|
||||
# networking.proxy.default = "http://user:password@proxy:port/";
|
||||
# networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain";
|
||||
|
||||
# Enable CUPS to print documents.
|
||||
# services.printing.enable = true;
|
||||
|
||||
# Open ports in the firewall.
|
||||
# 443 Helldivers crashes internet otherwise
|
||||
# networking.firewall.allowedTCPPorts = [ 443 ];
|
||||
# networking.firewall.allowedUDPPorts = [ 443 ];
|
||||
# Or disable the firewall altogether.
|
||||
# networking.firewall.enable = false;
|
||||
|
||||
# Block list
|
||||
# networking.stevenblack.enable = true;
|
||||
|
||||
# services.resolved.enable = true;
|
||||
|
||||
services.mullvad-vpn = {
|
||||
enable = true;
|
||||
package = pkgs.mullvad-vpn;
|
||||
};
|
||||
}
|
||||
18
configuration/base/nix-settings.nix
Normal file
18
configuration/base/nix-settings.nix
Normal file
@@ -0,0 +1,18 @@
|
||||
{ inputs, ... }:
|
||||
|
||||
{
|
||||
nixpkgs.config.allowUnfree = true;
|
||||
nix.settings.experimental-features = [ "nix-command" "flakes" ];
|
||||
nix.settings.auto-optimise-store = true;
|
||||
nix.gc.automatic = true;
|
||||
nix.gc.options = "--delete-older-than 7d";
|
||||
# https://github.com/nix-community/nixd/blob/main/nixd/docs/configuration.md
|
||||
nix.nixPath = [ "nixpkgs=${inputs.nixpkgs}" ];
|
||||
|
||||
programs.nix-ld = {
|
||||
enable = true;
|
||||
# libraries = pkgs.steam-run.fhsenv.args.multiPkgs pkgs;
|
||||
# libraries = pkgs.appimageTools.defaultFhsEnvArgs.targetPkgs pkgs;
|
||||
};
|
||||
}
|
||||
|
||||
10
configuration/base/oomd.nix
Normal file
10
configuration/base/oomd.nix
Normal file
@@ -0,0 +1,10 @@
|
||||
{ ... }:
|
||||
|
||||
{
|
||||
systemd.oomd = {
|
||||
enable = true;
|
||||
enableRootSlice = true;
|
||||
enableSystemSlice = true;
|
||||
enableUserSlices = true;
|
||||
};
|
||||
}
|
||||
35
configuration/base/pipewire.nix
Normal file
35
configuration/base/pipewire.nix
Normal file
@@ -0,0 +1,35 @@
|
||||
{ ... }:
|
||||
|
||||
{
|
||||
# Enable sound.
|
||||
# hardware.pulseaudio.enable = true;
|
||||
# OR
|
||||
services.pipewire = {
|
||||
enable = true;
|
||||
pulse.enable = true;
|
||||
extraConfig.pipewire-pulse = {
|
||||
"10-prevent-agc" = {
|
||||
"pulse.rules" = [
|
||||
{
|
||||
matches = [
|
||||
{ "application.process.binary" = "chrome"; }
|
||||
{ "application.process.binary" = "Discord"; }
|
||||
{ "application.process.binary" = "teams"; }
|
||||
{ "application.process.binary" = "electron"; }
|
||||
{ "application.process.binary" = "skypeforlinux"; }
|
||||
{ "application.process.binary" = "telegram-desktop"; }
|
||||
{ "application.process.binary" = "vivaldi"; }
|
||||
{ "application.process.binary" = "chromium"; }
|
||||
{ "application.process.binary" = "zoom"; }
|
||||
];
|
||||
actions = {
|
||||
quirks = [
|
||||
"block-source-volume"
|
||||
];
|
||||
};
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
37
configuration/base/programs.nix
Normal file
37
configuration/base/programs.nix
Normal file
@@ -0,0 +1,37 @@
|
||||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
security.sudo-rs.enable = true;
|
||||
services.fwupd.enable = true;
|
||||
services.flatpak.enable = true;
|
||||
programs.bash.blesh.enable = true;
|
||||
programs.fish.enable = true;
|
||||
# List packages installed in system profile. To search, run:
|
||||
# $ nix search wget
|
||||
environment.systemPackages = with pkgs; [
|
||||
# utils
|
||||
uutils-coreutils-noprefix
|
||||
vim
|
||||
curl
|
||||
inetutils
|
||||
dig
|
||||
exfatprogs
|
||||
|
||||
rar
|
||||
zstd
|
||||
p7zip
|
||||
busybox
|
||||
|
||||
libva-utils
|
||||
smartmontools
|
||||
appimage-run
|
||||
|
||||
# dicts
|
||||
nuspell
|
||||
hunspellDicts.en-gb-large
|
||||
|
||||
# For cursor in steam?
|
||||
xsettingsd
|
||||
xorg.xrdb
|
||||
];
|
||||
}
|
||||
@@ -2,83 +2,27 @@
|
||||
# your system. Help is available in the configuration.nix(5) man page, on
|
||||
# https://search.nixos.org/options and in the NixOS manual (`nixos-help`).
|
||||
|
||||
{ config, lib, pkgs, inputs, ... }:
|
||||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
imports =
|
||||
[
|
||||
./nix-settings.nix
|
||||
./fonts.nix
|
||||
./kde.nix
|
||||
];
|
||||
imports = [ ./base ];
|
||||
|
||||
# Use the systemd-boot EFI boot loader.
|
||||
boot.loader.systemd-boot.enable = true;
|
||||
boot.loader.efi.canTouchEfiVariables = true;
|
||||
boot.kernelPackages = pkgs.linuxPackages_zen;
|
||||
boot.kernelPackages = pkgs.linuxPackages_latest;
|
||||
|
||||
hardware.bluetooth.enable = true;
|
||||
hardware.enableRedistributableFirmware = true;
|
||||
hardware.enableAllFirmware = true;
|
||||
|
||||
# networking.hostName = "nixos"; # Define your hostname.
|
||||
# Pick only one of the below networking options.
|
||||
# networking.wireless.enable = true; # Enables wireless support via wpa_supplicant.
|
||||
networking.networkmanager = {
|
||||
# Easiest to use and most distros use this by default.
|
||||
enable = true;
|
||||
wifi.powersave = false;
|
||||
};
|
||||
|
||||
# Set your time zone.
|
||||
time.timeZone = "Europe/London";
|
||||
|
||||
# Configure network proxy if necessary
|
||||
# networking.proxy.default = "http://user:password@proxy:port/";
|
||||
# networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain";
|
||||
|
||||
# Enable CUPS to print documents.
|
||||
# services.printing.enable = true;
|
||||
|
||||
# Enable sound.
|
||||
# hardware.pulseaudio.enable = true;
|
||||
# OR
|
||||
services.pipewire = {
|
||||
enable = true;
|
||||
pulse.enable = true;
|
||||
};
|
||||
|
||||
# Disks / Swap / etc
|
||||
# swapDevices = [{
|
||||
# device = "/var/lib/swapfile";
|
||||
# size = 16 * 1024; # 16 GB
|
||||
# }];
|
||||
zramSwap.enable = true; # Creates a zram block device and uses it as a swap device
|
||||
services.fstrim.enable = true;
|
||||
# services.resolved.enable = true;
|
||||
services.mullvad-vpn = {
|
||||
enable = true;
|
||||
package = pkgs.mullvad-vpn;
|
||||
};
|
||||
|
||||
services.fwupd.enable = true;
|
||||
services.geoclue2.enable = true;
|
||||
services.flatpak.enable = true;
|
||||
|
||||
programs.nix-ld.enable = true;
|
||||
|
||||
# List packages installed in system profile. To search, run:
|
||||
# $ nix search wget
|
||||
environment.systemPackages = with pkgs;
|
||||
[
|
||||
nixpkgs-fmt
|
||||
|
||||
gcc
|
||||
|
||||
vim
|
||||
curl
|
||||
wget
|
||||
inetutils
|
||||
rar
|
||||
|
||||
nuspell
|
||||
hunspellDicts.en-gb-ise
|
||||
|
||||
libva-utils
|
||||
smartmontools
|
||||
];
|
||||
|
||||
# Some programs need SUID wrappers, can be configured further or are
|
||||
# started in user sessions.
|
||||
@@ -93,13 +37,6 @@
|
||||
# Enable the OpenSSH daemon.
|
||||
# services.openssh.enable = true;
|
||||
|
||||
# Open ports in the firewall.
|
||||
# 443 Helldivers crashes internet otherwise
|
||||
networking.firewall.allowedTCPPorts = [ 443 ];
|
||||
networking.firewall.allowedUDPPorts = [ 443 ];
|
||||
# Or disable the firewall altogether.
|
||||
# networking.firewall.enable = false;
|
||||
|
||||
# Copy the NixOS configuration file and link it from the resulting system
|
||||
# (/run/current-system/configuration.nix). This is useful in case you
|
||||
# accidentally delete configuration.nix.
|
||||
@@ -123,5 +60,4 @@
|
||||
#
|
||||
# For more information, see `man configuration.nix` or https://nixos.org/manual/nixos/stable/options#opt-system.stateVersion .
|
||||
system.stateVersion = "24.05"; # Did you read the comment?
|
||||
|
||||
}
|
||||
@@ -1,35 +0,0 @@
|
||||
{ config, lib, pkgs, inputs, ... }:
|
||||
|
||||
{
|
||||
fonts.enableDefaultPackages = true;
|
||||
fonts.packages = with pkgs; [
|
||||
noto-fonts
|
||||
noto-fonts-cjk-sans
|
||||
noto-fonts-cjk-serif
|
||||
];
|
||||
|
||||
# Select internationalisation properties.
|
||||
i18n = {
|
||||
defaultLocale = "en_GB.UTF-8";
|
||||
supportedLocales = [
|
||||
"en_GB.UTF-8/UTF-8"
|
||||
"en_US.UTF-8/UTF-8"
|
||||
"ja_JP.UTF-8/UTF-8"
|
||||
];
|
||||
inputMethod = {
|
||||
enable = true;
|
||||
type = "fcitx5";
|
||||
fcitx5 = {
|
||||
waylandFrontend = true;
|
||||
addons = with pkgs; [ fcitx5-mozc ];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
console = {
|
||||
# font = "Lat2-Terminus16";
|
||||
keyMap = "uk";
|
||||
# useXkbConfig = true; # use xkb.options in tty.
|
||||
};
|
||||
}
|
||||
@@ -1,23 +0,0 @@
|
||||
{ config, lib, pkgs, inputs, ... }:
|
||||
|
||||
{
|
||||
services.xserver.enable = true; # optional
|
||||
|
||||
# Configure keymap in X11
|
||||
# services.xserver.xkb.layout = "us";
|
||||
# services.xserver.xkb.options = "eurosign:e,caps:escape";
|
||||
|
||||
services.displayManager.sddm.enable = true;
|
||||
services.displayManager.sddm.wayland.enable = true;
|
||||
services.desktopManager.plasma6.enable = true;
|
||||
|
||||
environment.systemPackages = with pkgs;
|
||||
[ ] ++ (with kdePackages; [
|
||||
sddm-kcm
|
||||
plasma-disks
|
||||
partitionmanager
|
||||
filelight
|
||||
ffmpegthumbs
|
||||
kcalc
|
||||
]);
|
||||
}
|
||||
43
configuration/modules/gaming.nix
Normal file
43
configuration/modules/gaming.nix
Normal file
@@ -0,0 +1,43 @@
|
||||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
hardware.graphics.enable32Bit = true; # For 32 bit applications
|
||||
hardware.steam-hardware.enable = true;
|
||||
|
||||
programs.gamemode.enable = true;
|
||||
programs.gamescope = {
|
||||
enable = true;
|
||||
# capSysNice = true;
|
||||
args = [
|
||||
"-H 1080"
|
||||
];
|
||||
};
|
||||
programs.steam = {
|
||||
enable = true;
|
||||
remotePlay.openFirewall = true; # Open ports in the firewall for Steam Remote Play
|
||||
gamescopeSession.enable = true;
|
||||
protontricks.enable = true;
|
||||
extraCompatPackages = [ pkgs.proton-ge-bin ];
|
||||
package = pkgs.steam.override {
|
||||
extraPkgs = pkgs': with pkgs'; [
|
||||
xorg.libXcursor
|
||||
xorg.libXi
|
||||
xorg.libXinerama
|
||||
xorg.libXScrnSaver
|
||||
libpng
|
||||
libpulseaudio
|
||||
libvorbis
|
||||
stdenv.cc.cc.lib # Provides libstdc++.so.6
|
||||
libkrb5
|
||||
keyutils
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
programs.cdemu.enable = true; # Remember to add users to the cdrom group for this to work
|
||||
|
||||
environment.systemPackages = with pkgs;[
|
||||
lsfg-vk
|
||||
lsfg-vk-ui
|
||||
];
|
||||
}
|
||||
27
configuration/modules/gnome.nix
Normal file
27
configuration/modules/gnome.nix
Normal file
@@ -0,0 +1,27 @@
|
||||
{ pkgs, config, lib, ... }:
|
||||
with lib;
|
||||
{
|
||||
options.gnome.tablet = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
};
|
||||
|
||||
config = {
|
||||
services.xserver.enable = true;
|
||||
services.xserver.displayManager.gdm.enable = true;
|
||||
services.xserver.desktopManager.gnome.enable = true;
|
||||
|
||||
# To disable installing GNOME's suite of applications
|
||||
# and only be left with GNOME shell.
|
||||
# services.gnome.core-apps.enable = false;
|
||||
services.gnome.core-developer-tools.enable = false;
|
||||
services.gnome.games.enable = false;
|
||||
environment.gnome.excludePackages = with pkgs; [ gnome-tour gnome-user-docs ];
|
||||
|
||||
environment.systemPackages = with pkgs.gnomeExtensions; [
|
||||
appindicator
|
||||
] ++ optionals config.gnome.tablet [
|
||||
touchup
|
||||
];
|
||||
};
|
||||
}
|
||||
24
configuration/modules/i18n.nix
Normal file
24
configuration/modules/i18n.nix
Normal file
@@ -0,0 +1,24 @@
|
||||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
# Install Japanese IME MOZC
|
||||
i18n.inputMethod = {
|
||||
enable = true;
|
||||
type = "fcitx5";
|
||||
# ibus = {
|
||||
# engines = with pkgs.ibus-engines; [ mozc anthy ];
|
||||
# panel = "${pkgs.kdePackages.plasma-desktop}/libexec/kimpanel-ibus-panel";
|
||||
# };
|
||||
fcitx5 = {
|
||||
waylandFrontend = true;
|
||||
addons = with pkgs; [
|
||||
fcitx5-mozc
|
||||
fcitx5-anthy
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
environment.systemPackages = [
|
||||
pkgs.kdePackages.fcitx5-configtool
|
||||
];
|
||||
}
|
||||
29
configuration/modules/kde.nix
Normal file
29
configuration/modules/kde.nix
Normal file
@@ -0,0 +1,29 @@
|
||||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
services.xserver.enable = true; # optional
|
||||
|
||||
# Configure keymap in X11
|
||||
# services.xserver.xkb.layout = "us";
|
||||
# services.xserver.xkb.options = "eurosign:e,caps:escape";
|
||||
|
||||
services.displayManager.sddm = {
|
||||
enable = true;
|
||||
wayland.enable = true;
|
||||
};
|
||||
services.desktopManager.plasma6.enable = true;
|
||||
environment.plasma6.excludePackages = [ pkgs.kdePackages.discover ];
|
||||
|
||||
# For cursor in steam?
|
||||
# xdg.icons.fallbackCursorThemes = [ "breeze_cursors" ];
|
||||
|
||||
programs.partition-manager.enable = true;
|
||||
|
||||
environment.systemPackages = with pkgs.kdePackages;[
|
||||
sddm-kcm
|
||||
plasma-disks
|
||||
filelight
|
||||
ffmpegthumbs
|
||||
kcalc
|
||||
];
|
||||
}
|
||||
21
configuration/modules/laptop.nix
Normal file
21
configuration/modules/laptop.nix
Normal file
@@ -0,0 +1,21 @@
|
||||
{ ... }:
|
||||
|
||||
{
|
||||
services.power-profiles-daemon.enable = true;
|
||||
# services.tlp = {
|
||||
# enable = true;
|
||||
# settings = {
|
||||
# RESTORE_DEVICE_STATE_ON_STARTUP = 1;
|
||||
# USB_AUTOSUSPEND = 0;
|
||||
# PLATFORM_PROFILE_ON_AC = "performance";
|
||||
# PLATFORM_PROFILE_ON_BAT = "low-power";
|
||||
# CPU_ENERGY_PERF_POLICY_ON_AC = "performance";
|
||||
# CPU_ENERGY_PERF_POLICY_ON_BAT = "balance_power";
|
||||
# CPU_BOOST_ON_AC = 1;
|
||||
# CPU_BOOST_ON_BAT = 0;
|
||||
# };
|
||||
# };
|
||||
|
||||
# Enable touchpad support (enabled by default in most desktopManagers).
|
||||
services.libinput.enable = true;
|
||||
}
|
||||
53
configuration/modules/virtualisation.nix
Normal file
53
configuration/modules/virtualisation.nix
Normal file
@@ -0,0 +1,53 @@
|
||||
{ pkgs, lib, config, ... }:
|
||||
|
||||
with lib;
|
||||
{
|
||||
options.virtualisation.containerManagement = mkOption {
|
||||
type = types.enum [ "docker" "podman" ];
|
||||
default = "docker";
|
||||
};
|
||||
|
||||
config = {
|
||||
virtualisation = {
|
||||
containers = {
|
||||
# Enable common container config files in /etc/containers
|
||||
enable = true;
|
||||
};
|
||||
libvirtd = {
|
||||
enable = true;
|
||||
qemu = {
|
||||
vhostUserPackages = [ pkgs.virtiofsd ];
|
||||
};
|
||||
};
|
||||
# remember to add the necessary users to the podman group
|
||||
podman = {
|
||||
enable = if (config.virtualisation.containerManagement == "podman") then true else false;
|
||||
dockerSocket.enable = true;
|
||||
dockerCompat = true;
|
||||
defaultNetwork.settings.dns_enabled = true;
|
||||
};
|
||||
# remember to add the necessary users to the docker group
|
||||
docker = {
|
||||
enable = if (config.virtualisation.containerManagement == "docker") then true else false;
|
||||
storageDriver = "btrfs";
|
||||
};
|
||||
waydroid = {
|
||||
enable = true;
|
||||
package = pkgs.waydroid-nftables;
|
||||
};
|
||||
};
|
||||
programs.virt-manager.enable = true;
|
||||
|
||||
environment.systemPackages = with pkgs;[
|
||||
waydroid-helper
|
||||
] ++ optionals (config.virtualisation.containerManagement == "podman") [
|
||||
docker-compose
|
||||
# podman-compose
|
||||
podman-tui
|
||||
podman-desktop
|
||||
] ++ optionals (config.virtualisation.containerManagement == "docker") [
|
||||
lazydocker
|
||||
];
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
{ config, lib, pkgs, inputs, ... }:
|
||||
|
||||
{
|
||||
nixpkgs.config.allowUnfree = true;
|
||||
nix.settings.experimental-features = [ "nix-command" "flakes" ];
|
||||
nix.settings.auto-optimise-store = true;
|
||||
nix.gc.automatic = true;
|
||||
nix.gc.options = "--delete-older-than 30d";
|
||||
}
|
||||
|
||||
59
devices/deck/flake.nix
Normal file
59
devices/deck/flake.nix
Normal file
@@ -0,0 +1,59 @@
|
||||
{
|
||||
inputs = {
|
||||
nixpkgs.url = "github:nixos/nixpkgs/nixos-25.11?shallow=1";
|
||||
nixpkgs-unstable.url = "github:nixos/nixpkgs/nixos-unstable?shallow=1"; # use by inputs.nixpkgs-unstable.legacyPackages."${pkgs.stdenv.hostPlatform.system}".[package name]
|
||||
|
||||
home-manager = {
|
||||
url = "github:nix-community/home-manager/release-25.11?shallow=1";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
nix-index-database = {
|
||||
url = "github:nix-community/nix-index-database?shallow=1";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
nix-vscode-extensions.url = "github:nix-community/nix-vscode-extensions?shallow=1";
|
||||
|
||||
system-manager = {
|
||||
url = "github:numtide/system-manager?shallow=1";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
nix-system-graphics = {
|
||||
url = "github:soupglasses/nix-system-graphics?shallow=1";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
};
|
||||
|
||||
outputs = { nixpkgs, home-manager, system-manager, nix-system-graphics, nix-index-database, ... }@inputs:
|
||||
let
|
||||
system = "x86_64-linux";
|
||||
pkgs = import nixpkgs {
|
||||
inherit system;
|
||||
overlays = [ system-manager.overlays.default ];
|
||||
};
|
||||
in
|
||||
{
|
||||
packages.${system}.homeConfigurations.deck = home-manager.lib.homeManagerConfiguration {
|
||||
inherit pkgs;
|
||||
extraSpecialArgs = { inherit inputs; };
|
||||
modules = [
|
||||
nix-index-database.homeModules.nix-index
|
||||
./home.nix
|
||||
];
|
||||
};
|
||||
systemConfigs.deck = system-manager.lib.makeSystemConfig {
|
||||
modules = [
|
||||
nix-system-graphics.systemModules.default
|
||||
{
|
||||
config = {
|
||||
nixpkgs.hostPlatform = "x86_64-linux";
|
||||
system-manager.allowAnyDistro = true;
|
||||
system-graphics.enable = true;
|
||||
};
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
66
devices/deck/home.nix
Normal file
66
devices/deck/home.nix
Normal file
@@ -0,0 +1,66 @@
|
||||
{ pkgs, ... }:
|
||||
|
||||
let
|
||||
homeUpdateLocation = "/home/deck/Projects/nixos/devices/deck#deck";
|
||||
in
|
||||
{
|
||||
imports = [
|
||||
../../home-manager
|
||||
../../home-manager/gaming.nix
|
||||
../../home-manager/development/vscode.nix
|
||||
];
|
||||
|
||||
terminal.homeUpdateLocation = homeUpdateLocation;
|
||||
terminal.flakeUpdateLocation = "/home/deck/Projects/nixos/devices/deck";
|
||||
|
||||
nixpkgs.config = {
|
||||
allowUnfree = true;
|
||||
};
|
||||
nix.gc.automatic = true;
|
||||
|
||||
home.username = "deck";
|
||||
home.homeDirectory = "/home/deck";
|
||||
|
||||
home.stateVersion = "24.05";
|
||||
|
||||
home.packages = with pkgs;[
|
||||
system-manager
|
||||
];
|
||||
|
||||
home.file = {
|
||||
# # Building this configuration will create a copy of 'dotfiles/screenrc' in
|
||||
# # the Nix store. Activating the configuration will then make '~/.screenrc' a
|
||||
# # symlink to the Nix store copy.
|
||||
# ".screenrc".source = dotfiles/screenrc;
|
||||
|
||||
# # You can also set the file content immediately.
|
||||
# ".gradle/gradle.properties".text = ''
|
||||
# org.gradle.console=verbose
|
||||
# org.gradle.daemon.idletimeout=3600000
|
||||
# '';
|
||||
"nix-steam-run.sh" = {
|
||||
text = ''
|
||||
unset LD_PRELOAD
|
||||
# shellcheck source=/dev/null
|
||||
source /etc/profile.d/nix.sh
|
||||
exec "$@"
|
||||
'';
|
||||
executable = true;
|
||||
};
|
||||
};
|
||||
|
||||
programs = {
|
||||
topgrade = {
|
||||
settings = {
|
||||
post_commands = {
|
||||
nix-system-manager = "sudo system-manager switch --flake ${homeUpdateLocation}";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
kodi = {
|
||||
enable = true;
|
||||
package = pkgs.kodi.withPackages (exts: [ exts.jellycon exts.joystick ]);
|
||||
};
|
||||
};
|
||||
}
|
||||
45
devices/starlite/configuration.nix
Normal file
45
devices/starlite/configuration.nix
Normal file
@@ -0,0 +1,45 @@
|
||||
# Edit this configuration file to define what should be installed on
|
||||
# your system. Help is available in the configuration.nix(5) man page, on
|
||||
# https://search.nixos.org/options and in the NixOS manual (`nixos-help`).
|
||||
|
||||
{ inputs, pkgs, ... }:
|
||||
|
||||
{
|
||||
imports =
|
||||
[
|
||||
../../configuration
|
||||
# Include the results of the hardware scan.
|
||||
./hardware-configuration.nix
|
||||
inputs.disko.nixosModules.default
|
||||
./disk-config.nix
|
||||
inputs.home-manager.nixosModules.default
|
||||
../../configuration/modules/laptop.nix
|
||||
../../configuration/modules/gnome.nix
|
||||
];
|
||||
|
||||
gnome.tablet = true;
|
||||
|
||||
networking.hostName = "starlite"; # Define your hostname.
|
||||
environment.systemPackages = with pkgs.gnomeExtensions; [
|
||||
touchup
|
||||
];
|
||||
|
||||
# Define a user account. Don't forget to set a password with ‘passwd’.
|
||||
users.users.worble = {
|
||||
initialPassword = "password";
|
||||
isNormalUser = true;
|
||||
extraGroups = [ "wheel" ]; # Enable ‘sudo’ for the user.
|
||||
linger = true;
|
||||
};
|
||||
|
||||
home-manager.useGlobalPkgs = true;
|
||||
home-manager = {
|
||||
extraSpecialArgs = { inherit inputs; };
|
||||
sharedModules = [
|
||||
inputs.nix-index-database.homeModules.nix-index
|
||||
];
|
||||
users = {
|
||||
"worble" = import ./home.nix;
|
||||
};
|
||||
};
|
||||
}
|
||||
37
devices/starlite/disk-config.nix
Normal file
37
devices/starlite/disk-config.nix
Normal file
@@ -0,0 +1,37 @@
|
||||
{
|
||||
disko.devices = {
|
||||
disk = {
|
||||
main = {
|
||||
type = "disk";
|
||||
device = "/dev/nvme0n1";
|
||||
content = {
|
||||
type = "gpt";
|
||||
partitions = {
|
||||
ESP = {
|
||||
priority = 1;
|
||||
name = "ESP";
|
||||
start = "1M";
|
||||
end = "128M";
|
||||
type = "EF00";
|
||||
content = {
|
||||
type = "filesystem";
|
||||
format = "vfat";
|
||||
mountpoint = "/boot";
|
||||
};
|
||||
};
|
||||
root = {
|
||||
size = "100%";
|
||||
content = {
|
||||
type = "btrfs";
|
||||
extraArgs = [ "-f" ]; # Override existing partition
|
||||
mountpoint = "/";
|
||||
mountOptions = [ "compress=zstd" "noatime" ];
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
135
flake.lock → devices/starlite/flake.lock
generated
135
flake.lock → devices/starlite/flake.lock
generated
@@ -7,11 +7,11 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1736526728,
|
||||
"narHash": "sha256-vb/ldbBHRbfT9U7SoCYmxh+h+PHuFqGjCBO0bPXsze4=",
|
||||
"lastModified": 1760701190,
|
||||
"narHash": "sha256-y7UhnWlER8r776JsySqsbTUh2Txf7K30smfHlqdaIQw=",
|
||||
"owner": "nix-community",
|
||||
"repo": "disko",
|
||||
"rev": "b1a94497b1c27fe7f81e3e76990959f5051da18b",
|
||||
"rev": "3a9450b26e69dcb6f8de6e2b07b3fc1c288d85f5",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -20,40 +20,6 @@
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"flake-compat": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1696426674,
|
||||
"narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
|
||||
"owner": "edolstra",
|
||||
"repo": "flake-compat",
|
||||
"rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "edolstra",
|
||||
"repo": "flake-compat",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"flake-utils": {
|
||||
"inputs": {
|
||||
"systems": "systems"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1710146030,
|
||||
"narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=",
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "numtide",
|
||||
"repo": "flake-utils",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"home-manager": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
@@ -61,32 +27,50 @@
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1736373539,
|
||||
"narHash": "sha256-dinzAqCjenWDxuy+MqUQq0I4zUSfaCvN9rzuCmgMZJY=",
|
||||
"lastModified": 1758463745,
|
||||
"narHash": "sha256-uhzsV0Q0I9j2y/rfweWeGif5AWe0MGrgZ/3TjpDYdGA=",
|
||||
"owner": "nix-community",
|
||||
"repo": "home-manager",
|
||||
"rev": "bd65bc3cde04c16755955630b344bc9e35272c56",
|
||||
"rev": "3b955f5f0a942f9f60cdc9cacb7844335d0f21c3",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-community",
|
||||
"ref": "release-24.11",
|
||||
"ref": "release-25.05",
|
||||
"repo": "home-manager",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nix-index-database": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1760846226,
|
||||
"narHash": "sha256-xmU8kAsRprJiTGBTaGrwmjBP3AMA9ltlrxHKFuy5JWc=",
|
||||
"owner": "nix-community",
|
||||
"repo": "nix-index-database",
|
||||
"rev": "5024e1901239a76b7bf94a4cd27f3507e639d49e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-community",
|
||||
"repo": "nix-index-database",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nix-vscode-extensions": {
|
||||
"inputs": {
|
||||
"flake-compat": "flake-compat",
|
||||
"flake-utils": "flake-utils",
|
||||
"nixpkgs": "nixpkgs"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1736473789,
|
||||
"narHash": "sha256-euzobfF3ZGZS2r7RP+eUbZTdZ7NnsSZdEHf4iZICs7Y=",
|
||||
"lastModified": 1761098495,
|
||||
"narHash": "sha256-aE2Vp0Q/Ra95sHk/YgQI6z9PvqPttgcIVUk3uSOWj9g=",
|
||||
"owner": "nix-community",
|
||||
"repo": "nix-vscode-extensions",
|
||||
"rev": "435ca21d3a971c11f5007ba7adfd2b88eda2dfe9",
|
||||
"rev": "bd4690e402591e99a091dcd49663d3d6c9bf0ada",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -95,29 +79,45 @@
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixos-hardware": {
|
||||
"locked": {
|
||||
"lastModified": 1760958188,
|
||||
"narHash": "sha256-2m1S4jl+GEDtlt2QqeHil8Ny456dcGSKJAM7q3j/BFU=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixos-hardware",
|
||||
"rev": "d6645c340ef7d821602fd2cd199e8d1eed10afbc",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "master",
|
||||
"repo": "nixos-hardware",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1713805509,
|
||||
"narHash": "sha256-YgSEan4CcrjivCNO5ZNzhg7/8ViLkZ4CB/GrGBVSudo=",
|
||||
"owner": "NixOS",
|
||||
"lastModified": 1759770925,
|
||||
"narHash": "sha256-CZwkCtzTNclqlhuwDsVtGoRumTpqCUK0xSnFIMgd8ls=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "1e1dc66fe68972a76679644a5577828b6a7e8be4",
|
||||
"rev": "674c2b09c59a220204350ced584cadaacee30038",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixpkgs-unstable",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "674c2b09c59a220204350ced584cadaacee30038",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs-unstable": {
|
||||
"locked": {
|
||||
"lastModified": 1736344531,
|
||||
"narHash": "sha256-8YVQ9ZbSfuUk2bUf2KRj60NRraLPKPS0Q4QFTbc+c2c=",
|
||||
"lastModified": 1760878510,
|
||||
"narHash": "sha256-K5Osef2qexezUfs0alLvZ7nQFTGS9DL2oTVsIXsqLgs=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "bffc22eb12172e6db3c5dde9e3e5628f8e3e7912",
|
||||
"rev": "5e2a59a5b1a82f89f2c7e598302a9cacebb72a67",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -129,16 +129,16 @@
|
||||
},
|
||||
"nixpkgs_2": {
|
||||
"locked": {
|
||||
"lastModified": 1736200483,
|
||||
"narHash": "sha256-JO+lFN2HsCwSLMUWXHeOad6QUxOuwe9UOAF/iSl1J4I=",
|
||||
"lastModified": 1760862643,
|
||||
"narHash": "sha256-PXwG0TM7Ek87DNx4LbGWuD93PbFeKAJs4FfALtp7Wo0=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "3f0a8ac25fb674611b98089ca3a5dd6480175751",
|
||||
"rev": "33c6dca0c0cb31d6addcd34e90a63ad61826b28c",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nixos",
|
||||
"ref": "nixos-24.11",
|
||||
"ref": "nixos-25.05",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
@@ -147,25 +147,12 @@
|
||||
"inputs": {
|
||||
"disko": "disko",
|
||||
"home-manager": "home-manager",
|
||||
"nix-index-database": "nix-index-database",
|
||||
"nix-vscode-extensions": "nix-vscode-extensions",
|
||||
"nixos-hardware": "nixos-hardware",
|
||||
"nixpkgs": "nixpkgs_2",
|
||||
"nixpkgs-unstable": "nixpkgs-unstable"
|
||||
}
|
||||
},
|
||||
"systems": {
|
||||
"locked": {
|
||||
"lastModified": 1681028828,
|
||||
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"type": "github"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
35
devices/starlite/flake.nix
Normal file
35
devices/starlite/flake.nix
Normal file
@@ -0,0 +1,35 @@
|
||||
{
|
||||
inputs = {
|
||||
nixpkgs.url = "github:nixos/nixpkgs/nixos-25.11?shallow=1";
|
||||
nixpkgs-unstable.url = "github:nixos/nixpkgs/nixos-unstable?shallow=1"; # use by inputs.nixpkgs-unstable.legacyPackages."${pkgs.stdenv.hostPlatform.system}".[package name]
|
||||
|
||||
home-manager = {
|
||||
url = "github:nix-community/home-manager/release-25.11?shallow=1";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
nix-index-database = {
|
||||
url = "github:nix-community/nix-index-database?shallow=1";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
nixos-hardware.url = "github:NixOS/nixos-hardware/master?shallow=1";
|
||||
disko = {
|
||||
url = "github:nix-community/disko?shallow=1";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
nix-vscode-extensions.url = "github:nix-community/nix-vscode-extensions?shallow=1";
|
||||
};
|
||||
|
||||
outputs = { nixpkgs, nixos-hardware, ... }@inputs:
|
||||
{
|
||||
nixosConfigurations.starlite = nixpkgs.lib.nixosSystem {
|
||||
specialArgs = { inherit inputs; };
|
||||
modules = [
|
||||
nixos-hardware.nixosModules.starlabs-starlite-i5
|
||||
./configuration.nix
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
27
devices/starlite/hardware-configuration.nix
Normal file
27
devices/starlite/hardware-configuration.nix
Normal file
@@ -0,0 +1,27 @@
|
||||
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
||||
# and may be overwritten by future invocations. Please make changes
|
||||
# to /etc/nixos/configuration.nix instead.
|
||||
{ config, lib, modulesPath, ... }:
|
||||
|
||||
{
|
||||
imports =
|
||||
[
|
||||
(modulesPath + "/installer/scan/not-detected.nix")
|
||||
];
|
||||
|
||||
boot.initrd.availableKernelModules = [ "xhci_pci" "nvme" "usb_storage" "usbhid" "sd_mod" "rtsx_usb_sdmmc" ];
|
||||
boot.initrd.kernelModules = [ ];
|
||||
boot.kernelModules = [ "kvm-intel" ];
|
||||
boot.extraModulePackages = [ ];
|
||||
|
||||
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
|
||||
# (the default) this is the recommended approach. When using systemd-networkd it's
|
||||
# still possible to use this option, but it's recommended to use it in conjunction
|
||||
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
|
||||
networking.useDHCP = lib.mkDefault true;
|
||||
# networking.interfaces.enp0s20f0u1u3.useDHCP = lib.mkDefault true;
|
||||
# networking.interfaces.wlp0s20f3.useDHCP = lib.mkDefault true;
|
||||
|
||||
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
||||
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
||||
}
|
||||
32
devices/starlite/home.nix
Normal file
32
devices/starlite/home.nix
Normal file
@@ -0,0 +1,32 @@
|
||||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
imports = [
|
||||
../../home-manager
|
||||
../../home-manager/development/vscode.nix
|
||||
];
|
||||
|
||||
terminal.nixUpdateLocation = "/home/worble/Projects/nixos/devices/starlite#starlite";
|
||||
terminal.flakeUpdateLocation = "/home/worble/Projects/nixos/devices/starlite";
|
||||
firefox.tablet = true;
|
||||
|
||||
home.username = "worble";
|
||||
home.homeDirectory = "/home/worble";
|
||||
|
||||
home.stateVersion = "24.05";
|
||||
|
||||
home.packages = with pkgs;[ ];
|
||||
|
||||
home.file = {
|
||||
# # Building this configuration will create a copy of 'dotfiles/screenrc' in
|
||||
# # the Nix store. Activating the configuration will then make '~/.screenrc' a
|
||||
# # symlink to the Nix store copy.
|
||||
# ".screenrc".source = dotfiles/screenrc;
|
||||
|
||||
# # You can also set the file content immediately.
|
||||
# ".gradle/gradle.properties".text = ''
|
||||
# org.gradle.console=verbose
|
||||
# org.gradle.daemon.idletimeout=3600000
|
||||
# '';
|
||||
};
|
||||
}
|
||||
98
devices/tuxedo/configuration.nix
Normal file
98
devices/tuxedo/configuration.nix
Normal file
@@ -0,0 +1,98 @@
|
||||
# Edit this configuration file to define what should be installed on
|
||||
# your system. Help is available in the configuration.nix(5) man page, on
|
||||
# https://search.nixos.org/options and in the NixOS manual (`nixos-help`).
|
||||
|
||||
{ inputs, pkgs, ... }:
|
||||
|
||||
{
|
||||
imports =
|
||||
[
|
||||
../../configuration
|
||||
# Include the results of the hardware scan.
|
||||
./hardware-configuration.nix
|
||||
inputs.disko.nixosModules.default
|
||||
./disk-config.nix
|
||||
inputs.home-manager.nixosModules.default
|
||||
../../configuration/modules/laptop.nix
|
||||
../../configuration/modules/virtualisation.nix
|
||||
../../configuration/modules/gaming.nix
|
||||
../../configuration/modules/kde.nix
|
||||
../../configuration/modules/i18n.nix
|
||||
];
|
||||
|
||||
networking.hostName = "tuxedo"; # Define your hostname.
|
||||
|
||||
# options iwlmvm power_scheme=1 https://wireless.docs.kernel.org/en/latest/en/users/drivers/iwlwifi.html#features
|
||||
# options iwlwifi 11n_disable=4 https://wiki.gentoo.org/wiki/Iwlwifi#Network_crashes_under_heavy_load
|
||||
boot.extraModprobeConfig = ''
|
||||
options iwlmvm power_scheme=1
|
||||
options iwlwifi 11n_disable=8 power_save=0
|
||||
'';
|
||||
|
||||
boot.kernelModules = [
|
||||
"ntsync"
|
||||
];
|
||||
|
||||
# services.hardware.openrgb.enable = true;
|
||||
|
||||
virtualisation.containerManagement = "docker";
|
||||
|
||||
fileSystems."/mnt/HDD2" = {
|
||||
fsType = "ext4";
|
||||
label = "HDD2";
|
||||
options = [
|
||||
# If you don't have this options attribute, it'll default to "defaults"
|
||||
# boot options for fstab. Search up fstab mount options you can use
|
||||
"users" # Allows any user to mount and unmount
|
||||
"nofail" # Prevent system from failing if this drive doesn't mount
|
||||
"exec" # Permit execution of binaries and other executable files
|
||||
];
|
||||
};
|
||||
|
||||
# hardware.tuxedo-drivers.enable = true;
|
||||
|
||||
programs.wireshark = {
|
||||
enable = true;
|
||||
package = pkgs.wireshark;
|
||||
dumpcap.enable = true;
|
||||
};
|
||||
|
||||
# programs.gpu-screen-recorder.enable = true; # For promptless recording on both CLI and GUI
|
||||
|
||||
# programs.obs-studio = {
|
||||
# enable = true;
|
||||
# enableVirtualCamera = true;
|
||||
# };
|
||||
|
||||
environment.systemPackages = with pkgs;[
|
||||
distrobox
|
||||
gpu-screen-recorder-gtk
|
||||
];
|
||||
|
||||
# Define a user account. Don't forget to set a password with ‘passwd’.
|
||||
users.users.worble = {
|
||||
initialPassword = "password";
|
||||
isNormalUser = true;
|
||||
extraGroups = [
|
||||
"wheel"
|
||||
"gamemode"
|
||||
"docker"
|
||||
"podman"
|
||||
"cdrom"
|
||||
"wireshark"
|
||||
"kvm" # for android studio
|
||||
]; # Enable ‘sudo’ for the user.
|
||||
linger = true;
|
||||
};
|
||||
|
||||
home-manager = {
|
||||
useGlobalPkgs = true;
|
||||
extraSpecialArgs = { inherit inputs; };
|
||||
sharedModules = [
|
||||
inputs.nix-index-database.homeModules.nix-index
|
||||
];
|
||||
users = {
|
||||
"worble" = import ./home.nix;
|
||||
};
|
||||
};
|
||||
}
|
||||
143
devices/tuxedo/flake.lock
generated
Normal file
143
devices/tuxedo/flake.lock
generated
Normal file
@@ -0,0 +1,143 @@
|
||||
{
|
||||
"nodes": {
|
||||
"disko": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1764110879,
|
||||
"narHash": "sha256-xanUzIb0tf3kJ+PoOFmXEXV1jM3PjkDT/TQ5DYeNYRc=",
|
||||
"owner": "nix-community",
|
||||
"repo": "disko",
|
||||
"rev": "aecba248f9a7d68c5d1ed15de2d1c8a4c994a3c5",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-community",
|
||||
"repo": "disko",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"home-manager": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1764177491,
|
||||
"narHash": "sha256-dhX2abFWxeXab3Aad4Pg1xGtn9W84/qetNXfmYUwktw=",
|
||||
"owner": "nix-community",
|
||||
"repo": "home-manager",
|
||||
"rev": "2217780c39169a9c77915200137550c2ef0fa974",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-community",
|
||||
"ref": "release-25.11",
|
||||
"repo": "home-manager",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nix-index-database": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1763870992,
|
||||
"narHash": "sha256-NPyc76Wxmv/vAsXJ8F+/8fXECHYcv2YGSqdiSHp/F/A=",
|
||||
"owner": "nix-community",
|
||||
"repo": "nix-index-database",
|
||||
"rev": "d7423982c7a26586aa237d130b14c8b302c7a367",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-community",
|
||||
"repo": "nix-index-database",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nix-vscode-extensions": {
|
||||
"inputs": {
|
||||
"nixpkgs": "nixpkgs"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1764208554,
|
||||
"narHash": "sha256-9cHI5OyIcTuaWYrgq3ng7W0q+wgX8II2fkqCHNot5jY=",
|
||||
"owner": "nix-community",
|
||||
"repo": "nix-vscode-extensions",
|
||||
"rev": "8cd52edf9dea91d1610c50b494dc20636b61b862",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-community",
|
||||
"repo": "nix-vscode-extensions",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1759770925,
|
||||
"narHash": "sha256-CZwkCtzTNclqlhuwDsVtGoRumTpqCUK0xSnFIMgd8ls=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "674c2b09c59a220204350ced584cadaacee30038",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "674c2b09c59a220204350ced584cadaacee30038",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs-unstable": {
|
||||
"locked": {
|
||||
"lastModified": 1763966396,
|
||||
"narHash": "sha256-6eeL1YPcY1MV3DDStIDIdy/zZCDKgHdkCmsrLJFiZf0=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "5ae3b07d8d6527c42f17c876e404993199144b6a",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nixos",
|
||||
"ref": "nixos-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_2": {
|
||||
"locked": {
|
||||
"lastModified": 1764020296,
|
||||
"narHash": "sha256-6zddwDs2n+n01l+1TG6PlyokDdXzu/oBmEejcH5L5+A=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "a320ce8e6e2cc6b4397eef214d202a50a4583829",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nixos",
|
||||
"ref": "nixos-25.11",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"disko": "disko",
|
||||
"home-manager": "home-manager",
|
||||
"nix-index-database": "nix-index-database",
|
||||
"nix-vscode-extensions": "nix-vscode-extensions",
|
||||
"nixpkgs": "nixpkgs_2",
|
||||
"nixpkgs-unstable": "nixpkgs-unstable"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
"version": 7
|
||||
}
|
||||
33
devices/tuxedo/flake.nix
Normal file
33
devices/tuxedo/flake.nix
Normal file
@@ -0,0 +1,33 @@
|
||||
{
|
||||
inputs = {
|
||||
nixpkgs.url = "github:nixos/nixpkgs/nixos-25.11?shallow=1";
|
||||
nixpkgs-unstable.url = "github:nixos/nixpkgs/nixos-unstable?shallow=1"; # use by inputs.nixpkgs-unstable.legacyPackages."${pkgs.stdenv.hostPlatform.system}".[package name]
|
||||
|
||||
home-manager = {
|
||||
url = "github:nix-community/home-manager/release-25.11?shallow=1";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
nix-index-database = {
|
||||
url = "github:nix-community/nix-index-database?shallow=1";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
disko = {
|
||||
url = "github:nix-community/disko?shallow=1";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
nix-vscode-extensions.url = "github:nix-community/nix-vscode-extensions?shallow=1";
|
||||
};
|
||||
|
||||
outputs = { nixpkgs, ... }@inputs:
|
||||
{
|
||||
nixosConfigurations.tuxedo = nixpkgs.lib.nixosSystem {
|
||||
specialArgs = { inherit inputs; };
|
||||
modules = [
|
||||
./configuration.nix
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
||||
# and may be overwritten by future invocations. Please make changes
|
||||
# to /etc/nixos/configuration.nix instead.
|
||||
{ config, lib, pkgs, modulesPath, ... }:
|
||||
{ config, lib, modulesPath, ... }:
|
||||
|
||||
{
|
||||
imports =
|
||||
131
devices/tuxedo/home.nix
Normal file
131
devices/tuxedo/home.nix
Normal file
@@ -0,0 +1,131 @@
|
||||
{ pkgs, config, inputs, ... }:
|
||||
|
||||
{
|
||||
imports = [
|
||||
../../home-manager
|
||||
../../home-manager/development
|
||||
../../home-manager/gaming.nix
|
||||
../../home-manager/streamlink.nix
|
||||
];
|
||||
|
||||
terminal.nixUpdateLocation = "/home/worble/Projects/nixos/devices/tuxedo#tuxedo";
|
||||
terminal.flakeUpdateLocation = "/home/worble/Projects/nixos/devices/tuxedo";
|
||||
helix.fullInstall = true;
|
||||
mpv.high-quality = true;
|
||||
|
||||
home.username = "worble";
|
||||
home.homeDirectory = "/home/worble";
|
||||
|
||||
home.stateVersion = "24.05";
|
||||
|
||||
home.packages = with pkgs;[
|
||||
# general
|
||||
gimp-with-plugins
|
||||
obsidian
|
||||
|
||||
# cmd line tools
|
||||
rclone
|
||||
inotify-tools
|
||||
libnotify
|
||||
ffmpeg-full
|
||||
|
||||
# comms
|
||||
teams-for-linux
|
||||
teamspeak6-client
|
||||
|
||||
# media
|
||||
# TODO: disabled due to qt5-web-engine vulnerable https://github.com/NixOS/nixpkgs/pull/435067
|
||||
# jellyfin-media-player
|
||||
haruna
|
||||
|
||||
# misc
|
||||
# TODO: uncomment when ecdsa is updated
|
||||
# https://github.com/NixOS/nixpkgs/pull/456881
|
||||
# electrum
|
||||
dbeaver-bin
|
||||
ruffle
|
||||
popsicle
|
||||
mkvtoolnix
|
||||
|
||||
# for headset tune
|
||||
headsetcontrol
|
||||
];
|
||||
|
||||
# Let Home Manager install and manage itself.
|
||||
programs = {
|
||||
firefox = {
|
||||
profiles.work = (import ../../home-manager/firefox/firefox-profile.nix { tablet = config.firefox.tablet; }) // {
|
||||
id = 1;
|
||||
name = "work";
|
||||
isDefault = false;
|
||||
settings = {
|
||||
# allow fonts
|
||||
"browser.display.use_document_fonts" = 1;
|
||||
# home page
|
||||
"browser.startup.homepage" = "https://outlook.office.com|https://teams.microsoft.com/v2|https://dev.azure.com/binhsps/Connect/_boards/board/t/Development%20Team/Stories";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
mpv = {
|
||||
config = {
|
||||
screenshot-directory = "/mnt/HDD2/Pictures/";
|
||||
};
|
||||
};
|
||||
|
||||
topgrade = {
|
||||
settings = {
|
||||
misc = {
|
||||
ignore_failures = [ "containers" ];
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
systemd.user = {
|
||||
services = {
|
||||
rclone-media = {
|
||||
Unit = {
|
||||
Description = "rclone-media /mnt/HDD2/Videos/";
|
||||
After = [ "network.target" "mnt-HDD2.mount" ];
|
||||
# Maybe? https://unix.stackexchange.com/questions/281650/systemd-unit-requiresmountsfor-vs-conditionpathisdirectory
|
||||
# RequiresMountsFor = "/mnt/HDD2/Videos/";
|
||||
};
|
||||
|
||||
Install = {
|
||||
WantedBy = [ "default.target" ];
|
||||
};
|
||||
|
||||
Service = {
|
||||
RestartSec = 10;
|
||||
Restart = "on-failure";
|
||||
Type = "exec";
|
||||
ExecStart = "${pkgs.writeShellApplication {
|
||||
name = "rclone-media";
|
||||
runtimeInputs = [ pkgs.inotify-tools pkgs.libnotify pkgs.rclone ];
|
||||
text = ''
|
||||
function rclonecopy {
|
||||
file=$1
|
||||
changed_rel=''${file#"/mnt/HDD2/Videos"}
|
||||
notify-send -a "rclone-media" "rclone for $file triggered"
|
||||
if rclone copyto "$file" media:"media-7gM2gcrxRjXqfj$changed_rel" ; then
|
||||
notify-send -a "rclone-media" "rclone complete for $file"
|
||||
else
|
||||
notify-send -u critical -a "rclone-media" "rclone failed for $file"
|
||||
fi
|
||||
}
|
||||
|
||||
inotifywait -mr \
|
||||
--format '%w%f' \
|
||||
-e close_write \
|
||||
/mnt/HDD2/Videos/ |
|
||||
while read -r file; do
|
||||
rclonecopy "$file"
|
||||
done
|
||||
'';
|
||||
}}/bin/rclone-media";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
3
fix-nix.sh
Normal file
3
fix-nix.sh
Normal file
@@ -0,0 +1,3 @@
|
||||
# Occasionally the nix store can get into a tizz and all updates will fail
|
||||
# This should fix that
|
||||
sudo nix-store --repair --verify --check-contents
|
||||
25
flake.nix
25
flake.nix
@@ -1,25 +0,0 @@
|
||||
{
|
||||
inputs = {
|
||||
nixpkgs.url = "github:nixos/nixpkgs/nixos-24.11";
|
||||
nixpkgs-unstable.url = "github:nixos/nixpkgs/nixos-unstable";
|
||||
home-manager = {
|
||||
url = "github:nix-community/home-manager/release-24.11";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
disko = {
|
||||
url = "github:nix-community/disko";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
nix-vscode-extensions.url = "github:nix-community/nix-vscode-extensions";
|
||||
};
|
||||
|
||||
outputs = { self, nixpkgs, ... }@inputs: {
|
||||
nixosConfigurations.tuxedo = nixpkgs.lib.nixosSystem {
|
||||
specialArgs = { inherit inputs; };
|
||||
modules = [
|
||||
./configuration/base.nix
|
||||
./tuxedo/configuration.nix
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
2
home-manager-update.sh
Executable file
2
home-manager-update.sh
Executable file
@@ -0,0 +1,2 @@
|
||||
#!/usr/bin/env bash
|
||||
home-manager switch --flake "$HOME/Projects/nixos/devices/$(whoami)#$(whoami)"
|
||||
9
home-manager/base/default.nix
Normal file
9
home-manager/base/default.nix
Normal file
@@ -0,0 +1,9 @@
|
||||
{ ... }:
|
||||
|
||||
{
|
||||
imports = [
|
||||
./fonts.nix
|
||||
./mpv.nix
|
||||
./terminal.nix
|
||||
];
|
||||
}
|
||||
@@ -1,11 +1,11 @@
|
||||
{ inputs, config, pkgs, ... }:
|
||||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
home.packages = with pkgs;[
|
||||
liberation_ttf
|
||||
ubuntu-sans
|
||||
ubuntu-sans-mono
|
||||
(nerdfonts.override { fonts = [ "SpaceMono" ]; })
|
||||
nerd-fonts.space-mono
|
||||
corefonts
|
||||
];
|
||||
|
||||
fonts.fontconfig = {
|
||||
72
home-manager/base/mpv.nix
Normal file
72
home-manager/base/mpv.nix
Normal file
@@ -0,0 +1,72 @@
|
||||
{ pkgs, lib, config, ... }:
|
||||
|
||||
with lib;
|
||||
{
|
||||
options.mpv = {
|
||||
high-quality = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
};
|
||||
};
|
||||
|
||||
config = {
|
||||
home.file = {
|
||||
".config/mpv/shaders" = {
|
||||
enable = config.mpv.high-quality;
|
||||
source = pkgs.fetchzip {
|
||||
url = "https://github.com/bloc97/Anime4K/releases/download/v4.0.1/Anime4K_v4.0.zip";
|
||||
sha256 = "sha256-9B6U+KEVlhUIIOrDauIN3aVUjZ/gQHjFArS4uf/BpaM=";
|
||||
stripRoot = false;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
programs = {
|
||||
mpv = {
|
||||
enable = true;
|
||||
package = (
|
||||
pkgs.mpv-unwrapped.wrapper {
|
||||
scripts = with pkgs.mpvScripts; [
|
||||
uosc
|
||||
sponsorblock
|
||||
];
|
||||
|
||||
mpv = pkgs.mpv-unwrapped;
|
||||
}
|
||||
);
|
||||
config = mkMerge [{
|
||||
screenshot-directory = lib.mkDefault "~/Pictures/";
|
||||
screenshot-template = lib.mkDefault "%F/%F_snapshot_%P";
|
||||
sub-ass-use-video-data = lib.mkDefault "aspect-ratio";
|
||||
}
|
||||
(mkIf config.mpv.high-quality
|
||||
{
|
||||
profile = lib.mkDefault "gpu-hq";
|
||||
vo = lib.mkDefault "gpu-next";
|
||||
gpu-api = lib.mkDefault "auto";
|
||||
gpu-context = lib.mkDefault "auto";
|
||||
hwdec = lib.mkDefault "auto";
|
||||
glsl-shaders = lib.mkDefault "~~/shaders/Anime4K_Clamp_Highlights.glsl:~~/shaders/Anime4K_Restore_CNN_VL.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_VL.glsl:~~/shaders/Anime4K_AutoDownscalePre_x2.glsl:~~/shaders/Anime4K_AutoDownscalePre_x4.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_M.glsl";
|
||||
})];
|
||||
|
||||
scriptOpts = {
|
||||
uosc = {
|
||||
time_precision = lib.mkDefault 3;
|
||||
};
|
||||
};
|
||||
|
||||
extraInput =
|
||||
if config.mpv.high-quality then ''
|
||||
# Optimized shaders for higher-end GPU:
|
||||
CTRL+1 no-osd change-list glsl-shaders set "~~/shaders/Anime4K_Clamp_Highlights.glsl:~~/shaders/Anime4K_Restore_CNN_VL.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_VL.glsl:~~/shaders/Anime4K_AutoDownscalePre_x2.glsl:~~/shaders/Anime4K_AutoDownscalePre_x4.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_M.glsl"; show-text "Anime4K: Mode A (HQ)"
|
||||
CTRL+2 no-osd change-list glsl-shaders set "~~/shaders/Anime4K_Clamp_Highlights.glsl:~~/shaders/Anime4K_Restore_CNN_Soft_VL.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_VL.glsl:~~/shaders/Anime4K_AutoDownscalePre_x2.glsl:~~/shaders/Anime4K_AutoDownscalePre_x4.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_M.glsl"; show-text "Anime4K: Mode B (HQ)"
|
||||
CTRL+3 no-osd change-list glsl-shaders set "~~/shaders/Anime4K_Clamp_Highlights.glsl:~~/shaders/Anime4K_Upscale_Denoise_CNN_x2_VL.glsl:~~/shaders/Anime4K_AutoDownscalePre_x2.glsl:~~/shaders/Anime4K_AutoDownscalePre_x4.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_M.glsl"; show-text "Anime4K: Mode C (HQ)"
|
||||
CTRL+4 no-osd change-list glsl-shaders set "~~/shaders/Anime4K_Clamp_Highlights.glsl:~~/shaders/Anime4K_Restore_CNN_VL.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_VL.glsl:~~/shaders/Anime4K_Restore_CNN_M.glsl:~~/shaders/Anime4K_AutoDownscalePre_x2.glsl:~~/shaders/Anime4K_AutoDownscalePre_x4.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_M.glsl"; show-text "Anime4K: Mode A+A (HQ)"
|
||||
CTRL+5 no-osd change-list glsl-shaders set "~~/shaders/Anime4K_Clamp_Highlights.glsl:~~/shaders/Anime4K_Restore_CNN_Soft_VL.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_VL.glsl:~~/shaders/Anime4K_AutoDownscalePre_x2.glsl:~~/shaders/Anime4K_AutoDownscalePre_x4.glsl:~~/shaders/Anime4K_Restore_CNN_Soft_M.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_M.glsl"; show-text "Anime4K: Mode B+B (HQ)"
|
||||
CTRL+6 no-osd change-list glsl-shaders set "~~/shaders/Anime4K_Clamp_Highlights.glsl:~~/shaders/Anime4K_Upscale_Denoise_CNN_x2_VL.glsl:~~/shaders/Anime4K_AutoDownscalePre_x2.glsl:~~/shaders/Anime4K_AutoDownscalePre_x4.glsl:~~/shaders/Anime4K_Restore_CNN_M.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_M.glsl"; show-text "Anime4K: Mode C+A (HQ)"
|
||||
CTRL+0 no-osd change-list glsl-shaders clr ""; show-text "GLSL shaders cleared"
|
||||
'' else "";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
248
home-manager/base/terminal.nix
Normal file
248
home-manager/base/terminal.nix
Normal file
@@ -0,0 +1,248 @@
|
||||
{ lib, config, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
{
|
||||
imports = [
|
||||
../development/helix.nix
|
||||
];
|
||||
|
||||
options.terminal = {
|
||||
nixUpdateLocation = mkOption {
|
||||
type = types.nullOr types.str;
|
||||
default = null;
|
||||
};
|
||||
flakeUpdateLocation = mkOption {
|
||||
type = types.nullOr types.str;
|
||||
default = null;
|
||||
};
|
||||
homeUpdateLocation = mkOption {
|
||||
type = types.nullOr types.str;
|
||||
default = null;
|
||||
};
|
||||
};
|
||||
|
||||
config = {
|
||||
home.packages = with pkgs;[
|
||||
nerd-fonts.space-mono
|
||||
];
|
||||
|
||||
programs = {
|
||||
bash = {
|
||||
enable = true;
|
||||
initExtra = ''
|
||||
if [[ $(${pkgs.procps}/bin/ps --no-header --pid=$PPID --format=comm) != "fish" && -z ''${BASH_EXECUTION_STRING} ]]
|
||||
then
|
||||
shopt -q login_shell && LOGIN_OPTION='--login' || LOGIN_OPTION=""
|
||||
exec ${pkgs.fish}/bin/fish $LOGIN_OPTION
|
||||
fi
|
||||
'';
|
||||
};
|
||||
|
||||
fish = {
|
||||
enable = true;
|
||||
interactiveShellInit = ''
|
||||
set fish_greeting # Disable greeting
|
||||
'';
|
||||
};
|
||||
|
||||
nix-index = {
|
||||
enable = true;
|
||||
enableBashIntegration = true;
|
||||
enableFishIntegration = true;
|
||||
};
|
||||
|
||||
delta = {
|
||||
enable = true;
|
||||
enableGitIntegration = true;
|
||||
};
|
||||
|
||||
git = {
|
||||
enable = true;
|
||||
settings = {
|
||||
credential = {
|
||||
helper = [ "cache --timeout 21600" "${pkgs.git-credential-manager}/bin/git-credential-manager" "${pkgs.git-credential-oauth}/bin/git-credential-oauth" ];
|
||||
credentialStore = "secretservice";
|
||||
};
|
||||
"credential \"https://dev.azure.com\"" = {
|
||||
useHttpPath = true;
|
||||
};
|
||||
"credential \"https://git.worble.xyz\"" = {
|
||||
provider = "generic";
|
||||
};
|
||||
# stealing from https://blog.gitbutler.com/how-git-core-devs-configure-git/
|
||||
column = {
|
||||
ui = "auto";
|
||||
};
|
||||
branch = {
|
||||
sort = "-committerdate";
|
||||
};
|
||||
tag = {
|
||||
sort = "version:refname";
|
||||
};
|
||||
diff = {
|
||||
algorithm = "histogram";
|
||||
colorMoved = "plain";
|
||||
mnemonicPrefix = true;
|
||||
renames = true;
|
||||
};
|
||||
push = {
|
||||
followTags = true;
|
||||
};
|
||||
fetch = {
|
||||
prune = true;
|
||||
pruneTags = true;
|
||||
all = true;
|
||||
};
|
||||
rebase = {
|
||||
autoSquash = true;
|
||||
autoStash = true;
|
||||
updateRefs = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
gitui = {
|
||||
enable = true;
|
||||
};
|
||||
|
||||
starship.enable = true;
|
||||
|
||||
atuin.enable = true;
|
||||
|
||||
zellij = {
|
||||
enable = true;
|
||||
enableBashIntegration = true;
|
||||
enableFishIntegration = true;
|
||||
settings = {
|
||||
theme = "dracula";
|
||||
show_startup_tips = false;
|
||||
default_mode = "locked";
|
||||
};
|
||||
};
|
||||
|
||||
direnv = {
|
||||
enable = true;
|
||||
enableBashIntegration = true;
|
||||
nix-direnv.enable = true;
|
||||
};
|
||||
|
||||
helix = {
|
||||
enable = true;
|
||||
defaultEditor = true;
|
||||
settings = {
|
||||
theme = "dracula";
|
||||
};
|
||||
};
|
||||
|
||||
bat = {
|
||||
enable = true;
|
||||
};
|
||||
|
||||
eza = {
|
||||
enable = true;
|
||||
enableBashIntegration = true;
|
||||
enableFishIntegration = true;
|
||||
git = true;
|
||||
extraOptions = [
|
||||
"--color=auto"
|
||||
"--icons=always"
|
||||
"--group-directories-first"
|
||||
"--header"
|
||||
];
|
||||
};
|
||||
|
||||
yazi = {
|
||||
enable = true;
|
||||
settings = {
|
||||
mgr = {
|
||||
sort_by = "natural";
|
||||
show_hidden = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
bottom = {
|
||||
enable = true;
|
||||
};
|
||||
|
||||
fd = {
|
||||
enable = true;
|
||||
};
|
||||
|
||||
ripgrep = {
|
||||
enable = true;
|
||||
};
|
||||
|
||||
topgrade = with config.terminal;{
|
||||
enable = true;
|
||||
settings = mkMerge [{
|
||||
misc = {
|
||||
assume_yes = true;
|
||||
disable = [
|
||||
"android_studio"
|
||||
"jetbrains_aqua"
|
||||
"jetbrains_clion"
|
||||
"jetbrains_datagrip"
|
||||
"jetbrains_dataspell"
|
||||
"jetbrains_gateway"
|
||||
"jetbrains_goland"
|
||||
"jetbrains_idea"
|
||||
"jetbrains_mps"
|
||||
"jetbrains_phpstorm"
|
||||
"jetbrains_pycharm"
|
||||
"jetbrains_rider"
|
||||
"jetbrains_rubymine"
|
||||
"jetbrains_rustrover"
|
||||
"jetbrains_toolbox"
|
||||
"jetbrains_webstorm"
|
||||
];
|
||||
};
|
||||
}
|
||||
(mkIf (nixUpdateLocation != null) {
|
||||
linux = {
|
||||
nix_arguments = "--flake ${nixUpdateLocation}";
|
||||
};
|
||||
})
|
||||
(mkIf (homeUpdateLocation != null) {
|
||||
linux = {
|
||||
home_manager_arguments = [ "--flake" homeUpdateLocation ];
|
||||
};
|
||||
})
|
||||
(mkIf (flakeUpdateLocation != null) {
|
||||
pre_commands = {
|
||||
nix-flake-update = "${(pkgs.writeShellScriptBin "nix-flake-update" "sudo nix flake update --flake ${flakeUpdateLocation}")}/bin/nix-flake-update";
|
||||
};
|
||||
})];
|
||||
};
|
||||
|
||||
alacritty = {
|
||||
enable = true;
|
||||
package = pkgs.alacritty;
|
||||
settings = {
|
||||
font = {
|
||||
normal = {
|
||||
family = "SpaceMono Nerd Font";
|
||||
style = "Regular";
|
||||
};
|
||||
size = 14;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
# eh not feeling it
|
||||
# ghostty = {
|
||||
# enable = true;
|
||||
# enableBashIntegration = true;
|
||||
# settings = {
|
||||
# "font-family" = "SpaceMono Nerd Font";
|
||||
# "font-size" = 14;
|
||||
# theme = "Dracula";
|
||||
# };
|
||||
# };
|
||||
|
||||
yt-dlp = {
|
||||
enable = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
68
home-manager/default.nix
Normal file
68
home-manager/default.nix
Normal file
@@ -0,0 +1,68 @@
|
||||
{ pkgs, lib, ... }:
|
||||
|
||||
{
|
||||
imports = [
|
||||
./base
|
||||
./firefox
|
||||
];
|
||||
|
||||
home.packages = with pkgs;[
|
||||
# general
|
||||
thunderbird
|
||||
qbittorrent
|
||||
libreoffice-qt
|
||||
# 25.11 Can move to stable when https://github.com/NixOS/nixpkgs/pull/460058 gets backported
|
||||
joplin-desktop
|
||||
|
||||
# comms
|
||||
# TODO: disabled due to qt5-web-engine vulnerable https://github.com/NixOS/nixpkgs/pull/435067
|
||||
# teamspeak3
|
||||
teamspeak6-client
|
||||
discord
|
||||
vesktop
|
||||
|
||||
# media
|
||||
strawberry
|
||||
];
|
||||
|
||||
# set breeze as default cursor
|
||||
# For cursor in steam?
|
||||
# home.file.".icons/default".source = "${pkgs.kdePackages.breeze}/share/icons/breeze_cursors";
|
||||
|
||||
home.file.".npmrc".text = lib.generators.toINIWithGlobalSection { } {
|
||||
globalSection = {
|
||||
ignore-scripts = "true";
|
||||
};
|
||||
};
|
||||
|
||||
xdg.configFile."capacitor/sysconfig.json".text = lib.generators.toJSON { } {
|
||||
machine = "00000000-0000-0000-0000-000000000000";
|
||||
signup = false;
|
||||
telemetry = false;
|
||||
};
|
||||
|
||||
home.sessionVariables = {
|
||||
NIXOS_OZONE_WL = "1";
|
||||
};
|
||||
|
||||
services.nextcloud-client = {
|
||||
enable = true;
|
||||
package = pkgs.nextcloud-client;
|
||||
startInBackground = true;
|
||||
};
|
||||
|
||||
programs = {
|
||||
home-manager.enable = true;
|
||||
|
||||
chromium = {
|
||||
enable = true;
|
||||
package = pkgs.brave;
|
||||
};
|
||||
|
||||
keepassxc = {
|
||||
enable = true;
|
||||
# add in 25.12?
|
||||
# autostart = true;
|
||||
};
|
||||
};
|
||||
}
|
||||
36
home-manager/development/android.nix
Normal file
36
home-manager/development/android.nix
Normal file
@@ -0,0 +1,36 @@
|
||||
# { pkgs, ... }:
|
||||
|
||||
# let
|
||||
# androidEnv = pkgs.androidenv.override { licenseAccepted = true; };
|
||||
# androidComp = (
|
||||
# androidEnv.composeAndroidPackages {
|
||||
# toolsVersion = null;
|
||||
# includeEmulator = true;
|
||||
# includeNDK = true;
|
||||
# platformVersions = [
|
||||
# "latest"
|
||||
# "25"
|
||||
# ];
|
||||
# includeSystemImages = true;
|
||||
# systemImageTypes = [
|
||||
# "default"
|
||||
# ];
|
||||
# abiVersions = [
|
||||
# "x86_64"
|
||||
# "armeabi-v7a"
|
||||
# "arm64-v8a"
|
||||
# ];
|
||||
# }
|
||||
# );
|
||||
# android-studio = (pkgs.android-studio.withSdk androidComp.androidsdk);
|
||||
# in
|
||||
# {
|
||||
# home.sessionVariables = {
|
||||
# ANDROID_HOME = "${androidComp.androidsdk}/libexec/android-sdk";
|
||||
# ANDROID_SDK_ROOT = "${androidComp.androidsdk}/libexec/android-sdk";
|
||||
# ANDROID_NDK_ROOT = "${androidComp.androidsdk}/libexec/android-sdk/ndk-bundle";
|
||||
# };
|
||||
# home.packages = [
|
||||
# pkgs.android-studio
|
||||
# ];
|
||||
# }
|
||||
12
home-manager/development/default.nix
Normal file
12
home-manager/development/default.nix
Normal file
@@ -0,0 +1,12 @@
|
||||
{ ... }:
|
||||
|
||||
{
|
||||
imports = [
|
||||
# ./android.nix
|
||||
./dotnet.nix
|
||||
./games.nix
|
||||
./helix.nix
|
||||
./sql.nix
|
||||
./vscode.nix
|
||||
];
|
||||
}
|
||||
@@ -1,15 +1,12 @@
|
||||
{ inputs, config, pkgs, ... }:
|
||||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
home.packages = with pkgs;[
|
||||
git-credential-manager
|
||||
(with dotnetCorePackages; combinePackages [
|
||||
sdk_8_0
|
||||
sdk_9_0
|
||||
])
|
||||
jetbrains.rider
|
||||
azure-cli
|
||||
azuredatastudio
|
||||
rustup
|
||||
];
|
||||
}
|
||||
8
home-manager/development/games.nix
Normal file
8
home-manager/development/games.nix
Normal file
@@ -0,0 +1,8 @@
|
||||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
home.packages = with pkgs;[
|
||||
jetbrains.rider
|
||||
godot-mono
|
||||
];
|
||||
}
|
||||
117
home-manager/development/helix.nix
Normal file
117
home-manager/development/helix.nix
Normal file
@@ -0,0 +1,117 @@
|
||||
{ lib, config, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
{
|
||||
options.helix = {
|
||||
fullInstall = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
};
|
||||
};
|
||||
|
||||
config = {
|
||||
programs = {
|
||||
helix = mkMerge [{
|
||||
enable = true;
|
||||
defaultEditor = true;
|
||||
settings = {
|
||||
theme = "dracula";
|
||||
};
|
||||
extraPackages = with pkgs;[
|
||||
gcc
|
||||
] ++ (optionals config.helix.fullInstall [
|
||||
#nix
|
||||
nixd
|
||||
nixpkgs-fmt
|
||||
|
||||
#dotnet
|
||||
omnisharp-roslyn
|
||||
netcoredbg
|
||||
|
||||
# rust
|
||||
rustfmt
|
||||
clippy
|
||||
rust-analyzer
|
||||
lldb
|
||||
|
||||
#python
|
||||
ruff
|
||||
|
||||
# shell
|
||||
shfmt
|
||||
bash-language-server
|
||||
fish-lsp
|
||||
|
||||
# misc
|
||||
hyprls
|
||||
marksman
|
||||
|
||||
# web
|
||||
superhtml
|
||||
biome
|
||||
] ++ (with nodePackages;[
|
||||
vscode-langservers-extracted
|
||||
typescript-language-server
|
||||
]));
|
||||
}
|
||||
(mkIf config.helix.fullInstall {
|
||||
languages = {
|
||||
language = [
|
||||
{
|
||||
name = "bash";
|
||||
formatter = { command = "shfmt"; };
|
||||
}
|
||||
{
|
||||
name = "javascript";
|
||||
language-servers = [
|
||||
{ name = "biome"; }
|
||||
{
|
||||
name = "typescript-language-server";
|
||||
except-features = [ "format" ];
|
||||
}
|
||||
];
|
||||
auto-format = true;
|
||||
formatter = { command = "biome"; args = [ "format" "--stdin-file-path" "a.js" ]; };
|
||||
}
|
||||
{
|
||||
name = "typescript";
|
||||
language-servers = [
|
||||
{ name = "biome"; }
|
||||
{
|
||||
name = "typescript-language-server";
|
||||
except-features = [ "format" ];
|
||||
}
|
||||
];
|
||||
auto-format = true;
|
||||
formatter = { command = "biome"; args = [ "format" "--stdin-file-path" "a.ts" ]; };
|
||||
}
|
||||
{
|
||||
name = "jsx";
|
||||
language-servers = [
|
||||
{ name = "biome"; }
|
||||
{
|
||||
name = "typescript-language-server";
|
||||
except-features = [ "format" ];
|
||||
}
|
||||
];
|
||||
auto-format = true;
|
||||
formatter = { command = "biome"; args = [ "format" "--stdin-file-path" "a.jsx" ]; };
|
||||
}
|
||||
{
|
||||
name = "tsx";
|
||||
language-servers = [
|
||||
{ name = "biome"; }
|
||||
{
|
||||
name = "typescript-language-server";
|
||||
except-features = [ "format" ];
|
||||
}
|
||||
];
|
||||
auto-format = true;
|
||||
formatter = { command = "biome"; args = [ "format" "--stdin-file-path" "a.tsx" ]; };
|
||||
}
|
||||
];
|
||||
};
|
||||
})];
|
||||
};
|
||||
};
|
||||
}
|
||||
7
home-manager/development/sql.nix
Normal file
7
home-manager/development/sql.nix
Normal file
@@ -0,0 +1,7 @@
|
||||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
home.packages = with pkgs;[
|
||||
azuredatastudio
|
||||
];
|
||||
}
|
||||
@@ -1,11 +1,32 @@
|
||||
{ inputs, config, pkgs, ... }:
|
||||
{ inputs, pkgs, ... }:
|
||||
|
||||
let
|
||||
vs-extensions = inputs.nix-vscode-extensions.extensions.x86_64-linux.open-vsx;
|
||||
openvsx = inputs.nix-vscode-extensions.extensions.x86_64-linux.open-vsx;
|
||||
vscode-marketplace = inputs.nix-vscode-extensions.extensions.x86_64-linux.vscode-marketplace;
|
||||
resharper-code-version = "0.0.15";
|
||||
|
||||
resharper-code = (pkgs.vscode-utils.buildVscodeMarketplaceExtension {
|
||||
mktplcRef = {
|
||||
name = "resharper-code";
|
||||
version = resharper-code-version;
|
||||
publisher = "jetbrains";
|
||||
};
|
||||
vsix = builtins.fetchurl {
|
||||
name = "jetbrains.resharper-code.zip";
|
||||
url = "https://download.jetbrains.com/product?code=VSCRS&latest&distribution=linuxX64&type=eap&version=${resharper-code-version}";
|
||||
sha256 = "sha256:eef138c4fdd035031577f4c483c2155c4dd5ce91cfd1b9a2489c138aeb6cb99e";
|
||||
};
|
||||
}).overrideAttrs (old: {
|
||||
nativeBuildInputs = old.nativeBuildInputs ++ [ pkgs.makeBinaryWrapper ];
|
||||
postFixup = ''
|
||||
wrapProgram $out/share/vscode/extensions/jetbrains.resharper-code/resharper/linux-x64/JetBrains.VsCode.Backend \
|
||||
--prefix LD_LIBRARY_PATH : ${pkgs.dotnet-sdk.icu}/lib
|
||||
'';
|
||||
});
|
||||
in
|
||||
{
|
||||
home.packages = with pkgs;[
|
||||
(nerdfonts.override { fonts = [ "SpaceMono" ]; })
|
||||
nerd-fonts.space-mono
|
||||
];
|
||||
|
||||
programs = {
|
||||
@@ -13,35 +34,90 @@ in
|
||||
enable = true;
|
||||
package = pkgs.vscodium;
|
||||
mutableExtensionsDir = false;
|
||||
profiles.default = {
|
||||
enableUpdateCheck = false;
|
||||
enableExtensionUpdateCheck = false;
|
||||
extensions = [
|
||||
vs-extensions.biomejs.biome
|
||||
vs-extensions.mkhl.direnv
|
||||
vs-extensions.dracula-theme.theme-dracula
|
||||
vs-extensions.dbaeumer.vscode-eslint
|
||||
vs-extensions.eamodio.gitlens
|
||||
vs-extensions.pkief.material-icon-theme
|
||||
vs-extensions.jnoortheen.nix-ide
|
||||
vs-extensions.esbenp.prettier-vscode
|
||||
vs-extensions.bradlc.vscode-tailwindcss
|
||||
vs-extensions.humao.rest-client
|
||||
];
|
||||
userSettings = {
|
||||
resharper-code # Requires DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=1
|
||||
] ++ (with openvsx;[
|
||||
biomejs.biome
|
||||
mkhl.direnv
|
||||
dracula-theme.theme-dracula
|
||||
dbaeumer.vscode-eslint
|
||||
pkief.material-icon-theme
|
||||
jnoortheen.nix-ide
|
||||
esbenp.prettier-vscode
|
||||
loriscro.super
|
||||
mads-hartmann.bash-ide-vscode
|
||||
ms-vscode.wasm-wasi-core
|
||||
rust-lang.rust-analyzer
|
||||
tamasfe.even-better-toml
|
||||
mikestead.dotenv
|
||||
ms-python.python
|
||||
ms-python.debugpy
|
||||
charliermarsh.ruff
|
||||
]) ++ (with vscode-marketplace;[
|
||||
bradlc.vscode-tailwindcss
|
||||
]);
|
||||
userSettings = with pkgs;{
|
||||
"workbench.iconTheme" = "material-icon-theme";
|
||||
"window.titleBarStyle" = "custom";
|
||||
"workbench.colorTheme" = "Dracula Theme";
|
||||
"explorer.compactFolders" = false;
|
||||
"chat.commandCenter.enabled" = false;
|
||||
"terminal.integrated.automationProfile.linux" = {
|
||||
"path" = "/bin/sh";
|
||||
};
|
||||
|
||||
"editor.fontFamily" = "'SpaceMono Nerd Font', 'monospace', monospace";
|
||||
"editor.fontSize" = 16;
|
||||
|
||||
"files.autoSave" = "onWindowChange";
|
||||
"editor.formatOnSave" = true;
|
||||
"editor.codeActionsOnSave" = {
|
||||
"source.organizeImports" = "always";
|
||||
};
|
||||
|
||||
"files.autoSave" = "onWindowChange";
|
||||
|
||||
"[typescript]" = {
|
||||
"editor.defaultFormatter" = "biomejs.biome";
|
||||
};
|
||||
"[javascript]" = {
|
||||
"editor.defaultFormatter" = "biomejs.biome";
|
||||
};
|
||||
"[javascriptreact]" = {
|
||||
"editor.defaultFormatter" = "biomejs.biome";
|
||||
};
|
||||
"[typescriptreact]" = {
|
||||
"editor.defaultFormatter" = "biomejs.biome";
|
||||
};
|
||||
"[json]" = {
|
||||
"editor.defaultFormatter" = "biomejs.biome";
|
||||
};
|
||||
"[jsonc]" = {
|
||||
"editor.defaultFormatter" = "biomejs.biome";
|
||||
};
|
||||
# "biome.lsp.bin" = "${biome}/bin/biome";
|
||||
#"biome.requireConfigFile" = true;
|
||||
|
||||
"typescript.preferences.preferTypeOnlyAutoImports" = true;
|
||||
"chat.commandCenter.enabled" = false;
|
||||
|
||||
"nix.enableLanguageServer" = true; # Enable LSP.
|
||||
"nix.serverPath" = "${nixd}/bin/nixd"; # The path to the LSP server executable.
|
||||
"nix.serverSettings" = {
|
||||
nixd = {
|
||||
formatting.command = [ "${nixpkgs-fmt}/bin/nixpkgs-fmt" ];
|
||||
};
|
||||
};
|
||||
|
||||
"bashIde.shellcheckPath" = "${shellcheck}/bin/shellcheck";
|
||||
"bashIde.shfmt.path" = "${shfmt}/bin/shfmt";
|
||||
|
||||
"rust-analyzer.rustfmt.overrideCommand" = [ "${rustfmt}/bin/rustfmt" ];
|
||||
|
||||
"tailwindCSS.classFunctions" = [ "cva" "cx" ];
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
73
home-manager/firefox/default.nix
Normal file
73
home-manager/firefox/default.nix
Normal file
@@ -0,0 +1,73 @@
|
||||
{ lib, config, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
{
|
||||
options.firefox = {
|
||||
tablet = mkOption {
|
||||
type = types.bool;
|
||||
default = false;
|
||||
};
|
||||
};
|
||||
|
||||
config = {
|
||||
programs = {
|
||||
firefox = {
|
||||
enable = true;
|
||||
package = pkgs.firefox;
|
||||
languagePacks = [
|
||||
"en-GB"
|
||||
];
|
||||
policies = {
|
||||
"DisplayMenuBar" = if config.firefox.tablet then false else true;
|
||||
"ExtensionSettings" = with builtins;
|
||||
let
|
||||
extension = shortId: uuid: {
|
||||
name = uuid;
|
||||
value = {
|
||||
install_url = "https://addons.mozilla.org/en-US/firefox/downloads/latest/${shortId}/latest.xpi";
|
||||
installation_mode = "normal_installed";
|
||||
};
|
||||
};
|
||||
in
|
||||
listToAttrs [
|
||||
# Security / Privacy
|
||||
(extension "ublock-origin" "uBlock0@raymondhill.net")
|
||||
(extension "keepassxc-browser" "keepassxc-browser@keepassxc.org")
|
||||
(extension "cookie-autodelete" "CookieAutoDelete@kennydo.com")
|
||||
|
||||
# Annoyances
|
||||
(extension "sponsorblock" "sponsorBlocker@ajay.app")
|
||||
(extension "bandcamp-player-volume-control" "{308ec088-284a-40fe-ae14-7c917526f694}")
|
||||
|
||||
# UI / CSS
|
||||
(extension "darkreader" "addon@darkreader.org")
|
||||
(extension "rsspreview" "{7799824a-30fe-4c67-8b3e-7094ea203c94}")
|
||||
(extension "tree-style-tab" "treestyletab@piro.sakura.ne.jp")
|
||||
(extension "traduzir-paginas-web" "{036a55b4-5e72-4d05-a06c-cba2dfcc134a}")
|
||||
|
||||
# Additional Functionality
|
||||
(extension "betterttv" "firefox@betterttv.net")
|
||||
(extension "multi-account-containers" "@testpilot-containers")
|
||||
(extension "gumbo-twitch-companion" "{59a39734-1e66-452e-a7b8-cc79f72062f0}")
|
||||
(extension "joplin-web-clipper" "{8419486a-54e9-11e8-9401-ac9e17909436}")
|
||||
(extension "tab-reloader" "jid0-bnmfwWw2w2w4e4edvcdDbnMhdVg@jetpack")
|
||||
(extension "tab-session-manager" "Tab-Session-Manager@sienori")
|
||||
(extension "user-agent-string-switcher" "{a6c4a591-f1b2-4f03-b3ff-767e5bedf4e7}")
|
||||
(extension "violentmonkey" "{aecec67f-0d10-4fa7-b7c7-609a2db280cf}")
|
||||
];
|
||||
# To add additional extensions, find it on addons.mozilla.org, find
|
||||
# the short ID in the url (like https://addons.mozilla.org/en-US/firefox/addon/!SHORT_ID!/)
|
||||
# Then, download the XPI by filling it in to the install_url template, unzip it,
|
||||
# run `jq .browser_specific_settings.gecko.id manifest.json` or
|
||||
# `jq .applications.gecko.id manifest.json` to get the UUID
|
||||
};
|
||||
|
||||
profiles.default = (import ./firefox-profile.nix { tablet = config.firefox.tablet; }) // {
|
||||
id = 0;
|
||||
name = "default";
|
||||
isDefault = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,72 +1,195 @@
|
||||
{ tablet ? false }:
|
||||
{
|
||||
settings = {
|
||||
# data privacy
|
||||
"browser.contentblocking.category" = "strict";
|
||||
"browser.discovery.enabled" = false;
|
||||
"datareporting.healthreport.uploadEnabled" = false;
|
||||
"dom.security.https_only_mode" = true;
|
||||
|
||||
# no autofill
|
||||
"extensions.formautofill.addresses.enabled" = false;
|
||||
"extensions.formautofill.creditCards.enabled" = false;
|
||||
|
||||
# stop fonts
|
||||
"browser.display.use_document_fonts" = 0;
|
||||
|
||||
# dont show about:config warning
|
||||
"browser.aboutConfig.showWarning" = false;
|
||||
|
||||
# dont offer to save passwords
|
||||
"signon.rememberSignons" = false;
|
||||
|
||||
# home page
|
||||
"browser.startup.homepage" = "chrome://browser/content/blanktab.html";
|
||||
"browser.startup.homepage" = "about:blank";
|
||||
|
||||
# blank new tab
|
||||
"browser.newtabpage.enabled" = false;
|
||||
|
||||
# compact density
|
||||
"browser.uidensity" = 1;
|
||||
# dont draw tabs in titlebar
|
||||
"browser.tabs.drawInTitlebar" = false;
|
||||
# autoscroll middleclick
|
||||
"general.autoScroll" = true;
|
||||
# dont paste on middlemouse
|
||||
"middlemouse.paste" = false;
|
||||
"browser.uidensity" = if tablet then 2 else 1;
|
||||
|
||||
# userChrome
|
||||
"toolkit.legacyUserProfileCustomizations.stylesheets" = true;
|
||||
|
||||
# dont draw tabs in titlebar
|
||||
"browser.tabs.drawInTitlebar" = false;
|
||||
|
||||
# autoscroll middleclick
|
||||
"general.autoScroll" = true;
|
||||
|
||||
# dont paste on middlemouse
|
||||
"middlemouse.paste" = false;
|
||||
|
||||
# menu bar
|
||||
"ui.key.menuAccessKeyFocuses" = false;
|
||||
# use kde file picker
|
||||
|
||||
# use desktop file picker
|
||||
"widget.use-xdg-desktop-portal.file-picker" = 1;
|
||||
|
||||
# sidebar at right
|
||||
"sidebar.position_start" = false;
|
||||
|
||||
# new sidebar
|
||||
"sidebar.revamp" = true;
|
||||
"sidebar.verticalTabs" = true;
|
||||
"browser.tabs.hoverPreview.enabled" = false;
|
||||
"browser.tabs.hoverPreview.showThumbnails" = false;
|
||||
"browser.tabs.groups.hoverPreview.enabled" = false;
|
||||
|
||||
# disable pocket
|
||||
"extensions.pocket.enabled" = false;
|
||||
|
||||
# browser links should be new tab
|
||||
"browser.link.open_newwindow.restriction" = 0;
|
||||
# allow custom search enginers
|
||||
|
||||
# allow custom search engines
|
||||
"browser.urlbar.update2.engineAliasRefresh" = true;
|
||||
# do not retrieve suggestions as you type https://blog.mozilla.org/en/firefox/better-search-suggestions/
|
||||
"browser.urlbar.quicksuggest.online.enabled" = false;
|
||||
# do not trim http
|
||||
"browser.urlbar.trimURLs" = false;
|
||||
|
||||
# force enable hardware accel
|
||||
"media.hardware-video-decoding.force-enabled" = true;
|
||||
|
||||
# vaapi
|
||||
"media.ffmpeg.vaapi.enabled" = true;
|
||||
# downloads ask to save or open
|
||||
|
||||
# downloads
|
||||
# ask to save or open
|
||||
"browser.download.always_ask_before_handling_new_types" = true;
|
||||
# downloads always ask download location
|
||||
# always ask download location
|
||||
"browser.download.useDownloadDir" = false;
|
||||
# download to tmp dir, NOT Downloads (seriously Mozilla?)
|
||||
"browser.download.start_downloads_in_tmp_dir" = true;
|
||||
|
||||
# widevine
|
||||
"browser.eme.ui.enabled" = false;
|
||||
"media.eme.enabled" = false;
|
||||
|
||||
# media control keys
|
||||
"media.hardwaremediakeys.enabled" = false;
|
||||
|
||||
# restore tabs on startup
|
||||
"browser.startup.page" = 3;
|
||||
|
||||
# open in new tabs
|
||||
"browser.tabs.loadBookmarksInTabs" = true;
|
||||
|
||||
# AI
|
||||
"browser.ml.chat.page" = false;
|
||||
# AI tab groups
|
||||
"browser.tabs.groups.smart.userEnabled" = false;
|
||||
|
||||
/* Arkenfox Begin */
|
||||
|
||||
/* 0320: disable recommendation pane in about:addons (uses Google Analytics) ***/
|
||||
"extensions.getAddons.showPane" = false;
|
||||
|
||||
/* 0321: disable recommendations in about:addons' Extensions and Themes panes [FF68+] ***/
|
||||
"extensions.htmlaboutaddons.recommendations.enabled" = false;
|
||||
|
||||
/* 0330: disable new data submission [FF41+]
|
||||
* If disabled, no policy is shown or upload takes place, ever
|
||||
* [1] https://bugzilla.mozilla.org/1195552 ***/
|
||||
"datareporting.policy.dataSubmissionEnabled" = false;
|
||||
|
||||
/* 0340: disable Studies
|
||||
* [SETTING] Privacy & Security>Firefox Data Collection & Use>Allow Firefox to install and run studies ***/
|
||||
"app.shield.optoutstudies.enabled" = false;
|
||||
|
||||
/* 0341: disable Normandy/Shield [FF60+]
|
||||
* Shield is a telemetry system that can push and test "recipes"
|
||||
* [1] https://mozilla.github.io/normandy/ ***/
|
||||
"app.normandy.enabled" = false;
|
||||
"app.normandy.api_url" = "";
|
||||
|
||||
/* 0350: disable Crash Reports ***/
|
||||
"breakpad.reportURL" = "";
|
||||
"browser.tabs.crashReporting.sendReport" = false;
|
||||
|
||||
/* 0351: enforce no submission of backlogged Crash Reports [FF58+]
|
||||
* [SETTING] Privacy & Security>Firefox Data Collection & Use>Allow Firefox to send backlogged crash reports ***/
|
||||
"browser.crashReports.unsubmittedCheck.autoSubmit2" = false;
|
||||
|
||||
/* 0403: disable SB checks for downloads (remote)
|
||||
* To verify the safety of certain executable files, Firefox may submit some information about the
|
||||
* file, including the name, origin, size and a cryptographic hash of the contents, to the Google
|
||||
* Safe Browsing service which helps Firefox determine whether or not the file should be blocked
|
||||
* [SETUP-SECURITY] If you do not understand this, or you want this protection, then override this ***/
|
||||
"browser.safebrowsing.downloads.remote.enabled" = false;
|
||||
"browser.safebrowsing.downloads.remote.url" = "";
|
||||
|
||||
/* 1201: require safe negotiation
|
||||
* Blocks connections to servers that don't support RFC 5746 [2] as they're potentially vulnerable to a
|
||||
* MiTM attack [3]. A server without RFC 5746 can be safe from the attack if it disables renegotiations
|
||||
* but the problem is that the browser can't know that. Setting this pref to true is the only way for the
|
||||
* browser to ensure there will be no unsafe renegotiations on the channel between the browser and the server
|
||||
* [SETUP-WEB] SSL_ERROR_UNSAFE_NEGOTIATION: is it worth overriding this for that one site?
|
||||
* [STATS] SSL Labs (May 2024) reports over 99.7% of top sites have secure renegotiation [4]
|
||||
* [1] https://wiki.mozilla.org/Security:Renegotiation
|
||||
* [2] https://datatracker.ietf.org/doc/html/rfc5746
|
||||
* [3] https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2009-3555
|
||||
* [4] https://www.ssllabs.com/ssl-pulse/ ***/
|
||||
"security.ssl.require_safe_negotiation" = true;
|
||||
/* 1206: disable TLS1.3 0-RTT (round-trip time) [FF51+]
|
||||
* This data is not forward secret, as it is encrypted solely under keys derived using
|
||||
* the offered PSK. There are no guarantees of non-replay between connections
|
||||
* [1] https://github.com/tlswg/tls13-spec/issues/1001
|
||||
* [2] https://www.rfc-editor.org/rfc/rfc9001.html#name-replay-attacks-with-0-rtt
|
||||
* [3] https://blog.cloudflare.com/tls-1-3-overview-and-q-and-a/ ***/
|
||||
"security.tls.enable_0rtt_data" = false;
|
||||
|
||||
/* 2002: force WebRTC inside the proxy [FF70+] ***/
|
||||
"media.peerconnection.ice.proxy_only_if_behind_proxy" = true;
|
||||
/* 2003: force a single network interface for ICE candidates generation [FF42+]
|
||||
* When using a system-wide proxy, it uses the proxy interface
|
||||
* [1] https://developer.mozilla.org/docs/Web/API/RTCIceCandidate
|
||||
* [2] https://wiki.mozilla.org/Media/WebRTC/Privacy ***/
|
||||
"media.peerconnection.ice.default_address_only" = true;
|
||||
|
||||
/* 2701: enable ETP Strict Mode [FF86+]
|
||||
* ETP Strict Mode enables Total Cookie Protection (TCP)
|
||||
* [NOTE] Adding site exceptions disables all ETP protections for that site and increases the risk of
|
||||
* cross-site state tracking e.g. exceptions for SiteA and SiteB means PartyC on both sites is shared
|
||||
* [1] https://blog.mozilla.org/security/2021/02/23/total-cookie-protection/
|
||||
* [SETTING] to add site exceptions: Urlbar>ETP Shield
|
||||
* [SETTING] to manage site exceptions: Options>Privacy & Security>Enhanced Tracking Protection>Manage Exceptions ***/
|
||||
"browser.contentblocking.category" = "strict";
|
||||
};
|
||||
userChrome = ''
|
||||
/* Hide tab bar in FF Quantum */
|
||||
@-moz-document url(chrome://browser/content/browser.xul), url(chrome://browser/content/browser.xhtml) {
|
||||
#TabsToolbar {
|
||||
visibility: collapse !important;
|
||||
margin-bottom: 21px !important;
|
||||
/* Remove old sidebar header */
|
||||
#sidebar-box[sidebarcommand="treestyletab_piro_sakura_ne_jp-sidebar-action"] #sidebar-header {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#sidebar-box[sidebarcommand="treestyletab_piro_sakura_ne_jp-sidebar-action"] #sidebar-header {
|
||||
visibility: collapse !important;
|
||||
/* Remove sidebar revamp header */
|
||||
#sidebar-panel-header {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* Allow complete collapse of sidebar revamp */
|
||||
#sidebar-main:not([sidebar-launcher-expanded]) {
|
||||
width: 0;
|
||||
}
|
||||
'';
|
||||
}
|
||||
|
||||
@@ -1,20 +0,0 @@
|
||||
{ inputs, config, pkgs, ... }:
|
||||
|
||||
{
|
||||
programs = {
|
||||
firefox = {
|
||||
enable = true;
|
||||
languagePacks = [
|
||||
"en-GB"
|
||||
];
|
||||
policies = {
|
||||
"DisplayMenuBar" = true;
|
||||
};
|
||||
profiles.default = import ./firefox-profile.nix // {
|
||||
id = 0;
|
||||
name = "default";
|
||||
isDefault = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,11 +1,86 @@
|
||||
{ inputs, config, pkgs, ... }:
|
||||
{ pkgs, inputs, ... }:
|
||||
|
||||
let
|
||||
pkgs_unstable = inputs.nixpkgs-unstable.legacyPackages."${pkgs.stdenv.hostPlatform.system}";
|
||||
|
||||
# https://simpler-website.pages.dev/html/2021/1/wine-environment-variables/#wineesync
|
||||
wine-wrapped = (pkgs.writeShellApplication {
|
||||
name = "wine";
|
||||
runtimeInputs = [ pkgs_unstable.wineWowPackages.stagingFull ];
|
||||
text = ''
|
||||
export WINEPREFIX="''${WINEPREFIX:-"$HOME/Games/wine/default"}"
|
||||
wine "$@"
|
||||
'';
|
||||
});
|
||||
|
||||
# https://github.com/GloriousEggroll/proton-ge-custom?tab=readme-ov-file#modification
|
||||
# These aren't yet documented in the README:
|
||||
# PROTON_MEDIA_USE_GST=1 will tell proton to use the winegstreamer backend instead of the default winedmo backend (the winedmo backend was introduced in Proton 10 and is the current preferred video playback method). This can be useful for games with videos that may have worked in Proton 9 but regressed in Proton 10.
|
||||
# PROTON_GST_VIDEO_ORIENTATION=<orientation> can be any of the following: vertical-flip, horizontal-flip, rotate-180, automatic. This is useful if some games have videos that are upside down or otherwise not oriented correctly.
|
||||
umu-wrapped = (pkgs.writeShellApplication {
|
||||
name = "umu-run";
|
||||
runtimeInputs = [ pkgs_unstable.umu-launcher ];
|
||||
text = ''
|
||||
export PROTONPATH="''${PROTONPATH:-"GE-Proton"}"
|
||||
export PROTON_ENABLE_WAYLAND="''${PROTON_ENABLE_WAYLAND:-"0"}"
|
||||
umu-run "$@"
|
||||
'';
|
||||
});
|
||||
|
||||
# proton with ja_JP
|
||||
umu-ja = (pkgs.writeShellApplication {
|
||||
name = "umu-ja";
|
||||
runtimeInputs = [ umu-wrapped ];
|
||||
text = "LANG=ja_JP.utf8 umu-run \"$@\"";
|
||||
});
|
||||
|
||||
# wine with ja_JP
|
||||
wine-ja = (pkgs.writeShellApplication {
|
||||
name = "wine-ja";
|
||||
runtimeInputs = [ wine-wrapped ];
|
||||
text = "LANG=ja_JP.utf8 wine \"$@\"";
|
||||
});
|
||||
in
|
||||
{
|
||||
home.packages = with pkgs;[
|
||||
steamguard-cli
|
||||
# Wine / Proton
|
||||
umu-wrapped
|
||||
umu-ja
|
||||
wine-wrapped
|
||||
wine-ja
|
||||
pkgs_unstable.winetricks
|
||||
bottles
|
||||
protontricks
|
||||
gamescope
|
||||
inputs.nixpkgs-unstable.legacyPackages."${pkgs.system}".ryujinx-greemdev
|
||||
(heroic.override {
|
||||
extraPkgs = pkgs: [
|
||||
pkgs.umu-launcher
|
||||
pkgs.gamescope
|
||||
pkgs.mangohud
|
||||
];
|
||||
})
|
||||
|
||||
# Steam
|
||||
steamguard-cli
|
||||
|
||||
# Emulators
|
||||
pkgs_unstable.ryubing
|
||||
mgba
|
||||
|
||||
# Cheat engine
|
||||
scanmem
|
||||
];
|
||||
|
||||
programs = {
|
||||
mangohud = {
|
||||
enable = true;
|
||||
enableSessionWide = true;
|
||||
settings = {
|
||||
preset = 1;
|
||||
};
|
||||
settingsPerApplication = {
|
||||
mpv = {
|
||||
no_display = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
42
home-manager/streamlink.nix
Normal file
42
home-manager/streamlink.nix
Normal file
@@ -0,0 +1,42 @@
|
||||
{ pkgs, lib, ... }:
|
||||
|
||||
let
|
||||
proxies = [
|
||||
"https://eu.luminous.dev" # (Europe)
|
||||
"https://eu2.luminous.dev" # (Europe 2)
|
||||
"https://as.luminous.dev" # (Asia)
|
||||
"https://lb-eu.cdn-perfprod.com" # (Europe)
|
||||
"https://lb-eu2.cdn-perfprod.com" # (Europe 2)
|
||||
"https://lb-eu4.cdn-perfprod.com" # (Europe 4)
|
||||
"https://lb-eu5.cdn-perfprod.com" # (Europe 5)
|
||||
"https://lb-eu3.cdn-perfprod.com" # (Europe 3, using Russia-only proxies)
|
||||
"https://lb-na.cdn-perfprod.com" # (NA)
|
||||
"https://lb-as.cdn-perfprod.com" # (Asia)
|
||||
"https://lb-sa.cdn-perfprod.com" # (SA)
|
||||
];
|
||||
in
|
||||
{
|
||||
programs.streamlink = {
|
||||
enable = true;
|
||||
settings = {
|
||||
player = "${pkgs.mpv}/bin/mpv";
|
||||
player-args = "--cache 2048";
|
||||
player-no-close = true;
|
||||
twitch-low-latency = true;
|
||||
twitch-disable-ads = true;
|
||||
default-stream = "best";
|
||||
};
|
||||
plugins = {
|
||||
# It is important this is called "twitch" and overwrites the default plugin
|
||||
twitch = {
|
||||
settings = {
|
||||
twitch-proxy-playlist = lib.concatStringsSep "," proxies;
|
||||
};
|
||||
src = builtins.readFile (pkgs.fetchurl {
|
||||
url = "https://github.com/2bc4/streamlink-ttvlol/releases/download/7.0.0-20241105/twitch.py";
|
||||
hash = "sha256-WbxLNkxG64BlnfI/RwY5N0bqEkO/D6u14nYMyTuveN8=";
|
||||
});
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,119 +0,0 @@
|
||||
{ lib, inputs, config, pkgs, ... }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
cfg = config.programs.atuin;
|
||||
in
|
||||
{
|
||||
options.terminal = {
|
||||
nixUpdateLocation = mkOption {
|
||||
type = types.str;
|
||||
};
|
||||
flakeUpdateLocation = mkOption {
|
||||
type = types.str;
|
||||
};
|
||||
};
|
||||
|
||||
config = {
|
||||
home.packages = with pkgs;[
|
||||
blesh
|
||||
(nerdfonts.override { fonts = [ "SpaceMono" ]; })
|
||||
];
|
||||
|
||||
programs = {
|
||||
bash = {
|
||||
enable = true;
|
||||
bashrcExtra = ''
|
||||
source $(blesh-share)/ble.sh
|
||||
bleopt canvas_winch_action=redraw-prev
|
||||
'';
|
||||
};
|
||||
|
||||
starship.enable = true;
|
||||
|
||||
atuin.enable = true;
|
||||
|
||||
zellij = {
|
||||
enable = true;
|
||||
enableBashIntegration = true;
|
||||
settings = {
|
||||
theme = "dracula";
|
||||
};
|
||||
};
|
||||
|
||||
direnv = {
|
||||
enable = true;
|
||||
enableBashIntegration = true;
|
||||
nix-direnv.enable = true;
|
||||
};
|
||||
|
||||
git = {
|
||||
enable = true;
|
||||
delta.enable = true;
|
||||
};
|
||||
|
||||
gitui = {
|
||||
enable = true;
|
||||
};
|
||||
|
||||
helix.enable = true;
|
||||
|
||||
bat = {
|
||||
enable = true;
|
||||
};
|
||||
|
||||
eza = {
|
||||
enable = true;
|
||||
enableBashIntegration = true;
|
||||
git = true;
|
||||
extraOptions = [
|
||||
"--color=auto"
|
||||
"--icons=always"
|
||||
"--group-directories-first"
|
||||
"--header"
|
||||
];
|
||||
};
|
||||
|
||||
bottom = {
|
||||
enable = true;
|
||||
};
|
||||
|
||||
fd = {
|
||||
enable = true;
|
||||
};
|
||||
|
||||
ripgrep = {
|
||||
enable = true;
|
||||
};
|
||||
|
||||
topgrade = {
|
||||
enable = true;
|
||||
settings = {
|
||||
misc = {
|
||||
assume_yes = true;
|
||||
};
|
||||
linux = {
|
||||
nix_arguments = "--flake ${config.terminal.nixUpdateLocation}";
|
||||
};
|
||||
pre_commands = {
|
||||
nix-flake-update = "sudo nix flake update --flake ${config.terminal.flakeUpdateLocation}";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
alacritty = {
|
||||
enable = true;
|
||||
settings = {
|
||||
font = {
|
||||
normal = {
|
||||
family = "SpaceMono Nerd Font";
|
||||
style = "Regular";
|
||||
};
|
||||
size = 14;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,17 +0,0 @@
|
||||
{ config, lib, pkgs, inputs, ... }:
|
||||
|
||||
{
|
||||
hardware.graphics.enable32Bit = true; # For 32 bit applications
|
||||
hardware.steam-hardware.enable = true;
|
||||
|
||||
programs.steam = {
|
||||
enable = true;
|
||||
remotePlay.openFirewall = true; # Open ports in the firewall for Steam Remote Play
|
||||
dedicatedServer.openFirewall = true; # Open ports in the firewall for Source Dedicated Server
|
||||
#gamescopeSession.enable = true;
|
||||
};
|
||||
programs.gamemode.enable = true;
|
||||
|
||||
# ensure users who need access to this have `cdrom` as `extraGroups`
|
||||
programs.cdemu.enable = true;
|
||||
}
|
||||
@@ -1,21 +0,0 @@
|
||||
{ config, lib, pkgs, inputs, ... }:
|
||||
|
||||
{
|
||||
services.power-profiles-daemon.enable = false;
|
||||
services.tlp = {
|
||||
enable = true;
|
||||
settings = {
|
||||
RESTORE_DEVICE_STATE_ON_STARTUP = 1;
|
||||
USB_AUTOSUSPEND = 0;
|
||||
PLATFORM_PROFILE_ON_AC = "performance";
|
||||
PLATFORM_PROFILE_ON_BAT = "low-power";
|
||||
CPU_ENERGY_PERF_POLICY_ON_AC = "performance";
|
||||
CPU_ENERGY_PERF_POLICY_ON_BAT = "power";
|
||||
CPU_BOOST_ON_AC = 1;
|
||||
CPU_BOOST_ON_BAT = 0;
|
||||
};
|
||||
};
|
||||
|
||||
# Enable touchpad support (enabled default in most desktopManager).
|
||||
services.libinput.enable = true;
|
||||
}
|
||||
@@ -1,22 +0,0 @@
|
||||
{ config, lib, pkgs, inputs, ... }:
|
||||
|
||||
{
|
||||
virtualisation = {
|
||||
containers = {
|
||||
# Enable common container config files in /etc/containers
|
||||
enable = true;
|
||||
};
|
||||
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;
|
||||
};
|
||||
};
|
||||
programs.virt-manager.enable = true;
|
||||
}
|
||||
|
||||
2
nixos-update.sh
Executable file
2
nixos-update.sh
Executable file
@@ -0,0 +1,2 @@
|
||||
#!/usr/bin/env bash
|
||||
sudo nixos-rebuild switch --flake "$HOME/Projects/nixos/devices/$(hostname)#$(hostname)"
|
||||
@@ -1,53 +0,0 @@
|
||||
# Edit this configuration file to define what should be installed on
|
||||
# your system. Help is available in the configuration.nix(5) man page, on
|
||||
# https://search.nixos.org/options and in the NixOS manual (`nixos-help`).
|
||||
|
||||
{ config, lib, pkgs, inputs, ... }:
|
||||
|
||||
{
|
||||
imports =
|
||||
[
|
||||
# Include the results of the hardware scan.
|
||||
./hardware-configuration.nix
|
||||
inputs.disko.nixosModules.default
|
||||
./disk-config.nix
|
||||
inputs.home-manager.nixosModules.default
|
||||
../modules/laptop.nix
|
||||
../modules/virtualisation.nix
|
||||
../modules/gaming.nix
|
||||
];
|
||||
|
||||
fileSystems."/mnt/HDD1" = {
|
||||
#device = "/dev/disk/by-uuid/35763dc3-c736-4714-ade7-40bf49ad50dd";
|
||||
fsType = "ext4";
|
||||
label = "HDD1";
|
||||
options = [
|
||||
# If you don't have this options attribute, it'll default to "defaults"
|
||||
# boot options for fstab. Search up fstab mount options you can use
|
||||
"users" # Allows any user to mount and unmount
|
||||
"nofail" # Prevent system from failing if this drive doesn't mount
|
||||
"exec" # Permit execution of binaries and other executable files
|
||||
];
|
||||
};
|
||||
|
||||
hardware.tuxedo-drivers.enable = true;
|
||||
programs.gpu-screen-recorder.enable = true;
|
||||
|
||||
# ......omit many configurations
|
||||
|
||||
# Define a user account. Don't forget to set a password with ‘passwd’.
|
||||
users.users.worble = {
|
||||
initialPassword = "password";
|
||||
isNormalUser = true;
|
||||
extraGroups = [ "wheel" "gamemode" "podman" "cdrom" ]; # Enable ‘sudo’ for the user.
|
||||
linger = true;
|
||||
};
|
||||
|
||||
home-manager.useGlobalPkgs = true;
|
||||
home-manager = {
|
||||
extraSpecialArgs = { inherit inputs; };
|
||||
users = {
|
||||
"worble" = import ./home-manager/home.nix;
|
||||
};
|
||||
};
|
||||
}
|
||||
Binary file not shown.
Binary file not shown.
@@ -1,205 +0,0 @@
|
||||
{ inputs, config, pkgs, ... }:
|
||||
|
||||
{
|
||||
imports = [
|
||||
../../home-manager/fonts.nix
|
||||
../../home-manager/terminal.nix
|
||||
../../home-manager/firefox/firefox.nix
|
||||
../../home-manager/development/tools.nix
|
||||
../../home-manager/development/vscode.nix
|
||||
../../home-manager/gaming.nix
|
||||
];
|
||||
|
||||
terminal.nixUpdateLocation = "/home/worble/Projects/nixos#tuxedo";
|
||||
terminal.flakeUpdateLocation = "/home/worble/Projects/nixos";
|
||||
|
||||
# Home Manager needs a bit of information about you and the paths it should
|
||||
# manage.
|
||||
home.username = "worble";
|
||||
home.homeDirectory = "/home/worble";
|
||||
|
||||
# This value determines the Home Manager release that your configuration is
|
||||
# compatible with. This helps avoid breakage when a new Home Manager release
|
||||
# introduces backwards incompatible changes.
|
||||
#
|
||||
# You should not change this value, even if you update Home Manager. If you do
|
||||
# want to update the value, then make sure to first check the Home Manager
|
||||
# release notes.
|
||||
home.stateVersion = "24.05"; # Please read the comment before changing.
|
||||
|
||||
# The home.packages option allows you to install Nix packages into your
|
||||
# environment.
|
||||
home.packages = with pkgs;[
|
||||
# # Adds the 'hello' command to your environment. It prints a friendly
|
||||
# # "Hello, world!" when run.
|
||||
# pkgs.hello
|
||||
|
||||
# # It is sometimes useful to fine-tune packages, for example, by applying
|
||||
# # overrides. You can do that directly here, just don't forget the
|
||||
# # parentheses. Maybe you want to install Nerd Fonts with a limited number of
|
||||
# # fonts?
|
||||
# (pkgs.nerdfonts.override { fonts = [ "FantasqueSansMono" ]; })
|
||||
|
||||
# # You can also create simple shell scripts directly inside your
|
||||
# # configuration. For example, this adds a command 'my-hello' to your
|
||||
# # environment:
|
||||
# (pkgs.writeShellScriptBin "my-hello" ''
|
||||
# echo "Hello, ${config.home.username}!"
|
||||
# '')
|
||||
thunderbird
|
||||
keepassxc
|
||||
strawberry-qt6
|
||||
rclone
|
||||
qbittorrent
|
||||
gimp-with-plugins
|
||||
ffmpeg-full
|
||||
yt-dlp
|
||||
joplin-desktop
|
||||
obsidian
|
||||
teamspeak_client
|
||||
webcord
|
||||
libreoffice-qt
|
||||
jellyfin-media-player
|
||||
haruna
|
||||
inotify-tools
|
||||
libnotify
|
||||
electrum
|
||||
gpu-screen-recorder-gtk
|
||||
];
|
||||
|
||||
# Home Manager is pretty good at managing dotfiles. The primary way to manage
|
||||
# plain files is through 'home.file'.
|
||||
home.file = {
|
||||
# # Building this configuration will create a copy of 'dotfiles/screenrc' in
|
||||
# # the Nix store. Activating the configuration will then make '~/.screenrc' a
|
||||
# # symlink to the Nix store copy.
|
||||
# ".screenrc".source = dotfiles/screenrc;
|
||||
|
||||
# # You can also set the file content immediately.
|
||||
# ".gradle/gradle.properties".text = ''
|
||||
# org.gradle.console=verbose
|
||||
# org.gradle.daemon.idletimeout=3600000
|
||||
# '';
|
||||
};
|
||||
|
||||
# Home Manager can also manage your environment variables through
|
||||
# 'home.sessionVariables'. These will be explicitly sourced when using a
|
||||
# shell provided by Home Manager. If you don't want to manage your shell
|
||||
# through Home Manager then you have to manually source 'hm-session-vars.sh'
|
||||
# located at either
|
||||
#
|
||||
# ~/.nix-profile/etc/profile.d/hm-session-vars.sh
|
||||
#
|
||||
# or
|
||||
#
|
||||
# ~/.local/state/nix/profiles/profile/etc/profile.d/hm-session-vars.sh
|
||||
#
|
||||
# or
|
||||
#
|
||||
# /etc/profiles/per-user/worble/etc/profile.d/hm-session-vars.sh
|
||||
#
|
||||
home.sessionVariables = {
|
||||
NIXOS_OZONE_WL = "1";
|
||||
};
|
||||
|
||||
# home.sessionPath = [
|
||||
# "$HOME/.local/bin"
|
||||
# ];
|
||||
|
||||
services.nextcloud-client = {
|
||||
enable = true;
|
||||
startInBackground = true;
|
||||
};
|
||||
|
||||
# Let Home Manager install and manage itself.
|
||||
programs = {
|
||||
home-manager.enable = true;
|
||||
|
||||
firefox = {
|
||||
profiles.work = import ../../home-manager/firefox/firefox-profile.nix // {
|
||||
id = 1;
|
||||
name = "work";
|
||||
isDefault = false;
|
||||
settings = {
|
||||
# allow fonts
|
||||
"browser.display.use_document_fonts" = 1;
|
||||
# home page
|
||||
"browser.startup.homepage" = "https://outlook.office.com|https://teams.microsoft.com/v2|https://dev.azure.com/binhsps/Connect/_boards/board/t/Development%20Team/Stories";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
chromium = {
|
||||
enable = true;
|
||||
package = pkgs.brave;
|
||||
};
|
||||
|
||||
# install the shaders from anime4k directory for this to work
|
||||
mpv = {
|
||||
enable = true;
|
||||
config = {
|
||||
profile = "gpu-hq";
|
||||
vo = "gpu-next";
|
||||
gpu-api = "vulkan";
|
||||
hwdec = "vulkan";
|
||||
screenshot-directory = "/mnt/HDD1/Pictures/";
|
||||
screenshot-template = "%F/%F_snapshot_%P";
|
||||
glsl-shaders = "~~/shaders/Anime4K_Clamp_Highlights.glsl:~~/shaders/Anime4K_Restore_CNN_VL.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_VL.glsl:~~/shaders/Anime4K_AutoDownscalePre_x2.glsl:~~/shaders/Anime4K_AutoDownscalePre_x4.glsl:~~/shaders/Anime4K_Upscale_CNN_x2_M.glsl";
|
||||
};
|
||||
};
|
||||
|
||||
mangohud = {
|
||||
enable = true;
|
||||
enableSessionWide = true;
|
||||
settings = {
|
||||
preset = 1;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
systemd.user = {
|
||||
services = {
|
||||
rclone-media = {
|
||||
Unit = {
|
||||
Description = "rclone-media /mnt/HDD1/Videos/";
|
||||
After = [ "network.target" "mnt-HDD1.mount" ];
|
||||
};
|
||||
|
||||
Install = {
|
||||
WantedBy = [ "default.target" ];
|
||||
};
|
||||
|
||||
Service = {
|
||||
Type = "exec";
|
||||
ExecStart = "${pkgs.writeShellApplication {
|
||||
name = "rclone-media";
|
||||
runtimeInputs = [ pkgs.inotify-tools pkgs.libnotify pkgs.rclone ];
|
||||
text = ''
|
||||
function rclonecopy {
|
||||
file=$1
|
||||
changed_rel=''${file#"/mnt/HDD1/Videos"}
|
||||
notify-send -a "rclone-media" "rclone for $file triggered"
|
||||
if rclone copyto "$file" media:"media-7gM2gcrxRjXqfj$changed_rel" ; then
|
||||
notify-send -a "rclone-media" "rclone complete for $file"
|
||||
else
|
||||
notify-send -u critical -a "rclone-media" "rclone failed for $file"
|
||||
fi
|
||||
}
|
||||
|
||||
inotifywait -mr \
|
||||
--format '%w%f' \
|
||||
-e close_write \
|
||||
/mnt/HDD1/Videos/ |
|
||||
while read -r file; do
|
||||
rclonecopy "$file"
|
||||
done
|
||||
'';
|
||||
}}/bin/rclone-media";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user