Nix configurations for my personal machines (Linux & macOS)

refactor: move to using Denix as a module system

ovyerus.com 355cf57a 9950bd4c

verified
+137 -29
flake.lock
···
{
"nodes": {
"flake-utils": {
"inputs": {
"systems": "systems"
···
"type": "github"
}
},
"home-manager": {
"inputs": {
"nixpkgs": [
···
]
},
"locked": {
-
"lastModified": 1747439237,
-
"narHash": "sha256-5rCGrnkglKKj4cav1U3HC+SIUNJh08pqOK4spQv9RjA=",
"owner": "nix-community",
"repo": "home-manager",
-
"rev": "ae755329092c87369b9e9a1510a8cf1ce2b1c708",
"type": "github"
},
"original": {
···
"xwayland-satellite-unstable": "xwayland-satellite-unstable"
},
"locked": {
-
"lastModified": 1747435695,
-
"narHash": "sha256-CTr69qXW9/gph8Brvs0TY1fXIJeqmJCt99yC7Mrh1u0=",
"owner": "sodiboo",
"repo": "niri-flake",
-
"rev": "e572b437025128d71ab262d7b0508136e385d352",
"type": "github"
},
"original": {
···
"niri-unstable": {
"flake": false,
"locked": {
-
"lastModified": 1747425277,
-
"narHash": "sha256-3Guwq7v52mJ+koHUrMbzr8CA9ZD9Yf6/zudyk3NpUec=",
"owner": "YaLTeR",
"repo": "niri",
-
"rev": "bb8eb377c71337890889483e43c361b2bda4a414",
"type": "github"
},
"original": {
···
"nix-darwin": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
-
"lastModified": 1747365160,
-
"narHash": "sha256-4ZVr0x+ry6ybym/VhVYACj0HlJo44YxAaPGOxiS88Hg=",
"owner": "LnL7",
"repo": "nix-darwin",
-
"rev": "8817b00b0011750381d0d44bb94d61087349b6ba",
"type": "github"
},
"original": {
···
]
},
"locked": {
-
"lastModified": 1746934494,
-
"narHash": "sha256-3n6i+F0sDASjkhbvgFDpPDZGp7z19IrRtjfF9TwJpCA=",
"owner": "nix-community",
"repo": "nix-index-database",
-
"rev": "e9b21b01e4307176b9718a29ac514838e7f6f4ff",
"type": "github"
},
"original": {
···
"nixpkgs": "nixpkgs"
},
"locked": {
-
"lastModified": 1747383427,
-
"narHash": "sha256-l7NPb4CiGfBS5VEwIsqThLlGrTRysxb+BMOgBJkizTk=",
"owner": "nix-community",
"repo": "nix-vscode-extensions",
-
"rev": "84fa86a820a365b12d7bbae3556ad737f7091af3",
"type": "github"
},
"original": {
···
},
"nixpkgs-stable": {
"locked": {
-
"lastModified": 1747209494,
-
"narHash": "sha256-fLise+ys+bpyjuUUkbwqo5W/UyIELvRz9lPBPoB0fbM=",
"owner": "NixOS",
"repo": "nixpkgs",
-
"rev": "5d736263df906c5da72ab0f372427814de2f52f8",
"type": "github"
},
"original": {
"owner": "NixOS",
-
"ref": "nixos-24.11",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_2": {
"locked": {
-
"lastModified": 1747179050,
-
"narHash": "sha256-qhFMmDkeJX9KJwr5H32f1r7Prs7XbQWtO0h3V0a0rFY=",
"owner": "nixos",
"repo": "nixpkgs",
-
"rev": "adaa24fbf46737f3f1b5497bf64bae750f82942e",
"type": "github"
},
"original": {
···
"type": "github"
}
},
"root": {
"inputs": {
"home-manager": "home-manager",
"iosevka-solai": "iosevka-solai",
"lix-module": "lix-module",
"niri-flake": "niri-flake",
-
"nix-darwin": "nix-darwin",
"nix-index-database": "nix-index-database",
"nix-vscode-extensions": "nix-vscode-extensions",
"nixpkgs": "nixpkgs_2"
···
"xwayland-satellite-unstable": {
"flake": false,
"locked": {
-
"lastModified": 1747111562,
-
"narHash": "sha256-GAqhWoxaBIk0tgoecZPa8gTHDHxNc0JtlwWHZN2iOOo=",
"owner": "Supreeeme",
"repo": "xwayland-satellite",
-
"rev": "ec9ff64c1e0cbec42710b580b7c0f759b1694e72",
"type": "github"
},
"original": {
···
{
"nodes": {
+
"denix": {
+
"inputs": {
+
"home-manager": [
+
"home-manager"
+
],
+
"nix-darwin": "nix-darwin",
+
"nixpkgs": [
+
"nixpkgs"
+
],
+
"pre-commit-hooks": "pre-commit-hooks"
+
},
+
"locked": {
+
"lastModified": 1749374482,
+
"narHash": "sha256-IAyAgmxZ+8YUPkyxn6gvCUZiV93dX6oLmcOOCSU9We4=",
+
"owner": "yunfachi",
+
"repo": "denix",
+
"rev": "5a27d210ee6ff79375731a515810a02c6bb8b0d4",
+
"type": "github"
+
},
+
"original": {
+
"owner": "yunfachi",
+
"repo": "denix",
+
"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"
···
"type": "github"
}
},
+
"gitignore": {
+
"inputs": {
+
"nixpkgs": [
+
"denix",
+
"pre-commit-hooks",
+
"nixpkgs"
+
]
+
},
+
"locked": {
+
"lastModified": 1709087332,
+
"narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=",
+
"owner": "hercules-ci",
+
"repo": "gitignore.nix",
+
"rev": "637db329424fd7e46cf4185293b9cc8c88c95394",
+
"type": "github"
+
},
+
"original": {
+
"owner": "hercules-ci",
+
"repo": "gitignore.nix",
+
"type": "github"
+
}
+
},
"home-manager": {
"inputs": {
"nixpkgs": [
···
]
},
"locked": {
+
"lastModified": 1749526396,
+
"narHash": "sha256-UL9F76abAk87llXOrcQRjhd5OaOclUd6MIltsqcUZmo=",
"owner": "nix-community",
"repo": "home-manager",
+
"rev": "427c96044f11a5da50faf6adaf38c9fa47e6d044",
"type": "github"
},
"original": {
···
"xwayland-satellite-unstable": "xwayland-satellite-unstable"
},
"locked": {
+
"lastModified": 1749533158,
+
"narHash": "sha256-wIw3Q/Ls1nsLjBN4VsAiTMHZiyf5RGRVy2MWfyYPgMI=",
"owner": "sodiboo",
"repo": "niri-flake",
+
"rev": "e5c4564ec3704f5e358f50d883b5200c4e8dfd7e",
"type": "github"
},
"original": {
···
"niri-unstable": {
"flake": false,
"locked": {
+
"lastModified": 1749474820,
+
"narHash": "sha256-hf5eCZ0bbqwOKPvPKn8Rutwj+xs3GhAfB0AjGa8tIEM=",
"owner": "YaLTeR",
"repo": "niri",
+
"rev": "a18d24fc24d8b17242e336ccf39fcbe91e8161fd",
"type": "github"
},
"original": {
···
"nix-darwin": {
"inputs": {
"nixpkgs": [
+
"denix",
"nixpkgs"
]
},
"locked": {
+
"lastModified": 1746254942,
+
"narHash": "sha256-Y062AuRx6l+TJNX8wxZcT59SSLsqD9EedAY0mqgTtQE=",
+
"owner": "nix-darwin",
+
"repo": "nix-darwin",
+
"rev": "760a11c87009155afa0140d55c40e7c336d62d7a",
+
"type": "github"
+
},
+
"original": {
+
"owner": "nix-darwin",
+
"repo": "nix-darwin",
+
"type": "github"
+
}
+
},
+
"nix-darwin_2": {
+
"inputs": {
+
"nixpkgs": [
+
"nixpkgs"
+
]
+
},
+
"locked": {
+
"lastModified": 1749194393,
+
"narHash": "sha256-vt6hM9DNywnXXuW1qPDLzECmbDcmxhh58wpb0EEQjAo=",
"owner": "LnL7",
"repo": "nix-darwin",
+
"rev": "19346808c445f23b08652971be198b9df6c33edc",
"type": "github"
},
"original": {
···
]
},
"locked": {
+
"lastModified": 1749355504,
+
"narHash": "sha256-L17CdJMD+/FCBOHjREQLXbe2VUnc3rjffenBbu2Kwpc=",
"owner": "nix-community",
"repo": "nix-index-database",
+
"rev": "40a6e15e44b11fbf8f2b1df9d64dbfc117625e94",
"type": "github"
},
"original": {
···
"nixpkgs": "nixpkgs"
},
"locked": {
+
"lastModified": 1749521131,
+
"narHash": "sha256-ezZ15tLA2L+rmtn39dKLFW/UM2xlksC61V12blulpjE=",
"owner": "nix-community",
"repo": "nix-vscode-extensions",
+
"rev": "299b2aa650d32310153746135b6a84a6c4de9c21",
"type": "github"
},
"original": {
···
},
"nixpkgs-stable": {
"locked": {
+
"lastModified": 1749237914,
+
"narHash": "sha256-N5waoqWt8aMr/MykZjSErOokYH6rOsMMXu3UOVH5kiw=",
"owner": "NixOS",
"repo": "nixpkgs",
+
"rev": "70c74b02eac46f4e4aa071e45a6189ce0f6d9265",
"type": "github"
},
"original": {
"owner": "NixOS",
+
"ref": "nixos-25.05",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_2": {
"locked": {
+
"lastModified": 1749285348,
+
"narHash": "sha256-frdhQvPbmDYaScPFiCnfdh3B/Vh81Uuoo0w5TkWmmjU=",
"owner": "nixos",
"repo": "nixpkgs",
+
"rev": "3e3afe5174c561dee0df6f2c2b2236990146329f",
"type": "github"
},
"original": {
···
"type": "github"
}
},
+
"pre-commit-hooks": {
+
"inputs": {
+
"flake-compat": "flake-compat",
+
"gitignore": "gitignore",
+
"nixpkgs": [
+
"denix",
+
"nixpkgs"
+
]
+
},
+
"locked": {
+
"lastModified": 1746537231,
+
"narHash": "sha256-Wb2xeSyOsCoTCTj7LOoD6cdKLEROyFAArnYoS+noCWo=",
+
"owner": "cachix",
+
"repo": "git-hooks.nix",
+
"rev": "fa466640195d38ec97cf0493d6d6882bc4d14969",
+
"type": "github"
+
},
+
"original": {
+
"owner": "cachix",
+
"repo": "git-hooks.nix",
+
"type": "github"
+
}
+
},
"root": {
"inputs": {
+
"denix": "denix",
"home-manager": "home-manager",
"iosevka-solai": "iosevka-solai",
"lix-module": "lix-module",
"niri-flake": "niri-flake",
+
"nix-darwin": "nix-darwin_2",
"nix-index-database": "nix-index-database",
"nix-vscode-extensions": "nix-vscode-extensions",
"nixpkgs": "nixpkgs_2"
···
"xwayland-satellite-unstable": {
"flake": false,
"locked": {
+
"lastModified": 1749315541,
+
"narHash": "sha256-bEik1BfVOFnWvtOrcOHluos/edJ8f+G2y1QySbt/0Ak=",
"owner": "Supreeeme",
"repo": "xwayland-satellite",
+
"rev": "da2ecb5be816de35e2efe23a408a1c49fe8b11ba",
"type": "github"
},
"original": {
+27 -48
flake.nix
···
inputs.nixpkgs.follows = "nixpkgs";
};
# ags = {
# url = "github:Aylur/ags";
# inputs.nixpkgs.follows = "nixpkgs";
···
outputs = {
# ags,
home-manager,
lix-module,
niri-flake,
···
system = "x86_64-linux";
pkgs = nixpkgs.legacyPackages.${system};
# agsPkgs = ags.packages.${system};
in {
packages.${system} = {
iconifydl = pkgs.callPackage ./pkgs/iconifydl.nix {};
···
# buildInputs = [agsPkgs.agsFull agsPkgs.io agsPkgs.apps agsPkgs.tray self.packages.${system}.iconifydl];
# };
-
nixosConfigurations.wallsocket = nixpkgs.lib.nixosSystem {
-
system = "x86_64-linux";
-
specialArgs = {inherit inputs;};
-
modules = [
-
./nixos/wallsocket/configuration.nix
-
niri-flake.nixosModules.niri
-
nix-index-database.nixosModules.nix-index
-
lix-module.nixosModules.default
-
home-manager.nixosModules.home-manager
-
{
-
programs.command-not-found.enable = false;
-
home-manager = {
-
useGlobalPkgs = true;
-
useUserPackages = true;
-
backupFileExtension = "backup";
-
users.ovy = import ./home/wallsocket.nix;
-
extraSpecialArgs = {inherit inputs;};
-
};
-
}
-
];
-
};
-
darwinConfigurations.shimmer = nix-darwin.lib.darwinSystem {
-
specialArgs = {inherit inputs;};
-
modules = [
-
./darwin/shimmer/configuration.nix
-
home-manager.darwinModules.home-manager
-
{
-
home-manager = {
-
useGlobalPkgs = true;
-
useUserPackages = true;
-
backupFileExtension = "backup";
-
users.ovy = import ./home/shimmer.nix;
-
extraSpecialArgs = {inherit inputs;};
-
};
-
}
-
];
-
};
-
nixosModules.serverHomeManager = {...}: {
-
imports = [home-manager.nixosModules.home-manager];
-
-
home-manager = {
-
useGlobalPkgs = true;
-
useUserPackages = true;
-
backupFileExtension = "backup";
-
users.ovy = import ./home/server.nix;
-
extraSpecialArgs = {inherit inputs;};
-
};
-
};
formatter = {
aarch64-linux = nixpkgs.legacyPackages.aarch64-linux.alejandra;
···
inputs.nixpkgs.follows = "nixpkgs";
};
+
denix = {
+
url = "github:yunfachi/denix";
+
inputs.nixpkgs.follows = "nixpkgs";
+
inputs.home-manager.follows = "home-manager";
+
};
+
# ags = {
# url = "github:Aylur/ags";
# inputs.nixpkgs.follows = "nixpkgs";
···
outputs = {
# ags,
+
denix,
home-manager,
lix-module,
niri-flake,
···
system = "x86_64-linux";
pkgs = nixpkgs.legacyPackages.${system};
# agsPkgs = ags.packages.${system};
+
mkConfigurations = moduleSystem:
+
denix.lib.configurations (let
+
homeManagerUser = "ovy";
+
in {
+
inherit moduleSystem homeManagerUser;
+
+
paths = [./denix/hosts ./denix/modules]; #./denix/rices];
+
specialArgs = {inherit inputs moduleSystem homeManagerUser;};
+
});
in {
packages.${system} = {
iconifydl = pkgs.callPackage ./pkgs/iconifydl.nix {};
···
# buildInputs = [agsPkgs.agsFull agsPkgs.io agsPkgs.apps agsPkgs.tray self.packages.${system}.iconifydl];
# };
+
nixosConfigurations = mkConfigurations "nixos";
+
# nixosModules.serverHomeManager = {...}: {
+
# imports = [home-manager.nixosModules.home-manager];
+
# home-manager = {
+
# useGlobalPkgs = true;
+
# useUserPackages = true;
+
# backupFileExtension = "backup";
+
# users.ovy = import ./home/server.nix;
+
# extraSpecialArgs = {inherit inputs;};
+
# };
+
# };
formatter = {
aarch64-linux = nixpkgs.legacyPackages.aarch64-linux.alejandra;
-6
home/darwin/configs.nix
···
-
{...}: {
-
xdg.configFile = {
-
# TODO: replace with the full karabiner config instead of needing to manually set complex mods
-
"karabiner/assets/complex_modifications/keybind-helpers.json".source = ../../files/karabiner/keybind-helpers.json;
-
};
-
}
···
-78
home/desktop/apps.nix
···
-
{
-
config,
-
pkgs,
-
...
-
}: {
-
home.packages = with pkgs; [
-
alejandra
-
audacity
-
blender
-
btop
-
# bottles
-
bruno
-
# davinci-resolve
-
distrobox
-
# feishin
-
gajim
-
glaxnimate
-
# godot_4
-
handbrake
-
heynote
-
klog-time-tracker
-
libreoffice
-
losslesscut-bin
-
lunacy
-
lutris
-
# mixxx
-
obs-studio
-
obsidian
-
oversteer
-
p7zip
-
picard
-
pinta
-
piper
-
podman-tui
-
# plasticity
-
prismlauncher
-
qbittorrent
-
qimgv
-
slack
-
syncthingtray
-
vesktop
-
vlc
-
vorta
-
winetricks
-
# wineWowPackages.full
-
# (wineWowPackages.full.overrideAttrs (finalAttrs: previousAttrs: {
-
# src = pkgs.fetchFromGitLab {
-
# owner = "ElementalWarrior";
-
# repo = "wine";
-
# rev = "d0fe9b9ab64d7e310b2b7afd135369e49758b24b";
-
# domain = "gitlab.winehq.org";
-
# hash = "sha256-xa5xZQxlY5MH2jcdKIOs7zd3y/1UoxQhe/L4NoMyCqw=";
-
# };
-
# }))
-
yt-dlp
-
yubioath-flutter
-
];
-
-
services.owncloud-client.enable = true;
-
-
programs.mangohud = {
-
enable = true;
-
settings = {
-
cpu_temp = true;
-
cpu_mhz = true;
-
cpu_power = true;
-
core_load = true;
-
gpu_core_clock = true;
-
gpu_temp = true;
-
gpu_power = true;
-
gpu_fan = true;
-
gpu_voltage = true;
-
vram = true;
-
ram = true;
-
};
-
};
-
home.sessionVariables.MANGOHUD_CONFIGFILE = "${config.xdg.configHome}/MangoHud/MangoHud.conf";
-
}
···
+9 -2
home/modules/espanso.nix modules/programs/espanso.nix
···
-
{pkgs, ...}: {
-
services.espanso = {
enable = true;
package = pkgs.espanso-wayland;
matches.base.matches = [
···
+
{
+
delib,
+
pkgs,
+
...
+
}:
+
delib.module {
+
name = "programs.espanso";
+
+
home.always.services.espanso = {
enable = true;
package = pkgs.espanso-wayland;
matches.base.matches = [
-238
home/modules/niri.nix
···
-
{
-
config,
-
pkgs,
-
...
-
}: {
-
# programs.niri.enable = true;
-
programs.niri.package = pkgs.niri;
-
-
programs.niri.settings = {
-
# input.keyboard.xkb = {
-
# layout = "us";
-
# variant = "colemak";
-
# };
-
-
# TODO: maybe explicitly define outputs
-
-
input.mouse = {
-
natural-scroll = false;
-
accel-profile = "flat";
-
};
-
-
input.touchpad = {
-
enable = true;
-
tap = true;
-
natural-scroll = true;
-
scroll-factor = 0.3;
-
accel-profile = "adaptive";
-
tap-button-map = "left-right-middle";
-
scroll-method = "two-finger";
-
};
-
-
input.focus-follows-mouse = {
-
enable = true;
-
max-scroll-amount = "0%";
-
};
-
-
cursor.size = 32;
-
-
prefer-no-csd = true;
-
-
spawn-at-startup = [
-
{command = ["xwayland-satellite"];}
-
# {command = ["hyprpaper"];}
-
{command = ["kitty"];}
-
];
-
-
environment = {
-
DISPLAY = ":0";
-
GDK_BACKEND = "wayland";
-
};
-
-
layout = {
-
struts = let
-
x = 16;
-
y = 16;
-
in {
-
top = y;
-
bottom = y;
-
left = x;
-
right = x;
-
};
-
-
focus-ring = {
-
enable = true;
-
width = 2;
-
active.gradient = {
-
angle = 45;
-
from = "rgb(255 0 255)";
-
to = "rgb(0 255 255)";
-
relative-to = "workspace-view";
-
};
-
};
-
-
shadow.enable = true;
-
};
-
-
window-rules = [
-
{
-
geometry-corner-radius = let
-
r = 8.0;
-
in {
-
top-left = r;
-
top-right = r;
-
bottom-left = r;
-
bottom-right = r;
-
};
-
clip-to-geometry = true;
-
draw-border-with-background = false;
-
}
-
{
-
matches = [{app-id = "^1Password$";}];
-
open-floating = true;
-
}
-
];
-
-
# TODO: create custom keybinds on layer 1 so I don't need to use a fuckton of fingers
-
binds = with config.lib.niri.actions; {
-
# Misc/meta
-
"Mod+Shift+Slash".action = show-hotkey-overlay;
-
"Mod+Shift+E".action = quit;
-
"Mod+Q".action = close-window;
-
-
# Quick access
-
"Mod+Grave".action = spawn "kitty";
-
"Mod+B".action = spawn "vivaldi"; # TODO: spawn on startup instead
-
"Mod+R".action = spawn "fuzzel";
-
-
"Print".action = screenshot;
-
# "Ctrl+Print".action = screenshot-screen;
-
"Alt+Print".action = screenshot-window;
-
-
# Resizing
-
"Mod+F".action = maximize-column;
-
"Mod+Shift+F".action = fullscreen-window;
-
"Mod+Minus".action = set-column-width "-10%";
-
"Mod+Equal".action = set-column-width "+10%";
-
"Mod+Shift+Minus".action = set-window-height "-10%";
-
"Mod+Shift+Equal".action = set-window-height "+10%";
-
# "Mod+R".action = switch-preset-column-width;
-
"Mod+Shift+R".action = reset-window-height;
-
"Mod+C".action = center-column;
-
-
# Focus windows
-
"Mod+Left".action = focus-column-left;
-
"Mod+Right".action = focus-column-right;
-
"Mod+Up".action = focus-window-or-workspace-up;
-
"Mod+Down".action = focus-window-or-workspace-down;
-
"Mod+Home".action = focus-column-first;
-
"Mod+End".action = focus-column-last;
-
-
# Move windows
-
"Mod+Shift+Left".action = move-column-left;
-
"Mod+Shift+Right".action = move-column-right;
-
"Mod+Shift+Up".action = move-window-up-or-to-workspace-up;
-
"Mod+Shift+Down".action = move-window-down-or-to-workspace-down;
-
"Mod+Shift+Home".action = move-column-to-first;
-
"Mod+Shift+End".action = move-column-to-last;
-
-
"Mod+Comma".action = consume-window-into-column;
-
"Mod+Period".action = expel-window-from-column;
-
-
# Workspaces
-
"Mod+Page_Down".action = focus-workspace-down;
-
"Mod+Page_Up".action = focus-workspace-up;
-
"Mod+Ctrl+Page_Down".action = move-column-to-workspace-down;
-
"Mod+Ctrl+Page_Up".action = move-column-to-workspace-up;
-
"Mod+Shift+Page_Down".action = move-workspace-down;
-
"Mod+Shift+Page_Up".action = move-workspace-up;
-
"Mod+Tab".action = focus-workspace-previous;
-
-
# TODO: Screens
-
# "Mod+Shift+Left".action = focus-monitor-left;
-
# "Mod+Shift+Down".action = focus-monitor-down;
-
# "Mod+Shift+Up".action = focus-monitor-up;
-
# "Mod+Shift+Right".action = focus-monitor-right;
-
# "Mod+Shift+Ctrl+Left".action = move-column-to-monitor-left;
-
# "Mod+Shift+Ctrl+Down".action = move-column-to-monitor-down;
-
# "Mod+Shift+Ctrl+Up".action = move-column-to-monitor-up;
-
# "Mod+Shift+Ctrl+Right".action = move-column-to-monitor-right;
-
-
# Scrolling through workspaces
-
# `cooldown-ms` used to not go through workspaces really fast
-
"Mod+WheelScrollDown" = {
-
cooldown-ms = 150;
-
action = focus-workspace-down;
-
};
-
"Mod+WheelScrollUp" = {
-
cooldown-ms = 150;
-
action = focus-workspace-up;
-
};
-
"Mod+Ctrl+WheelScrollDown" = {
-
cooldown-ms = 150;
-
action = move-column-to-workspace-down;
-
};
-
"Mod+Ctrl+WheelScrollUp" = {
-
cooldown-ms = 150;
-
action = move-column-to-workspace-up;
-
};
-
-
# Scrolling through windows
-
"Mod+WheelScrollRight".action = focus-column-right;
-
"Mod+WheelScrollLeft".action = focus-column-left;
-
"Mod+Ctrl+WheelScrollRight".action = move-column-right;
-
"Mod+Ctrl+WheelScrollLeft".action = move-column-left;
-
# Holding shift while scrolling usually does horizontal, so do the same here.
-
"Mod+Shift+WheelScrollDown".action = focus-column-right;
-
"Mod+Shift+WheelScrollUp".action = focus-column-left;
-
"Mod+Ctrl+Shift+WheelScrollDown".action = move-column-right;
-
"Mod+Ctrl+Shift+WheelScrollUp".action = move-column-left;
-
};
-
};
-
-
programs.wlogout = {
-
enable = true;
-
layout = [
-
{
-
"label" = "lock";
-
"action" = "loginctl lock-session";
-
"text" = "Lock";
-
"keybind" = "l";
-
}
-
{
-
"label" = "hibernate";
-
"action" = "systemctl hibernate";
-
"text" = "Hibernate";
-
"keybind" = "h";
-
}
-
{
-
"label" = "logout";
-
"action" = "loginctl terminate-user $USER";
-
"text" = "Logout";
-
"keybind" = "e";
-
}
-
{
-
"label" = "shutdown";
-
"action" = "systemctl poweroff";
-
"text" = "Shutdown";
-
"keybind" = "s";
-
}
-
{
-
"label" = "suspend";
-
"action" = "systemctl suspend";
-
"text" = "Suspend";
-
"keybind" = "u";
-
}
-
{
-
"label" = "reboot";
-
"action" = "systemctl reboot";
-
"text" = "Reboot";
-
"keybind" = "r";
-
}
-
];
-
# https://github.com/ArtsyMacaw/wlogout/blob/master/style.css
-
# style = ''''
-
};
-
-
programs.fuzzel = {};
-
}
···
-22
home/modules/ssh.nix
···
-
{lib, ...}: let
-
_1passwordAgent = options:
-
lib.hm.dag.entryBefore ["*"] ({
-
extraOptions.IdentityAgent = "~/.1password/agent.sock";
-
extraOptions.IdentitiesOnly = "no";
-
}
-
// options);
-
in {
-
programs.ssh = {
-
enable = true;
-
matchBlocks = {
-
"*" = {
-
identitiesOnly = true;
-
identityFile = "~/.ssh/id_ed25519_sk_rk";
-
user = "ovy";
-
};
-
# OpenWrt
-
"192.168.1.1" = _1passwordAgent {user = "root";};
-
"*.repo.borgbase.com" = _1passwordAgent {};
-
};
-
};
-
}
···
-24
home/modules/xdg.nix
···
-
{
-
config,
-
pkgs,
-
...
-
}: let
-
vivalarc = pkgs.fetchFromGitHub {
-
owner = "tovifun";
-
repo = "VivalArc";
-
rev = "7ee09e9efb46c1524a43f0cb6763b9750db6e81c";
-
hash = "sha256-xYSxB8KjcbeUDEdbA2AJ9FeQC1TkqyXdB9rTMMSm+FA=";
-
};
-
in {
-
xdg.desktopEntries.davinci-resolve = {
-
name = "Davinci Resolve";
-
exec = "davinci-resolve";
-
categories = ["AudioVideo" "AudioVideoEditing" "Video" "Graphics"];
-
comment = "Professional video editing, color, effects and audio post-processing";
-
genericName = "Video Editor";
-
type = "Application";
-
settings.Version = "1.4";
-
};
-
-
xdg.dataFile."vivalarc".source = vivalarc;
-
}
···
+11 -2
home/programs/browser.nix modules/programs/chromium.nix
···
-
{pkgs, ...}: {
-
programs.chromium = {
enable = true;
package = pkgs.vivaldi.overrideAttrs (finalAttrs: previousAttrs: {
dontWrapQtApps = false;
···
+
{
+
delib,
+
pkgs,
+
...
+
}:
+
delib.module {
+
name = "programs.chromium";
+
+
options = delib.singleEnableOption true;
+
+
home.ifEnabled.programs.chromium = {
enable = true;
package = pkgs.vivaldi.overrideAttrs (finalAttrs: previousAttrs: {
dontWrapQtApps = false;
-113
home/programs/common-cli.nix
···
-
{
-
pkgs,
-
lib,
-
config,
-
...
-
}: {
-
# Core CLI tools
-
home.packages = with pkgs; [
-
curlie
-
du-dust
-
duf
-
fd
-
jq
-
moar
-
nix-your-shell
-
ripgrep
-
];
-
-
programs.aria2.enable = true;
-
-
programs.bat = {
-
enable = true;
-
config = {
-
theme = "DarkNeon";
-
italic-text = "always";
-
};
-
};
-
-
# Pager & manpages options
-
home.sessionVariables = {
-
PAGER = "moar";
-
MOAR = "--no-linenumbers";
-
MANPAGER = "sh -c 'col -bx | bat -l man -p'";
-
MANROFFOPT = "-c";
-
};
-
-
programs.direnv = {
-
enable = true;
-
nix-direnv.enable = true;
-
config.whitelist.prefix = [
-
"${config.home.homeDirectory}/Projects/bots-gg"
-
"${config.home.homeDirectory}/Projects/dijit"
-
"${config.home.homeDirectory}/Projects/personal"
-
"${config.home.homeDirectory}/Projects/work"
-
];
-
};
-
-
# TODO: decide on this vs lsd?
-
programs.eza.enable = true;
-
-
# TODO
-
# Investigate preview stuff as default command
-
# https://github.com/kidonng/preview.fish
-
# Explore fzf search modes
-
programs.fzf = {
-
enable = true;
-
enableFishIntegration = false;
-
defaultOptions = [
-
"--ansi"
-
"--cycle"
-
"--layout=reverse"
-
"--border"
-
"--height=90%"
-
"--marker=\"*\""
-
"--preview 'bat --color=always --style=header,numbers --line-range :300 {}'"
-
# I usually use a vertical term so this is more practical.
-
# TODO: possible to dynamically change based on terminal dimensinns?
-
"--preview-window='bottom:50%:wrap'"
-
];
-
defaultCommand = "fd --color=always --type file --follow --hidden --exclude .git --exclude node_modules";
-
};
-
home.sessionVariables.FZF_CTRL_T_COMMAND = "fd --color=always --follow";
-
-
programs.micro = {
-
enable = true;
-
settings = {
-
clipboard = "external";
-
hlsearch = true;
-
parsecursor = true;
-
scrollbar = true;
-
tabmovement = true;
-
tabsize = 2;
-
tabstospaces = true;
-
};
-
};
-
-
programs.nix-index.enable = true;
-
-
programs.tealdeer = {
-
enable = true;
-
settings = {
-
updates = {
-
auto_update = true;
-
};
-
};
-
};
-
-
programs.zellij = {
-
enable = true;
-
enableFishIntegration = false;
-
settings = {
-
mouse_mode = true;
-
theme = "catppuccin-mocha";
-
ui.pane_frames.rounded_corners = true;
-
ui.pane_frames.hide_session_name = true;
-
};
-
};
-
-
programs.zoxide = {
-
enable = true;
-
enableFishIntegration = true;
-
};
-
}
···
+9 -3
home/programs/desktop-cli.nix modules/programs/desktop-cli.nix
···
-
{pkgs, ...}: {
-
# Misc packages
-
home.packages = with pkgs; [
age-plugin-yubikey
alejandra
cachix
···
+
{
+
delib,
+
pkgs,
+
...
+
}:
+
delib.module {
+
name = "programs.desktop-cli";
+
+
home.always.home.packages = with pkgs; [
age-plugin-yubikey
alejandra
cachix
+9 -2
home/programs/fish.nix modules/programs/fish.nix
···
-
{pkgs, ...}: {
# TODO: custom fifc rules (nix shell, nix run, ...)
# TODO: how to customise fifc pane
-
programs.fish = {
enable = true;
interactiveShellInit = ''
set fish_greeting
···
+
{
+
delib,
+
pkgs,
+
...
+
}:
+
delib.module {
+
name = "programs.fish";
+
# TODO: custom fifc rules (nix shell, nix run, ...)
# TODO: how to customise fifc pane
+
home.always.programs.fish = {
enable = true;
interactiveShellInit = ''
set fish_greeting
-70
home/programs/git.nix
···
-
{
-
pkgs,
-
lib,
-
...
-
}: {
-
xdg.configFile."git/allowed_signers".source = ../../files/git/allowed_signers;
-
-
programs.git = {
-
enable = true;
-
userName = "Ashlynne Mitchell";
-
userEmail = "ovy@ovyerus.com";
-
delta.enable = true;
-
-
signing = {
-
signByDefault = true;
-
format = "ssh";
-
key = "~/.ssh/id_ed25519_sk_rk";
-
};
-
-
extraConfig = {
-
# TODO: custom pretty stuff?
-
blame.showEmail = true;
-
init.defaultBranch = "main";
-
pull.rebase = true;
-
-
log = {
-
abbrevCommit = true;
-
# TODO: `git log --oneline` looks silly with this. Need custom format.
-
showSignature = true;
-
# TODO: trial for a while and see if I like this.
-
date = "human";
-
};
-
-
merge = {
-
# Try to avoid merge commits
-
ff = "only";
-
# Really only useful on a well-managed team. Maybe eventually.
-
# verifySignatures = true;
-
};
-
-
push = {
-
autoSetupRemote = true;
-
followTags = true;
-
};
-
-
# Require explicit `drop` in interactive rebase
-
rebase.missingCommitsCheck = "error";
-
rerere.enabled = true;
-
-
status = {
-
relativePaths = false;
-
showStash = true;
-
};
-
-
gpg.ssh.allowedSignersFile = "~/.config/git/allowed_signers";
-
# "gpg.ssh.program = "gfh-keygen";
-
# "gpg.ssh.defaultKeyCommand = "gfh";
-
};
-
};
-
-
programs.gh = {
-
enable = true;
-
settings = {
-
git_protocol = "ssh";
-
aliases = {
-
clone = "repo clone";
-
};
-
};
-
};
-
}
···
+7 -2
home/programs/kitty.nix modules/programs/kitty.nix
···
-
{
-
programs.kitty = {
enable = true;
font.name = "Iosevka Solai";
font.size = 12;
···
+
{delib, ...}:
+
delib.module {
+
name = "programs.kitty";
+
+
options = delib.singleEnableOption true;
+
+
home.ifEnabled.programs.kitty = {
enable = true;
font.name = "Iosevka Solai";
font.size = 12;
-15
home/programs/syncthing.nix
···
-
{
-
config,
-
lib,
-
pkgs,
-
...
-
}: {
-
services.syncthing = {
-
enable = true;
-
tray.enable = true;
-
tray.package = pkgs.syncthingtray;
-
};
-
-
# Fix syncthingtray complaining about the tray not existing, because of the custom tray service above.
-
systemd.user.services.syncthingtray.Service.ExecStart = lib.mkForce "${config.services.syncthing.tray.package}/bin/${config.services.syncthing.tray.command} --wait";
-
}
···
-234
home/programs/vscode.nix
···
-
{
-
inputs,
-
pkgs,
-
...
-
}: {
-
home.sessionVariables.EDITOR = "codium --wait";
-
-
programs.vscode = {
-
enable = true;
-
mutableExtensionsDir = false;
-
package = pkgs.vscodium;
-
-
profiles.default = {
-
enableUpdateCheck = false;
-
enableExtensionUpdateCheck = false;
-
-
extensions = let
-
vscode-extensions = inputs.nix-vscode-extensions.extensions.${pkgs.system};
-
inherit (vscode-extensions) open-vsx vscode-marketplace;
-
in
-
with open-vsx; [
-
kamadorueda.alejandra
-
astro-build.astro-vscode
-
matthewpi.caddyfile-support
-
raidou.calc
-
artlaman.chalice-icon-theme # TODO: i should fork this to add support for some newer files (tbd)
-
adpyke.codesnap
-
clinyong.vscode-css-modules
-
mkhl.direnv
-
leonardssh.vscord
-
ms-azuretools.vscode-docker
-
editorconfig.editorconfig
-
irongeek.vscode-env
-
pgourlain.erlang
-
usernamehw.errorlens
-
dbaeumer.vscode-eslint
-
tamasfe.even-better-toml
-
sleistner.vscode-fileutils
-
bmalehorn.vscode-fish
-
github.vscode-github-actions
-
eamodio.gitlens
-
# TODO: terraform (use opentofu instead)
-
ms-vscode.hexeditor
-
lokalise.i18n-ally
-
kisstkondoros.vscode-gutter-preview
-
ms-python.isort
-
bierner.markdown-preview-github-styles
-
unifiedjs.vscode-mdx
-
jnoortheen.nix-ide
-
nuxtr.nuxtr-vscode
-
vunguyentuan.vscode-postcss
-
esbenp.prettier-vscode
-
prisma.prisma
-
# TODO: use jedi instead of pylance
-
ms-python.python
-
ms-python.debugpy
-
mechatroner.rainbow-csv
-
medo64.render-crlf
-
stkb.rewrap
-
rust-lang.rust-analyzer
-
mrmlnc.vscode-scss
-
svelte.svelte-vscode
-
jock.svg
-
coolbear.systemd-unit-file
-
bradlc.vscode-tailwindcss
-
myriad-dreamin.tinymist
-
gruntfuggly.todo-tree
-
tomoki1207.pdf
-
zxh404.vscode-proto3
-
styled-components.vscode-styled-components # TODO: don't really need this
-
vue.volar
-
wakatime.vscode-wakatime
-
redhat.vscode-yaml
-
arcanis.vscode-zipfs
-
vscode-marketplace.wraith13.background-phi-colors
-
vscode-marketplace.be5invis.theme-dolch
-
vscode-marketplace.fabiospampinato.vscode-diff
-
vscode-marketplace.jakebecker.elixir-ls
-
vscode-marketplace.zh9528.file-size
-
vscode-marketplace.vladdesv.vscode-klog
-
vscode-marketplace.dt.ghlink
-
vscode-marketplace.tyriar.lorem-ipsum
-
vscode-marketplace.phoenixframework.phoenix
-
vscode-marketplace.frigus02.vscode-sql-tagged-template-literals-syntax-only # TODO: alternative?
-
];
-
-
userSettings = {
-
# Formatters
-
"editor.defaultFormatter" = "esbenp.prettier-vscode";
-
"[elixir]"."editor.defaultFormatter" = "JakeBecker.elixir-ls";
-
"[nix]"."editor.defaultFormatter" = "kamadorueda.alejandra";
-
"[prisma]"."editor.defaultFormatter" = "Prisma.prisma";
-
"[python]"."editor.defaultFormatter" = "ms-python.python";
-
"[rust]"."editor.defaultFormatter" = "rust-lang.rust-analyzer";
-
-
# Sane defaults
-
"editor.tabSize" = 2;
-
"editor.insertSpaces" = true;
-
"breadcrumbs.enabled" = true;
-
"editor.wordWrap" = "off";
-
"security.workspace.trust.enabled" = false;
-
"security.workspace.trust.untrustedFiles" = "open";
-
"files.eol" = "\n";
-
"workbench.editor.empty.hint" = "hidden";
-
"comments.openView" = "never";
-
"editor.minimap.enabled" = false;
-
"editor.stickyScroll.enabled" = true;
-
"workbench.layoutControl.enabled" = false;
-
"diffEditor.ignoreTrimWhitespace" = true;
-
"editor.acceptSuggestionOnEnter" = "off";
-
"editor.formatOnSave" = true;
-
"editor.inlineSuggest.enabled" = true;
-
"editor.renderWhitespace" = "none";
-
"editor.suggestSelection" = "first";
-
"editor.tabCompletion" = "on";
-
"emmet.triggerExpansionOnTab" = true;
-
"explorer.confirmDelete" = false;
-
"explorer.confirmDragAndDrop" = false;
-
"redhat.telemetry.enabled" = false;
-
"workbench.tips.enabled" = false;
-
"workbench.tree.indent" = 16;
-
"workbench.tree.renderIndentGuides" = "always";
-
"editor.unicodeHighlight.ambiguousCharacters" = true;
-
"errorLens.enabledDiagnosticLevels" = ["error" "warning"];
-
"editor.acceptSuggestionOnCommitCharacter" = false;
-
"files.watcherExclude" = {
-
"**/.git/**" = true;
-
"**/node_modules/*/**" = true;
-
};
-
"search.exclude" = {
-
"**/node_modules" = true;
-
"**/bower_components" = true;
-
"**/*.code-search" = true;
-
"**/.yarn" = true;
-
};
-
"terminal.integrated.commandsToSkipShell" = [
-
"-workbench.action.quickOpenView"
-
"-workbench.action.quickOpen"
-
"-editor.action.clipboardCutAction"
-
];
-
# "prettier.prettierPath" = "prettierd";
-
"prettier.proseWrap" = "always";
-
-
# Pretties
-
"workbench.colorTheme" = "Dolch";
-
"workbench.iconTheme" = "chalice-icon-theme";
-
"editor.fontFamily" = "'Iosevka Solai', Menlo, Monaco, 'Courier New', monospace";
-
"editor.fontSize" = 16;
-
"terminal.integrated.fontFamily" = "'Iosevka Solai Term', Consolas, 'Courier New', monospace";
-
"terminal.integrated.fontSize" = 14;
-
"terminal.integrated.scrollback" = 9999999999;
-
"editor.fontLigatures" = true;
-
"editor.cursorSmoothCaretAnimation" = "on";
-
"editor.smoothScrolling" = true;
-
"zenMode.fullScreen" = false;
-
"zenMode.centerLayout" = false;
-
"zenMode.hideLineNumbers" = true;
-
-
# No barfing rainbows over my UI pls
-
"backgroundPhiColors.baseColor" = "#FFFFFF";
-
"backgroundPhiColors.bodySpacesEnabled" = false;
-
"backgroundPhiColors.indentErrorEnabled" = false;
-
"backgroundPhiColors.lineEnabled" = false;
-
"backgroundPhiColors.spacesAlpha" = 10;
-
"backgroundPhiColors.tokenActiveAlpha" = 30;
-
"editor.bracketPairColorization.enabled" = false;
-
-
# Codesnap
-
"codesnap.containerPadding" = "2em";
-
"codesnap.target" = "window";
-
"codesnap.transparentBackground" = true;
-
"codesnap.boxShadow" = "none";
-
"codesnap.showLineNumbers" = false;
-
"codesnap.showWindowControls" = false;
-
"codesnap.shutterAction" = "copy";
-
"codesnap.roundedCorners" = true;
-
-
# Git
-
"git.autorefresh" = true;
-
"git.autofetch" = false;
-
"git.autoStash" = true;
-
"git.mergeEditor" = false;
-
"git.confirmSync" = false;
-
"git.enableSmartCommit" = true;
-
"gitlens.advanced.messages" = {
-
"suppressLineUncommittedWarning" = true;
-
};
-
"gitlens.hovers.currentLine.over" = "annotation";
-
-
# Nix
-
"nix.enableLanguageServer" = true;
-
"nix.serverPath" = "nil";
-
"alejandra.program" = "alejandra";
-
-
# Elixir/erlang
-
"elixirLS.suggestSpecs" = false;
-
"elixirLS.fetchDeps" = false;
-
"elixirLS.mixEnv" = "dev";
-
"elixir.credo.ignoreWarningMessages" = true;
-
-
# Python
-
"python.analysis.typeCheckingMode" = "basic";
-
-
# JS
-
"debug.javascript.autoAttachFilter" = "onlyWithFlag";
-
-
# CSS
-
"files.associations"."*.css" = "tailwindcss";
-
-
# Misc
-
"yaml.format.proseWrap" = "always";
-
"workbench.startupEditor" = "none";
-
"remote.SSH.connectTimeout" = 30;
-
"remote.SSH.useLocalServer" = true;
-
"remote.SSH.path" = "/run/current-system/sw/bin/ssh";
-
"extensions.ignoreRecommendations" = true;
-
"svg.preview.mode" = "svg";
-
"vscord.status.problems.enabled" = false;
-
"vscord.status.state.text.editing" = "Working on {file_name}{file_extension}";
-
"vscord.ignore.workspaces" = ["~/Work"];
-
"typescript.updateImportsOnFileMove.enabled" = "never";
-
"git.openRepositoryInParentFolders" = "never";
-
"diffEditor.useInlineViewWhenSpaceIsLimited" = false;
-
"svelte.enable-ts-plugin" = true;
-
"gitlens.launchpad.indicator.enabled" = false;
-
"window.titleBarStyle" = "custom";
-
"files.simpleDialog.enable" = true;
-
"window.dialogStyle" = "custom";
-
-
# Fuck off
-
};
-
};
-
};
-
}
···
-10
home/server.nix
···
-
{...}: {
-
imports = [./programs/common-cli.nix ./programs/fish.nix];
-
home.sessionVariables.EDITOR = "micro";
-
-
news.display = "silent";
-
programs.home-manager.enable = true;
-
home.homeDirectory = "/home/ovy";
-
home.username = "ovy";
-
home.stateVersion = "23.05";
-
}
···
-18
home/shimmer.nix
···
-
{lib, ...}: {
-
imports = [
-
./darwin/configs.nix
-
./modules/ssh.nix
-
./programs/common-cli.nix
-
./programs/desktop-cli.nix
-
./programs/fish.nix
-
./programs/git.nix
-
];
-
-
programs.ssh.includes = ["~/.orbstack/ssh/config"];
-
-
news.display = "silent";
-
programs.home-manager.enable = true;
-
home.homeDirectory = lib.mkForce "/Users/ovy";
-
home.username = "ovy";
-
home.stateVersion = "23.05";
-
}
···
-39
home/wallsocket.nix
···
-
{
-
pkgs,
-
inputs,
-
...
-
}: {
-
imports = [
-
./desktop/apps.nix
-
./modules/espanso.nix
-
./modules/niri.nix
-
./modules/ssh.nix
-
./modules/xdg.nix
-
./programs/browser.nix
-
./programs/common-cli.nix
-
./programs/desktop-cli.nix
-
./programs/fish.nix
-
./programs/git.nix
-
./programs/kitty.nix
-
./programs/syncthing.nix
-
./programs/vscode.nix
-
];
-
-
systemd.user.targets.tray = {
-
Unit = {
-
Description = "Home Manager System Tray";
-
Requires = ["graphical-session-pre.target"];
-
};
-
};
-
-
# Temporary location for these
-
# home.packages = [pkgs.inotify-tools inputs.ags.packages.${pkgs.system}.default];
-
-
home.sessionVariables.DOCKER_HOST = "unix:///run/user/1000/podman/podman.sock";
-
-
news.display = "silent";
-
programs.home-manager.enable = false;
-
home.homeDirectory = "/home/ovy";
-
home.username = "ovy";
-
home.stateVersion = "24.05";
-
}
···
+4
hosts/wallsocket/default.nix
···
···
+
{delib, ...}:
+
delib.host {
+
name = "wallsocket";
+
}
+68
hosts/wallsocket/hardware.nix
···
···
+
{
+
delib,
+
lib,
+
...
+
}: let
+
platform = "x86_64-linux";
+
stateVersion = "24.05";
+
in
+
delib.host {
+
name = "wallsocket";
+
+
homeManagerSystem = platform;
+
home.home.stateVersion = stateVersion;
+
+
nixos = {
+
nixpkgs.hostPlatform = platform;
+
system.stateVersion = stateVersion;
+
+
hardware.enableRedistributableFirmware = true;
+
hardware.cpu.amd.updateMicrocode = true;
+
+
# Kernel
+
boot.initrd.availableKernelModules = ["nvme" "xhci_pci" "ahci" "usb_storage" "usbhid" "sd_mod"];
+
boot.initrd.kernelModules = [];
+
boot.kernelModules = ["kvm-amd"];
+
boot.extraModulePackages = [];
+
+
# Bootloader
+
boot.loader.systemd-boot.enable = true;
+
boot.loader.systemd-boot.configurationLimit = 10;
+
boot.loader.efi.canTouchEfiVariables = true;
+
+
# Disks
+
fileSystems."/" = {
+
device = "/dev/disk/by-uuid/1b08f109-17e9-40f4-a7fd-6e5943ce7d5e";
+
fsType = "ext4";
+
};
+
+
fileSystems."/boot" = {
+
device = "/dev/disk/by-uuid/CF5D-B9DB";
+
fsType = "vfat";
+
options = ["fmask=0022" "dmask=0022"];
+
};
+
+
fileSystems."/home" = {
+
device = "/dev/disk/by-uuid/31974b72-eca5-4758-bd66-63ae57c1b4b0";
+
fsType = "ext4";
+
};
+
+
fileSystems."/mnt/misc" = {
+
device = "/dev/disk/by-uuid/bbc7adf8-475a-4bec-843f-77d4b904c42e";
+
fsType = "ext4";
+
};
+
+
fileSystems."/mnt/games" = {
+
device = "/dev/disk/by-uuid/e61763de-753c-42f0-ba9b-5ac6b6ffdf08";
+
fsType = "ext4";
+
};
+
+
swapDevices = [];
+
+
# 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;
+
};
+
}
+37
modules/1password.nix
···
···
+
{
+
delib,
+
homeConfig,
+
...
+
}:
+
delib.module {
+
name = "_1password";
+
+
options = delib.singleEnableOption true;
+
+
nixos.ifEnabled = {
+
services.systembus-notify.enable = true;
+
programs._1password.enable = true;
+
programs._1password-gui = {
+
enable = true;
+
polkitPolicyOwners = ["ovy"]; # TODO: replace
+
};
+
+
environment.etc."1password/custom_allowed_browsers" = {
+
text = "vivaldi-bin";
+
mode = "0755";
+
};
+
};
+
+
home.ifEnabled.programs.ssh.matchBlocks = let
+
_1passwordAgent = options:
+
homeConfig.lib.dag.entryBefore ["*"] ({
+
extraOptions.IdentityAgent = "~/.1password/agent.sock";
+
extraOptions.IdentitiesOnly = "no";
+
}
+
// options);
+
in {
+
# OpenWrt
+
"192.168.1.1" = _1passwordAgent {user = "root";};
+
"*.repo.borgbase.com" = _1passwordAgent {};
+
};
+
}
+20
modules/audio.nix
···
···
+
{delib, ...}:
+
delib.module {
+
name = "audio";
+
+
options = delib.singleEnableOption true;
+
+
nixos.ifEnabled = {
+
services.pulseaudio.enable = false;
+
security.rtkit.enable = true;
+
+
services.pipewire = {
+
enable = true;
+
alsa.enable = true;
+
alsa.support32Bit = true;
+
pulse.enable = true;
+
# If you want to use JACK applications, uncomment this
+
#jack.enable = true;
+
};
+
};
+
}
+26
modules/bluetooth.nix
···
···
+
{
+
delib,
+
pkgs,
+
...
+
}:
+
delib.module {
+
name = "bluetooth";
+
+
options = delib.singleEnableOption true;
+
+
nixos.ifEnabled = {
+
hardware.bluetooth.enable = true;
+
# TODO: determine if this actually affected me. Maybe should yeet.
+
hardware.bluetooth.settings = {
+
# Try and reduce latency from Xbox Series controllers
+
# https://atar-axis.github.io/xpadneo#high-latency-or-lost-button-events-with-bluetooth-le
+
LE = {
+
MinConnectionInterval = 7;
+
MaxConnectionInterval = 9;
+
ConnectionLatency = 0;
+
};
+
};
+
hardware.xpadneo.enable = true;
+
environment.systemPackages = [pkgs.kdePackages.bluedevil];
+
};
+
}
+30
modules/config/args.nix
···
···
+
{delib, ...}:
+
delib.module {
+
name = "args";
+
+
options.args = with delib; {
+
shared = attrsLegacyOption {};
+
nixos = attrsLegacyOption {};
+
home = attrsLegacyOption {};
+
darwin = attrsLegacyOption {};
+
};
+
+
nixos.always = {cfg, ...}: {
+
imports = [
+
{_module.args = cfg.shared;}
+
{_module.args = cfg.nixos;}
+
];
+
};
+
home.always = {cfg, ...}: {
+
imports = [
+
{_module.args = cfg.shared;}
+
{_module.args = cfg.home;}
+
];
+
};
+
darwin.always = {cfg, ...}: {
+
imports = [
+
{_module.args = cfg.shared;}
+
{_module.args = cfg.darwin;}
+
];
+
};
+
}
+10
modules/config/constants.nix
···
···
+
{delib, ...}:
+
delib.module {
+
name = "constants";
+
+
options.constants = with delib; {
+
username = readOnly (strOption "ovy");
+
userfullname = readOnly (strOption "Ashlynne Mitchell");
+
useremail = readOnly (strOption "ovy@ovyerus.com");
+
};
+
}
+26
modules/config/home.nix
···
···
+
{
+
delib,
+
moduleSystem,
+
homeManagerUser,
+
config,
+
...
+
}:
+
delib.module {
+
name = "home";
+
+
myconfig.always.args.shared.homeConfig =
+
if moduleSystem == "home"
+
then config
+
else config.home-manager.users.${homeManagerUser};
+
+
home.always = {myconfig, ...}: let
+
inherit (myconfig.constants) username;
+
in {
+
home = {
+
inherit username;
+
homeDirectory = "/home/${username}";
+
};
+
news.display = "silent";
+
programs.home-manager.enable = false;
+
};
+
}
+21
modules/config/hosts.nix
···
···
+
{delib, ...}:
+
delib.module {
+
name = "hosts";
+
+
options = with delib; let
+
host = {
+
options = hostSubmoduleOptions;
+
};
+
in {
+
host = hostOption host;
+
hosts = hostsOption host;
+
};
+
+
myconfig.always = {myconfig, ...}: {
+
args.shared = {inherit (myconfig) host hosts;};
+
};
+
+
home.always = {myconfig, ...}: {
+
assertions = delib.hostNamesAssertions myconfig.hosts;
+
};
+
}
+21
modules/config/user.nix
···
···
+
{
+
delib,
+
pkgs,
+
...
+
}:
+
delib.module {
+
name = "user";
+
+
nixos.always = {myconfig, ...}: let
+
inherit (myconfig.constants) username userfullname;
+
in {
+
users = {
+
users.${username} = {
+
isNormalUser = true;
+
description = userfullname;
+
extraGroups = ["wheel" "cdrom" "adbusers"];
+
shell = pkgs.fish;
+
};
+
};
+
};
+
}
+20
modules/devices.nix
···
···
+
{delib, ...}:
+
delib.module {
+
name = "devices";
+
+
nixos.always = {
+
programs.adb.enable = true;
+
+
services = {
+
avahi = {
+
enable = true;
+
nssmdns4 = true;
+
openFirewall = true;
+
};
+
fwupd.enable = true;
+
usbmuxd.enable = true;
+
pcscd.enable = true;
+
printing.enable = true;
+
};
+
};
+
}
+50
modules/fonts.nix
···
···
+
{
+
delib,
+
inputs,
+
pkgs,
+
...
+
}:
+
delib.module {
+
name = "fonts";
+
+
nixos.always = {
+
fonts = {
+
packages = [
+
pkgs.ubuntu_font_family
+
pkgs.inter
+
inputs.iosevka-solai.packages.x86_64-linux.bin
+
];
+
+
# TODO: i get a lot of weird error logs. See why
+
fontDir.enable = true;
+
enableDefaultPackages = true;
+
+
fontconfig = {
+
defaultFonts = {
+
serif = ["Noto Serif"];
+
sansSerif = ["Inter"];
+
monospace = ["Iosevka Solai"];
+
emoji = ["Noto Color Emoji"];
+
};
+
};
+
};
+
+
environment.sessionVariables = {
+
FONTCONFIG_PATH = "${pkgs.fontconfig}/etc/fonts";
+
FONTCONFIG_FILE = "${pkgs.fontconfig}/etc/fonts/fonts.conf";
+
};
+
+
# Wait for Aetf/kmscon#75 to merge, and then look into manually updating the package to test.
+
# Potentially open a nixpkgs PR to do so?
+
+
# services.kmscon = {
+
# enable = true;
+
# fonts = [
+
# {
+
# name = "Iosevka Solai Term";
+
# package = inputs.iosevka-solai.packages.x86_64-linux.bin-term;
+
# }
+
# ];
+
# };
+
};
+
}
+41
modules/gaming.nix
···
···
+
{
+
delib,
+
pkgs,
+
homeConfig,
+
...
+
}:
+
delib.module {
+
name = "gaming";
+
+
nixos.always = {
+
programs.steam = {
+
enable = true;
+
remotePlay.openFirewall = true;
+
localNetworkGameTransfers.openFirewall = true;
+
extraCompatPackages = [pkgs.proton-ge-bin];
+
};
+
+
programs.gamescope.enable = true;
+
programs.gamemode.enable = true;
+
};
+
+
home.always = {
+
programs.mangohud = {
+
enable = true;
+
settings = {
+
cpu_temp = true;
+
cpu_mhz = true;
+
cpu_power = true;
+
core_load = true;
+
gpu_core_clock = true;
+
gpu_temp = true;
+
gpu_power = true;
+
gpu_fan = true;
+
gpu_voltage = true;
+
vram = true;
+
ram = true;
+
};
+
};
+
home.sessionVariables.MANGOHUD_CONFIGFILE = "${homeConfig.xdg.configHome}/MangoHud/MangoHud.conf";
+
};
+
}
+28
modules/graphics.nix
···
···
+
{
+
delib,
+
pkgs,
+
...
+
}:
+
delib.module {
+
name = "graphics";
+
+
options.graphics = with delib; {
+
enable = boolOption true;
+
};
+
+
nixos.ifEnabled = {cfg, ...}: {
+
hardware.graphics = {
+
enable = true;
+
enable32Bit = true;
+
};
+
+
environment.systemPackages = with pkgs; [amdgpu_top lact nvtopPackages.full];
+
+
systemd.services.lactd = {
+
description = "AMDGPU Control Daemon";
+
enable = true;
+
serviceConfig.ExecStart = "${pkgs.lact}/bin/lact daemon";
+
wantedBy = ["multi-user.target"];
+
};
+
};
+
}
+21
modules/i18n.nix
···
···
+
{delib, ...}:
+
delib.module {
+
name = "i18n";
+
+
nixos.always = {
+
time.timeZone = "Australia/Melbourne";
+
i18n.defaultLocale = "en_GB.UTF-8";
+
+
i18n.extraLocaleSettings = {
+
LC_ADDRESS = "en_AU.UTF-8";
+
LC_IDENTIFICATION = "en_AU.UTF-8";
+
LC_MEASUREMENT = "en_AU.UTF-8";
+
LC_MONETARY = "en_AU.UTF-8";
+
LC_NAME = "en_AU.UTF-8";
+
LC_NUMERIC = "en_AU.UTF-8";
+
LC_PAPER = "en_AU.UTF-8";
+
LC_TELEPHONE = "en_AU.UTF-8";
+
LC_TIME = "en_AU.UTF-8";
+
};
+
};
+
}
+11
modules/logitech.nix
···
···
+
{delib, ...}:
+
delib.module {
+
name = "logitech";
+
+
options = delib.singleEnableOption true;
+
+
nixos.ifEnabled = {
+
hardware.logitech.wireless.enable = true;
+
hardware.new-lg4ff.enable = true;
+
};
+
}
+11
modules/memory.nix
···
···
+
{delib, ...}:
+
delib.module {
+
name = "memory";
+
+
nixos.always = {
+
services.earlyoom.enable = true;
+
services.earlyoom.enableNotifications = true;
+
zramSwap.enable = true;
+
zramSwap.algorithm = "zstd";
+
};
+
}
+53
modules/networking.nix
···
···
+
{
+
delib,
+
host,
+
...
+
}:
+
delib.module {
+
name = "networking";
+
+
options.networking = with delib; {
+
nameservers = listOfOption str ["1.1.1.1" "1.0.0.1"];
+
hosts = attrsOfOption (listOf str) {};
+
};
+
+
nixos.always = {
+
myconfig,
+
cfg,
+
...
+
}: let
+
inherit (myconfig.constants) username;
+
in {
+
networking = {
+
hostName = host.name;
+
+
firewall.enable = true;
+
networkmanager.enable = true;
+
+
# dhcpcd.extraConfig = "nohook resolv.conf";
+
# networkmanager.dns = "none";
+
+
inherit (cfg) hosts nameservers;
+
};
+
+
# TODO: necessary?
+
services.resolved = {
+
enable = true;
+
# dnssec = "true";
+
domains = ["~."];
+
fallbackDns = cfg.nameservers;
+
# dnsovertls = "trues";
+
};
+
+
services.tailscale = {
+
enable = true;
+
openFirewall = true;
+
useRoutingFeatures = "client";
+
};
+
+
# services.mullvad-vpn.enable = true;
+
# services.mullvad-vpn.package = pkgs.mullvad-vpn;
+
+
users.users.${username}.extraGroups = ["networkmanager"];
+
};
+
}
+39
modules/nix.nix
···
···
+
{
+
delib,
+
inputs,
+
...
+
}: let
+
shared.nix.settings = {
+
auto-optimise-store = true;
+
experimental-features = ["nix-command" "flakes"];
+
trusted-users = ["root" "@wheel"];
+
};
+
in
+
delib.module {
+
name = "nix";
+
+
# TODO: double check home-manager options
+
home.always = shared;
+
nixos.always =
+
shared
+
// {
+
nix = {
+
gc = {
+
automatic = true;
+
options = "--delete-older-than 10d";
+
dates = "weekly";
+
};
+
+
nixPath = ["nixpkgs=${inputs.nixpkgs}"];
+
+
registry.nixpkgs.to = {
+
type = "path";
+
path = inputs.nixpkgs;
+
narHash = inputs.nixpkgs.narHash;
+
};
+
};
+
+
nixpkgs.config.allowUnfree = true;
+
system.tools.nixos-option.enable = false;
+
};
+
}
-13
modules/nixpkgs.nix
···
-
{inputs, ...}: {
-
# Make sure that the `nixpkgs` reference on the CLI refers to the system
-
# nixpkgs so that it does not keep re-downloading the latest version every
-
# time I want to run a single package
-
nix.registry.nixpkgs.to = {
-
type = "path";
-
path = inputs.nixpkgs;
-
narHash = inputs.nixpkgs.narHash;
-
};
-
-
nixpkgs.config.allowUnfree = true;
-
nix.nixPath = ["nixpkgs=${inputs.nixpkgs}"];
-
}
···
+10
modules/ollama.nix
···
···
+
{delib, ...}:
+
delib.module {
+
name = "ollama";
+
+
nixos.always.services.ollama = {
+
enable = true;
+
acceleration = "rocm";
+
rocmOverrideGfx = "11.0.0";
+
};
+
}
+13
modules/packaging.nix
···
···
+
{delib, ...}:
+
delib.module {
+
name = "packaging";
+
+
nixos.always = {
+
services.flatpak.enable = true;
+
+
programs.appimage = {
+
enable = true;
+
binfmt = true;
+
};
+
};
+
}
+43
modules/plasma.nix
···
···
+
{
+
delib,
+
pkgs,
+
...
+
}:
+
delib.module {
+
name = "plasma";
+
+
options = delib.singleEnableOption true;
+
+
nixos.ifEnabled = {
+
services.displayManager = {
+
enable = true;
+
defaultSession = "plasma";
+
+
sddm.enable = true;
+
sddm.wayland.enable = true;
+
+
autoLogin = {
+
enable = true;
+
user = "ovy";
+
};
+
};
+
+
services.desktopManager.plasma6.enable = true;
+
+
environment.plasma6.excludePackages = with pkgs.kdePackages; [
+
elisa
+
gwenview
+
konsole
+
];
+
+
qt = {
+
enable = true;
+
style = "kvantum";
+
platformTheme = "kde";
+
};
+
+
# environment.sessionVariables."NIXOS_OZONE_WL" = 1;
+
environment.sessionVariables."MOZ_ENABLE_WAYLAND" = 0;
+
environment.systemPackages = with pkgs; [adwaita-icon-theme kdePackages.kcalc kdePackages.partitionmanager kdePackages.kcolorchooser];
+
};
+
}
+12
modules/programs/bat.nix
···
···
+
{delib, ...}:
+
delib.module {
+
name = "programs.bat";
+
+
home.always.programs.bat = {
+
enable = true;
+
config = {
+
theme = "DarkNeon";
+
italic-text = "always";
+
};
+
};
+
}
+45
modules/programs/core-cli.nix
···
···
+
{
+
delib,
+
pkgs,
+
...
+
}:
+
delib.module {
+
name = "programs.core-cli";
+
+
nixos.always = {
+
environment.systemPackages = with pkgs; [
+
ffmpeg-full
+
fuzzel
+
git
+
nil
+
niri
+
openssh
+
p7zip
+
pciutils
+
solaar
+
sysstat
+
unar
+
wcurl
+
wget
+
wineWowPackages.full
+
];
+
+
programs.fish.enable = true;
+
};
+
+
home.always = {
+
home.packages = with pkgs; [
+
curlie
+
du-dust
+
duf
+
fd
+
jq
+
nix-your-shell
+
ripgrep
+
];
+
+
programs.aria2.enable = true;
+
programs.eza.enable = true;
+
programs.nix-index.enable = true;
+
};
+
}
+52
modules/programs/desktop-apps.nix
···
···
+
{
+
delib,
+
pkgs,
+
...
+
}:
+
delib.module {
+
name = "programs.desktop-apps";
+
+
home.always = {
+
home.packages = with pkgs; [
+
alejandra
+
audacity
+
blender
+
btop # TODO: module & options
+
bruno
+
# davinci-resolve
+
# distrobox
+
gajim
+
glaxnimate
+
# godot_4
+
handbrake
+
heynote
+
klog-time-tracker
+
libreoffice
+
losslesscut-bin
+
lunacy
+
lutris
+
# mixxx
+
obs-studio
+
obsidian
+
oversteer
+
p7zip
+
picard
+
pinta
+
piper
+
podman-tui
+
# plasticity
+
prismlauncher
+
qbittorrent
+
qimgv
+
slack
+
vesktop
+
vlc
+
vorta
+
winetricks
+
yt-dlp
+
yubioath-flutter
+
];
+
+
services.owncloud-client.enable = true;
+
};
+
}
+19
modules/programs/direnv.nix
···
···
+
{
+
delib,
+
homeConfig,
+
...
+
}:
+
delib.module {
+
name = "programs.bat";
+
+
home.always.programs.direnv = {
+
enable = true;
+
nix-direnv.enable = true;
+
config.whitelist.prefix = [
+
"${homeConfig.home.homeDirectory}/Projects/bots-gg"
+
"${homeConfig.home.homeDirectory}/Projects/dijit"
+
"${homeConfig.home.homeDirectory}/Projects/personal"
+
"${homeConfig.home.homeDirectory}/Projects/work"
+
];
+
};
+
}
+31
modules/programs/fzf.nix
···
···
+
{delib, ...}:
+
delib.module {
+
name = "programs.fzf";
+
+
home.always = {
+
# TODO
+
# Investigate preview stuff as default command
+
# https://github.com/kidonng/preview.fish
+
# Explore fzf search modes
+
programs.fzf = {
+
enable = true;
+
enableFishIntegration = false;
+
defaultOptions = [
+
"--ansi"
+
"--cycle"
+
"--layout=reverse"
+
"--border"
+
"--height=90%"
+
"--marker=\"*\""
+
"--preview 'bat --color=always --style=header,numbers --line-range :300 {}'"
+
# I usually use a vertical term so this is more practical.
+
# TODO: possible to dynamically change based on terminal dimensinns?
+
"--preview-window='bottom:50%:wrap'"
+
];
+
# TODO: only if fd config is enabled
+
defaultCommand = "fd --color=always --type file --follow --hidden --exclude .git --exclude node_modules";
+
};
+
+
home.sessionVariables.FZF_CTRL_T_COMMAND = "fd --color=always --follow";
+
};
+
}
+73
modules/programs/git.nix
···
···
+
{delib, ...}:
+
delib.module {
+
name = "programs.git";
+
+
home.always = {myconfig, ...}: let
+
inherit (myconfig.constants) userfullname useremail;
+
in {
+
xdg.configFile."git/allowed_signers".source = ../../../files/git/allowed_signers;
+
+
programs.git = {
+
enable = true;
+
userName = userfullname;
+
userEmail = useremail;
+
delta.enable = true;
+
+
signing = {
+
signByDefault = true;
+
format = "ssh";
+
key = "~/.ssh/id_ed25519_sk_rk";
+
};
+
+
extraConfig = {
+
# TODO: custom pretty stuff?
+
blame.showEmail = true;
+
init.defaultBranch = "main";
+
pull.rebase = true;
+
+
log = {
+
abbrevCommit = true;
+
# TODO: `git log --oneline` looks silly with this. Need custom format.
+
showSignature = true;
+
# TODO: trial for a while and see if I like this.
+
date = "human";
+
};
+
+
merge = {
+
# Try to avoid merge commits
+
ff = "only";
+
# Really only useful on a well-managed team. Maybe eventually.
+
# verifySignatures = true;
+
};
+
+
push = {
+
autoSetupRemote = true;
+
followTags = true;
+
};
+
+
# Require explicit `drop` in interactive rebase
+
rebase.missingCommitsCheck = "error";
+
rerere.enabled = true;
+
+
status = {
+
relativePaths = false;
+
showStash = true;
+
};
+
+
gpg.ssh.allowedSignersFile = "~/.config/git/allowed_signers";
+
# "gpg.ssh.program = "gfh-keygen";
+
# "gpg.ssh.defaultKeyCommand = "gfh";
+
};
+
};
+
+
programs.gh = {
+
enable = true;
+
settings = {
+
git_protocol = "ssh";
+
aliases = {
+
clone = "repo clone";
+
};
+
};
+
};
+
};
+
}
+17
modules/programs/micro.nix
···
···
+
{delib, ...}:
+
delib.module {
+
name = "programs.micro";
+
+
home.always.programs.micro = {
+
enable = true;
+
settings = {
+
clipboard = "external";
+
hlsearch = true;
+
parsecursor = true;
+
scrollbar = true;
+
tabmovement = true;
+
tabsize = 2;
+
tabstospaces = true;
+
};
+
};
+
}
+19
modules/programs/pager.nix
···
···
+
{
+
delib,
+
pkgs,
+
...
+
}:
+
delib.module {
+
name = "programs.pager";
+
+
# TODO: read docs and experiment
+
home.always = {
+
home.packages = [pkgs.moar];
+
home.sessionVariables = {
+
PAGER = "moar";
+
MOAR = "--no-linenumbers";
+
MANPAGER = "sh -c 'col -bx | bat -l man -p'";
+
MANROFFOPT = "-c";
+
};
+
};
+
}
+18
modules/programs/ssh.nix
···
···
+
{delib, ...}:
+
delib.module {
+
name = "programs.ssh";
+
+
home.always.programs.ssh = {
+
enable = true;
+
matchBlocks = {
+
"*" = {
+
identitiesOnly = true;
+
identityFile = "~/.ssh/id_ed25519_sk_rk";
+
user = "ovy";
+
};
+
};
+
+
# TODO: if darwin
+
# programs.ssh.includes = ["~/.orbstack/ssh/config"];
+
};
+
}
+24
modules/programs/syncthing.nix
···
···
+
{
+
delib,
+
lib,
+
homeConfig,
+
pkgs,
+
...
+
}:
+
delib.module {
+
name = "programs.syncthing";
+
+
options = delib.singleEnableOption true;
+
+
home.ifEnabled = {
+
services.syncthing = {
+
enable = true;
+
tray.enable = true;
+
tray.package = pkgs.syncthingtray;
+
};
+
+
# Fix syncthingtray complaining about the tray not existing, because of the custom tray service above.
+
systemd.user.services.syncthingtray.Service.ExecStart =
+
lib.mkForce "${homeConfig.services.syncthing.tray.package}/bin/${homeConfig.services.syncthing.tray.command} --wait";
+
};
+
}
+13
modules/programs/tldr.nix
···
···
+
{delib, ...}:
+
delib.module {
+
name = "programs.tldr";
+
+
home.always.programs.tealdeer = {
+
enable = true;
+
settings = {
+
updates = {
+
auto_update = true;
+
};
+
};
+
};
+
}
+240
modules/programs/vscode.nix
···
···
+
{
+
delib,
+
inputs,
+
pkgs,
+
...
+
}:
+
delib.module {
+
name = "programs.vscode";
+
+
options = delib.singleEnableOption true;
+
+
home.ifEnabled = {
+
home.sessionVariables.EDITOR = "codium --wait";
+
+
programs.vscode = {
+
enable = true;
+
mutableExtensionsDir = false;
+
package = pkgs.vscodium;
+
+
profiles.default = {
+
enableUpdateCheck = false;
+
enableExtensionUpdateCheck = false;
+
+
extensions = let
+
vscode-extensions = inputs.nix-vscode-extensions.extensions.${pkgs.system};
+
inherit (vscode-extensions) open-vsx vscode-marketplace;
+
in
+
with open-vsx; [
+
kamadorueda.alejandra
+
astro-build.astro-vscode
+
matthewpi.caddyfile-support
+
raidou.calc
+
artlaman.chalice-icon-theme # TODO: i should fork this to add support for some newer files (tbd)
+
adpyke.codesnap
+
clinyong.vscode-css-modules
+
mkhl.direnv
+
leonardssh.vscord
+
ms-azuretools.vscode-docker
+
editorconfig.editorconfig
+
irongeek.vscode-env
+
pgourlain.erlang
+
usernamehw.errorlens
+
dbaeumer.vscode-eslint
+
tamasfe.even-better-toml
+
sleistner.vscode-fileutils
+
bmalehorn.vscode-fish
+
github.vscode-github-actions
+
eamodio.gitlens
+
# TODO: terraform (use opentofu instead)
+
ms-vscode.hexeditor
+
lokalise.i18n-ally
+
kisstkondoros.vscode-gutter-preview
+
ms-python.isort
+
bierner.markdown-preview-github-styles
+
unifiedjs.vscode-mdx
+
jnoortheen.nix-ide
+
nuxtr.nuxtr-vscode
+
vunguyentuan.vscode-postcss
+
esbenp.prettier-vscode
+
prisma.prisma
+
# TODO: use jedi instead of pylance
+
ms-python.python
+
ms-python.debugpy
+
mechatroner.rainbow-csv
+
medo64.render-crlf
+
stkb.rewrap
+
rust-lang.rust-analyzer
+
mrmlnc.vscode-scss
+
svelte.svelte-vscode
+
jock.svg
+
coolbear.systemd-unit-file
+
bradlc.vscode-tailwindcss
+
myriad-dreamin.tinymist
+
gruntfuggly.todo-tree
+
tomoki1207.pdf
+
zxh404.vscode-proto3
+
styled-components.vscode-styled-components # TODO: don't really need this
+
vue.volar
+
wakatime.vscode-wakatime
+
redhat.vscode-yaml
+
arcanis.vscode-zipfs
+
vscode-marketplace.wraith13.background-phi-colors
+
vscode-marketplace.be5invis.theme-dolch
+
vscode-marketplace.fabiospampinato.vscode-diff
+
vscode-marketplace.jakebecker.elixir-ls
+
vscode-marketplace.zh9528.file-size
+
vscode-marketplace.vladdesv.vscode-klog
+
vscode-marketplace.dt.ghlink
+
vscode-marketplace.tyriar.lorem-ipsum
+
vscode-marketplace.phoenixframework.phoenix
+
vscode-marketplace.frigus02.vscode-sql-tagged-template-literals-syntax-only # TODO: alternative?
+
];
+
+
userSettings = {
+
# Formatters
+
"editor.defaultFormatter" = "esbenp.prettier-vscode";
+
"[elixir]"."editor.defaultFormatter" = "JakeBecker.elixir-ls";
+
"[nix]"."editor.defaultFormatter" = "kamadorueda.alejandra";
+
"[prisma]"."editor.defaultFormatter" = "Prisma.prisma";
+
"[python]"."editor.defaultFormatter" = "ms-python.python";
+
"[rust]"."editor.defaultFormatter" = "rust-lang.rust-analyzer";
+
+
# Sane defaults
+
"editor.tabSize" = 2;
+
"editor.insertSpaces" = true;
+
"breadcrumbs.enabled" = true;
+
"editor.wordWrap" = "off";
+
"security.workspace.trust.enabled" = false;
+
"security.workspace.trust.untrustedFiles" = "open";
+
"files.eol" = "\n";
+
"workbench.editor.empty.hint" = "hidden";
+
"comments.openView" = "never";
+
"editor.minimap.enabled" = false;
+
"editor.stickyScroll.enabled" = true;
+
"workbench.layoutControl.enabled" = false;
+
"diffEditor.ignoreTrimWhitespace" = true;
+
"editor.acceptSuggestionOnEnter" = "off";
+
"editor.formatOnSave" = true;
+
"editor.inlineSuggest.enabled" = true;
+
"editor.renderWhitespace" = "none";
+
"editor.suggestSelection" = "first";
+
"editor.tabCompletion" = "on";
+
"emmet.triggerExpansionOnTab" = true;
+
"explorer.confirmDelete" = false;
+
"explorer.confirmDragAndDrop" = false;
+
"redhat.telemetry.enabled" = false;
+
"workbench.tips.enabled" = false;
+
"workbench.tree.indent" = 16;
+
"workbench.tree.renderIndentGuides" = "always";
+
"editor.unicodeHighlight.ambiguousCharacters" = true;
+
"errorLens.enabledDiagnosticLevels" = ["error" "warning"];
+
"editor.acceptSuggestionOnCommitCharacter" = false;
+
"files.watcherExclude" = {
+
"**/.git/**" = true;
+
"**/node_modules/*/**" = true;
+
};
+
"search.exclude" = {
+
"**/node_modules" = true;
+
"**/bower_components" = true;
+
"**/*.code-search" = true;
+
"**/.yarn" = true;
+
};
+
"terminal.integrated.commandsToSkipShell" = [
+
"-workbench.action.quickOpenView"
+
"-workbench.action.quickOpen"
+
"-editor.action.clipboardCutAction"
+
];
+
# "prettier.prettierPath" = "prettierd";
+
"prettier.proseWrap" = "always";
+
+
# Pretties
+
"workbench.colorTheme" = "Dolch";
+
"workbench.iconTheme" = "chalice-icon-theme";
+
"editor.fontFamily" = "'Iosevka Solai', Menlo, Monaco, 'Courier New', monospace";
+
"editor.fontSize" = 16;
+
"terminal.integrated.fontFamily" = "'Iosevka Solai Term', Consolas, 'Courier New', monospace";
+
"terminal.integrated.fontSize" = 14;
+
"terminal.integrated.scrollback" = 9999999999;
+
"editor.fontLigatures" = true;
+
"editor.cursorSmoothCaretAnimation" = "on";
+
"editor.smoothScrolling" = true;
+
"zenMode.fullScreen" = false;
+
"zenMode.centerLayout" = false;
+
"zenMode.hideLineNumbers" = true;
+
+
# No barfing rainbows over my UI pls
+
"backgroundPhiColors.baseColor" = "#FFFFFF";
+
"backgroundPhiColors.bodySpacesEnabled" = false;
+
"backgroundPhiColors.indentErrorEnabled" = false;
+
"backgroundPhiColors.lineEnabled" = false;
+
"backgroundPhiColors.spacesAlpha" = 10;
+
"backgroundPhiColors.tokenActiveAlpha" = 30;
+
"editor.bracketPairColorization.enabled" = false;
+
+
# Codesnap
+
"codesnap.containerPadding" = "2em";
+
"codesnap.target" = "window";
+
"codesnap.transparentBackground" = true;
+
"codesnap.boxShadow" = "none";
+
"codesnap.showLineNumbers" = false;
+
"codesnap.showWindowControls" = false;
+
"codesnap.shutterAction" = "copy";
+
"codesnap.roundedCorners" = true;
+
+
# Git
+
"git.autorefresh" = true;
+
"git.autofetch" = false;
+
"git.autoStash" = true;
+
"git.mergeEditor" = false;
+
"git.confirmSync" = false;
+
"git.enableSmartCommit" = true;
+
"gitlens.advanced.messages" = {
+
"suppressLineUncommittedWarning" = true;
+
};
+
"gitlens.hovers.currentLine.over" = "annotation";
+
+
# Nix
+
"nix.enableLanguageServer" = true;
+
"nix.serverPath" = "nil";
+
"alejandra.program" = "alejandra";
+
+
# Elixir/erlang
+
"elixirLS.suggestSpecs" = false;
+
"elixirLS.fetchDeps" = false;
+
"elixirLS.mixEnv" = "dev";
+
"elixir.credo.ignoreWarningMessages" = true;
+
+
# Python
+
"python.analysis.typeCheckingMode" = "basic";
+
+
# JS
+
"debug.javascript.autoAttachFilter" = "onlyWithFlag";
+
+
# CSS
+
"files.associations"."*.css" = "tailwindcss";
+
+
# Misc
+
"yaml.format.proseWrap" = "always";
+
"workbench.startupEditor" = "none";
+
"remote.SSH.connectTimeout" = 30;
+
"remote.SSH.useLocalServer" = true;
+
"remote.SSH.path" = "/run/current-system/sw/bin/ssh";
+
"extensions.ignoreRecommendations" = true;
+
"svg.preview.mode" = "svg";
+
"vscord.status.problems.enabled" = false;
+
"vscord.status.state.text.editing" = "Working on {file_name}{file_extension}";
+
"vscord.ignore.workspaces" = ["~/Work"];
+
"typescript.updateImportsOnFileMove.enabled" = "never";
+
"git.openRepositoryInParentFolders" = "never";
+
"diffEditor.useInlineViewWhenSpaceIsLimited" = false;
+
"svelte.enable-ts-plugin" = true;
+
"gitlens.launchpad.indicator.enabled" = false;
+
"window.titleBarStyle" = "custom";
+
"files.simpleDialog.enable" = true;
+
"window.dialogStyle" = "custom";
+
};
+
};
+
};
+
};
+
}
+15
modules/programs/zellij.nix
···
···
+
{delib, ...}:
+
delib.module {
+
name = "programs.zellij";
+
+
home.always.programs.zellij = {
+
enable = true;
+
enableFishIntegration = false;
+
settings = {
+
mouse_mode = true;
+
theme = "catppuccin-mocha";
+
ui.pane_frames.rounded_corners = true;
+
ui.pane_frames.hide_session_name = true;
+
};
+
};
+
}
+9
modules/programs/zoxide.nix
···
···
+
{delib, ...}:
+
delib.module {
+
name = "programs.zoxide";
+
+
home.always.programs.zoxide = {
+
enable = true;
+
enableFishIntegration = true;
+
};
+
}
+11
modules/sysctl.nix
···
···
+
{delib, ...}:
+
delib.module {
+
name = "sysctl";
+
+
nixos.always = {
+
boot.kernel.sysctl = {
+
"vm.max_map_count" = 2147483642;
+
"fs.file-max" = 2147483642;
+
};
+
};
+
}
+15
modules/systemd.nix
···
···
+
{delib, ...}:
+
delib.module {
+
name = "systemd";
+
+
nixos.always = {
+
systemd = {
+
extraConfig = ''
+
DefaultTimeoutStopSec=30s
+
'';
+
user.extraConfig = ''
+
DefaultTimeoutStopSec=30s
+
'';
+
};
+
};
+
}
+16
modules/tray.nix
···
···
+
{
+
delib,
+
pkgs,
+
...
+
}:
+
delib.module {
+
name = "tray";
+
+
# TODO: i don't think this is needed anymore???
+
home.always.systemd.user.targets.tray = {
+
Unit = {
+
Description = "Home Manager System Tray";
+
Requires = ["graphical-session-pre.target"];
+
};
+
};
+
}
+26
modules/virtualisation.nix
···
···
+
{
+
delib,
+
pkgs,
+
...
+
}:
+
delib.module {
+
name = "virtualisation";
+
+
nixos.always = {myconfig, ...}: let
+
inherit (myconfig.constants) username;
+
in {
+
environment.systemPackages = [pkgs.docker-compose];
+
# programs.virt-manager.enable = true;
+
# virtualisation.libvirtd.enable = true;
+
# virtualisation.oci-containers.backend = "podman";
+
+
virtualisation.podman = {
+
enable = true;
+
defaultNetwork.settings.dns_enabled = true;
+
};
+
+
users.users.${username}.extraGroups = ["libvirtd"];
+
};
+
+
home.always.home.sessionVariables.DOCKER_HOST = "unix:///run/user/1000/podman/podman.sock";
+
}
+34
modules/xdg.nix
···
···
+
{
+
delib,
+
pkgs,
+
...
+
}:
+
delib.module {
+
name = "programs.espanso";
+
+
home.always = let
+
vivalarc = pkgs.fetchFromGitHub {
+
owner = "tovifun";
+
repo = "VivalArc";
+
rev = "7ee09e9efb46c1524a43f0cb6763b9750db6e81c";
+
hash = "sha256-xYSxB8KjcbeUDEdbA2AJ9FeQC1TkqyXdB9rTMMSm+FA=";
+
};
+
in {
+
xdg.desktopEntries.davinci-resolve = {
+
name = "Davinci Resolve";
+
exec = "davinci-resolve";
+
categories = ["AudioVideo" "AudioVideoEditing" "Video" "Graphics"];
+
comment = "Professional video editing, color, effects and audio post-processing";
+
genericName = "Video Editor";
+
type = "Application";
+
settings.Version = "1.4";
+
};
+
+
xdg.dataFile."vivalarc".source = vivalarc;
+
};
+
+
# if darwin: xdg.configFile = {
+
# TODO: replace with the full karabiner config instead of needing to manually set complex mods
+
# "karabiner/assets/complex_modifications/keybind-helpers.json".source = ../../../files/karabiner/keybind-helpers.json;
+
# };
+
}
+15
modules/zsa.nix
···
···
+
{
+
delib,
+
pkgs,
+
...
+
}:
+
delib.module {
+
name = "zsa";
+
+
options = delib.singleEnableOption true;
+
+
nixos.ifEnabled = {
+
environment.systemPackages = [pkgs.keymapp];
+
hardware.keyboard.zsa.enable = true;
+
};
+
}
-14
nixos/wallsocket/bluetooth.nix
···
-
{pkgs, ...}: {
-
hardware.bluetooth.enable = true;
-
hardware.bluetooth.settings = {
-
# Try and reduce latency from Xbox Series controllers
-
# https://atar-axis.github.io/xpadneo#high-latency-or-lost-button-events-with-bluetooth-le
-
LE = {
-
MinConnectionInterval = 7;
-
MaxConnectionInterval = 9;
-
ConnectionLatency = 0;
-
};
-
};
-
hardware.xpadneo.enable = true;
-
environment.systemPackages = [pkgs.kdePackages.bluedevil];
-
}
···
-316
nixos/wallsocket/configuration.nix
···
-
{
-
lib,
-
inputs,
-
pkgs,
-
...
-
}: {
-
imports = [
-
./bluetooth.nix
-
./graphics.nix
-
./hardware-configuration.nix
-
../../modules/nixpkgs.nix
-
];
-
-
specialisation.niri.configuration = {
-
system.nixos.tags = ["niri"];
-
imports = [./niri.nix];
-
-
services.displayManager.enable = false;
-
services.displayManager.sddm.enable = false;
-
services.displayManager.sddm.wayland.enable = false;
-
# services.displayManager.defaultSession = lib.mkDefault "plasma";
-
services.desktopManager.plasma6.enable = false;
-
};
-
-
# Bootloader.
-
boot.loader.systemd-boot.enable = true;
-
boot.loader.systemd-boot.configurationLimit = 10;
-
boot.loader.efi.canTouchEfiVariables = true;
-
boot.kernel.sysctl."vm.max_map_count" = 2147483642;
-
boot.kernel.sysctl."fs.file-max" = 2147483642;
-
-
networking.hostName = "wallsocket";
-
networking.networkmanager.enable = true;
-
-
# i18n & time
-
time.timeZone = "Australia/Melbourne";
-
i18n.defaultLocale = "en_GB.UTF-8";
-
-
i18n.extraLocaleSettings = {
-
LC_ADDRESS = "en_AU.UTF-8";
-
LC_IDENTIFICATION = "en_AU.UTF-8";
-
LC_MEASUREMENT = "en_AU.UTF-8";
-
LC_MONETARY = "en_AU.UTF-8";
-
LC_NAME = "en_AU.UTF-8";
-
LC_NUMERIC = "en_AU.UTF-8";
-
LC_PAPER = "en_AU.UTF-8";
-
LC_TELEPHONE = "en_AU.UTF-8";
-
LC_TIME = "en_AU.UTF-8";
-
};
-
-
# Enable the KDE Plasma Desktop Environment.
-
services.displayManager.enable = lib.mkDefault true;
-
services.displayManager.sddm.enable = lib.mkDefault true;
-
services.displayManager.sddm.wayland.enable = lib.mkDefault true;
-
services.displayManager.autoLogin = {
-
enable = true;
-
user = "ovy";
-
};
-
services.displayManager.defaultSession = lib.mkDefault "plasma"; # Set to `plasma` for Wayland.
-
services.desktopManager.plasma6.enable = lib.mkDefault true;
-
-
environment.plasma6.excludePackages = with pkgs.kdePackages; [
-
elisa
-
gwenview
-
konsole
-
];
-
-
security.pam.services.ovy.kwallet = {
-
enable = true;
-
package = pkgs.kdePackages.kwallet-pam;
-
};
-
-
# Enable CUPS to print documents.
-
services.printing.enable = true;
-
-
services.usbmuxd.enable = true;
-
-
# Enable sound with pipewire.
-
services.pulseaudio.enable = false;
-
security.rtkit.enable = true;
-
services.pipewire = {
-
enable = true;
-
alsa.enable = true;
-
alsa.support32Bit = true;
-
pulse.enable = true;
-
# If you want to use JACK applications, uncomment this
-
#jack.enable = true;
-
};
-
-
users.users.ovy = {
-
isNormalUser = true;
-
description = "Ashlynne Mitchell";
-
extraGroups = ["networkmanager" "wheel" "libvirtd" "cdrom" "adbusers"];
-
shell = pkgs.fish;
-
};
-
-
programs.adb.enable = true;
-
-
system.tools.nixos-option.enable = false;
-
-
nix.settings = {
-
auto-optimise-store = true;
-
experimental-features = ["nix-command" "flakes"];
-
trusted-users = ["root" "@wheel"];
-
};
-
-
nix.gc = {
-
automatic = true;
-
options = "--delete-older-than 10d";
-
dates = "weekly";
-
};
-
-
# environment.sessionVariables."NIXOS_OZONE_WL" = 1;
-
environment.sessionVariables."MOZ_ENABLE_WAYLAND" = 0;
-
environment.systemPackages = with pkgs; [
-
adwaita-icon-theme
-
amdgpu_top
-
docker-compose
-
ffmpeg-full
-
git
-
keymapp
-
nil
-
niri
-
openssh
-
solaar
-
unar
-
wget
-
wcurl
-
sysstat
-
p7zip
-
kdePackages.kcalc
-
kdePackages.partitionmanager
-
kdePackages.kcolorchooser
-
pciutils
-
nvtopPackages.full
-
wineWowPackages.full
-
-
fuzzel
-
# tailscale-systray
-
# wl-clipboard
-
# kitty
-
# swaylock
-
# libsecret
-
# wayland-utils
-
];
-
-
# Allow `keymapp` to control my ZSA Moonlander
-
# https://github.com/zsa/wally/wiki/Linux-install#2-create-a-udev-rule-file
-
services.udev.extraRules = let
-
# nubia 5g
-
nubia = {
-
vendor = "1782";
-
product = "4021";
-
};
-
in ''
-
# Rules for Oryx web flashing and live training
-
KERNEL=="hidraw*", ATTRS{idVendor}=="16c0", MODE="0664", GROUP="plugdev"
-
KERNEL=="hidraw*", ATTRS{idVendor}=="3297", MODE="0664", GROUP="plugdev"
-
-
# Legacy rules for live training over webusb (Not needed for firmware v21+)
-
# Rule for all ZSA keyboards
-
SUBSYSTEM=="usb", ATTR{idVendor}=="3297", GROUP="plugdev"
-
# Rule for the Moonlander
-
SUBSYSTEM=="usb", ATTR{idVendor}=="3297", ATTR{idProduct}=="1969", GROUP="plugdev"
-
# Rule for the Ergodox EZ
-
SUBSYSTEM=="usb", ATTR{idVendor}=="feed", ATTR{idProduct}=="1307", GROUP="plugdev"
-
# Rule for the Planck EZ
-
SUBSYSTEM=="usb", ATTR{idVendor}=="feed", ATTR{idProduct}=="6060", GROUP="plugdev"
-
-
# Wally Flashing rules for the Ergodox EZ
-
ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="04[789B]?", ENV{ID_MM_DEVICE_IGNORE}="1"
-
ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="04[789A]?", ENV{MTP_NO_PROBE}="1"
-
SUBSYSTEMS=="usb", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="04[789ABCD]?", MODE:="0666"
-
KERNEL=="ttyACM*", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="04[789B]?", MODE:="0666"
-
-
# Keymapp / Wally Flashing rules for the Moonlander and Planck EZ
-
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="df11", MODE:="0666", SYMLINK+="stm32_dfu"
-
# Keymapp Flashing rules for the Voyager
-
SUBSYSTEMS=="usb", ATTRS{idVendor}=="3297", MODE:="0666", SYMLINK+="ignition_dfu"
-
-
# ADB support for Nubia 5G
-
SUBSYSTEM=="usb", ATTR{idVendor}=="${nubia.vendor}", MODE="[]", GROUP="adbusers", TAG+="uaccess"
-
SUBSYSTEM=="usb", ATTR{idVendor}=="${nubia.vendor}", ATTR{idProduct}=="${nubia.product}", SYMLINK+="android_adb"
-
SUBSYSTEM=="usb", ATTR{idVendor}=="${nubia.vendor}", ATTR{idProduct}=="${nubia.product}", SYMLINK+="android_fastboot"
-
'';
-
-
programs.fish.enable = true;
-
services.mullvad-vpn.enable = true;
-
services.mullvad-vpn.package = pkgs.mullvad-vpn;
-
-
networking.nameservers = ["1.1.1.1" "1.0.0.1"];
-
services.resolved = {
-
enable = true;
-
# dnssec = "true";
-
domains = ["~."];
-
fallbackDns = ["1.1.1.1" "1.0.0.1"];
-
# dnsovertls = "trues";
-
};
-
-
fonts = {
-
packages = [
-
pkgs.ubuntu_font_family
-
pkgs.inter
-
inputs.iosevka-solai.packages.x86_64-linux.bin
-
];
-
-
fontDir.enable = true;
-
enableDefaultPackages = true;
-
-
fontconfig = {
-
defaultFonts = {
-
serif = ["Noto Serif"];
-
sansSerif = ["Inter"];
-
monospace = ["Iosevka Solai"];
-
emoji = ["Noto Color Emoji"];
-
};
-
};
-
};
-
-
environment.sessionVariables = {
-
FONTCONFIG_PATH = "${pkgs.fontconfig}/etc/fonts";
-
FONTCONFIG_FILE = "${pkgs.fontconfig}/etc/fonts/fonts.conf";
-
};
-
-
# Wait for Aetf/kmscon#75 to merge, and then look into manually updating the package to test.
-
# Potentially open a nixpkgs PR to do so?
-
-
# services.kmscon = {
-
# enable = true;
-
# fonts = [
-
# {
-
# name = "Iosevka Solai Term";
-
# package = inputs.iosevka-solai.packages.x86_64-linux.bin-term;
-
# }
-
# ];
-
# };
-
-
services.pcscd.enable = true;
-
services.fwupd.enable = true;
-
-
services.flatpak.enable = true;
-
-
programs.appimage = {
-
enable = true;
-
binfmt = true;
-
};
-
-
services.tailscale = {
-
enable = true;
-
openFirewall = true;
-
useRoutingFeatures = "client";
-
};
-
-
programs.steam = {
-
enable = true;
-
remotePlay.openFirewall = true;
-
localNetworkGameTransfers.openFirewall = true;
-
extraCompatPackages = [pkgs.proton-ge-bin];
-
};
-
-
programs.gamescope.enable = true;
-
programs.gamemode.enable = true;
-
-
# virtualisation.oci-containers.backend = "podman";
-
virtualisation.podman = {
-
enable = true;
-
defaultNetwork.settings.dns_enabled = true;
-
};
-
-
virtualisation.libvirtd.enable = true;
-
programs.virt-manager.enable = true;
-
-
qt = {
-
enable = true;
-
style = "kvantum";
-
platformTheme = "kde";
-
};
-
-
systemd.extraConfig = ''
-
DefaultTimeoutStopSec=30s
-
'';
-
systemd.user.extraConfig = ''
-
DefaultTimeoutStopSec=30s
-
'';
-
-
services.systembus-notify.enable = true;
-
programs._1password.enable = true;
-
programs._1password-gui = {
-
enable = true;
-
polkitPolicyOwners = ["ovy"];
-
};
-
-
environment.etc."1password/custom_allowed_browsers" = {
-
text = "vivaldi-bin";
-
mode = "0755";
-
};
-
-
services.avahi = {
-
enable = true;
-
nssmdns4 = true;
-
openFirewall = true;
-
};
-
-
services.ollama = {
-
enable = true;
-
acceleration = "rocm";
-
rocmOverrideGfx = "11.0.0";
-
};
-
-
services.earlyoom.enable = true;
-
services.earlyoom.enableNotifications = true;
-
zramSwap.enable = true;
-
zramSwap.algorithm = "zstd";
-
-
system.stateVersion = "24.05"; # Did you read the comment?
-
}
···
-16
nixos/wallsocket/graphics.nix
···
-
{pkgs, ...}: {
-
hardware.graphics = {
-
enable = true;
-
enable32Bit = true;
-
# extraPackages = [pkgs.amdvlk];
-
};
-
-
environment.systemPackages = [pkgs.lact];
-
-
systemd.services.lactd = {
-
description = "AMDGPU Control Daemon";
-
enable = true;
-
serviceConfig.ExecStart = "${pkgs.lact}/bin/lact daemon";
-
wantedBy = ["multi-user.target"];
-
};
-
}
···
-60
nixos/wallsocket/hardware-configuration.nix
···
-
{
-
config,
-
lib,
-
pkgs,
-
modulesPath,
-
...
-
}: {
-
imports = [
-
(modulesPath + "/installer/scan/not-detected.nix")
-
];
-
-
boot.initrd.availableKernelModules = ["nvme" "xhci_pci" "ahci" "usb_storage" "usbhid" "sd_mod"];
-
boot.initrd.kernelModules = [];
-
boot.kernelModules = ["kvm-amd"];
-
boot.extraModulePackages = [];
-
# boot.kernelPackages = pkgs.linuxKernel.packages.linux_6_11;
-
-
hardware.logitech.wireless.enable = true;
-
hardware.new-lg4ff.enable = true;
-
-
# Storage
-
fileSystems."/" = {
-
device = "/dev/disk/by-uuid/1b08f109-17e9-40f4-a7fd-6e5943ce7d5e";
-
fsType = "ext4";
-
};
-
-
fileSystems."/boot" = {
-
device = "/dev/disk/by-uuid/CF5D-B9DB";
-
fsType = "vfat";
-
options = ["fmask=0022" "dmask=0022"];
-
};
-
-
fileSystems."/home" = {
-
device = "/dev/disk/by-uuid/31974b72-eca5-4758-bd66-63ae57c1b4b0";
-
fsType = "ext4";
-
};
-
-
fileSystems."/mnt/misc" = {
-
device = "/dev/disk/by-uuid/bbc7adf8-475a-4bec-843f-77d4b904c42e";
-
fsType = "ext4";
-
};
-
-
fileSystems."/mnt/games" = {
-
device = "/dev/disk/by-uuid/e61763de-753c-42f0-ba9b-5ac6b6ffdf08";
-
fsType = "ext4";
-
};
-
-
swapDevices = [];
-
-
# 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.enp6s0.useDHCP = lib.mkDefault true;
-
# networking.interfaces.wlp5s0.useDHCP = lib.mkDefault true;
-
-
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
-
hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
-
}
···
-27
nixos/wallsocket/niri.nix
···
-
{pkgs, ...}: {
-
programs.niri = {
-
enable = true;
-
package = pkgs.niri;
-
};
-
-
# TODO: qtgreet? https://gitlab.com/marcusbritanicus/QtGreet
-
services.greetd = {
-
enable = true;
-
settings = {
-
default_session = {
-
command = "${pkgs.greetd.tuigreet}/bin/tuigreet --time --cmd niri-session -r --window-padding 4";
-
user = "greeter";
-
};
-
};
-
};
-
-
environment.systemPackages = with pkgs; [
-
wl-clipboard
-
wofi
-
swaylock
-
# swaynotificationcenter
-
xwayland-satellite
-
kdePackages.kwallet
-
kdePackages.kwalletmanager
-
];
-
}
···