forked from aylac.top/nixcfg
this repo has no description

Compare changes

Choose any two refs to compare.

Changed files
+1937 -483
homes
hosts
modules
flake
hardware
profiles
home
desktop
profiles
programs
snippets
nixos
desktop
profiles
arr
backups
base
hibernation
swap
workstation
programs
security
services
caddy
forgejo
glance
privatebin
redlib
sddm
tangled-knot
snippets
aylac-top
nix
syncthing
+199 -71
flake.lock
···
"inputs": {
"flake-parts": "flake-parts_3",
"git-hooks": "git-hooks",
-
"nixpkgs": "nixpkgs_2"
+
"nixpkgs": "nixpkgs_3"
},
"locked": {
"lastModified": 1753483837,
···
"systems": "systems"
},
"locked": {
-
"lastModified": 1754433428,
-
"narHash": "sha256-NA/FT2hVhKDftbHSwVnoRTFhes62+7dxZbxj5Gxvghs=",
+
"lastModified": 1760836749,
+
"narHash": "sha256-wyT7Pl6tMFbFrs8Lk/TlEs81N6L+VSybPfiIgzU8lbQ=",
"owner": "ryantm",
"repo": "agenix",
-
"rev": "9edb1787864c4f59ae5074ad498b6272b3ec308d",
+
"rev": "2f0f812f69f3eb4140157fe15e12739adf82e32a",
"type": "github"
},
"original": {
···
]
},
"locked": {
-
"lastModified": 1758501861,
-
"narHash": "sha256-9sA+l9RzIcvfN1Zuv4HEe1rb2ghRr9PeRahqUVWUQXk=",
+
"lastModified": 1761266351,
+
"narHash": "sha256-oiwTRHvdcXEB7ywt4pSUfxEeteCM24bx1InVdvygz1Q=",
"owner": "ayla6",
"repo": "pkgs",
-
"rev": "2e4dff74f038d51959d5c206cb5cf737c419972b",
+
"rev": "49dc2b7b9c37be118c9675e9c80df8bc48558b52",
"type": "github"
},
"original": {
···
"type": "github"
}
},
+
"chaotic": {
+
"inputs": {
+
"flake-schemas": "flake-schemas",
+
"home-manager": "home-manager_2",
+
"jovian": "jovian",
+
"nixpkgs": "nixpkgs",
+
"rust-overlay": "rust-overlay"
+
},
+
"locked": {
+
"lastModified": 1761548673,
+
"narHash": "sha256-/513FfwpfbeppPdGDbmLhgcctLqEHdx8Rs92jImKA3M=",
+
"owner": "chaotic-cx",
+
"repo": "nyx",
+
"rev": "25ef687b6a0a13e9d39c3949e7de05873f5571a9",
+
"type": "github"
+
},
+
"original": {
+
"owner": "chaotic-cx",
+
"ref": "nyxpkgs-unstable",
+
"repo": "nyx",
+
"type": "github"
+
}
+
},
"copyparty": {
"inputs": {
"flake-utils": "flake-utils",
-
"nixpkgs": "nixpkgs"
+
"nixpkgs": "nixpkgs_2"
},
"locked": {
-
"lastModified": 1758493304,
-
"narHash": "sha256-A1xuSrELZIZhoKejIME0yemc9KlxZp/tKNxrF4LHrcw=",
+
"lastModified": 1761517857,
+
"narHash": "sha256-1xYv73nGA+Lm/hKRqjiUyuBzabaRwmeDxBCIMve5CWU=",
"owner": "9001",
"repo": "copyparty",
-
"rev": "1923a258797285ac75487d3d53665063a5bd67df",
+
"rev": "e9ab040ce8e72e299a3d8fbd109865b1e218eb57",
"type": "github"
},
"original": {
···
]
},
"locked": {
-
"lastModified": 1758287904,
-
"narHash": "sha256-IGmaEf3Do8o5Cwp1kXBN1wQmZwQN3NLfq5t4nHtVtcU=",
+
"lastModified": 1760701190,
+
"narHash": "sha256-y7UhnWlER8r776JsySqsbTUh2Txf7K30smfHlqdaIQw=",
"owner": "nix-community",
"repo": "disko",
-
"rev": "67ff9807dd148e704baadbd4fd783b54282ca627",
+
"rev": "3a9450b26e69dcb6f8de6e2b07b3fc1c288d85f5",
"type": "github"
},
"original": {
···
"type": "github"
}
},
-
"firefox-onebar": {
-
"flake": false,
-
"locked": {
-
"narHash": "sha256-kkg+wplvJvOmO2FseZuF/P2HBh+r/uSEEb9TD6RSA54=",
-
"type": "file",
-
"url": "https://git.gay/freeplay/Firefox-Onebar/raw/branch/waf/onebar.css"
-
},
-
"original": {
-
"type": "file",
-
"url": "https://git.gay/freeplay/Firefox-Onebar/raw/branch/waf/onebar.css"
-
}
-
},
"flake-compat": {
"flake": false,
"locked": {
···
"nixpkgs-lib": "nixpkgs-lib"
},
"locked": {
-
"lastModified": 1756770412,
-
"narHash": "sha256-+uWLQZccFHwqpGqr2Yt5VsW/PbeJVTn9Dk6SHWhNRPw=",
+
"lastModified": 1760948891,
+
"narHash": "sha256-TmWcdiUUaWk8J4lpjzu4gCGxWY6/Ok7mOK4fIFfBuU4=",
"owner": "hercules-ci",
"repo": "flake-parts",
-
"rev": "4524271976b625a4a605beefd893f270620fd751",
+
"rev": "864599284fc7c0ba6357ed89ed5e2cd5040f0c04",
"type": "github"
},
"original": {
···
"type": "github"
}
},
+
"flake-schemas": {
+
"locked": {
+
"lastModified": 1721999734,
+
"narHash": "sha256-G5CxYeJVm4lcEtaO87LKzOsVnWeTcHGKbKxNamNWgOw=",
+
"rev": "0a5c42297d870156d9c57d8f99e476b738dcd982",
+
"revCount": 75,
+
"type": "tarball",
+
"url": "https://api.flakehub.com/f/pinned/DeterminateSystems/flake-schemas/0.1.5/0190ef2f-61e0-794b-ba14-e82f225e55e6/source.tar.gz"
+
},
+
"original": {
+
"type": "tarball",
+
"url": "https://flakehub.com/f/DeterminateSystems/flake-schemas/%3D0.1.5.tar.gz"
+
}
+
},
"flake-utils": {
"locked": {
"lastModified": 1678901627,
···
"files": "files_2",
"flake-parts": "flake-parts_4",
"git-hooks-nix": "git-hooks-nix",
-
"home-manager": "home-manager_2",
+
"home-manager": "home-manager_3",
"nix-darwin": "nix-darwin",
"nixpkgs": [
"nixpkgs"
···
]
},
"locked": {
-
"lastModified": 1758108966,
-
"narHash": "sha256-ytw7ROXaWZ7OfwHrQ9xvjpUWeGVm86pwnEd1QhzawIo=",
+
"lastModified": 1760663237,
+
"narHash": "sha256-BflA6U4AM1bzuRMR8QqzPXqh8sWVCNDzOdsxXEguJIc=",
"owner": "cachix",
"repo": "git-hooks.nix",
-
"rev": "54df955a695a84cd47d4a43e08e1feaf90b1fd9b",
+
"rev": "ca5b894d3e3e151ffc1db040b6ce4dcc75d31c37",
"type": "github"
},
"original": {
···
"home-manager_2": {
"inputs": {
"nixpkgs": [
+
"chaotic",
+
"nixpkgs"
+
]
+
},
+
"locked": {
+
"lastModified": 1761513701,
+
"narHash": "sha256-w7qOcQb1FSMZASvWe01r99QqZ5LnHO0k3rgs5ryyig0=",
+
"owner": "nix-community",
+
"repo": "home-manager",
+
"rev": "255b6a0ef2f488a2fad051361699cc67db57338c",
+
"type": "github"
+
},
+
"original": {
+
"owner": "nix-community",
+
"repo": "home-manager",
+
"type": "github"
+
}
+
},
+
"home-manager_3": {
+
"inputs": {
+
"nixpkgs": [
"fontix",
"nixpkgs"
]
···
"type": "github"
}
},
-
"home-manager_3": {
+
"home-manager_4": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
-
"lastModified": 1758464306,
-
"narHash": "sha256-i56XRXqjwJRdVYmpzVUQ0ktqBBHqNzQHQMQvFRF/acQ=",
+
"lastModified": 1761584077,
+
"narHash": "sha256-dISPEZahlfs5K6d58zR4akRRyogfE9P4WSyPPNT7HiE=",
"owner": "nix-community",
"repo": "home-manager",
-
"rev": "939e91e1cff1f99736c5b02529658218ed819a2a",
+
"rev": "e82585308aef3d4cc2c36c7b6946051c8cdf24ef",
"type": "github"
},
"original": {
···
"lastModified": 1731402384,
"narHash": "sha256-OwUmrPfEehLDz0fl2ChYLK8FQM2p0G1+EMrGsYEq+6g=",
"type": "tarball",
-
"url": "https://github.com/IBM/plex/releases/download/@ibm/plex-mono@1.1.0/ibm-plex-mono.zip"
+
"url": "https://github.com/IBM/plex/releases/download/@ibm%2Fplex-mono@1.1.0/ibm-plex-mono.zip"
},
"original": {
"type": "tarball",
-
"url": "https://github.com/IBM/plex/releases/download/@ibm/plex-mono@1.1.0/ibm-plex-mono.zip"
+
"url": "https://github.com/IBM/plex/releases/download/@ibm%2Fplex-mono@1.1.0/ibm-plex-mono.zip"
}
},
"indigo": {
···
"url": "https://github.com/rsms/inter/releases/download/v4.1/Inter-4.1.zip"
}
},
+
"jovian": {
+
"inputs": {
+
"nix-github-actions": "nix-github-actions",
+
"nixpkgs": [
+
"chaotic",
+
"nixpkgs"
+
]
+
},
+
"locked": {
+
"lastModified": 1761376732,
+
"narHash": "sha256-wavx9gROyuRZKSvPCCBh78gOur7o88ndRi545njNRrM=",
+
"owner": "Jovian-Experiments",
+
"repo": "Jovian-NixOS",
+
"rev": "8bef482d65425d0cff6b20c11a5f054f85569a38",
+
"type": "github"
+
},
+
"original": {
+
"owner": "Jovian-Experiments",
+
"repo": "Jovian-NixOS",
+
"type": "github"
+
}
+
},
"lanzaboote": {
"inputs": {
"crane": "crane",
···
"nixpkgs"
],
"pre-commit-hooks-nix": "pre-commit-hooks-nix",
-
"rust-overlay": "rust-overlay"
+
"rust-overlay": "rust-overlay_2"
},
"locked": {
"lastModified": 1737639419,
···
"type": "github"
}
},
+
"nix-github-actions": {
+
"inputs": {
+
"nixpkgs": [
+
"chaotic",
+
"jovian",
+
"nixpkgs"
+
]
+
},
+
"locked": {
+
"lastModified": 1729697500,
+
"narHash": "sha256-VFTWrbzDlZyFHHb1AlKRiD/qqCJIripXKiCSFS8fAOY=",
+
"owner": "zhaofengli",
+
"repo": "nix-github-actions",
+
"rev": "e418aeb728b6aa5ca8c5c71974e7159c2df1d8cf",
+
"type": "github"
+
},
+
"original": {
+
"owner": "zhaofengli",
+
"ref": "matrix-name",
+
"repo": "nix-github-actions",
+
"type": "github"
+
}
+
},
"nixpkgs": {
"locked": {
-
"lastModified": 1748162331,
-
"narHash": "sha256-rqc2RKYTxP3tbjA+PB3VMRQNnjesrT0pEofXQTrMsS8=",
+
"lastModified": 1761373498,
+
"narHash": "sha256-Q/uhWNvd7V7k1H1ZPMy/vkx3F8C13ZcdrKjO7Jv7v0c=",
"owner": "NixOS",
"repo": "nixpkgs",
-
"rev": "7c43f080a7f28b2774f3b3f43234ca11661bf334",
+
"rev": "6a08e6bb4e46ff7fcbb53d409b253f6bad8a28ce",
"type": "github"
},
"original": {
-
"id": "nixpkgs",
-
"ref": "nixos-25.05",
-
"type": "indirect"
+
"owner": "NixOS",
+
"ref": "nixos-unstable",
+
"repo": "nixpkgs",
+
"type": "github"
}
},
"nixpkgs-lib": {
···
},
"nixpkgs_2": {
"locked": {
+
"lastModified": 1748162331,
+
"narHash": "sha256-rqc2RKYTxP3tbjA+PB3VMRQNnjesrT0pEofXQTrMsS8=",
+
"owner": "NixOS",
+
"repo": "nixpkgs",
+
"rev": "7c43f080a7f28b2774f3b3f43234ca11661bf334",
+
"type": "github"
+
},
+
"original": {
+
"id": "nixpkgs",
+
"ref": "nixos-25.05",
+
"type": "indirect"
+
}
+
},
+
"nixpkgs_3": {
+
"locked": {
"lastModified": 1740126099,
"narHash": "sha256-ozoOtE2hGsqh4XkTJFsrTkNxkRgShxpQxDynaPZUGxk=",
"owner": "nixos",
···
"type": "github"
}
},
-
"nixpkgs_3": {
+
"nixpkgs_4": {
"locked": {
-
"lastModified": 1758277210,
-
"narHash": "sha256-iCGWf/LTy+aY0zFu8q12lK8KuZp7yvdhStehhyX1v8w=",
+
"lastModified": 1761373498,
+
"narHash": "sha256-Q/uhWNvd7V7k1H1ZPMy/vkx3F8C13ZcdrKjO7Jv7v0c=",
"owner": "NixOS",
"repo": "nixpkgs",
-
"rev": "8eaee110344796db060382e15d3af0a9fc396e0e",
+
"rev": "6a08e6bb4e46ff7fcbb53d409b253f6bad8a28ce",
"type": "github"
},
"original": {
···
"type": "github"
}
},
-
"nixpkgs_4": {
+
"nixpkgs_5": {
"locked": {
-
"lastModified": 1758277210,
-
"narHash": "sha256-iCGWf/LTy+aY0zFu8q12lK8KuZp7yvdhStehhyX1v8w=",
+
"lastModified": 1761373498,
+
"narHash": "sha256-Q/uhWNvd7V7k1H1ZPMy/vkx3F8C13ZcdrKjO7Jv7v0c=",
"owner": "nixos",
"repo": "nixpkgs",
-
"rev": "8eaee110344796db060382e15d3af0a9fc396e0e",
+
"rev": "6a08e6bb4e46ff7fcbb53d409b253f6bad8a28ce",
"type": "github"
},
"original": {
···
"nur": {
"inputs": {
"flake-parts": "flake-parts_6",
-
"nixpkgs": "nixpkgs_4"
+
"nixpkgs": "nixpkgs_5"
},
"locked": {
-
"lastModified": 1758507428,
-
"narHash": "sha256-3NVQUTBBVd44/Hc2xzzgMApCd5qQsqhh0mT7KJtNpzs=",
+
"lastModified": 1761614117,
+
"narHash": "sha256-E2o2Ztrp9oK+ftcfyBCqDAB/DivvPwngzob37oIUkew=",
"owner": "nix-community",
"repo": "NUR",
-
"rev": "1e477dad43c75b007d906babf62527ea8c1b2a89",
+
"rev": "1a19c6942bc8f113090d21b6d017a728cb265e5a",
"type": "github"
},
"original": {
···
"agenix": "agenix",
"atproto-basic-notifications": "atproto-basic-notifications",
"aylapkgs": "aylapkgs",
+
"chaotic": "chaotic",
"copyparty": "copyparty",
"disko": "disko",
"files": "files",
-
"firefox-onebar": "firefox-onebar",
"flake-parts": "flake-parts_2",
"fontix": "fontix",
"git-hooks-nix": "git-hooks-nix_2",
-
"home-manager": "home-manager_3",
+
"home-manager": "home-manager_4",
"lanzaboote": "lanzaboote",
"nix-flatpak": "nix-flatpak",
-
"nixpkgs": "nixpkgs_3",
+
"nixpkgs": "nixpkgs_4",
"nur": "nur",
"secrets": "secrets",
"tangled-core": "tangled-core",
···
"rust-overlay": {
"inputs": {
"nixpkgs": [
+
"chaotic",
+
"nixpkgs"
+
]
+
},
+
"locked": {
+
"lastModified": 1761446259,
+
"narHash": "sha256-JNNOtIIVIX+yBIsh1rq1Nxhc1LZq168vuQB5sqrZbCY=",
+
"owner": "oxalica",
+
"repo": "rust-overlay",
+
"rev": "95098bb4d55ebe167c082fc40705a73ef76b58e4",
+
"type": "github"
+
},
+
"original": {
+
"owner": "oxalica",
+
"repo": "rust-overlay",
+
"type": "github"
+
}
+
},
+
"rust-overlay_2": {
+
"inputs": {
+
"nixpkgs": [
"lanzaboote",
"nixpkgs"
···
"secrets": {
"flake": false,
"locked": {
-
"lastModified": 1757738862,
-
"narHash": "sha256-xmHa2syMlF1pu/aErprkrcqgAiRpzsMjjy3rJZfBxbg=",
+
"lastModified": 1760740637,
+
"narHash": "sha256-ZMBSooid+ECg63h+tYYbAXaS/rTZlcVuUNxCEmtoL1Y=",
"owner": "ayla6",
"repo": "secrets",
-
"rev": "274fb6e1617d005dd23588f6aadd5320c598e3dd",
+
"rev": "909f53bbd69b1a44f1c99b2d759e7b47191f5a5d",
"type": "github"
},
"original": {
···
"sqlite-lib-src": "sqlite-lib-src"
},
"locked": {
-
"lastModified": 1758343819,
-
"narHash": "sha256-lXoRA/zM7V8f5SvSZMdPSMpZiFkFnx3RV0RfovQbqzg=",
+
"lastModified": 1761563708,
+
"narHash": "sha256-Q74UiisPJpqr3808Jp2Qbl/uEDxSoj2tIJQ5MLFoWx0=",
"ref": "refs/heads/master",
-
"rev": "796f739caf7df25436e0ac3a8880dca54d6238db",
-
"revCount": 1366,
+
"rev": "bfdcfc5f77733c782f289091de53bb1b315f84be",
+
"revCount": 1555,
"type": "git",
"url": "https://tangled.sh/@tangled.sh/core"
},
···
},
"locked": {
-
"lastModified": 1758502090,
-
"narHash": "sha256-sJLYcsk88epifAtiNGAe/CUJ2b2JG1C6stuS+ry5J+w=",
+
"lastModified": 1761612240,
+
"narHash": "sha256-EFwi77fxHVgh2HzbV4IfxrM4ZfGp0tnDjsNOFHK/fls=",
"owner": "tgirlcloud",
"repo": "pkgs",
-
"rev": "e970cd5f1a5db62de1a502c42e9aa146a5cbaf07",
+
"rev": "c8ba164e52c05487d4a1d1003b21b179f858e0fd",
"type": "github"
},
"original": {
+6 -4
flake.nix
···
inputs.nixpkgs.follows = "nixpkgs";
};
+
chaotic.url = "github:chaotic-cx/nyx/nyxpkgs-unstable";
+
copyparty.url = "github:9001/copyparty";
disko = {
···
inputs.nixpkgs.follows = "nixpkgs";
};
-
firefox-onebar = {
-
url = "https://git.gay/freeplay/Firefox-Onebar/raw/branch/waf/onebar.css";
-
flake = false;
-
};
+
#firefox-onebar = {
+
# url = "https://git.gay/freeplay/Firefox-Onebar/raw/branch/waf/onebar.css";
+
# flake = false;
+
#};
secrets = {
url = "github:ayla6/secrets";
+16 -15
homes/ayla/default.nix
···
ffmpeg-full
love
luajit
-
nodejs
+
#nodejs
+
bun
typescript
# applications
aseprite
rclone
-
rclone-browser
+
#rclone-browser
signal-desktop-bin
bitwarden-desktop
yt-dlp
···
};
git.enable = true;
helix.enable = true;
+
jujutsu.enable = true;
micro.enable = true;
mpv.enable = true;
ssh.enable = true;
···
profiles = {
betterLocations.enable = true;
shell.enable = true;
+
fixMimeTypes.enable = true;
defaultApps = {
enable = true;
forceMimeAssociations = true;
-
archiveViewer.package = pkgs.file-roller;
-
audioPlayer.package = config.programs.mpv.finalPackage;
-
videoPlayer.package = config.programs.mpv.finalPackage;
-
editor.package = pkgs.gnome-text-editor;
-
fileManager.package = pkgs.nautilus;
-
imageViewer.package = pkgs.loupe;
-
pdfViewer.package = pkgs.papers;
-
#terminal.package = pkgs.ptyxis;
+
editor = {
+
package = config.programs.helix.package;
+
terminal = true;
+
icon = "helix";
+
};
terminalEditor.package = config.programs.helix.package;
-
webBrowser.package = config.programs.helium.package;
+
webBrowser = {
+
package = config.programs.helium.package;
+
icon = "helium";
+
};
};
};
};
···
};
myHome = {
-
desktop = {
-
gnome.enable = true;
-
};
+
desktop.gnome.enable = true;
programs = {
lutris.enable = true;
···
"org.atheme.audacious"
"org.freac.freac"
"org.musicbrainz.Picard"
-
"org.tenacityaudio.Tenacity"
+
"org.audacityteam.Audacity"
# productivity
"com.calibre_ebook.calibre"
-1
hosts/jezebel/default.nix
···
enable = true;
enableCaddy = true;
};
-
tangled-knot.enable = false;
uptime-kuma.enable = true;
};
};
+71 -3
hosts/morgana/default.nix
···
{
self,
config,
+
lib,
...
}: {
imports = [
···
snapshots = true;
};
tmpOnTmpfs.enable = true;
-
swap = {
+
+
hibernation = {
enable = true;
-
size = 8192;
-
location = "/data/.swap";
+
swap = {
+
size = 24576;
+
location = "/data/.swapfile";
+
keyFile = "/.swapkey";
+
blkDev = "/dev/disk/by-uuid/e88969b5-98a0-4d46-a059-8e07ebf2689e";
+
};
};
};
desktop.gnome.enable = true;
services = {
+
gdm.enable = true;
dnsmasq = {
enable = true;
longCaches = false;
···
};
};
};
+
+
security.sudo-rs.wheelNeedsPassword = lib.mkForce true;
myUsers = {
ayla = {
···
device = "/dev/disk/by-uuid/e5cf35fa-55bc-499f-a39b-e844a442e0f0";
fsType = "btrfs";
options = ["subvol=@data" "compress=zstd" "noatime"];
+
};
+
};
+
+
# samba for ps2 opl
+
services.samba = {
+
enable = true;
+
openFirewall = true;
+
winbindd.enable = false;
+
nmbd.enable = false;
+
settings = {
+
global = {
+
"workgroup" = "WORKGROUP";
+
"server string" = "smbnix";
+
"netbios name" = "smbnix";
+
"security" = "user";
+
+
"bind interfaces only" = "yes";
+
"interfaces" = "lo enp2s0f1";
+
+
"client min protocol" = "CORE";
+
"client max protocol" = "NT1";
+
"server max protocol" = "SMB3";
+
"server min protocol" = "LANMAN1";
+
"strict sync" = "no";
+
"keepalive" = "0";
+
+
"getwd cache" = "yes";
+
"large readwrite" = "yes";
+
"aio read size" = "0";
+
"aio write size" = "0";
+
"strict locking" = "no";
+
"strict allocate" = "no";
+
"read raw" = "no";
+
"write raw" = "no";
+
+
"server signing" = "disabled";
+
"smb encrypt" = "disabled";
+
"socket options" = "TCP_NODELAY IPTOS_LOWDELAY SO_KEEPALIVE";
+
+
"load printers" = "no";
+
"disable spoolss" = "yes";
+
+
"map to guest" = "bad user";
+
+
"available" = "yes";
+
"create mask" = "0777";
+
"directory mask" = "0777";
+
"force user" = "ayla";
+
"force group" = "users";
+
};
+
"PS2SMB" = {
+
"comment" = "PS2 SMB";
+
"path" = "/data/PS2SMB";
+
"browseable" = "yes";
+
"read only" = "no";
+
"guest ok" = "yes";
+
"public" = "yes";
+
"strict sync" = "no";
+
};
};
};
}
+5 -6
hosts/nanpi/default.nix
···
arr.enable = true;
};
services = {
-
audiobookshelf.enable = true;
+
audiobookshelf.enable = false;
caddy.enable = true;
cloudflared.enable = true;
-
copyparty.enable = true;
+
copyparty.enable = false;
dnsmasq.enable = true;
-
forgejo = {
-
enable = true;
-
db = "postgresql";
-
};
+
forgejo.enable = true;
glance.enable = true;
jellyfin.enable = true;
jellyseerr.enable = true;
···
miniflux.enable = true;
ntfy.enable = true;
pds.enable = true;
+
privatebin.enable = true;
qbittorrent = {
enable = true;
webuiPort = config.mySnippets.tailnet.networkMap.qbittorrent.port;
···
};
vaultwarden.enable = true;
webdav.enable = true;
+
tangled-knot.enable = true;
};
};
+1 -2
hosts/nanpi/secrets.nix
···
{self, ...}: {
age.secrets = {
-
aylaPassword.file = "${self.inputs.secrets}/ayla/passwordHash.age";
-
postgres-forgejo.file = "${self.inputs.secrets}/postgres/forgejo.age";
+
aylaPassword.file = "${self.inputs.secrets}/ayla/crazierPasswordHash.age";
pds.file = "${self.inputs.secrets}/pds.age";
resticPassword.file = "${self.inputs.secrets}/restic-passwd.age";
rclone.file = "${self.inputs.secrets}/rclone.age";
+5 -1
modules/flake/files/helix.nix
···
name = "nix";
auto-format = true;
formatter = {command = lib.getExe pkgs.alejandra;};
-
language-servers = ["nixd"];
+
language-servers = ["nixd" "nil"];
}
{
name = "bash";
···
nixd = {
command = lib.getExe pkgs.nixd;
+
};
+
+
nil = {
+
command = lib.getExe pkgs.nil;
};
};
};
+56 -23
modules/flake/files/zed.nix
···
lib,
pkgs,
...
-
}: {
+
}: let
+
prettier = {
+
external = {
+
command = pkgs.writeScript "prettier-bun" ''
+
#! ${pkgs.bash}/bin/bash -e
+
exec ${lib.getExe pkgs.bun} ${pkgs.prettier}/bin/prettier.cjs "$@"
+
'';
+
arguments = ["--stdin-filepath" "{buffer_path}"];
+
};
+
};
+
biome = {
+
format_on_save = "on";
+
+
formatter = {language_server = {name = "biome";};};
+
code_actions_on_format = {
+
"source.fixAll.biome" = true;
+
"source.organizeImports.biome" = true;
+
};
+
};
+
in {
files.files = [
{
checkFile = false;
···
auto_install_extensions = {
basher = true;
nix = true;
+
marksman = true;
};
languages = {
-
JSON = {
-
format_on_save = "on";
+
JSON = biome // {language_servers = ["json-language-server" "biome"];};
-
formatter = {
-
external = {
-
command = lib.getExe pkgs.prettier;
-
arguments = ["--stdin-filepath" "{buffer_path}"];
-
};
-
};
-
};
+
JSONC = biome // {language_servers = ["json-language-server" "biome"];};
Markdown = {
format_on_save = "on";
-
-
formatter.external = {
-
command = lib.getExe pkgs.prettier;
-
arguments = ["--stdin-filepath" "{buffer_path}"];
-
};
+
formatter = prettier;
+
language_servers = ["marksman"];
};
Nix = {
format_on_save = "on";
formatter = "language_server";
-
language_servers = ["nixd"];
+
language_servers = [
+
"nixd"
+
"nil"
+
];
};
"Shell Script" = {
···
YAML = {
format_on_save = "on";
-
formatter.external = {
-
command = lib.getExe pkgs.prettier;
-
arguments = ["--stdin-filepath" "{buffer_path}"];
-
};
+
formatter = prettier;
};
};
-
lsp.nixd = {
-
binary.path = lib.getExe pkgs.nixd;
-
settings.formatting.command = [(lib.getExe pkgs.alejandra) "--quiet" "--"];
+
lsp = {
+
nixd = {
+
binary.path = lib.getExe pkgs.nixd;
+
settings.formatting.command = [(lib.getExe pkgs.alejandra) "--quiet" "--"];
+
};
+
nil = {
+
binary = {
+
path = lib.getExe pkgs.nil;
+
arguments = ["--stdio"];
+
};
+
};
+
json-language-server = {
+
binary = {
+
path = pkgs.writeScript "vscode-json-languageserver-bun" ''
+
#! ${pkgs.bash}/bin/bash -e
+
exec ${lib.getExe pkgs.bun} ${pkgs.vscode-json-languageserver}/lib/node_modules/vscode-json-languageserver/./bin/vscode-json-languageserver "$@"
+
'';
+
arguments = ["--stdio"];
+
};
+
};
+
marksman = {
+
binary = {
+
path = lib.getExe pkgs.marksman;
+
arguments = ["server"];
+
};
+
};
};
};
}
+2 -1
modules/flake/nixos.nix
···
inputs.lanzaboote.nixosModules.lanzaboote
inputs.tangled-core.nixosModules.knot
inputs.tgirlpkgs.nixosModules.default
+
inputs.chaotic.nixosModules.default
modules.hardware
modules.nixos
modules.snippets
···
};
}
];
-
specialArgs = {inherit self;};
+
specialArgs = {inherit self inputs;};
}
);
};
+2 -2
modules/hardware/profiles/base/default.nix
···
fstrim.enable = true;
logind.settings.Login = {
-
HandlePowerKey = "suspend";
-
HandlePowerKeyLongPress = "poweroff";
+
HandlePowerKey = lib.mkDefault "suspend";
+
HandlePowerKeyLongPress = lib.mkDefault "poweroff";
};
xserver.xkb = {
+51
modules/home/desktop/cosmic/default.nix
···
+
{
+
lib,
+
config,
+
pkgs,
+
...
+
}: {
+
options.myHome.desktop.cosmic = {
+
enable = lib.mkEnableOption "COSMIC desktop environment";
+
};
+
+
config = lib.mkIf config.myHome.desktop.cosmic.enable {
+
dconf = {
+
enable = true;
+
+
settings = {
+
"org/gnome/desktop/wm/preferences".button-layout = "appmenu:close";
+
};
+
};
+
+
myHome.profiles.defaultApps = {
+
audioPlayer = {
+
package = lib.mkDefault config.programs.mpv.finalPackage;
+
icon = lib.mkDefault "mpv";
+
};
+
editor = {
+
package = lib.mkDefault pkgs.cosmic-edit;
+
icon = lib.mkDefault "com.system76.CosmicEdit";
+
};
+
fileManager = {
+
package = lib.mkDefault pkgs.cosmic-files;
+
icon = lib.mkDefault "com.system76.CosmicFiles";
+
};
+
imageViewer = {
+
package = lib.mkDefault pkgs.loupe;
+
icon = lib.mkDefault "org.gnome.Loupe";
+
};
+
pdfViewer = {
+
package = lib.mkDefault pkgs.papers;
+
icon = lib.mkDefault "org.gnome.Papers";
+
};
+
terminal = {
+
package = lib.mkDefault pkgs.cosmic-term;
+
icon = lib.mkDefault "com.system76.CosmicTerm";
+
};
+
videoPlayer = {
+
package = lib.mkDefault config.programs.mpv.finalPackage;
+
icon = lib.mkDefault "mpv";
+
};
+
};
+
};
+
}
+3 -1
modules/home/desktop/default.nix
···
}: {
imports = [
./gnome
+
./plasma
+
./cosmic
];
options.myHome.desktop.enable = lib.mkOption {
-
default = config.myHome.desktop.gnome.enable;
+
default = config.myHome.desktop.gnome.enable or config.myHome.desktop.plasma.enable;
description = "Desktop environment configuration.";
type = lib.types.bool;
};
+40 -35
modules/home/desktop/gnome/default.nix
···
"org/gnome/system/location".enabled = false;
"org/gnome/desktop/wm/keybindings" = {
-
move-to-monitor-down = [
-
"<Ctrl><Shift><Super>e"
-
"<Ctrl><Shift><Super>Down"
-
];
-
move-to-monitor-left = [
-
"<Ctrl><Shift><Super>n"
-
"<Ctrl><Shift><Super>Left"
-
];
-
move-to-monitor-right = [
-
"<Ctrl><Shift><Super>o"
-
"<Ctrl><Shift><Super>Right"
-
];
-
move-to-monitor-up = [
-
"<Ctrl><Shift><Super>i"
-
"<Ctrl><Shift><Super>Up"
-
];
+
move-to-monitor-down = ["<Ctrl><Shift><Super>Down"];
+
move-to-monitor-left = ["<Ctrl><Shift><Super>Left"];
+
move-to-monitor-right = ["<Ctrl><Shift><Super>Right"];
+
move-to-monitor-up = ["<Ctrl><Shift><Super>Up"];
move-to-workspace-1 = ["<Shift><Super>1"];
move-to-workspace-10 = ["<Shift><Super>0"];
move-to-workspace-2 = ["<Shift><Super>2"];
···
move-to-workspace-7 = ["<Shift><Super>7"];
move-to-workspace-8 = ["<Shift><Super>8"];
move-to-workspace-9 = ["<Shift><Super>9"];
-
move-to-workspace-down = ["<Shift><Super>j"];
-
move-to-workspace-left = [
-
"<Shift><Super>n"
-
"<Shift><Super>Comma"
-
];
-
move-to-workspace-right = [
-
"<Shift><Super>o"
-
"<Shift><Super>Period"
-
];
-
move-to-workspace-up = ["<Shift><Super>k"];
switch-to-workspace-1 = ["<Super>1"];
switch-to-workspace-10 = ["<Super>0"];
switch-to-workspace-2 = ["<Super>2"];
···
switch-to-workspace-8 = ["<Super>8"];
switch-to-workspace-9 = ["<Super>9"];
switch-to-workspace-down = [];
-
switch-to-workspace-left = ["<Super>Comma"];
-
switch-to-workspace-right = ["<Super>Period"];
+
switch-to-workspace-left = ["<Ctrl><Super>Left"];
+
switch-to-workspace-right = ["<Ctrl><Super>Right"];
switch-to-workspace-up = [];
toggle-fullscreen = ["<Super>w"];
};
+
+
"org/gnome/desktop/wm/preferences".button-layout = "appmenu:close";
};
};
···
];
myHome.profiles.defaultApps = {
-
audioPlayer.package = lib.mkDefault pkgs.mpv;
-
editor.package = lib.mkDefault pkgs.gnome-text-editor;
-
fileManager.package = lib.mkDefault pkgs.nautilus;
-
imageViewer.package = lib.mkDefault pkgs.loupe;
-
pdfViewer.package = lib.mkDefault pkgs.papers;
-
terminal.package = lib.mkDefault pkgs.gnome-console;
-
videoPlayer.package = lib.mkDefault pkgs.mpv;
+
archiveViewer = {
+
package = lib.mkDefault pkgs.file-roller;
+
icon = lib.mkDefault "org.gnome.FileRoller";
+
};
+
audioPlayer = {
+
package = lib.mkDefault config.programs.mpv.finalPackage;
+
icon = lib.mkDefault "mpv";
+
};
+
editor = {
+
package = lib.mkDefault pkgs.gnome-text-editor;
+
icon = lib.mkDefault "org.gnome.TextEditor";
+
};
+
fileManager = {
+
package = lib.mkDefault pkgs.nautilus;
+
icon = lib.mkDefault "org.gnome.Nautilus";
+
};
+
imageViewer = {
+
package = lib.mkDefault pkgs.loupe;
+
icon = lib.mkDefault "org.gnome.Loupe";
+
};
+
pdfViewer = {
+
package = lib.mkDefault pkgs.papers;
+
icon = lib.mkDefault "org.gnome.Papers";
+
};
+
terminal = {
+
package = lib.mkDefault pkgs.gnome-console;
+
icon = lib.mkDefault "org.gnome.Terminal";
+
};
+
videoPlayer = {
+
package = lib.mkDefault config.programs.mpv.finalPackage;
+
icon = lib.mkDefault "mpv";
+
};
};
};
}
+52
modules/home/desktop/plasma/default.nix
···
+
{
+
lib,
+
config,
+
pkgs,
+
...
+
}: {
+
options.myHome.desktop.plasma = {
+
enable = lib.mkEnableOption "KDE Plasma desktop environment";
+
};
+
+
config = lib.mkIf config.myHome.desktop.plasma.enable {
+
dconf = {
+
enable = true;
+
+
settings = {
+
"org/gnome/desktop/wm/preferences".button-layout = "appmenu:minimize,maximize,close";
+
};
+
};
+
+
myHome.profiles.defaultApps = {
+
audioPlayer = {
+
package = lib.mkDefault config.programs.mpv.finalPackage;
+
icon = lib.mkDefault "mpv";
+
};
+
editor = {
+
package = lib.mkDefault pkgs.kdePackages.kate;
+
icon = lib.mkDefault "org.kde.kate";
+
};
+
fileManager = {
+
package = lib.mkDefault pkgs.kdePackages.dolphin;
+
exec = lib.mkDefault (lib.getExe config.myHome.profiles.defaultApps.fileManager.package);
+
icon = lib.mkDefault "org.kde.dolphin";
+
};
+
imageViewer = {
+
package = lib.mkDefault pkgs.kdePackages.gwenview;
+
icon = lib.mkDefault "org.kde.gwenview";
+
};
+
pdfViewer = {
+
package = lib.mkDefault pkgs.kdePackages.okular;
+
icon = lib.mkDefault "org.kde.okular";
+
};
+
terminal = {
+
package = lib.mkDefault pkgs.kdePackages.konsole;
+
icon = lib.mkDefault "org.kde.konsole";
+
};
+
videoPlayer = {
+
package = lib.mkDefault config.programs.mpv.finalPackage;
+
icon = lib.mkDefault "mpv";
+
};
+
};
+
};
+
}
+1
modules/home/profiles/default.nix
···
./betterLocations
./defaultApps
./shell
+
./fixMimeTypes
];
}
+100 -11
modules/home/profiles/defaultApps/default.nix
···
default = lib.getExe cfg.archiveViewer.package;
description = "The executable path for the default archive viewer.";
};
+
+
icon = lib.mkOption {
+
type = lib.types.str;
+
default = "";
+
description = "The icon name for the default archive viewer.";
+
};
};
audioPlayer = {
···
default = lib.getExe cfg.audioPlayer.package;
description = "The executable path for the default audio player.";
};
+
+
terminal = lib.mkOption {
+
type = lib.types.bool;
+
default = false;
+
description = "Whether the editor is a terminal-based application.";
+
};
+
+
icon = lib.mkOption {
+
type = lib.types.str;
+
default = "";
+
description = "The icon name for the default audio player.";
+
};
};
editor = {
···
default = lib.getExe cfg.editor.package;
description = "The executable path for the default text editor.";
};
+
+
terminal = lib.mkOption {
+
type = lib.types.bool;
+
default = false;
+
description = "Whether the editor is a terminal-based application.";
+
};
+
+
icon = lib.mkOption {
+
type = lib.types.str;
+
default = "";
+
description = "The icon name for the default text editor.";
+
};
};
fileManager = {
···
type = lib.types.str;
default = lib.getExe cfg.fileManager.package;
description = "The executable path for the default file manager.";
+
};
+
+
terminal = lib.mkOption {
+
type = lib.types.bool;
+
default = false;
+
description = "Whether the editor is a terminal-based application.";
+
};
+
+
icon = lib.mkOption {
+
type = lib.types.str;
+
default = "";
+
description = "The icon name for the default file manager.";
};
};
···
default = lib.getExe cfg.imageViewer.package;
description = "The executable path for the default image viewer.";
};
+
+
icon = lib.mkOption {
+
type = lib.types.str;
+
default = "";
+
description = "The icon name for the default image viewer.";
+
};
};
pdfViewer = {
···
default = lib.getExe cfg.pdfViewer.package;
description = "The executable path for the default PDF viewer.";
};
+
+
terminal = lib.mkOption {
+
type = lib.types.bool;
+
default = false;
+
description = "Whether the editor is a terminal-based application.";
+
};
+
+
icon = lib.mkOption {
+
type = lib.types.str;
+
default = "";
+
description = "The icon name for the default PDF viewer.";
+
};
};
terminal = {
···
type = lib.types.str;
default = lib.getExe cfg.terminal.package;
description = "The executable path for the default terminal emulator.";
+
};
+
+
icon = lib.mkOption {
+
type = lib.types.str;
+
default = "";
+
description = "The icon name for the default terminal emulator.";
};
};
···
default = lib.getExe cfg.videoPlayer.package;
description = "The executable path for the default video player.";
};
+
+
icon = lib.mkOption {
+
type = lib.types.str;
+
default = "";
+
description = "The icon name for the default video player.";
+
};
};
webBrowser = {
···
type = lib.types.str;
default = lib.getExe cfg.webBrowser.package;
description = "The executable path for the default web browser.";
+
};
+
+
icon = lib.mkOption {
+
type = lib.types.str;
+
default = lib.getIcon cfg.webBrowser.package;
+
description = "The icon name for the default web browser.";
};
};
};
···
};
desktopEntries = let
-
mkDefaultEntry = name: exec: {
+
mkDefaultEntry = name: exec: terminal: icon: {
exec = "${exec} %U";
-
icon = "${builtins.baseNameOf exec}";
+
icon =
+
if icon != ""
+
then icon
+
else "${builtins.baseNameOf exec}";
name = "Default ${name}";
-
terminal = false;
+
inherit terminal;
settings = {
NoDisplay = "true";
···
};
in
lib.mkIf cfg.forceMimeAssociations {
-
defaultAudioPlayer = mkDefaultEntry "Audio Player" cfg.audioPlayer.exec;
-
defaultEditor = mkDefaultEntry "Editor" cfg.editor.exec;
-
defaultFileManager = mkDefaultEntry "File Manager" cfg.fileManager.exec;
-
defaultImageViewer = mkDefaultEntry "Image Viewer" cfg.imageViewer.exec;
-
defaultPdfViewer = mkDefaultEntry "PDF Viewer" cfg.pdfViewer.exec;
-
defaultVideoPlayer = mkDefaultEntry "Video Player" cfg.videoPlayer.exec;
-
defaultWebBrowser = mkDefaultEntry "Web Browser" cfg.webBrowser.exec;
-
defaultArchiveViewer = mkDefaultEntry "Archive Viewer" cfg.archiveViewer.exec;
+
defaultAudioPlayer =
+
mkDefaultEntry "Audio Player" cfg.audioPlayer.exec cfg.audioPlayer.terminal cfg.audioPlayer.icon;
+
defaultEditor =
+
mkDefaultEntry "Editor" cfg.editor.exec cfg.editor.terminal cfg.editor.icon;
+
defaultFileManager =
+
mkDefaultEntry "File Manager" cfg.fileManager.exec cfg.fileManager.terminal cfg.fileManager.icon;
+
defaultImageViewer =
+
mkDefaultEntry "Image Viewer" cfg.imageViewer.exec false cfg.imageViewer.icon;
+
defaultPdfViewer =
+
mkDefaultEntry "PDF Viewer" cfg.pdfViewer.exec cfg.pdfViewer.terminal cfg.pdfViewer.icon;
+
defaultVideoPlayer =
+
mkDefaultEntry "Video Player" cfg.videoPlayer.exec false cfg.videoPlayer.icon;
+
defaultWebBrowser =
+
mkDefaultEntry "Web Browser" cfg.webBrowser.exec false cfg.webBrowser.icon;
+
defaultArchiveViewer =
+
mkDefaultEntry "Archive Viewer" cfg.archiveViewer.exec false cfg.archiveViewer.icon;
};
};
};
+30 -10
modules/home/profiles/defaultApps/mimeTypes.nix
···
];
browserFiles = [
-
"application/vnd.mozilla.xul+xml"
-
"application/x-extension-htm"
-
"application/x-extension-html"
-
"application/x-extension-shtml"
-
"application/x-extension-xht"
-
"application/x-extension-xhtml"
-
"application/xhtml+xml"
-
"text/html"
-
"text/xml"
"x-scheme-handler/chrome"
"x-scheme-handler/ftp"
"x-scheme-handler/http"
···
];
editorFiles = [
+
"application/vnd.mozilla.xul+xml"
+
"application/x-extension-htm"
+
"application/x-extension-html"
+
"application/x-extension-shtml"
+
"application/x-extension-xht"
+
"application/x-extension-xhtml"
+
"application/xhtml+xml"
+
"text/html"
+
"text/xml"
+
"application/json"
-
"application/x-shellscript"
"application/x-shellscript"
"text/markdown"
"text/plain"
"text/x-python"
+
"text/x-typescript"
+
"text/x-javascript"
+
"text/x-svelte"
+
"text/css"
+
"text/x-lua"
+
"text/x-nix"
+
"text/x-scss"
+
"application/toml"
+
"text/x-zig"
+
"text/x-gleam"
+
"text/x-glsl"
+
"text/x-gdscript"
+
"text/x-vue"
+
"text/x-go"
+
"text/x-rust"
+
"text/x-makefile"
+
"text/x-fish"
+
"text/x-elixir"
+
"text/html"
+
"application/x-yaml"
];
imageFiles = [
+47
modules/home/profiles/fixMimeTypes/default.nix
···
+
{
+
lib,
+
pkgs,
+
config,
+
...
+
}: let
+
cfg = config.myHome.profiles.fixMimeTypes;
+
+
xml = pkgs.formats.xml {};
+
+
# thank you chatgpt ig
+
makeMimeFile = {
+
type, # e.g. "text/x-typescript"
+
comment, # e.g. "TypeScript source file"
+
globs, # list of patterns: [ "*.ts" "*.tsx" ]
+
}:
+
xml.generate (builtins.replaceStrings ["/"] ["_"] "${type}.xml") {
+
"mime-info" = {
+
"@xmlns" = "http://www.freedesktop.org/standards/shared-mime-info";
+
"mime-type" = {
+
"@type" = type;
+
comment = comment;
+
glob = map (pattern: {"@pattern" = pattern;}) globs;
+
};
+
};
+
};
+
in {
+
options.myHome.profiles.fixMimeTypes = {
+
enable = lib.mkEnableOption "mimetypes are dumb and they don't always register the right formats";
+
};
+
+
config = lib.mkIf cfg.enable {
+
xdg.dataFile = {
+
"mime/packages/typescript.xml".source = makeMimeFile {
+
type = "text/x-typescript";
+
comment = "TypeScript source file";
+
globs = ["*.ts" "*.tsx" "*.mts" "*.cts"];
+
};
+
+
"mime/packages/svelte.xml".source = makeMimeFile {
+
type = "text/x-svelte";
+
comment = "Svelte source file";
+
globs = ["*.svelte" "*.svelte.ts" "*.svelte.js"];
+
};
+
};
+
};
+
}
+6
modules/home/profiles/shell/default.nix
···
l = "eza -lah";
tree = "eza --tree";
top = "btop";
+
cat = "bat -p -P";
ytmusic = "yt-dlp -f 251 --remux-video opus --embed-metadata --embed-thumbnail -o \"%(album)s/%(disc_number>0)s%(disc_number)02d-%(track_number)02d %(title)s.%(ext)s\"";
};
};
···
zellij = {
enable = true;
enableFishIntegration = false;
+
settings = {
+
theme = "onedark";
+
default_shell = "fish";
+
show_startup_tips = false;
+
};
};
zoxide = {
+1
modules/home/programs/default.nix
···
./firefox
./helium
./helix
+
./jujutsu
./lutris
./git
./micro
+21 -21
modules/home/programs/firefox/default.nix
···
{
lib,
config,
-
pkgs,
-
self,
+
#pkgs,
+
#self,
...
}: {
options.myHome.programs.firefox = {
enable = lib.mkEnableOption "firefox web browser";
mode = lib.mkOption {
-
type = lib.types.enum ["onebar" "sidebar" "default"];
-
default = "onebar";
+
type = lib.types.enum ["sidebar" "default"];
+
default = "sidebar";
description = "Firefox UI mode";
};
};
···
config.mySnippets.firefox-based.userConfig
)
-
(lib.mkIf
-
(config.myHome.programs.firefox.mode == "onebar")
-
{
-
profiles.default = {
-
settings = {
-
"onebar.collapse-URLbar" = true;
-
"onebar.conditional-navigation-buttons" = false;
-
"onebar.hide-all-URLbar-icons" = true;
-
};
-
-
userChrome = builtins.readFile self.inputs.firefox-onebar;
-
-
extensions.packages = with pkgs.nur.repos.rycee.firefox-addons; [
-
adaptive-tab-bar-colour
-
];
-
};
-
})
+
#(lib.mkIf
+
# (config.myHome.programs.firefox.mode == "onebar")
+
# {
+
# profiles.default = {
+
# settings = {
+
# "onebar.collapse-URLbar" = true;
+
# "onebar.conditional-navigation-buttons" = false;
+
# "onebar.hide-all-URLbar-icons" = true;
+
# };
+
#
+
# userChrome = builtins.readFile self.inputs.firefox-onebar;
+
#
+
# extensions.packages = with pkgs.nur.repos.rycee.firefox-addons; [
+
# adaptive-tab-bar-colour
+
# ];
+
# };
+
# })
(
if (config.myHome.programs.firefox.mode == "sidebar")
+2 -3
modules/home/programs/git/default.nix
···
config = lib.mkIf config.myHome.programs.git.enable {
programs.git = {
enable = true;
-
userName = "ayla";
-
userEmail = "ayla-git.barcode041@silomails.com";
signing = {
format = "ssh";
key = "~/.ssh/id_ed25519";
signByDefault = true;
};
-
extraConfig = {
+
settings = {
+
inherit (config.mySnippets.git) user;
color.ui = true;
github.user = "ayla6";
init = {
+60 -115
modules/home/programs/helix/default.nix
···
{
config,
lib,
-
pkgs,
...
-
}: {
+
}: let
+
editorCfg = config.mySnippets.editor;
+
+
mkHelixServer = name: srv:
+
lib.filterAttrs (_: v: v != null) {
+
inherit name;
+
command =
+
if srv.helix-command != null
+
then srv.helix-command
+
else srv.command;
+
args = srv.args or null;
+
config = srv.config or null;
+
};
+
+
mkHelixLanguage = name: lang: let
+
# this shit is so ugly
+
fmtName = lib.findFirst (x: x != null) null [
+
(lang.helix-formatter or null)
+
(lang.formatter or null)
+
];
+
+
fmt =
+
if fmtName != null
+
then editorCfg.formatters.${fmtName}
+
else null;
+
+
usesLspFormatter = fmt == null || fmt.type == "lsp";
+
+
formatter =
+
if fmt != null && fmt.type == "external"
+
then
+
lib.filterAttrs (_: v: v != null) {
+
command = fmt.command;
+
args = fmt.args;
+
}
+
else null;
+
+
fullLspList = lang.language-servers ++ lang.helix-only-language-servers;
+
+
languageServers = map (srvName:
+
lib.filterAttrs (_: v: v != null) {
+
name = srvName;
+
except-features =
+
if (usesLspFormatter && fmtName != null && srvName != fmtName)
+
then ["format"]
+
else null;
+
})
+
fullLspList;
+
in
+
lib.filterAttrs (_: v: v != null) {
+
name = lang.name;
+
auto-format = lang.auto-format;
+
language-servers = languageServers;
+
file-types = lang.file-types;
+
inherit formatter;
+
};
+
in {
options.myHome.programs.helix.enable = lib.mkEnableOption "helix";
config = lib.mkIf config.myHome.programs.helix.enable {
···
};
};
};
+
languages = {
-
language-server = {
-
bash-language-server = {
-
command = "bash-language-server";
-
args = ["start"];
-
};
-
-
vscode-css-languageserver = {
-
command = lib.getExe pkgs.vscode-css-languageserver;
-
args = ["--stdio"];
-
};
-
-
fish-lsp = {
-
command = lib.getExe pkgs.fish-lsp;
-
args = ["--stdio"];
-
};
-
-
lua-language-server = {
-
command = lib.getExe pkgs.lua-language-server;
-
args = ["--stdio"];
-
};
-
-
marksman = {
-
command = lib.getExe pkgs.marksman;
-
args = ["--stdio"];
-
};
-
-
nixd = {
-
command = lib.getExe pkgs.nixd;
-
};
-
-
vscode-json-languageserver = {
-
command = lib.getExe pkgs.vscode-json-languageserver;
-
args = ["--stdio"];
-
};
-
-
typescript-language-server = with pkgs.nodePackages; {
-
command = "${typescript-language-server}/bin/typescript-language-server";
-
args = ["--stdio" "--tsserver-path=${typescript}/lib/node_modules/typescript/lib"];
-
};
-
-
superhtml = {
-
command = lib.getExe pkgs.superhtml;
-
args = ["--stdio"];
-
};
-
};
-
-
language = [
-
{
-
name = "bash";
-
auto-format = true;
-
file-types = ["sh" "bash" "dash" "ksh" "mksh"];
-
-
formatter = {
-
command = lib.getExe pkgs.shfmt;
-
args = ["-i" "2"];
-
};
-
-
language-servers = ["bash-language-server"];
-
}
-
{
-
name = "css";
-
auto-format = true;
-
formatter = {command = lib.getExe pkgs.prettier;};
-
language-servers = ["vscode-css-languageserver"];
-
}
-
{
-
name = "fish";
-
auto-format = true;
-
language-servers = ["fish-lsp"];
-
}
-
{
-
name = "html";
-
auto-format = true;
-
formatter = {command = lib.getExe pkgs.prettier;};
-
language-servers = ["superhtml"];
-
}
-
{
-
name = "javascript";
-
auto-format = true;
-
formatter = {command = lib.getExe pkgs.prettier;};
-
language-servers = ["typescript-language-server"];
-
}
-
{
-
name = "json";
-
auto-format = true;
-
formatter = {command = lib.getExe pkgs.prettier;};
-
language-servers = ["vscode-json-languageserver"];
-
}
-
{
-
name = "lua";
-
auto-format = true;
-
formatter = {command = lib.getExe pkgs.stylua;};
-
language-servers = ["lua-language-server"];
-
}
-
{
-
name = "markdown";
-
auto-format = true;
-
formatter = {command = lib.getExe pkgs.mdformat;};
-
language-servers = ["marksman"];
-
}
-
{
-
name = "nix";
-
auto-format = true;
-
formatter = {command = lib.getExe pkgs.alejandra;};
-
language-servers = ["nixd"];
-
}
-
{
-
name = "typescript";
-
auto-format = true;
-
formatter = {command = lib.getExe pkgs.prettier;};
-
language-servers = ["typescript-language-server"];
-
}
-
];
+
language-server = lib.mapAttrs mkHelixServer editorCfg.languageServers;
+
language = lib.attrValues (lib.mapAttrs mkHelixLanguage editorCfg.languages);
};
};
};
+24
modules/home/programs/jujutsu/default.nix
···
+
{
+
lib,
+
config,
+
...
+
}: {
+
options.myHome.programs.jujutsu.enable = lib.mkEnableOption "jujutsu version control";
+
+
config = lib.mkIf config.myHome.programs.jujutsu.enable {
+
programs.jjui = {
+
enable = true;
+
};
+
programs.jujutsu = {
+
enable = true;
+
settings = {
+
inherit (config.mySnippets.git) user;
+
signing = {
+
behavior = "own";
+
backend = "ssh";
+
key = "~/.ssh/id_ed25519.pub";
+
};
+
};
+
};
+
};
+
}
+9
modules/home/programs/ssh/default.nix
···
# in
# rootMe "dewford";
+
matchBlocks = {
+
"knot.aylac.top" = {
+
user = "git";
+
# dont know if i can just link snippets knot here
+
hostname = "nanpi";
+
port = 2222;
+
};
+
};
+
package = pkgs.openssh;
};
};
+114 -64
modules/home/programs/zed-editor/default.nix
···
{
lib,
config,
-
pkgs,
...
-
}: {
+
}: let
+
editorCfg = config.mySnippets.editor;
+
+
mkZedFormatter = fmtName:
+
if fmtName == null
+
then "language_server"
+
else let
+
f = editorCfg.formatters.${fmtName};
+
in
+
if f.type == "external"
+
then {
+
external = {
+
command = f.command;
+
arguments = f.args or [];
+
};
+
}
+
else if f.type == "lsp"
+
then {language_server = {name = fmtName;};}
+
else null;
+
+
mkZedLanguage = name: lang:
+
lib.filterAttrs (_: v: v != null) {
+
formatter = mkZedFormatter lang.formatter;
+
language_servers = lang.language-servers ++ lang.zed-only-language-servers;
+
code_actions_on_format = lang.code-actions-on-format;
+
};
+
+
mkZedLsp = name: srv:
+
lib.filterAttrs (_: v: v != null) {
+
binary = lib.filterAttrs (_: v: v != null) {
+
path = srv.command;
+
arguments = srv.args or null;
+
};
+
settings = srv.config or null;
+
};
+
in {
options.myHome.programs.zed-editor.enable = lib.mkEnableOption "zed editor";
config = lib.mkIf config.myHome.programs.zed-editor.enable {
···
"nix"
"scss"
"toml"
+
"biome"
+
#"superhtml"
+
"marksman"
+
"makefile"
+
"zig"
+
"gleam"
+
"glsl"
+
"gdscript"
+
"svelte"
+
"vue"
+
"basher"
+
"sql"
+
#"ruby"
+
#"elixir"
];
userSettings = {
auto_indent_on_paste = true;
···
preferred_line_length = 100;
soft_wrap = "preferred_line_length";
+
tab_size = 2;
+
format_on_save = "on";
+
prettier = {
+
allowed = false;
+
};
+
agent = {
default_model = {
provider = "google";
···
default_profile = "ask";
};
-
languages = {
-
JavaScript = {
-
format_on_save = "on";
+
telemetry = {
+
diagnostics = false;
+
metrics = false;
+
};
-
formatter = {
-
external = {
-
command = lib.getExe pkgs.prettier;
-
arguments = ["--stdin-filepath" "{buffer_path}"];
-
};
-
};
+
languages = lib.listToAttrs (
+
lib.attrValues (
+
lib.mapAttrs (name: lang: {
+
name = lang.full-name;
+
value = mkZedLanguage name lang;
+
})
+
editorCfg.languages
+
)
+
);
+
lsp = lib.mapAttrs mkZedLsp editorCfg.languageServers;
+
};
+
userTasks = [
+
{
+
label = "jjui";
+
command = "jjui";
+
hide = "on_success";
+
use_new_terminal = true;
+
allow_concurrent_runs = false;
+
shell = {
+
program = "fish";
};
-
TypeScript = {
-
format_on_save = "on";
-
-
formatter = {
-
external = {
-
command = lib.getExe pkgs.prettier;
-
arguments = ["--stdin-filepath" "{buffer_path}"];
-
};
-
};
+
}
+
];
+
userKeymaps = [
+
{
+
context = "(vim_mode == helix_normal || vim_mode == helix_select) && !menu";
+
bindings = {
+
n = "vim::WrappingLeft";
+
e = "vim::Down";
+
i = "vim::Up";
+
o = "vim::WrappingRight";
};
-
TSX = {
-
format_on_save = "on";
-
-
formatter = {
-
external = {
-
command = lib.getExe pkgs.prettier;
-
arguments = ["--stdin-filepath" "{buffer_path}"];
-
};
-
};
+
}
+
{
+
context = "vim_mode == helix_normal && !menu";
+
bindings = {
+
j = "vim::NextWordEnd";
+
J = ["vim::NextWordEnd" {ignore_punctuation = true;}];
+
k = "vim::MoveToNextMatch";
+
K = "vim::MoveToPreviousMatch";
+
l = "vim::HelixInsert";
+
L = "vim::InsertFirstNonWhitespace";
+
h = "vim::InsertLineBelow";
+
H = "vim::InsertLineAbove";
};
-
Nix = {
-
format_on_save = "on";
-
formatter = "language_server";
-
language_servers = [
-
"nixd"
+
}
+
{
+
context = "Workspace";
+
bindings = {
+
ctrl-g = [
+
"task::Spawn"
+
{
+
task_name = "jjui";
+
reveal_target = "center";
+
}
];
};
-
JSON = {
-
format_on_save = "on";
-
-
formatter = {
-
external = {
-
command = lib.getExe pkgs.prettier;
-
arguments = ["--stdin-filepath" "{buffer_path}"];
-
};
-
};
-
};
-
CSS = {
-
format_on_save = "on";
-
-
formatter = {
-
external = {
-
command = lib.getExe pkgs.prettier;
-
arguments = ["--stdin-filepath" "{buffer_path}"];
-
};
-
};
-
};
-
};
-
lsp.nixd = {
-
binary.path = lib.getExe pkgs.nixd;
-
settings.formatting.command = [(lib.getExe pkgs.alejandra) "--quiet" "--"];
-
};
-
telemetry = {
-
diagnostics = false;
-
metrics = false;
-
};
-
};
+
}
+
];
};
};
}
+2
modules/home/snippets/default.nix
···
{...}: {
imports = [
+
./editor
./firefox-based
+
./git
];
}
+415
modules/home/snippets/editor/default.nix
···
+
{
+
lib,
+
pkgs,
+
...
+
}: let
+
# Helper function to create language server definitions
+
mkLspServer = name: {
+
command,
+
helix-command ? null,
+
args ? null,
+
config ? null,
+
}: {
+
inherit name command helix-command args config;
+
};
+
+
# Helper function to create formatter definitions
+
mkFormatter = name: {
+
type,
+
command ? null,
+
args ? null,
+
lspName ? null,
+
config ? null,
+
}: {
+
inherit name type command args lspName config;
+
};
+
+
# Helper function to create language definitions
+
mkLanguage = name: {
+
full-name ? name,
+
auto-format ? true,
+
file-types ? null,
+
language-servers ? [],
+
zed-only-language-servers ? [],
+
helix-only-language-servers ? [],
+
formatter ? null,
+
helix-formatter ? null,
+
code-actions-on-format ? null,
+
}: {
+
inherit name full-name auto-format file-types language-servers zed-only-language-servers helix-only-language-servers formatter helix-formatter code-actions-on-format;
+
};
+
in {
+
options.mySnippets.editor = lib.mkOption {
+
type = lib.types.attrs;
+
default = {};
+
description = "Editor configuration data";
+
};
+
+
config.mySnippets.editor = {
+
# Language Servers
+
languageServers = {
+
biome = mkLspServer "biome" {
+
command = lib.getExe pkgs.biome;
+
args = ["lsp-proxy"];
+
};
+
+
tailwindcss-language-server = mkLspServer "tailwindcss-language-server" {
+
command = pkgs.writeScript "tailwindcss-language-server-bun" ''
+
#!${lib.getExe pkgs.bash} -e
+
exec ${lib.getExe pkgs.bun} ${lib.getExe pkgs.tailwindcss-language-server}
+
'';
+
helix-command = let
+
fd = lib.getExe pkgs.fd;
+
xargs = "${pkgs.uutils-findutils}/bin/xargs";
+
grep = lib.getExe pkgs.gnugrep;
+
bun = lib.getExe pkgs.bun;
+
twls = lib.getExe pkgs.tailwindcss-language-server;
+
in
+
pkgs.writeScript "tailwindcss-language-server-bun-helix" ''
+
#!${lib.getExe pkgs.bash} -euo
+
+
if ! ${fd} -H -I -E "node_modules" "package\\.json$" . | \
+
${xargs} ${grep} -q '"tailwindcss"'; then
+
+
exit 0
+
fi
+
+
exec ${bun} ${twls}
+
'';
+
args = [];
+
config = {provideFormatter = false;};
+
};
+
+
vscode-html-language-server = mkLspServer "vscode-html-language-server" {
+
command = lib.getExe pkgs.bun;
+
args = ["${pkgs.vscode-langservers-extracted}/lib/node_modules/vscode-langservers-extracted/bin/vscode-html-language-server" "--stdio"];
+
};
+
+
superhtml = mkLspServer "superhtml" {
+
command = lib.getExe pkgs.superhtml;
+
args = ["lsp"];
+
};
+
+
css-language-server = mkLspServer "css-language-server" {
+
command = lib.getExe pkgs.bun;
+
args = ["${pkgs.vscode-css-languageserver}/lib/node_modules/vscode-css-languageserver/out/node/cssServerMain.js" "--stdio"];
+
};
+
+
json-language-server = mkLspServer "json-language-server" {
+
command = lib.getExe pkgs.bun;
+
args = ["${pkgs.vscode-json-languageserver}/lib/node_modules/vscode-json-languageserver/bin/vscode-json-languageserver" "--stdio"];
+
};
+
+
vtsls = mkLspServer "vtsls" {
+
command = lib.getExe pkgs.bun;
+
args = ["${pkgs.vtsls}/bin/vtsls" "--stdio"];
+
};
+
+
svelte-language-server = mkLspServer "svelte-language-server" {
+
command = lib.getExe pkgs.bun;
+
args = ["${pkgs.svelte-language-server}/lib/node_modules/svelte-language-server/bin/server.js" "--stdio"];
+
};
+
+
vue-language-server = mkLspServer "vue-language-server" {
+
command = lib.getExe pkgs.bun;
+
args = ["${pkgs.vue-language-server}/lib/language-tools/packages/language-server/bin/vue-language-server.js" "--stdio"];
+
};
+
+
bash-language-server = mkLspServer "bash-language-server" {
+
command = lib.getExe pkgs.bash-language-server;
+
args = ["start"];
+
};
+
+
fish-lsp = mkLspServer "fish-lsp" {
+
command = lib.getExe pkgs.fish-lsp;
+
args = ["start"];
+
};
+
+
nixd = mkLspServer "nixd" {
+
command = lib.getExe pkgs.nixd;
+
config.formatting.command = [(lib.getExe pkgs.alejandra) "--quiet" "--"];
+
};
+
+
nil = mkLspServer "nil" {
+
command = lib.getExe pkgs.nil;
+
args = ["--stdio"];
+
};
+
+
marksman = mkLspServer "marksman" {
+
command = lib.getExe pkgs.marksman;
+
args = ["server"];
+
};
+
+
gopls = mkLspServer "gopls" {
+
command = lib.getExe pkgs.gopls;
+
args = ["serve"];
+
};
+
+
rust-analyzer = mkLspServer "rust-analyzer" {
+
command = lib.getExe pkgs.rust-analyzer;
+
};
+
+
zls = mkLspServer "zls" {
+
command = lib.getExe pkgs.zls;
+
};
+
+
glsl_analyzer = mkLspServer "glsl_analyzer" {
+
command = lib.getExe pkgs.glsl_analyzer;
+
};
+
+
lua-language-server = mkLspServer "lua-language-server" {
+
command = lib.getExe pkgs.lua-language-server;
+
};
+
+
gleam = mkLspServer "gleam" {
+
command = lib.getExe pkgs.gleam;
+
args = ["lsp"];
+
};
+
+
gdscript-language-server = mkLspServer "gdscript-language-server" {
+
command = lib.getExe pkgs.netcat;
+
args = ["127.0.0.1" "6005"];
+
config = {language-id = "gdscript";};
+
};
+
+
solargraph = mkLspServer "solargraph" {
+
command = lib.getExe pkgs.rubyPackages.solargraph;
+
args = ["stdio"];
+
};
+
+
#rubocop = mkLspServer "rubocop" {
+
# command = lib.getExe pkgs.rubocop;
+
#};
+
};
+
+
# Formatters
+
formatters = {
+
biome = mkFormatter "biome" {
+
type = "lsp";
+
};
+
+
biomeHtml = mkFormatter "biomeHtml" {
+
type = "external";
+
command = lib.getExe pkgs.biome;
+
args = ["format" "--use-server" "--html-formatter-enabled=true" "--stdin-file-path" "{buffer_path}"];
+
};
+
+
shfmt = mkFormatter "shfmt" {
+
type = "external";
+
command = lib.getExe pkgs.shfmt;
+
args = ["-i" "2"];
+
};
+
+
alejandra = mkFormatter "alejandra" {
+
type = "external";
+
command = lib.getExe pkgs.alejandra;
+
};
+
+
mdformat = mkFormatter "mdformat" {
+
type = "external";
+
command = lib.getExe pkgs.mdformat;
+
};
+
+
stylua = mkFormatter "stylua" {
+
type = "external";
+
command = lib.getExe pkgs.stylua;
+
};
+
+
gdscript-formatter = mkFormatter "gdscript-formatter" {
+
type = "external";
+
command = lib.getExe pkgs.gdscript-formatter;
+
};
+
+
prettier = mkFormatter "prettier" {
+
type = "external";
+
command = lib.getExe pkgs.bun;
+
args = ["${pkgs.prettier}/bin/prettier.cjs" "--stdin-filepath" "{buffer_path}"];
+
};
+
};
+
+
# Languages
+
languages = {
+
html = mkLanguage "html" {
+
full-name = "HTML";
+
language-servers = ["vscode-html-language-server" "biome"];
+
zed-only-language-servers = ["!eslint" "..."];
+
helix-only-language-servers = ["tailwindcss-language-server"];
+
formatter = "biome";
+
helix-formatter = "biomeHtml";
+
code-actions-on-format = {
+
"source.fixAll.biome" = true;
+
"html.formatter.enabled.biome" = true;
+
};
+
};
+
+
css = mkLanguage "css" {
+
full-name = "CSS";
+
language-servers = ["css-language-server" "biome"];
+
zed-only-language-servers = ["..."];
+
helix-only-language-servers = ["tailwindcss-language-server"];
+
formatter = "biome";
+
code-actions-on-format = {
+
"source.fixAll.biome" = true;
+
"source.organizeImports.biome" = true;
+
};
+
};
+
+
javascript = mkLanguage "javascript" {
+
full-name = "JavaScript";
+
language-servers = ["vtsls" "biome"];
+
zed-only-language-servers = ["!eslint" "!typescript-language-server" "..."];
+
helix-only-language-servers = ["tailwindcss-language-server"];
+
formatter = "biome";
+
code-actions-on-format = {
+
"source.fixAll.biome" = true;
+
"source.organizeImports.biome" = true;
+
};
+
};
+
+
typescript = mkLanguage "typescript" {
+
full-name = "TypeScript";
+
language-servers = ["vtsls" "biome"];
+
zed-only-language-servers = ["!eslint" "!typescript-language-server" "..."];
+
helix-only-language-servers = ["tailwindcss-language-server"];
+
formatter = "biome";
+
code-actions-on-format = {
+
"source.fixAll.biome" = true;
+
"source.organizeImports.biome" = true;
+
};
+
};
+
+
jsx = mkLanguage "jsx" {
+
full-name = "JSX";
+
language-servers = ["vtsls" "biome"];
+
zed-only-language-servers = ["!eslint" "!typescript-language-server" "..."];
+
helix-only-language-servers = ["tailwindcss-language-server"];
+
formatter = "biome";
+
code-actions-on-format = {
+
"source.fixAll.biome" = true;
+
"source.organizeImports.biome" = true;
+
};
+
};
+
+
tsx = mkLanguage "tsx" {
+
full-name = "TSX";
+
language-servers = ["vtsls" "biome"];
+
zed-only-language-servers = ["!eslint" "!typescript-language-server" "..."];
+
helix-only-language-servers = ["tailwindcss-language-server"];
+
formatter = "biome";
+
code-actions-on-format = {
+
"source.fixAll.biome" = true;
+
"source.organizeImports.biome" = true;
+
};
+
};
+
+
svelte = mkLanguage "svelte" {
+
full-name = "Svelte";
+
language-servers = ["svelte-language-server" "vtsls" "biome"];
+
zed-only-language-servers = ["!eslint" "!typescript-language-server" "..."];
+
helix-only-language-servers = ["tailwindcss-language-server"];
+
formatter = "biome";
+
code-actions-on-format = {
+
"source.fixAll.biome" = true;
+
"source.organizeImports.biome" = true;
+
};
+
};
+
+
vue = mkLanguage "vue" {
+
full-name = "Vue.js";
+
language-servers = ["vue-language-server" "biome"];
+
zed-only-language-servers = ["!eslint" "!typescript-language-server" "..."];
+
helix-only-language-servers = ["tailwindcss-language-server"];
+
formatter = "biome";
+
code-actions-on-format = {
+
"source.fixAll.biome" = true;
+
"source.organizeImports.biome" = true;
+
};
+
};
+
+
json = mkLanguage "json" {
+
full-name = "JSON";
+
language-servers = ["json-language-server" "biome"];
+
formatter = "biome";
+
code-actions-on-format = {
+
"source.fixAll.biome" = true;
+
};
+
};
+
+
jsonc = mkLanguage "jsonc" {
+
full-name = "JSONC";
+
language-servers = ["json-language-server" "biome"];
+
formatter = "biome";
+
code-actions-on-format = {
+
"source.fixAll.biome" = true;
+
"source.organizeImports.biome" = true;
+
};
+
};
+
+
bash = mkLanguage "bash" {
+
full-name = "Shell Script";
+
file-types = ["sh" "bash" "dash" "ksh" "mksh"];
+
language-servers = ["bash-language-server"];
+
formatter = "shfmt";
+
};
+
+
fish = mkLanguage "fish" {
+
full-name = "Fish";
+
language-servers = ["fish-lsp"];
+
};
+
+
nix = mkLanguage "nix" {
+
full-name = "Nix";
+
language-servers = ["nixd" "nil"];
+
formatter = "alejandra";
+
};
+
+
markdown = mkLanguage "markdown" {
+
full-name = "Markdown";
+
language-servers = ["marksman"];
+
formatter = "prettier";
+
};
+
+
go = mkLanguage "go" {
+
full-name = "Go";
+
language-servers = ["gopls"];
+
};
+
+
rust = mkLanguage "rust" {
+
full-name = "Rust";
+
language-servers = ["rust-analyzer"];
+
};
+
+
zig = mkLanguage "zig" {
+
full-name = "Zig";
+
language-servers = ["zls"];
+
};
+
+
glsl = mkLanguage "glsl" {
+
full-name = "GLSL";
+
language-servers = ["glsl_analyzer"];
+
};
+
+
lua = mkLanguage "lua" {
+
full-name = "Lua";
+
language-servers = ["lua-language-server"];
+
formatter = "stylua";
+
};
+
+
gleam = mkLanguage "gleam" {
+
full-name = "Gleam";
+
language-servers = ["gleam"];
+
};
+
+
gdscript = mkLanguage "gdscript" {
+
full-name = "GDScript";
+
language-servers = ["gdscript-language-server"];
+
formatter = "gdscript-formatter";
+
};
+
+
#ruby = mkLanguage "ruby" {
+
# full-name = "Ruby";
+
# language-servers = ["solargraph" "rubocop"];
+
#};
+
};
+
};
+
}
+11
modules/home/snippets/git/default.nix
···
+
{lib, ...}: {
+
options.mySnippets.git = {
+
user = lib.mkOption {
+
type = lib.types.attrs;
+
default = {
+
name = "ayla";
+
email = "ayla-git.barcode041@silomails.com";
+
};
+
};
+
};
+
}
+1
modules/nixos/default.nix
···
./desktop
./profiles
./programs
+
./security
./services
];
}
+24
modules/nixos/desktop/cosmic/default.nix
···
+
{
+
config,
+
lib,
+
pkgs,
+
...
+
}: {
+
options.myNixOS.desktop.cosmic.enable = lib.mkEnableOption "COSMIC desktop environment";
+
+
config = lib.mkIf config.myNixOS.desktop.cosmic.enable {
+
home-manager.sharedModules = [
+
{
+
config.myHome.desktop.cosmic.enable = true;
+
}
+
];
+
+
environment.cosmic.excludePackages = with pkgs; [
+
cosmic-store
+
];
+
+
services.desktopManager.cosmic.enable = true;
+
system.nixos.tags = ["cosmic"];
+
myNixOS.desktop.enable = true;
+
};
+
}
+5 -1
modules/nixos/desktop/default.nix
···
lib,
...
}: {
-
imports = [./gnome];
+
imports = [
+
./gnome
+
./plasma
+
./cosmic
+
];
options.myNixOS.desktop.enable = lib.mkOption {
default =
+9 -11
modules/nixos/desktop/gnome/default.nix
···
}
];
-
services = {
-
desktopManager.gnome.enable = true;
-
};
+
services.desktopManager.gnome.enable = true;
environment.gnome.excludePackages = with pkgs; [
decibels
epiphany
geary # email reader
gedit # text editor
-
gnome-characters
gnome-console # in case im using something else
gnome-music
gnome-software # i like the idea but i really hate how much resources it uses
···
i18n.inputMethod.type = "ibus";
security.pam.services.greetd.enableGnomeKeyring = true;
-
services.gnome.gcr-ssh-agent.enable = true;
+
services.gnome = {
+
gcr-ssh-agent.enable = true;
+
gnome-remote-desktop.enable = lib.mkForce false;
+
};
programs = {
kdeconnect = {
-
enable = true;
-
package = pkgs.gnomeExtensions.gsconnect;
+
enable = lib.mkDefault true;
+
package = lib.mkDefault pkgs.gnomeExtensions.gsconnect;
};
};
···
];
};
-
myNixOS = {
-
desktop.enable = true;
-
services.gdm.enable = true;
-
};
+
myNixOS.desktop.enable = true;
+
system.nixos.tags = ["gnome"];
#qt = {
# enable = true;
+27
modules/nixos/desktop/plasma/default.nix
···
+
{
+
pkgs,
+
lib,
+
config,
+
...
+
}: {
+
options.myNixOS.desktop.plasma.enable = lib.mkEnableOption "use kde plasma desktop environment";
+
+
config = lib.mkIf config.myNixOS.desktop.plasma.enable {
+
home-manager.sharedModules = [
+
{
+
config.myHome.desktop.plasma.enable = true;
+
}
+
];
+
+
environment.plasma6.excludePackages = with pkgs; [
+
kdePackages.kwallet
+
kdePackages.kwallet-pam
+
kdePackages.kwalletmanager
+
kdePackages.wacomtablet
+
];
+
+
services.desktopManager.plasma6.enable = true;
+
system.nixos.tags = ["plasma"];
+
myNixOS.desktop.enable = true;
+
};
+
}
+14 -14
modules/nixos/profiles/arr/default.nix
···
reverse_proxy ${netMap.autobrr.hostName}:${toString netMap.autobrr.port}
'';
-
"${netMap.bazarr.vHost}".extraConfig = ''
-
bind tailscale/bazarr
-
encode zstd gzip
-
reverse_proxy ${netMap.bazarr.hostName}:${toString netMap.bazarr.port}
-
'';
+
#"${netMap.bazarr.vHost}".extraConfig = ''
+
# bind tailscale/bazarr
+
# encode zstd gzip
+
# reverse_proxy ${netMap.bazarr.hostName}:${toString netMap.bazarr.port}
+
#'';
"${netMap.prowlarr.vHost}".extraConfig = ''
bind tailscale/prowlarr
···
autobrr = {
enable = true;
-
openFirewall = true; # Port: 7474
+
openFirewall = false; # Port: 7474
secretFile = config.age.secrets.autobrr.path;
settings = {
host = "0.0.0.0";
···
};
};
-
bazarr = {
-
enable = true;
-
dataDir = "${cfg.dataDir}/bazarr";
-
openFirewall = true; # Port: 6767
-
};
+
#bazarr = {
+
# enable = true;
+
# dataDir = "${cfg.dataDir}/bazarr";
+
# openFirewall = true; # Port: 6767
+
#};
#lidarr = {
# enable = true;
···
prowlarr = {
enable = true;
# dataDir = "${cfg.dataDir}/prowlarr";
-
openFirewall = true; # Port: 9696
+
openFirewall = false; # Port: 9696
};
radarr = {
enable = true;
dataDir = "${cfg.dataDir}/radarr/.config/Radarr/";
-
openFirewall = true; # Port: 7878
+
openFirewall = false; # Port: 7878
};
sonarr = {
enable = true;
dataDir = "${cfg.dataDir}/sonarr/.config/NzbDrone/";
-
openFirewall = true; # Port: 8989
+
openFirewall = false; # Port: 8989
};
#flaresolverr = {
+3 -4
modules/nixos/profiles/backups/default.nix
···
}
{
name = "forgejo";
-
containerised = true;
inherit (config.services.forgejo) enable;
paths = [config.services.forgejo.stateDir];
-
backupMode = "none";
}
# {
# name = "immich";
···
}
{
name = "tangled-knot";
-
inherit (config.services.tangled-knot) enable;
-
paths = [config.services.tangled-knot.stateDir];
+
containerised = true;
+
inherit (config.myNixOS.services.tangled-knot) enable;
+
paths = ["/var/lib/nixos-containers/tangled-knot${config.containers.tangled-knot.config.services.tangled-knot.stateDir}"];
}
];
};
-6
modules/nixos/profiles/base/default.nix
···
networking.networkmanager.enable = true;
security = {
-
polkit.enable = true;
rtkit.enable = true;
-
-
sudo-rs = {
-
enable = true;
-
wheelNeedsPassword = false;
-
};
};
services = {
+2 -1
modules/nixos/profiles/default.nix
···
{...}: {
imports = [
./arr
+
./backups
./base
./btrfs
-
./backups
+
./hibernation
./workstation
./server
./autoUpgrade
+53
modules/nixos/profiles/hibernation/default.nix
···
+
{
+
config,
+
lib,
+
...
+
}: {
+
options.myNixOS.profiles.hibernation = {
+
enable = lib.mkEnableOption "enable hibernation";
+
swap = {
+
size = lib.mkOption {
+
default = 0;
+
description = "Swap size in megabytes.";
+
type = lib.types.int;
+
};
+
+
location = lib.mkOption {
+
default = "/.swap";
+
description = "Swap file location.";
+
type = lib.types.path;
+
};
+
+
keyFile = lib.mkOption {
+
default = "/.swapkey";
+
description = "Location of the encryption key.";
+
type = lib.types.path;
+
};
+
+
blkDev = lib.mkOption {
+
default = "/dev/sda1";
+
description = "Block device for swap file.";
+
type = lib.types.path;
+
};
+
};
+
};
+
+
config = lib.mkIf (config.myNixOS.profiles.hibernation.enable && config.myNixOS.profiles.hibernation.swap.size > 0) {
+
myNixOS.profiles.swap = {
+
enable = true;
+
random = false;
+
inherit (config.myNixOS.profiles.hibernation.swap) size location keyFile blkDev;
+
};
+
+
services.logind.settings.Login = {
+
HandleLidSwitch = "suspend-then-hibernate";
+
HandlePowerKey = "suspend-then-hibernate";
+
};
+
+
systemd.sleep.extraConfig = ''
+
HibernateDelaySec=15m
+
AllowSuspendThenHibernate=yes
+
HibernateOnACPower=no
+
'';
+
};
+
}
+24 -1
modules/nixos/profiles/swap/default.nix
···
description = "Swap file location.";
type = lib.types.path;
};
+
+
random = lib.mkOption {
+
default = true;
+
description = "Enable random encryption for swap file.";
+
type = lib.types.bool;
+
};
+
+
keyFile = lib.mkOption {
+
default = "/.swapkey";
+
description = "Location of the encryption key.";
+
type = lib.types.path;
+
};
+
+
blkDev = lib.mkOption {
+
default = "/dev/sda1";
+
description = "Block device for swap file.";
+
type = lib.types.path;
+
};
};
config = lib.mkIf config.myNixOS.profiles.swap.enable {
···
{
device = config.myNixOS.profiles.swap.location;
priority = 0;
-
randomEncryption.enable = true;
+
randomEncryption.enable = config.myNixOS.profiles.swap.random;
+
encrypted = lib.mkIf (!config.myNixOS.profiles.swap.random) {
+
label = "swapfile";
+
enable = true;
+
inherit (config.myNixOS.profiles.swap) keyFile blkDev;
+
};
inherit (config.myNixOS.profiles.swap) size;
}
];
+1 -3
modules/nixos/profiles/workstation/default.nix
···
};
# kernelModules = ["ntsync"];
-
kernelPackages = pkgs.linuxKernel.packages.linux_zen;
+
kernelPackages = pkgs.linuxPackages_cachyos;
};
services = {
···
enableSystemSlice = true;
enableUserSlices = true;
};
-
# i hate these guys
-
coredump.enable = false;
};
zramSwap = {
+13 -1
modules/nixos/programs/nix/default.nix
···
config,
lib,
pkgs,
+
inputs,
...
-
}: {
+
}: let
+
flakeInputs = lib.filterAttrs (name: value: (lib.isType "flake" value) && (name != "self")) inputs;
+
in {
options.myNixOS.programs.nix.enable = lib.mkEnableOption "sane nix configuration";
config = lib.mkIf config.myNixOS.programs.nix.enable {
···
persistent = true;
randomizedDelaySec = "60min";
};
+
+
# https://github.com/isabelroses/dotfiles/blob/main/modules/base/nix/nix.nix#L34-L38
+
# pin the registry to avoid downloading and evaluating a new nixpkgs version everytime
+
registry =
+
(lib.mapAttrs (_: flake: {inherit flake;}) flakeInputs)
+
// {
+
# https://github.com/NixOS/nixpkgs/pull/388090
+
nixpkgs = lib.mkForce {flake = inputs.nixpkgs;};
+
};
inherit (config.mySnippets.nix) settings;
};
+55
modules/nixos/security/apparmor.nix
···
+
# https://github.com/isabelroses/dotfiles/blob/14a191bd583b34e242ad13a0164a3c32c506c655/modules/nixos/security/apparmor.nix
+
{
+
lib,
+
pkgs,
+
config,
+
...
+
}: let
+
inherit (lib) getExe;
+
in {
+
services.dbus.apparmor = "disabled";
+
+
# apparmor configuration
+
security.apparmor = {
+
enable = true;
+
+
# whether to enable the AppArmor cache
+
# in /var/cache/apparmore
+
enableCache = true;
+
+
# whether to kill processes which have an AppArmor profile enabled
+
# but are not confined
+
killUnconfinedConfinables = true;
+
+
# packages to be added to AppArmorโ€™s include path
+
packages = [pkgs.apparmor-profiles];
+
+
# apparmor policies
+
policies = {
+
"default_deny" = {
+
state = "disable";
+
profile = ''
+
profile default_deny /** { }
+
'';
+
};
+
+
"sudo" = {
+
state = "disable";
+
profile = ''
+
${getExe pkgs.sudo} {
+
file /** rwlkUx,
+
}
+
'';
+
};
+
+
"nix" = {
+
state = "disable";
+
profile = ''
+
${getExe config.nix.package} {
+
unconfined,
+
}
+
'';
+
};
+
};
+
};
+
}
+67
modules/nixos/security/default.nix
···
+
{...}: {
+
imports = [
+
./apparmor.nix
+
./pam.nix
+
./polkit.nix
+
./sudo.nix
+
];
+
+
boot.blacklistedKernelModules = [
+
# Obscure network protocols
+
"ax25"
+
"netrom"
+
"rose"
+
"dccp"
+
"sctp"
+
"rds"
+
"tipc"
+
"n-hdlc"
+
"x25"
+
"decnet"
+
"econet"
+
"af_802154"
+
"ipx"
+
"appletalk"
+
"psnap"
+
"p8023"
+
"p8022"
+
"can"
+
"atm"
+
+
# Old or rare or insufficiently audited filesystems
+
"adfs"
+
"affs"
+
"bfs"
+
"befs"
+
"cramfs"
+
"efs"
+
"erofs"
+
"exofs"
+
"freevxfs"
+
"f2fs"
+
"hfs"
+
"hpfs"
+
"jfs"
+
"minix"
+
"nilfs2"
+
#"ntfs"
+
"omfs"
+
"qnx4"
+
"qnx6"
+
"sysv"
+
"ufs"
+
# Various rare filesystems
+
"jffs2"
+
"hfsplus"
+
#"squashfs"
+
"udf"
+
"cifs"
+
"nfs"
+
"nfsv3"
+
"nfsv4"
+
"gfs2"
+
# vivid driver is only useful for testing purposes and has been the cause
+
# of privilege escalation vulnerabilities
+
"vivid"
+
];
+
}
+7
modules/nixos/security/pam.nix
···
+
{
+
security.pam = {
+
services.login = {
+
failDelay.enable = true;
+
};
+
};
+
}
+3
modules/nixos/security/polkit.nix
···
+
{
+
security.polkit.enable = true;
+
}
+13
modules/nixos/security/sudo.nix
···
+
{
+
security.sudo-rs = {
+
enable = true;
+
wheelNeedsPassword = false;
+
execWheelOnly = true;
+
+
extraConfig = ''
+
Defaults !lecture
+
Defaults env_keep += "EDITOR PATH DISPLAY"
+
Defaults timestamp_timeout = 30
+
'';
+
};
+
}
+1 -1
modules/nixos/services/caddy/default.nix
···
package = pkgs.caddy.withPlugins {
plugins = ["github.com/tailscale/caddy-tailscale@v0.0.0-20250508175905-642f61fea3cc"];
-
hash = "sha256-r68btTv8N7X/pKwGkP8FWg371rt+bZETXdEN0/ZlFJI=";
+
hash = "sha256-r9EDkhcgwK11dB46AV+Em8ZE6Aa7IDMwibDGkg3e/rc=";
};
};
tailscale.permitCertUid = "caddy";
+2
modules/nixos/services/default.nix
···
./ntfy
./pds
./postgresql
+
./privatebin
./qbittorrent
./radicale
./redlib
+
./sddm
./syncthing
./tailscale
./tangled-knot
-21
modules/nixos/services/forgejo/default.nix
···
-
# damn this is really messy
{
config,
lib,
···
options.myNixOS.services.${name} = {
enable = lib.mkEnableOption "forgejo git forge";
-
db = lib.mkOption {
-
description = "Database to use (sqlite or postgresql).";
-
default = "sqlite";
-
type = lib.types.str;
-
};
-
autoProxy = lib.mkOption {
default = true;
example = false;
···
config = lib.mkIf cfg.enable {
age.secrets.cloudflareFail2ban.file = "${self.inputs.secrets}/cloudflare/fail2ban.age";
-
myNixOS.services.postgresql = lib.mkIf (cfg.db == "postgresql") {
-
enable = true;
-
databases = ["forgejo"];
-
};
-
services = {
cloudflared.tunnels."${network.cloudflareTunnel}".ingress = lib.mkIf cfg.autoProxy {
"${service.vHost}" = "http://${service.hostName}:${toString service.port}";
···
forgejo = {
enable = true;
-
-
database = lib.mkIf (cfg.db == "postgresql") {
-
createDatabase = true;
-
host = "127.0.0.1";
-
name = "forgejo";
-
passwordFile = config.age.secrets.postgres-forgejo.path;
-
type = "postgres";
-
user = "forgejo";
-
};
lfs.enable = true;
package = pkgs.forgejo;
+7 -7
modules/nixos/services/glance/default.nix
···
glance = {
enable = true;
-
openFirewall = true;
+
openFirewall = false;
settings = {
pages = [
···
check-url = "http://${tailnet.networkMap.prowlarr.hostName}:${toString tailnet.networkMap.prowlarr.port}/";
icon = "di:prowlarr";
}
-
{
-
title = "Bazarr";
-
url = "https://${tailnet.networkMap.bazarr.vHost}/";
-
check-url = "http://${tailnet.networkMap.bazarr.hostName}:${toString tailnet.networkMap.bazarr.port}/";
-
icon = "di:bazarr";
-
}
+
#{
+
# title = "Bazarr";
+
# url = "https://${tailnet.networkMap.bazarr.vHost}/";
+
# check-url = "http://${tailnet.networkMap.bazarr.hostName}:${toString tailnet.networkMap.bazarr.port}/";
+
# icon = "di:bazarr";
+
#}
{
title = "Autobrr";
url = "https://${tailnet.networkMap.autobrr.vHost}/";
+94
modules/nixos/services/privatebin/default.nix
···
+
{
+
config,
+
lib,
+
pkgs,
+
...
+
}: let
+
name = "privatebin";
+
cfg = config.myNixOS.services.${name};
+
+
network = config.mySnippets.aylac-top;
+
service = network.networkMap.${name};
+
+
package = pkgs.privatebin-ayla;
+
in {
+
options.myNixOS.services.${name} = {
+
enable = lib.mkEnableOption "${name} server";
+
autoProxy = lib.mkOption {
+
default = true;
+
example = false;
+
description = "${name} auto proxy";
+
type = lib.types.bool;
+
};
+
};
+
+
config = lib.mkIf cfg.enable {
+
services = {
+
cloudflared.tunnels."${network.cloudflareTunnel}".ingress = lib.mkIf cfg.autoProxy {
+
"${service.vHost}" = "http://localhost:${toString service.port}";
+
};
+
+
nginx = {
+
enable = true;
+
recommendedTlsSettings = lib.mkDefault true;
+
recommendedOptimisation = lib.mkDefault true;
+
recommendedGzipSettings = lib.mkDefault true;
+
virtualHosts."${config.services.privatebin.virtualHost}" = {
+
root = "${package}";
+
locations = {
+
"/" = {
+
tryFiles = "$uri $uri/ /index.php?$query_string";
+
index = "index.php";
+
extraConfig = ''
+
sendfile off;
+
'';
+
};
+
"~ \\.php$" = {
+
extraConfig = ''
+
include ${config.services.nginx.package}/conf/fastcgi_params ;
+
fastcgi_param SCRIPT_FILENAME $request_filename;
+
fastcgi_param modHeadersAvailable true; #Avoid sending the security headers twice
+
fastcgi_pass unix:${config.services.phpfpm.pools.privatebin.socket};
+
'';
+
};
+
};
+
listen = [
+
{
+
addr = "localhost";
+
inherit (service) port;
+
}
+
];
+
};
+
};
+
+
privatebin = {
+
inherit package;
+
enable = true;
+
group = "nginx";
+
settings = {
+
main = {
+
name = "ayla's trashbin";
+
basepath = "https://${service.vHost}/";
+
discussion = true;
+
opendiscussion = false;
+
discussiondatedisplay = true;
+
password = true;
+
fileupload = true;
+
burnafterreadingselected = false;
+
defaultformatter = "plaintext";
+
syntaxhighlightingtheme = "sons-of-obsidian";
+
qrcode = true;
+
template = "bootstrap-dark";
+
};
+
model.class = "Database";
+
model_options = {
+
dsn = "sqlite:/var/lib/privatebin/data/db.sq3";
+
usr = null;
+
pwd = null;
+
"opt[12]" = true;
+
};
+
};
+
};
+
};
+
};
+
}
+1 -1
modules/nixos/services/redlib/default.nix
···
redlib = {
enable = true;
-
openFirewall = true;
+
openFirewall = false;
inherit (service) port;
settings = {
ENABLE_RSS = "on";
+40
modules/nixos/services/sddm/default.nix
···
+
{
+
config,
+
lib,
+
...
+
}: {
+
options.myNixOS.services.sddm = {
+
enable = lib.mkEnableOption "use sddm";
+
+
autoLogin = lib.mkOption {
+
description = "User to autologin.";
+
default = null;
+
type = lib.types.nullOr lib.types.str;
+
};
+
};
+
+
config = lib.mkIf config.myNixOS.services.sddm.enable {
+
security.pam.services.sddm = {
+
enableGnomeKeyring = true;
+
gnupg.enable = true;
+
kwallet.enable = false;
+
};
+
+
services = {
+
displayManager = {
+
autoLogin = lib.mkIf (config.myNixOS.services.sddm.autoLogin != null) {
+
enable = true;
+
user = config.myNixOS.services.sddm.autoLogin;
+
};
+
+
sddm = {
+
enable = true;
+
wayland = {
+
enable = true;
+
compositor = "kwin";
+
};
+
};
+
};
+
};
+
};
+
}
+38 -21
modules/nixos/services/tangled-knot/default.nix
···
{
config,
lib,
+
self,
...
}: let
name = "tangled-knot";
···
config = lib.mkIf cfg.enable {
services = {
-
caddy.virtualHosts = lib.mkIf cfg.autoProxy {
-
"${service.vHost}" = {
-
extraConfig = ''
-
encode gzip zstd
-
reverse_proxy ${service.hostName}:${toString service.port}
-
'';
+
cloudflared.tunnels."${network.cloudflareTunnel}".ingress = lib.mkIf cfg.autoProxy {
+
"${service.vHost}" = "http://localhost:${toString service.port}";
+
};
+
};
+
+
containers.tangled-knot = {
+
autoStart = true;
+
config = {
+
imports = [self.inputs.tangled-core.nixosModules.knot];
+
+
programs.ssh.knownHosts = config.mySnippets.ssh.knownHosts;
+
+
services.openssh = {
+
ports = [service.sshPort];
+
settings = {
+
PasswordAuthentication = false;
+
PubkeyAuthentication = true;
+
};
};
-
"ssh.${service.vHost}" = {
-
extraConfig = ''
-
encode gzip zstd
-
reverse_proxy ${service.hostName}:22
-
'';
+
users.users.git.openssh.authorizedKeys.keyFiles =
+
lib.map (file: "${self.inputs.secrets}/publicKeys/${file}")
+
# right now this config is fine but if i ever get another machine i daily drive or a build server i need to do something else here
+
(lib.filter (file:
+
if config.networking.hostName == "morgana"
+
then "ayla_m23.pub" == file
+
else (lib.elem file ["ayla_morgana.pub" "ayla_23.pub"]))
+
(builtins.attrNames (builtins.readDir "${self.inputs.secrets}/publicKeys")));
+
+
services.tangled-knot = {
+
enable = true;
+
openFirewall = cfg.autoProxy;
+
stateDir = "/var/lib/knot";
+
server = {
+
owner = "did:plc:3c6vkaq7xf5kz3va3muptjh5";
+
hostname = service.vHost;
+
listenAddr = "localhost:${toString service.port}";
+
};
};
-
};
-
tangled-knot = {
-
enable = true;
-
openFirewall = true;
-
stateDir = "/home/git";
-
server = {
-
owner = "did:plc:3c6vkaq7xf5kz3va3muptjh5";
-
hostname = service.vHost;
-
listenAddr = "0.0.0.0:${toString service.port}";
-
};
+
system.stateVersion = "25.11";
};
};
};
+8 -1
modules/snippets/aylac-top/default.nix
···
};
tangled-knot = {
-
hostName = "jezebel";
+
hostName = "nanpi";
port = 5555;
+
sshPort = 2222;
vHost = "knot.aylac.top";
+
};
+
+
privatebin = {
+
hostName = "nanpi";
+
port = 7748;
+
vHost = "bin.aylac.top";
};
};
};
+53
modules/snippets/nix/settings.nix
···
+
# https://github.com/isabelroses/dotfiles/blob/main/modules/base/nix/nix.nix
{lib, ...}: {
options = {
mySnippets.nix.settings = lib.mkOption {
···
"flakes"
"nix-command"
"recursive-nix"
+
+
# Allows Nix to automatically pick UIDs for builds, rather than creating nixbld* user accounts
+
# which is BEYOND annoying, which makes this a really nice feature to have
+
"auto-allocate-uids"
+
+
# allows Nix to execute builds inside cgroups
+
# remember you must also enable use-cgroups in the nix.conf or settings
+
"cgroups"
+
+
# enable the use of the fetchClosure built-in function in the Nix language.
+
"fetch-closure"
];
substituters = [
···
];
trusted-users = ["@admin" "@wheel" "nixbuild"];
+
+
# Free up to 20GiB whenever there is less than 5GB left.
+
# this setting is in bytes, so we multiply with 1024 by 3
+
min-free = 5 * 1024 * 1024 * 1024;
+
max-free = 20 * 1024 * 1024 * 1024;
+
+
# automatically optimise symlinks
+
# Disable auto-optimise-store because of this issue:
+
# https://github.com/NixOS/nix/issues/7273
+
# but we use lix which has a fix for this issue:
+
# https://gerrit.lix.systems/c/lix/+/2100
+
auto-optimise-store = true;
+
+
# we don't want to track the registry, but we do want to allow the usage
+
# of the `flake:` references, so we need to enable use-registries
+
use-registries = true;
+
flake-registry = "";
+
+
# let the system decide the number of max jobs
+
max-jobs = "auto";
+
+
# this defaults to true, however it slows down evaluation so maybe we should disable it
+
# some day, but we do need it for catppuccin/nix so maybe not too soon
+
allow-import-from-derivation = true;
+
+
# for direnv GC roots
+
keep-derivations = true;
+
keep-outputs = true;
+
+
# use xdg base directories for all the nix things
+
use-xdg-base-directories = true;
+
# don't warn me if the current working tree is dirty
+
# i don't need the warning because i'm working on it right now
+
warn-dirty = false;
+
+
# maximum number of parallel TCP connections used to fetch imports and binary caches, 0 means no limit
+
http-connections = 50;
+
+
# whether to accept nix configuration from a flake without prompting
+
# littrally a CVE waiting to happen <https://x.com/puckipedia/status/1693927716326703441>
+
accept-flake-config = false;
};
};
};
+20
modules/snippets/syncthing/folders.nix
···
id = "obsidian";
path = "/home/ayla/Documents/Obsidian";
};
+
+
"Phone ROMs" = {
+
devices = [
+
"morgana"
+
"m23"
+
];
+
+
id = "2jcyv-esxcu";
+
path = "/data/Phone ROMs";
+
};
+
+
"RetroArch Saves" = {
+
devices = [
+
"morgana"
+
"m23"
+
];
+
+
id = "guhfs-4e5qf";
+
path = "/home/ayla/.var/app/org.libretro.RetroArch/config/retroarch/saves";
+
};
};
};
};