Compare commits

...

10 commits

Author SHA1 Message Date
dc1712cf46
Some cleanup 2026-02-10 00:38:50 +01:00
e33187bf0c
Some installs 2026-02-06 00:37:19 +01:00
a319e55cf2
Replace wallpapers and styling 2026-02-06 00:36:27 +01:00
2c61d217a1
Remove unused module 2026-02-06 00:35:56 +01:00
Christopher Mühl
bd0a03e7b8 Re-enable darwin builds
home-manager only for now
2026-01-30 12:10:31 +01:00
08f1aefbd1
Remove unused packages 2026-01-26 14:52:37 +01:00
4f7e125ed3
More unified styling 2026-01-26 09:07:48 +01:00
8cb043ccde
Add spacedrive v2 2026-01-13 10:32:17 +01:00
ccf1408352
Move everything to correct places 2026-01-13 10:32:10 +01:00
9046677414
ssh by default 2026-01-06 03:40:45 +01:00
90 changed files with 941 additions and 672 deletions

View file

@ -1,13 +0,0 @@
{...}: {
system.stateVersion = 5;
elements = {
hostname = "molybdenum";
secrets = {
key = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPjqieS4GkYAa1WRYZpxjgYsj7VGZ9U+rTFCkX8M0umD";
};
};
# For some reason this is required for hm to work with nix-darwin
users.users.christopher = {};
}

View file

@ -1,7 +0,0 @@
{pkgs, ...}: {
bosun.key = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBUKDCjB0VpQubi8BfnYKbh4MIE1tcvKQesdoPE4NXAf";
home.packages = with pkgs; [
helix
];
}

View file

@ -1,106 +0,0 @@
{
pkgs,
config,
...
}: {
home.packages = with pkgs; [
# Editors
jetbrains-toolbox # Installer for JetBrains IDEs
zed-editor
code-cursor
vscode
atuin-desktop
rfc # TUI-based RFC reader
nix-init # Generate Nix packages from URLs
install-nothing
# Language Servers
lua-language-server
rust-analyzer
nodePackages.typescript
nodePackages.typescript-language-server
nil # nix lsp
# trurl # Parsing and manipulating URLs via CLI
pandoc # Document converter
ripgrep # Grep file search
dig # DNS
onefetch # Git information tool
tokei # Like cloc
gource
zeal # Offline documentation browser
harbor.dedoc # Terminal-based documentation viewer
just # Just a command runner
claude-monitor
devenv
gitui
harbor.oryx # TUI for sniffing network traffic using eBPF
# Build tools
cargo
glibc
gcc
php82
php82Packages.composer
bun
nodejs_20
nodejs_20.pkgs.pnpm
];
bosun.secrets.npmrc = {
rekeyFile = "npmrc.age";
path = "${config.home.homeDirectory}/.npmrc";
};
programs = {
go.enable = true;
direnv = {
enable = true;
nix-direnv.enable = true;
config.global.log_filter = "^$";
};
claude-code = {
enable = true;
# package = inputs.unstable.${system}.claude-code;
commands = {
fix-github-issue = ''
Please analyze and fix the GitHub issue $ARGUMENTS.
Follow these steps:
1. Use `gh issue view` to get the issue details
2. Understand the problem described in the issue. If necessary, follow links to other mentioned issues to understand context
3. Search the codebase for relevant files
4. Implement the necessary changes to fix the issue
5. Write and run tests to verify the fix
6. Ensure code passes linting and type checking
7. Create a descriptive commit message
8. Push and create a PR
Remember to use the GitHub CLI (`gh`) for all GitHub-related tasks.
'';
commit = ''
---
argument-hint: [commit-style]
---
Create a commit message. The message should be succinct, only with a one-liner explaining
the most relevant changes and possibly some reasoning for changes, but only where relevant.
Try to follow this commit style, if specified: '$ARGUMENTS'. If no commit style is specified,
try doing atomic commits. That is, split up larger changes into atomic commits that stand
for themselves.
Do not include a `Co-authored-by`.
'';
};
};
};
}

View file

@ -1,25 +0,0 @@
{pkgs, ...}: {
home.packages = with pkgs; [
# Simple browsers for HTML
qutebrowser
harbor.firefox-with-context # Open URLs in different browser profiles based on context
];
xdg.mimeApps = {
enable = true;
defaultApplicationPackages = with pkgs; [
kdePackages.gwenview # image viewer
kdePackages.okular # pdf viewer
kdePackages.ark # Archives
vlc # Video player
];
# Only want to use qute for HTML files, not URLs
defaultApplications = {
"text/html" = "qutebrowser";
"x-scheme-handler/http" = "firefox-with-context";
"x-scheme/handler/https" = "firefox-with-context";
};
};
}

View file

@ -1,10 +0,0 @@
{...}: {
programs.niri.settings.spawn-at-startup = [
# this is a funny fix for xdg environment not properly being set and thus
# xdg-open not working properly
{argv = ["sleep" "5;" "systemctl" "--user" "restart" "xdg-desktop-portal"];}
# open fastfetch by default
{argv = ["kitty" "--title" "'fastfetch'" "sh" "-c" "'fastfetch; read'"];}
];
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 424 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 311 KiB

View file

@ -1,5 +0,0 @@
- cat-vibes: https://wall.alphacoders.com/big.php?i=1384032
- yellow-bedroom: https://wall.alphacoders.com/big.php?i=1395930
- sunny-cityscape: https://wall.alphacoders.com/big.php?i=1395929
- chill-room: https://wall.alphacoders.com/big.php?i=1350899
- evening-ambience-cafe: https://wall.alphacoders.com/big.php?i=1349198

Binary file not shown.

Before

Width:  |  Height:  |  Size: 345 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 MiB

View file

@ -1,32 +0,0 @@
{
pkgs,
config,
...
}: {
elements.secrets = {
rekeyPath = "christopher_beryllium";
key = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBUKDCjB0VpQubi8BfnYKbh4MIE1tcvKQesdoPE4NXAf";
needs = {
traefik-env = "traefik.env.age";
};
};
# virtualisation.quadlet.containers = {
# echo = {
# autoStart = true;
# serviceConfig = {
# RestartSec = "10";
# Restart = "always";
# };
# containerConfig = {
# image = "docker.io/mendhak/http-https-echo:31";
# publishPorts = ["127.0.0.1:8080:8080"];
# };
# };
# };
home.packages = with pkgs; [
helix
];
}

View file

@ -1,8 +0,0 @@
{pkgs, ...}: {
bosun.key = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHl33DPxxzxrNNjM8rL4ktAj4ExzCyGiU8rKog0csxNA";
home.packages = with pkgs; [
harbor.to-s3
harbor.connect-to-mercury
];
}

View file

@ -1,52 +0,0 @@
{
inputs,
config,
pkgs,
...
}: {
bosun.secrets.victoriametricsEnvFile = "victoria.env.age";
services = {
telegraf = {
enable = true;
environmentFiles = [
# This defines the VICTORIAMETRICS_PASSWORD environment variable
config.age.secrets.victoriametricsEnvFile.path
];
extraConfig = {
inputs = {
http_response = [
{
urls = ["https://toph.so" "https://aleph.garden" "https://aph.gdn" "https://radicle.toph.so"];
}
];
internet_speed = [
{
interval = "60m";
}
];
};
outputs.influxdb = [
{
urls = ["https://vm.toph.so"];
database = "toph";
username = "victoria-with-the-secrets";
password = "\${VICTORIAMETRICS_PASSWORD}";
skip_database_creation = false;
exclude_retention_policy_tag = true;
content_encoding = "gzip";
}
];
};
};
# traefik.routes.solid-pod = {
# rule = "Host(`pod.toph.so`)";
# url = "http://localhost:3000";
# };
};
# systemd.tmpfiles.rules = [
# "d /var/lib/solid - - - - -"
# ];
}

419
flake.lock generated
View file

@ -115,6 +115,33 @@
"type": "github"
}
},
"buildbot-nix": {
"inputs": {
"flake-parts": "flake-parts_4",
"hercules-ci-effects": "hercules-ci-effects",
"nixpkgs": [
"ngipkgs",
"nixpkgs"
],
"treefmt-nix": [
"ngipkgs",
"treefmt-nix"
]
},
"locked": {
"lastModified": 1769920146,
"narHash": "sha256-Co8wpqWe5SWzsx0Fy2Q7+tpnDlvHe+ksX+9Lis4NJFw=",
"owner": "nix-community",
"repo": "buildbot-nix",
"rev": "21a138e5230c23fb253559bea63ec0979156aff3",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "buildbot-nix",
"type": "github"
}
},
"community-solid-server": {
"inputs": {
"flake-parts": "flake-parts_2",
@ -238,6 +265,29 @@
"type": "github"
}
},
"dream2nix": {
"inputs": {
"nixpkgs": [
"ngipkgs",
"nixpkgs"
],
"purescript-overlay": "purescript-overlay",
"pyproject-nix": "pyproject-nix"
},
"locked": {
"lastModified": 1765953015,
"narHash": "sha256-5FBZbbWR1Csp3Y2icfRkxMJw/a/5FGg8hCXej2//bbI=",
"owner": "nix-community",
"repo": "dream2nix",
"rev": "69eb01fa0995e1e90add49d8ca5bcba213b0416f",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "dream2nix",
"type": "github"
}
},
"easy-hosts": {
"locked": {
"lastModified": 1755470564,
@ -301,6 +351,38 @@
"type": "github"
}
},
"flake-compat_3": {
"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-compat_4": {
"flake": false,
"locked": {
"lastModified": 1767039857,
"narHash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns=",
"owner": "NixOS",
"repo": "flake-compat",
"rev": "5edf11c44bc78a0d334f6334cdaf7d60d732daab",
"type": "github"
},
"original": {
"owner": "NixOS",
"repo": "flake-compat",
"type": "github"
}
},
"flake-parts": {
"inputs": {
"nixpkgs-lib": [
@ -359,6 +441,28 @@
}
},
"flake-parts_4": {
"inputs": {
"nixpkgs-lib": [
"ngipkgs",
"buildbot-nix",
"nixpkgs"
]
},
"locked": {
"lastModified": 1768135262,
"narHash": "sha256-PVvu7OqHBGWN16zSi6tEmPwwHQ4rLPU9Plvs8/1TUBY=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "80daad04eddbbf5a4d883996a73f3f542fa437ac",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "flake-parts",
"type": "github"
}
},
"flake-parts_5": {
"inputs": {
"nixpkgs-lib": [
"nur",
@ -379,7 +483,7 @@
"type": "github"
}
},
"flake-parts_5": {
"flake-parts_6": {
"inputs": {
"nixpkgs-lib": [
"stylix",
@ -400,7 +504,7 @@
"type": "github"
}
},
"flake-parts_6": {
"flake-parts_7": {
"inputs": {
"nixpkgs-lib": "nixpkgs-lib_3"
},
@ -436,6 +540,27 @@
"type": "github"
}
},
"flake-utils_2": {
"inputs": {
"systems": [
"ngipkgs",
"systems"
]
},
"locked": {
"lastModified": 1731533236,
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"flatpak": {
"locked": {
"lastModified": 1739444422,
@ -509,6 +634,28 @@
"type": "github"
}
},
"gitignore_2": {
"inputs": {
"nixpkgs": [
"ngipkgs",
"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"
}
},
"gnome-shell": {
"flake": false,
"locked": {
@ -528,6 +675,33 @@
"type": "gitlab"
}
},
"hercules-ci-effects": {
"inputs": {
"flake-parts": [
"ngipkgs",
"buildbot-nix",
"flake-parts"
],
"nixpkgs": [
"ngipkgs",
"buildbot-nix",
"nixpkgs"
]
},
"locked": {
"lastModified": 1768476106,
"narHash": "sha256-V0YOJRum50gtKgwavsAfwXc9+XAsJCC7386YZx1sWGQ=",
"owner": "hercules-ci",
"repo": "hercules-ci-effects",
"rev": "c19e263e6e22ec7379d972f19e6a322f943c73fb",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "hercules-ci-effects",
"type": "github"
}
},
"home-manager": {
"inputs": {
"nixpkgs": [
@ -556,11 +730,11 @@
]
},
"locked": {
"lastModified": 1765480374,
"narHash": "sha256-HlbvQAqLx7WqZFFQZ8nu5UUJAVlXiV/kqKbyueA8srw=",
"lastModified": 1769723138,
"narHash": "sha256-kgkwjs33YfJasADIrHjHcTIDs3wNX0xzJhnUP+oldEw=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "39cb677ed9e908e90478aa9fe5f3383dfc1a63f3",
"rev": "175532b6275b34598a0ceb1aef4b9b4006dd4073",
"type": "github"
},
"original": {
@ -603,6 +777,36 @@
"type": "github"
}
},
"ngipkgs": {
"inputs": {
"buildbot-nix": "buildbot-nix",
"dream2nix": "dream2nix",
"flake-utils": "flake-utils_2",
"nixdoc-to-github": "nixdoc-to-github",
"nixpkgs": [
"nixpkgs"
],
"pre-commit-hooks": "pre-commit-hooks_2",
"sbt-derivation": "sbt-derivation",
"sops-nix": "sops-nix",
"systems": "systems_4",
"treefmt-nix": "treefmt-nix_2"
},
"locked": {
"lastModified": 1769442174,
"narHash": "sha256-J0DqkOiV4DhFL9NHSNY5Qu794dMYRVm+estBM54ojXM=",
"owner": "ngi-nix",
"repo": "ngipkgs",
"rev": "672c78f6c140b480ca37cd04a4ee250fb00b1b7d",
"type": "github"
},
"original": {
"owner": "ngi-nix",
"repo": "ngipkgs",
"rev": "672c78f6c140b480ca37cd04a4ee250fb00b1b7d",
"type": "github"
}
},
"niri": {
"inputs": {
"niri-stable": "niri-stable",
@ -659,6 +863,22 @@
"type": "github"
}
},
"nixdoc-to-github": {
"flake": false,
"locked": {
"lastModified": 1717409038,
"narHash": "sha256-P4ZfOrlnRPNiZwiQn2pY44nPfk9cqI7FxOVaTnZwDCI=",
"owner": "fricklerhandwerk",
"repo": "nixdoc-to-github",
"rev": "47054a3b3a0f072ecd0402de3911d0979d09a7ab",
"type": "github"
},
"original": {
"owner": "fricklerhandwerk",
"repo": "nixdoc-to-github",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1767051569,
@ -838,7 +1058,7 @@
},
"nur": {
"inputs": {
"flake-parts": "flake-parts_4",
"flake-parts": "flake-parts_5",
"nixpkgs": [
"nixpkgs"
]
@ -905,6 +1125,75 @@
"type": "github"
}
},
"pre-commit-hooks_2": {
"inputs": {
"flake-compat": "flake-compat_4",
"gitignore": "gitignore_2",
"nixpkgs": [
"ngipkgs",
"nixpkgs"
]
},
"locked": {
"lastModified": 1769939035,
"narHash": "sha256-Fok2AmefgVA0+eprw2NDwqKkPGEI5wvR+twiZagBvrg=",
"owner": "cachix",
"repo": "pre-commit-hooks.nix",
"rev": "a8ca480175326551d6c4121498316261cbb5b260",
"type": "github"
},
"original": {
"owner": "cachix",
"repo": "pre-commit-hooks.nix",
"type": "github"
}
},
"purescript-overlay": {
"inputs": {
"flake-compat": "flake-compat_3",
"nixpkgs": [
"ngipkgs",
"dream2nix",
"nixpkgs"
],
"slimlock": "slimlock"
},
"locked": {
"lastModified": 1728546539,
"narHash": "sha256-Sws7w0tlnjD+Bjck1nv29NjC5DbL6nH5auL9Ex9Iz2A=",
"owner": "thomashoneyman",
"repo": "purescript-overlay",
"rev": "4ad4c15d07bd899d7346b331f377606631eb0ee4",
"type": "github"
},
"original": {
"owner": "thomashoneyman",
"repo": "purescript-overlay",
"type": "github"
}
},
"pyproject-nix": {
"inputs": {
"nixpkgs": [
"ngipkgs",
"dream2nix",
"nixpkgs"
]
},
"locked": {
"lastModified": 1763017646,
"narHash": "sha256-Z+R2lveIp6Skn1VPH3taQIuMhABg1IizJd8oVdmdHsQ=",
"owner": "pyproject-nix",
"repo": "pyproject.nix",
"rev": "47bd6f296502842643078d66128f7b5e5370790c",
"type": "github"
},
"original": {
"owner": "pyproject-nix",
"repo": "pyproject.nix",
"type": "github"
}
},
"root": {
"inputs": {
"agenix": "agenix",
@ -920,6 +1209,7 @@
"home-manager": "home-manager_2",
"master": "master",
"musnix": "musnix",
"ngipkgs": "ngipkgs",
"niri": "niri",
"nixpkgs": "nixpkgs_6",
"noctalia": "noctalia",
@ -929,6 +1219,75 @@
"waka-victoriametrics": "waka-victoriametrics"
}
},
"sbt-derivation": {
"inputs": {
"flake-utils": [
"ngipkgs",
"flake-utils"
],
"nixpkgs": [
"ngipkgs",
"nixpkgs"
]
},
"locked": {
"lastModified": 1698464090,
"narHash": "sha256-Pnej7WZIPomYWg8f/CZ65sfW85IfIUjYhphMMg7/LT0=",
"owner": "zaninime",
"repo": "sbt-derivation",
"rev": "6762cf2c31de50efd9ff905cbcc87239995a4ef9",
"type": "github"
},
"original": {
"owner": "zaninime",
"repo": "sbt-derivation",
"type": "github"
}
},
"slimlock": {
"inputs": {
"nixpkgs": [
"ngipkgs",
"dream2nix",
"purescript-overlay",
"nixpkgs"
]
},
"locked": {
"lastModified": 1688756706,
"narHash": "sha256-xzkkMv3neJJJ89zo3o2ojp7nFeaZc2G0fYwNXNJRFlo=",
"owner": "thomashoneyman",
"repo": "slimlock",
"rev": "cf72723f59e2340d24881fd7bf61cb113b4c407c",
"type": "github"
},
"original": {
"owner": "thomashoneyman",
"repo": "slimlock",
"type": "github"
}
},
"sops-nix": {
"inputs": {
"nixpkgs": [
"ngipkgs",
"nixpkgs"
]
},
"locked": {
"lastModified": 1769921679,
"narHash": "sha256-twBMKGQvaztZQxFxbZnkg7y/50BW9yjtCBWwdjtOZew=",
"owner": "Mic92",
"repo": "sops-nix",
"rev": "1e89149dcfc229e7e2ae24a8030f124a31e4f24f",
"type": "github"
},
"original": {
"owner": "Mic92",
"repo": "sops-nix",
"type": "github"
}
},
"stylix": {
"inputs": {
"base16": "base16",
@ -936,13 +1295,13 @@
"base16-helix": "base16-helix",
"base16-vim": "base16-vim",
"firefox-gnome-theme": "firefox-gnome-theme",
"flake-parts": "flake-parts_5",
"flake-parts": "flake-parts_6",
"gnome-shell": "gnome-shell",
"nixpkgs": [
"nixpkgs"
],
"nur": "nur_2",
"systems": "systems_4",
"systems": "systems_5",
"tinted-foot": "tinted-foot",
"tinted-kitty": "tinted-kitty",
"tinted-schemes": "tinted-schemes",
@ -1009,6 +1368,21 @@
}
},
"systems_4": {
"locked": {
"lastModified": 1689347949,
"narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=",
"owner": "nix-systems",
"repo": "default-linux",
"rev": "31732fcf5e8fea42e59c2488ad31a0e651500f68",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default-linux",
"type": "github"
}
},
"systems_5": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
@ -1125,13 +1499,34 @@
"type": "github"
}
},
"treefmt-nix_2": {
"inputs": {
"nixpkgs": [
"ngipkgs",
"nixpkgs"
]
},
"locked": {
"lastModified": 1769691507,
"narHash": "sha256-8aAYwyVzSSwIhP2glDhw/G0i5+wOrren3v6WmxkVonM=",
"owner": "numtide",
"repo": "treefmt-nix",
"rev": "28b19c5844cc6e2257801d43f2772a4b4c050a1b",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "treefmt-nix",
"type": "github"
}
},
"unstable": {
"locked": {
"lastModified": 1762977756,
"narHash": "sha256-4PqRErxfe+2toFJFgcRKZ0UI9NSIOJa+7RXVtBhy4KE=",
"lastModified": 1770197578,
"narHash": "sha256-AYqlWrX09+HvGs8zM6ebZ1pwUqjkfpnv8mewYwAo+iM=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "c5ae371f1a6a7fd27823bc500d9390b38c05fa55",
"rev": "00c21e4c93d963c50d4c0c89bfa84ed6e0694df2",
"type": "github"
},
"original": {
@ -1161,7 +1556,7 @@
},
"waka-victoriametrics": {
"inputs": {
"flake-parts": "flake-parts_6",
"flake-parts": "flake-parts_7",
"nixpkgs": [
"nixpkgs"
]

View file

@ -47,7 +47,7 @@
inputs.nixpkgs.follows = "unstable";
};
# affinity-nix.url = "github:mrshmllow/affinity-nix";
# affinity-nix.url = "github:mrshmllow/affinity-nix";
musnix.url = "github:musnix/musnix";
flatpak.url = "github:gmodena/nix-flatpak/?ref=v0.6.0";
git-global-log.url = "github:tophcodes/git-global-log";
@ -55,6 +55,10 @@
url = "github:nix-community/NUR";
inputs.nixpkgs.follows = "nixpkgs";
};
ngipkgs = {
url = "github:ngi-nix/ngipkgs/?ref=672c78f6c140b480ca37cd04a4ee250fb00b1b7d";
inputs.nixpkgs.follows = "nixpkgs";
};
community-solid-server = {
url = "github:tophcodes/CommunitySolidServer.nix/main";
};
@ -86,33 +90,4 @@
./modules/flake
];
});
# # Add modules only to specific hosts
# systems.hosts = with inputs; {
# cobalt.modules = [
# stylix.nixosModules.stylix
# ovos.nixosModules.default
# waka-victoriametrics.nixosModules.default
# ];
# };
# overlays = with inputs; [
# ovos.overlays.default
# (final: prev: {
# waka-victoriametrics = waka-victoriametrics.packages.${final.system}.default;
# })
# ];
# outputs-builder = channels: {
# formatter = channels.nixpkgs.alejandra;
# };
# })
# // {
# agenix-rekey = inputs.agenix-rekey.configure {
# userFlake = inputs.self;
# nixosConfigurations = inputs.self.nixosConfigurations // inputs.self.darwinConfigurations;
# homeConfigurations = inputs.self.homeConfigurations;
# };
# };
# }
}

View file

@ -0,0 +1,5 @@
{...}: {
bosun = {
key = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPjqieS4GkYAa1WRYZpxjgYsj7VGZ9U+rTFCkX8M0umD";
};
}

View file

@ -68,6 +68,11 @@ in {
home.packages = with pkgs; [
reader
tdf
slack
signal-desktop
telegram-desktop
vesktop # Discord client
# jitsi-meet
];
accounts.email = {

View file

@ -6,7 +6,16 @@
gtk = {
enable = true;
iconTheme.name = "breeze-dark";
iconTheme = {
name = "Adwaita";
package = pkgs.adwaita-icon-theme;
};
theme = {
name = "Adwaita";
package = pkgs.gnome-themes-extra;
};
# cursorTheme = {
# name = "BreezeX-RosePineDawn-Linux";
# package = pkgs.rose-pine-cursor;
@ -14,9 +23,14 @@
# };
};
qt = {
enable = true;
style.name = "adwaita";
};
home.sessionVariables = {
GTK_USE_PORTAL = "1";
GTK_THEME = "rose-pine";
# GTK_THEME = "rose-pine";
XCURSOR_SIZE = "32";
};
}

View file

@ -0,0 +1,110 @@
{
pkgs,
config,
...
}: {
home.packages = with pkgs; [
# Editors
jetbrains-toolbox # Installer for JetBrains IDEs
zed-editor
code-cursor
vscode
atuin-desktop
rfc # TUI-based RFC reader
nix-init # Generate Nix packages from URLs
install-nothing
# Language Servers
lua-language-server
rust-analyzer
nodePackages.typescript
nodePackages.typescript-language-server
nil # nix lsp
# trurl # Parsing and manipulating URLs via CLI
pandoc # Document converter
ripgrep # Grep file search
dig # DNS
onefetch # Git information tool
tokei # Like cloc
gource # Git history viz
zeal # Offline documentation browser
harbor.dedoc # Terminal-based documentation viewer
just # Just a command runner
claude-monitor
devenv
gitui
tea
harbor.oryx # TUI for sniffing network traffic using eBPF
# BMAD
sox
ffmpeg
bc
pipx
piper-tts
pulseaudioFull
# Build tools
cargo
glibc
gcc
php82
php82Packages.composer
bun
nomad
];
bosun.secrets.npmrc = {
rekeyFile = "npmrc.age";
path = "${config.home.homeDirectory}/.npmrc";
};
programs = {
go.enable = true;
direnv = {
enable = true;
nix-direnv.enable = true;
config.global.log_filter = "^$";
};
claude-code = {
enable = true;
# package = inputs.unstable.${system}.claude-code;
# mcpServers = {
# fetch = {
# args = ["-y" "@modelcontextprotocol/server-fetch"];
# command = "npx";
# type = "stdio";
# };
# playwright = {
# args = ["-y" "@modelcontextprotocol/server-playwright"];
# command = "npx";
# type = "stdio";
# };
# stackexchange = {
# args = ["-y" "mcp-server-stackexchange"];
# command = "npx";
# type = "stdio";
# };
# arxiv = {
# args = ["-y" "mcp-server-arxiv"];
# command = "npx";
# type = "stdio";
# };
# claudezilla = {
# command = "bun";
# args = ["/home/toph/code/vendor/claudezilla/mcp/server.js"];
# type = "stdio";
# };
# };
};
};
}

View file

@ -0,0 +1,11 @@
{...}: {
programs.jujutsu = {
enable = true;
settings = {
user = {
name = "Christopher Mühl";
email = "toki@toph.so";
};
};
};
}

View file

@ -0,0 +1,30 @@
{pkgs, ...}: let
defaultApplicationPackages = with pkgs; [
nautilus # file viewer
loupe # image viewer
kdePackages.okular # pdf viewer
# kdePackages.ark # Archives
vlc # Video player
];
in {
home.packages = with pkgs;
[
# Simple browsers for HTML
qutebrowser
harbor.firefox-with-context # Open URLs in different browser profiles based on context
]
++ defaultApplicationPackages;
xdg.mimeApps = {
enable = true;
inherit defaultApplicationPackages;
# Only want to use qute for HTML files, not URLs
defaultApplications = {
"text/html" = "qutebrowser";
"x-scheme-handler/http" = "firefox-with-context";
"x-scheme-handler/https" = "firefox-with-context";
};
};
}

View file

@ -1,6 +1,7 @@
{
pkgs,
config,
inputs,
...
} @ all: {
bosun.key = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHl33DPxxzxrNNjM8rL4ktAj4ExzCyGiU8rKog0csxNA";
@ -10,7 +11,7 @@
# inputs.ovos.homeManagerModules.default
./gaming.nix
./ssh.nix
./email.nix
./communication.nix
./gpg
./niri
./stylix.nix
@ -153,6 +154,9 @@
harbor.quick-zeal
harbor.spawn-term
];
username = "toph";
homeDirectory = "/home/toph";
};
# home.file.".config/Yubico/u2f_keys".text = "christopher:C7akk/T8XYov6fOk3rGo0ZW66QPMtdLnGznPuK+tTh/qmPecvECzGVMKJuh5M7nYsMoT6r/idAP88FGinf/rpw==,ydS/PgUALZriaaHYS81u3x8rRFulq727GDJRlvbJhP2yeKK7Ih+xqRceyabLR3MxRN8PT/MtC1I/Xjaxl0S2Rg==,es256,+presence";

View file

@ -15,6 +15,11 @@
# gimpPlugins.bimp # batch image manipulation, broken atm
# rawtherapee
# CAD
freecad
openscad
antimony
vcv-rack # eurorack synth simulator
supercollider # audio programming language
];

View file

@ -23,12 +23,22 @@
onlyoffice-desktopeditors # libreoffice alternative
speedcrunch # GUI calculator app
calibre # eBook Manager
spacedrive-v2
# loupe # Photo viewer
(dokieli.overrideAttrs
(final: prev: {
installPhase = ''
runHook preInstall
mkdir -p $out/bin
cp -r * $out
rm $out/LICENSE
runHook postInstall
'';
}))
cider-2 # Apple music player
fractal # Matrix client
gomuks # Matrix client TUI
telegram-desktop
vesktop # Discord client
filezilla # FTP Client
mochi # SRS flashcards
];

View file

@ -0,0 +1,6 @@
{...}: {
programs.niri.settings.spawn-at-startup = [
# open fastfetch by default
{argv = ["kitty" "--title" "'fastfetch'" "sh" "-c" "'fastfetch; read'"];}
];
}

View file

@ -8,7 +8,7 @@
programs.niri.settings = {
binds = with config.lib.niri.actions; {
"Mod+space".action = spawn "fuzzel";
"Mod+e".action = spawn "dolphin";
"Mod+e".action = spawn "nautilus";
"Mod+d".action = spawn "zeal"; # Documentation viewer
"Mod+c".action = spawn "${pkgs.harbor.spawn-term}/bin/spawn-term";
"Mod+g".action = spawn "${pkgs.harbor.hg-picker}/bin/hg-picker";

View file

@ -22,37 +22,37 @@
};
bar = {
position = "left";
# position = "left";
density = "comfortable";
floating = true;
# floating = true;
marginHorizontal = 0.73;
marginVertical = 0.73;
widgets = {
left = [
{id = "ControlCenter";}
{id = "SystemMonitor";}
];
# widgets = {
# left = [
# {id = "ControlCenter";}
# {id = "SystemMonitor";}
# ];
center = [
# {id = "MediaMini";}
{id = "Workspace";}
];
# center = [
# # {id = "MediaMini";}
# {id = "Workspace";}
# ];
right = [
{id = "Tray";}
{id = "ScreenRecorder";}
{id = "Volume";}
{id = "NotificationHistory";}
{id = "Clock";}
];
};
# right = [
# {id = "Tray";}
# {id = "ScreenRecorder";}
# {id = "Volume";}
# {id = "NotificationHistory";}
# {id = "Clock";}
# ];
# };
};
wallpaper = {
enabled = true;
overviewEnabled = false;
directory = "/nix/harbor/desktops/configurations/home/toph@endurance/wallpapers";
directory = "/nix/harbor/desktops/home/wallpapers";
recursiveSearch = false;
randomEnabled = true;
};

View file

@ -15,9 +15,17 @@
autoEnable = true;
# TODO: Figure out a way for automatic dark-/light-mode switching
# I've tried:
# rose-pine-dawn
# rose-pine-moon
# ayu-mirage
base16Scheme = "${pkgs.base16-schemes}/share/themes/rose-pine-dawn.yaml";
targets.firefox.profileNames = ["default" "work" "streaming"];
targets = {
gtk.enable = false;
qt.enable = false;
firefox.profileNames = ["default" "work" "streaming"];
};
cursor = {
package = pkgs.rose-pine-cursor;

View file

@ -0,0 +1,14 @@
{pkgs, ...}: {
home.packages = [pkgs.wakatime-cli];
# programs.fish = {
# interactiveShellInit = ''
# function __wakatime_hook --on-event fish_prompt
# wakatime-cli --write --plugin "fish-wakatime/0.1" \
# --entity-type app \
# --project (basename (pwd)) \
# --entity (pwd) &
# end
# '';
# };
}

View file

@ -0,0 +1,16 @@
{
pkgs,
config,
...
} @ all: {
bosun.key = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHl33DPxxzxrNNjM8rL4ktAj4ExzCyGiU8rKog0csxNA";
imports =
[
];
home.username = "christopher";
home.homeDirectory = "/Users/christopher";
elements.kitty.enable = true;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.4 MiB

After

Width:  |  Height:  |  Size: 7.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 MiB

View file

@ -10,50 +10,32 @@
];
bosun = {
# quirks = ["avahi" "docker"];
key = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPjqieS4GkYAa1WRYZpxjgYsj7VGZ9U+rTFCkX8M0umD";
profiles = {
docker.enable = true;
work.enable = true;
};
};
system.stateVersion = "24.11";
# Enable nix flakes
nix = {
package = pkgs.nixVersions.stable;
extraOptions = ''
experimental-features = nix-command flakes
'';
};
services.openssh = {
enable = true;
settings = {
PasswordAuthentication = false;
AllowUsers = ["toph"];
};
};
# Set the default drive, which in the case of Mercury is
# a VirtualBox image.
disko.devices.disk.main.device = "/dev/sda";
boot.loader.grub.enable = true;
networking.hostName = "aepplet";
time.timeZone = "Europe/Berlin";
environment.systemPackages = with pkgs; [
inputs.docker-compose-1.legacyPackages."x86_64-linux".docker-compose
gnumake
];
console = {
font = "Lat2-Terminus16";
keyMap = lib.mkForce "de";
programs = {
vim.enable = true;
git.enable = true;
};
programs.vim.enable = true;
programs.git.enable = true;
# Disable the firewall so that all traffic is allowed
networking.firewall.enable = false;

View file

@ -9,7 +9,6 @@
inputs.flatpak.nixosModules.nix-flatpak
./hardware.nix
./disko.nix
./metrics.nix
];
bosun = {
@ -23,34 +22,64 @@
key = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPjqieS4GkYAa1WRYZpxjgYsj7VGZ9U+rTFCkX8M0umD";
};
qt = {
enable = true;
platformTheme = "qt5ct";
style = "kvantum";
};
networking = {
hostName = "endurance";
firewall.enable = false;
interfaces.eno1.wakeOnLan.enable = true;
};
# Set your time zone.
time.timeZone = "Europe/Berlin";
console = {
font = "Lat2-Terminus16";
useXkbConfig = true; # use xkbOptions in tty.
};
xdg.portal = {
# Nomad client-only (no server) — joins the cluster for GPU/compute tasks
services.nomad = {
enable = true;
xdgOpenUsePortal = true;
dropPrivileges = false;
extraSettingsPaths = [
(builtins.toFile "docker-plugin.hcl" ''
plugin "docker" {
config {
volumes {
enabled = true
}
}
}
'')
];
settings = {
datacenter = "home";
bind_addr = "{{ GetInterfaceIP \"tailscale0\" }}";
addresses = {
http = "0.0.0.0";
};
advertise = {
http = "{{ GetInterfaceIP \"tailscale0\" }}";
rpc = "{{ GetInterfaceIP \"tailscale0\" }}";
serf = "{{ GetInterfaceIP \"tailscale0\" }}";
};
client = {
enabled = true;
servers = ["alvin" "fram" "great-western"];
node_class = "workstation";
meta = {
has_gpu = "true";
has_display = "true";
location = "local";
};
};
};
};
# Make nomad CLI work with Tailscale-bound API
environment.etc."profile.d/nomad.sh".text = ''
export NOMAD_ADDR="http://$(tailscale ip -4):4646"
'';
programs = {
weylus.users = ["toph"];
gnupg.agent = {
enable = true;
pinentryPackage = pkgs.pinentry-gtk2;
enableSSHSupport = true;
};
dconf.enable = true;
steam = {
@ -58,10 +87,7 @@
protontricks.enable = true;
remotePlay.openFirewall = true;
};
# VR support
envision.enable = true;
# For game-related system optimisations
gamemode.enable = true;
_1password.enable = true;
@ -71,6 +97,20 @@
# require enabling PolKit integration on some desktop environments (e.g. Plasma).
polkitPolicyOwners = ["toph"];
};
obs-studio = {
enable = true;
enableVirtualCamera = true;
plugins = with pkgs.obs-studio-plugins; [
wlrobs
obs-vaapi
obs-pipewire-audio-capture
obs-backgroundremoval
obs-move-transition
droidcam-obs
];
};
};
services = {
@ -83,9 +123,6 @@
];
};
openssh.enable = true;
openssh.settings.PasswordAuthentication = false;
hardware.openrgb.enable = true;
# Bluetooth manager
@ -98,33 +135,8 @@
'';
udev.packages = [pkgs.platformio-core.udev];
# Linux link via MQTT
lnxlink.enable = true;
beszel-agent.enable = true;
beszel-agent.key = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMkUPOw28Cu2LMuzfmvjT/L2ToNHcADwGyGvSpJ4wH2T";
elements.ollama.enable = true;
# waka-victoriametrics = {
# enable = true;
# listenAddress = "127.0.0.1:8080";
# victoriametrics.url = "http://localhost:8428/api/v1/write";
# metrics.labels = [
# "project"
# "language"
# "editor"
# "branch"
# "category"
# "operating_system"
# ];
# };
pipewire = {
enable = lib.mkForce true;
alsa.enable = true;
jack.enable = true;
pulse.enable = true;
};
usbmuxd = {
enable = true;
package = pkgs.usbmuxd2;
@ -147,19 +159,6 @@
pcscd.enable = true;
};
programs = {
thunar.enable = true;
thunar.plugins = with pkgs.xfce; [
thunar-archive-plugin
];
gnupg.agent = {
enable = true;
pinentryPackage = pkgs.pinentry-gtk2;
enableSSHSupport = true;
};
};
environment = {
# List packages installed in system profile. To search, run:
# $ nix search wget
@ -208,11 +207,6 @@
overdrive.enable = true;
};
bluetooth = {
enable = true;
powerOnBoot = true;
};
graphics = {
enable = true;
enable32Bit = true;
@ -221,6 +215,11 @@
];
};
bluetooth = {
enable = true;
powerOnBoot = true;
};
# SANE scanner support
sane = {
enable = true;
@ -237,37 +236,27 @@
keyboard.zsa.enable = true;
};
system.stateVersion = "23.05"; # Do not change this value!
# Do not change this value!
system.stateVersion = "23.05";
# Set up our bootloader
boot.loader = {
efi.canTouchEfiVariables = true;
grub = {
enable = true;
device = "nodev";
efiSupport = true;
boot = {
# Set up our bootloader
loader = {
efi.canTouchEfiVariables = true;
grub = {
enable = true;
device = "nodev";
efiSupport = true;
};
};
};
programs.obs-studio = {
enable = true;
enableVirtualCamera = true;
plugins = with pkgs.obs-studio-plugins; [
wlrobs
obs-vaapi
obs-pipewire-audio-capture
obs-backgroundremoval
obs-move-transition
droidcam-obs
extraModulePackages = with config.boot.kernelPackages; [
v4l2loopback
];
};
boot.extraModulePackages = with config.boot.kernelPackages; [
v4l2loopback
];
boot.kernelModules = ["v4l2loopback"];
boot.extraModprobeConfig = ''
options v4l2loopback devices=1 video_nr=1 card_label="OBS Cam" exclusive_caps=1
'';
kernelModules = ["v4l2loopback"];
extraModprobeConfig = ''
options v4l2loopback devices=1 video_nr=1 card_label="OBS Cam" exclusive_caps=1
'';
};
}

10
hosts/vasa/default.nix Normal file
View file

@ -0,0 +1,10 @@
{...}: {
system.stateVersion = 5;
# bosun = {
# key = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPjqieS4GkYAa1WRYZpxjgYsj7VGZ9U+rTFCkX8M0umD";
# };
# For some reason this is required for hm to work with nix-darwin
# users.users.christopher = {};
}

View file

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

View file

@ -0,0 +1,8 @@
{
inputs,
...
}: {
imports = [
# inputs.agenix.darwinModules.default
];
}

View file

@ -1,10 +1,16 @@
{inputs, ...}: let
inherit (inputs) self;
mkHome = user: host: {
imports = [
(self + "/configurations/home/${user}@${host}")
mkHome = user: host: system: inputs.home-manager.lib.homeManagerConfiguration {
pkgs = inputs.nixpkgs.legacyPackages.${system};
extraSpecialArgs = {
inherit inputs;
hostname = host;
};
modules = [
(self + "/modules/home")
(self + "/home/by-host/${host}")
];
};
in {
@ -13,8 +19,7 @@ in {
];
flake.homeConfigurations = {
"toph@endurance" = mkHome "toph" "endurance";
"toph@vasa" = mkHome "toph" "vasa";
"toph@aepplet" = mkHome "toph" "aepplet";
"toph@endurance" = mkHome "toph" "endurance" "x86_64-linux";
"toph@vasa" = mkHome "toph" "vasa" "x86_64-darwin";
};
}

View file

@ -3,7 +3,7 @@
mkHost = hostname: config:
{
path = ../../configurations/nixos/${hostname};
path = ../../hosts/${hostname};
deployable = true;
specialArgs = {inherit inputs hostname;};
}

View file

@ -1,4 +1,8 @@
{ pkgs, ... }: {
{
pkgs,
hostname,
...
}: {
# the `modules/generic` folder is generic only across nixos and darwin, not
# across home manager. home modules are in `modules/home`
imports = [
@ -7,10 +11,16 @@
./secrets.nix
];
# TODO: Move all of these into their own modules?
networking.hostName = hostname;
environment.systemPackages = with pkgs; [
pre-commit
git
gitleaks
helix
fish
just
nh
age

View file

@ -2,15 +2,22 @@
pkgs,
lib,
inputs,
hostname,
...
}: {
nix = {
package = pkgs.lixPackageSets.stable.lix;
# TODO: Is this even needed with lix?
# extraOptions = ''
# experimental-features = nix-command flakes
# '';
# automatic cleanup
gc = {
automatic = true;
dates = "weekly";
# TODO: nix-darwin uses "interval" as a key
dates = lib.mkIf (hostname != "vasa") "weekly";
options = "--delete-older-than 21d";
};

View file

@ -11,11 +11,6 @@
with lib; let
cfg = config.bosun;
in {
imports = [
inputs.agenix.nixosModules.default
inputs.agenix-rekey.nixosModules.default
];
options.bosun = {
rekeyPath = mkOption {
type = types.str;

View file

@ -19,6 +19,7 @@ in {
enable = true;
settings = {
cursor_trail = "1";
window_padding_width = "3 3";
paste_actions = "no-op";
# font_family = "Monaspace Neon NF";

View file

@ -5,5 +5,12 @@
./system.nix
./users.nix
./nix-ld.nix
./ssh.nix
./secrets.nix
];
console = {
font = "Lat2-Terminus16";
useXkbConfig = true; # use xkbOptions in tty.
};
}

View file

@ -1,11 +1,16 @@
{
inputs,
pkgs,
lib,
config,
...
}: let
inherit (lib) mkIf;
sddmTheme = pkgs.sddm-astronaut.override {
embeddedTheme = "japanese_aesthetic";
themeConfig = {
};
};
in {
imports = [
#inputs.niri.nixosModules.niri
@ -15,9 +20,11 @@ in {
environment.systemPackages = with pkgs; [
wayland-utils
wl-clipboard
libsForQt5.qtstyleplugin-kvantum
# libsForQt5.qtstyleplugin-kvantum
xwayland-satellite
nautilus
sddmTheme
kdePackages.qtmultimedia # required for our sddm theme
];
programs.niri = {
@ -26,21 +33,35 @@ in {
};
services = {
xserver.enable = true;
xserver = {
enable = true;
displayManager.setupCommands = ''
/run/current-system/sw/bin/xrandr --output HDMI-A-1 --primary
/run/current-system/sw/bin/xrandr --output DP-3 --right-of HDMI-A-1 --rotate left
'';
};
displayManager = {
defaultSession = "niri";
sddm = {
sddm = let
theme = "sddm-astronaut-theme";
in {
enable = true;
wayland.enable = true;
package = pkgs.kdePackages.sddm;
# wayland.enable = true;
inherit theme;
extraPackages = [sddmTheme];
settings.Theme.Current = theme;
};
};
};
xdg.portal = {
enable = true;
xdgOpenUsePortal = true;
# xdgOpenUsePortal = true;
config.common.default = "gtk";
extraPortals = with pkgs; [

16
modules/nixos/secrets.nix Normal file
View file

@ -0,0 +1,16 @@
{
config,
inputs',
inputs,
hostname,
pkgs,
lib,
self,
...
}: {
imports = [
inputs.agenix.nixosModules.default
inputs.agenix-rekey.nixosModules.default
../generic/secrets.nix
];
}

View file

@ -1,8 +1,7 @@
{...}: {
imports = [
./lnxlink.nix
./beszel.nix
./ollama.nix
./traefik.nix
./metrics.nix
];
}

View file

@ -1,28 +0,0 @@
{
config,
pkgs,
lib,
...
}:
with lib; let
cfg = config.services.lnxlink;
in {
options.services = {
lnxlink = {
enable = mkEnableOption "Enable LNXlink";
};
};
config = mkIf cfg.enable {
systemd.services.lnxlink = {
enable = true;
wantedBy = ["multi-user.target"];
serviceConfig = {
# Note: Logging will also be done to the working directory, so logs will
# be lost upon a restart.
WorkingDirectory = "/tmp";
ExecStart = "${pkgs.harbor.lnxlink}/bin/lnxlink -i -c ${./lnxlink.yaml}";
};
};
};
}

View file

@ -1,84 +0,0 @@
mqtt:
prefix: lnxlink
clientId: cobalt
server: nanomq.intern.muehl.dev
port: 1883
auth:
user: cobalt
pass: cobalt
tls: false
keyfile: ''
certfile: ''
ca_certs: ''
discovery:
enabled: true
lwt:
enabled: true
qos: 1
clear_on_off: true
update_interval: 5
update_on_change: false
hass_url: null
hass_api: null
modules: null
custom_modules: null
exclude:
- audio_select
- active_window
- bash
- battery
- beacondb
- bluetooth
- boot_select
- brightness
- fullscreen
- gpio
- gpu
- idle
- inference_time
- ir_remote
- keep_alive
- keyboard_hotkeys
- media
- mouse
- network
- notify
- power_profile
- restful
- screen_onoff
- screenshot
- send_keys
- speech_recognition
- systemd
- sys_updates
- steam
- wifi
- webcam
- xdg_open
- wol
- docker
settings:
systemd: null
gpio:
inputs: null
outputs: null
hotkeys: null
battery:
include_batteries: []
exclude_batteries: []
disk_usage:
include_disks: []
exclude_disks: []
statistics: https://analyzer.bkbilly.workers.dev
bash:
allow_any_command: false
expose: null
mounts:
autocheck: false
directories: []
ir_remote:
receiver: null
transmitter: null
buttons: []
restful:
port: 8112

View file

@ -0,0 +1,23 @@
{...}: {
services = {
tailscale = {
enable = true;
};
prometheus.exporters = {
node = {
enable = true;
port = 9000;
enabledCollectors = [
"systemd"
"swap"
];
};
# tailscale = {
# enable = true;
# port = 9001;
# };
};
};
}

10
modules/nixos/ssh.nix Normal file
View file

@ -0,0 +1,10 @@
{...}: {
services.openssh = {
enable = true;
settings = {
PasswordAuthentication = false;
# TODO: Determine which user to allow!
AllowUsers = ["toph" "root"];
};
};
}

View file

@ -16,8 +16,12 @@
home-manager = {
useGlobalPkgs = true;
useUserPackages = true;
backupFileExtension = "hm-bak";
users.toph = inputs.self.homeConfigurations."toph@${hostname}";
users.toph.imports = [
(inputs.self + "/modules/home")
(inputs.self + "/home/by-host/${hostname}")
];
extraSpecialArgs = {
inherit inputs hostname;
@ -27,6 +31,7 @@
users = {
users.toph = {
isNormalUser = true;
uid = 1000;
initialPassword = "wheel";
# hashedPasswordFile = config.age.secrets.tophPassword.path;
shell = pkgs.fish;

View file

@ -8,13 +8,14 @@
# wrapper that provides channels arg to each overlay
withChannels = overlayFn: final: prev: let
# Import channels with the same config as the main nixpkgs
importChannel = input: import input {
system = final.stdenv.hostPlatform.system;
config = final.config;
};
importChannel = input:
import input {
system = final.stdenv.hostPlatform.system;
config = final.config;
};
in
overlayFn {
inherit inputs;
inherit inputs lib;
channels =
{
nixpkgs = final;
@ -31,4 +32,5 @@ in [
(withChannels (import ./lix.nix))
(withChannels (import ./packages.nix))
(withChannels (import ./unstable.nix))
(withChannels (import ./spacedrive.nix))
]

20
overlays/spacedrive.nix Normal file
View file

@ -0,0 +1,20 @@
{
channels,
lib,
...
}: final: prev: {
spacedrive-v2 = channels.unstable.spacedrive.overrideAttrs (old: {
version = "2.0.0-alpha.1";
src = prev.fetchurl {
url = "https://github.com/spacedriveapp/spacedrive/releases/download/v2.0.0-alpha.1/Spacedrive-linux-x86_64.deb";
hash = "sha256-26qxNO17DTYQSYtH6aRy0PoNpb4BGeoZWOQWZtfV3IY=";
};
buildInputs =
(old.buildInputs or [])
++ (with channels.unstable; [
libheif
ffmpeg_7-full.lib
]);
});
}

View file

@ -1,37 +0,0 @@
{
pkgs,
lib,
...
}:
pkgs.python3Packages.buildPythonApplication {
pname = "lnxlink";
version = "2025.7.0";
pyproject = true;
# Linking my fork here which allows for newer versions of setuptools and wheel.
# Also includes some fixes that make the program actually work with NixOS.
src = pkgs.fetchFromGitHub {
owner = "padarom";
repo = "lnxlink";
rev = "7202e48";
hash = "sha256-E2J1d9D5SJWGEutAPAo1BM98cMzH7QrqIz3yrlXpzGE=";
};
build-system = with pkgs.python3Packages; [setuptools wheel];
dependencies = with pkgs.python3Packages; [
distro
pyyaml
paho-mqtt
requests
psutil
inotify
jeepney
];
meta = {
homepage = "https://github.com/bkbilly/lnxlink";
description = "Effortlessly manage your Linux machine using MQTT.";
license = lib.licenses.mit;
mainProgram = "lnxlink";
};
}

View file

@ -1,35 +0,0 @@
{
lib,
stdenv,
fetchurl,
}:
stdenv.mkDerivation rec {
pname = "oxigraph";
version = "0.5.3-post.1";
src = fetchurl {
url = "https://github.com/oxigraph/oxigraph/releases/download/v${version}/oxigraph_v${version}_x86_64_linux_gnu";
hash = "sha256-6yLJ8wuhGu2GoCWMji+Lt1WoDZxRmTLXVMwKb3+ByRQ=";
};
dontUnpack = true;
dontBuild = true;
installPhase = ''
runHook preInstall
mkdir -p $out/bin
cp $src $out/bin/oxigraph
chmod +x $out/bin/oxigraph
runHook postInstall
'';
meta = with lib; {
description = "SPARQL graph database";
homepage = "https://github.com/oxigraph/oxigraph";
license = with licenses; [asl20 mit];
maintainers = [];
mainProgram = "oxigraph";
platforms = ["x86_64-linux"];
};
}

View file

@ -1,5 +0,0 @@
{pkgs, ...}:
pkgs.writeShellApplication {
name = "connect-to-mercury";
text = builtins.readFile ./connect-to-mercury;
}

View file

@ -1,7 +0,0 @@
age-encryption.org/v1
-> ssh-ed25519 /u/eYA BvO3LN0SaFuuw7V5V+qRkAKFtW+ASCtMEo+HBOnccRk
2tdN2DqV/NKLX00LBp012xqimkBCdbZBFPXoQOWDqKc
-> ig7-grease 0X s
I8yjO2SGIHc0WeWWDQ51XA
--- ADjzRKqqYst1LvYy8n4DsZnHLiBFv+r+H+NdiHJ8V64
?¬´~<cô¨ÄmUP”æå³Ñ(ÊnÉq<C389>?“×p°ï<C2B0>RµVÒJt?Ù%Å´Ëhg,žó<C5BE>À±éCÓ-wÓÄšnÊšNa¹‰9<E280B0>“¹|Fz_ß'jíÂ<C382>`<60>lœâî*Z1åBP¾"búá‘ò/ñôÒΓWærßa¥ïÓÞ ¾"Œy?Ö$¸‰„,jÞn#¯ŒÎ;îw…óí[ŽËɳœ

Binary file not shown.

Binary file not shown.

Binary file not shown.