tree-wide: format with nixfmt

Another saturday another useless formatter change.
It's my dotfiles, after all

alejandra doesn't handle c-style inline comments well.
This commit is contained in:
Primrose 2025-11-08 10:15:58 +08:00
parent ec704b5272
commit ebf8468807
Signed by: primrose
GPG key ID: 4E887A4CA9714ADA
116 changed files with 1895 additions and 1689 deletions

View file

@ -1,9 +1,14 @@
{sources ? import ./npins}: {
{
sources ? import ./npins,
}:
{
# for repl sessions
inherit sources;
lib = import (sources.nixpkgs + "/lib");
nixosConfigurations = builtins.mapAttrs (_: import (sources.nixpkgs + "/nixos/lib/eval-config.nix")) {
nixosConfigurations =
builtins.mapAttrs (_: import (sources.nixpkgs + "/nixos/lib/eval-config.nix"))
{
vanadium = {
system = "x86_64-linux";
modules = [ ./nix/configurations/vanadium.nix ];

View file

@ -10,9 +10,11 @@ in
pkgs,
lib,
...
}: let
}:
let
inherit (lib.modules) mkAliasOptionModule;
in {
in
{
imports = [
# The generator and hardware configuration
(modulesPath + "/installer/sd-card/sd-image-aarch64.nix")

View file

@ -1,4 +1,5 @@
{pkgs, ...}: {
{ pkgs, ... }:
{
home.packages = [
pkgs.nil # nix
pkgs.pyright # python

View file

@ -3,10 +3,13 @@
lib,
config,
...
}: {
home.sessionVariables = let
}:
{
home.sessionVariables =
let
fishCfg = config.programs.fish;
in {
in
{
"SHELL" = lib.mkIf fishCfg.enable (lib.getExe fishCfg.package);
};

View file

@ -2,7 +2,8 @@
config,
lib,
...
}: {
}:
{
users.users.root.openssh.authorizedKeys.keys = import ../../../identities.nix;
networking = {
@ -22,13 +23,12 @@
userControlled.enable = true;
secretsFile = config.age.secrets.wpa_password.path;
scanOnLowSignal = false;
networks = let
networks =
let
fromList = import ../../../networks/wpa_supplicant-compat.nix;
networks = import ../../../networks/list.nix;
in
fromList (
builtins.filter (x: x.ssid == "~") networks
);
fromList (builtins.filter (x: x.ssid == "~") networks);
};
};

View file

@ -13,8 +13,7 @@
# modprobe: FATAL: Module sun4i-drm not found in directory /nix/store/gvvwpdckzcr4iamp1iyrqw3nzb7bg6c4-linux-rpi-6.6.51-stable_20241008-modules/lib/modules/6.6.51
nixpkgs.overlays = [
(final: prev: {
makeModulesClosure = x:
prev.makeModulesClosure (x // {allowMissing = true;});
makeModulesClosure = x: prev.makeModulesClosure (x // { allowMissing = true; });
})
];
}

View file

@ -1,4 +1,5 @@
{pkgs, ...}: {
{ pkgs, ... }:
{
environment.systemPackages = [
pkgs.man-pages
pkgs.man-pages-posix

View file

@ -9,7 +9,8 @@
lib,
modulesPath,
...
}: {
}:
{
imports = [
../nixosModules/common/system-nixconf.nix
../nixosModules/common/sudo-conf.nix
@ -20,8 +21,13 @@
nix.settings = {
extra-substituters = [ "https://leana8959.cachix.org" ];
extra-trusted-substituters = [ "https://leana8959.cachix.org" ];
extra-trusted-public-keys = ["leana8959.cachix.org-1:CxQSAp8lcgMv8Me459of0jdXRW2tcyeYRKTiiUq8z0M="];
experimental-features = ["nix-command" "flakes"];
extra-trusted-public-keys = [
"leana8959.cachix.org-1:CxQSAp8lcgMv8Me459of0jdXRW2tcyeYRKTiiUq8z0M="
];
experimental-features = [
"nix-command"
"flakes"
];
};
nixpkgs = {

View file

@ -10,9 +10,11 @@ in
lib,
pkgs,
...
}: let
}:
let
inherit (lib.modules) mkAliasOptionModule;
in {
in
{
imports = [
#
# Shorthands

View file

@ -3,7 +3,8 @@
lib,
config,
...
}: {
}:
{
home.packages = [
# preview markdown
pkgs.python3Packages.grip
@ -42,7 +43,8 @@
"haskell/cabal"
];
};
includes = let
includes =
let
fromList = import ../../../git-identities/git-compat.nix;
identities = import ../../../git-identities/list.nix;
in

View file

@ -2,9 +2,11 @@
pkgs,
config,
...
}: let
}:
let
inherit (pkgs) nur;
in {
in
{
programs.firefox = {
enable = true;
@ -106,9 +108,11 @@ in {
font-family: monospace;
}
'';
extensions.packages = let
extensions.packages =
let
addons = nur.repos.rycee.firefox-addons;
in [
in
[
addons.sponsorblock
addons.return-youtube-dislikes
addons.consent-o-matic
@ -117,15 +121,16 @@ in {
junk = {
id = 1;
inherit
(config.programs.firefox.profiles.default)
inherit (config.programs.firefox.profiles.default)
settings
userChrome
;
extensions.packages = let
extensions.packages =
let
addons = nur.repos.rycee.firefox-addons;
in [addons.multi-account-containers];
in
[ addons.multi-account-containers ];
containers = {
raisin = {
@ -144,15 +149,16 @@ in {
# Isolate it because it's proprietary
tampermonkey = {
id = 2;
inherit
(config.programs.firefox.profiles.default)
inherit (config.programs.firefox.profiles.default)
settings
userChrome
;
extensions.packages = let
extensions.packages =
let
addons = nur.repos.rycee.firefox-addons;
in [addons.tampermonkey];
in
[ addons.tampermonkey ];
};
};
};

View file

@ -3,14 +3,18 @@
lib,
nixosConfig ? { },
...
}: {
}:
{
#
# fonts
#
fonts.fontconfig = {
enable = true;
defaultFonts = lib.mapAttrsRecursive (_: v: v ++ [ "Last Resort" ]) {
sansSerif = ["Ubuntu" "Noto Sans CJK TC"];
sansSerif = [
"Ubuntu"
"Noto Sans CJK TC"
];
serif = [ "Noto Serif CJK TC" ];
monospace = [ "Iosevka" ];
emoji = [ "Noto Color Emoji" ];
@ -39,8 +43,7 @@
x11.enable = true;
gtk.enable = true;
inherit
(nixosConfig.services.xserver.displayManager.lightdm.greeters.gtk.cursorTheme)
inherit (nixosConfig.services.xserver.displayManager.lightdm.greeters.gtk.cursorTheme)
name
package
size

View file

@ -3,14 +3,17 @@
lib,
config,
...
}: {
}:
{
home.sessionPath = [
"${config.home.homeDirectory}/.local/bin"
];
home.sessionVariables = let
home.sessionVariables =
let
fishCfg = config.programs.fish;
in {
in
{
"SHELL" = lib.mkIf fishCfg.enable (lib.getExe fishCfg.package);
};
@ -37,9 +40,7 @@
# lol
pkgs.macchanger
/*
The file picker is not ergonomic enough, sadly
*/
# The file picker is not ergonomic enough, sadly
# pkgs.helix
# pkgs.nushell

View file

@ -1,5 +1,7 @@
{pkgs, ...}: {
home.packages = let
{ pkgs, ... }:
{
home.packages =
let
inherit (pkgs) lib;
ghc = pkgs.haskellPackages.ghc.withPackages (haskellPackages: [
@ -12,10 +14,16 @@
buildInputs = [ pkgs.makeWrapper ];
postBuild = ''
wrapProgram $out/bin/xmobar \
--prefix PATH : "${lib.makeBinPath [ghc pkgs.libnotify]}"
--prefix PATH : "${
lib.makeBinPath [
ghc
pkgs.libnotify
]
}"
'';
};
in [
in
[
wrapped-xmobar
];

View file

@ -1,6 +1,8 @@
final: prev: let
final: prev:
let
inherit (final) lib;
in {
in
{
linuxPackages = final.linuxPackagesFor (
prev.linuxPackages.kernel.override {
# TODO: The error message is quite unintuitive, maybe improve it?

View file

@ -3,12 +3,16 @@
pkgs,
lib,
...
}: {
}:
{
# For nautilius and iOS
services.gvfs.enable = true;
# iOS
services.usbmuxd.enable = true;
environment.systemPackages = with pkgs; [libimobiledevice idevicerestore];
environment.systemPackages = with pkgs; [
libimobiledevice
idevicerestore
];
# https://unix.stackexchange.com/questions/592775/how-can-i-enable-apple-ios-fast-charge-support
services.udev.extraRules = ''
@ -34,7 +38,8 @@
userControlled.enable = true;
secretsFile = config.age.secrets.wpa_password.path;
scanOnLowSignal = false;
networks = let
networks =
let
fromList = import ../../../networks/wpa_supplicant-compat.nix;
networks = import ../../../networks/list.nix;
in

View file

@ -2,7 +2,8 @@
pkgs,
lib,
...
}: {
}:
{
imports = [
#
# builtin screen
@ -33,13 +34,18 @@
"20_xmonad" = "${lib.getExe pkgs.haskellPackages.xmonad} --restart"; # make sure feh keeps up
};
profiles = let
profiles =
let
singleton = k: v: { ${k} = v; };
fingerprints = {
built-in = singleton "eDP-1" "00ffffffffffff0009e5ca0b000000002f200104a51c137803de50a3544c99260f505400000001010101010101010101010101010101115cd01881e02d50302036001dbe1000001aa749d01881e02d50302036001dbe1000001a000000fe00424f452043510a202020202020000000fe004e4531333546424d2d4e34310a0073";
amethyst = device: singleton device "00ffffffffffff0006b35b27010101012c210103803c22782a29d5ad4f44a7240f5054bfef00714f81809500d1c0d1e8d1fc01010101565e00a0a0a029503020350055502100001a000000fd0030901edf3c000a202020202020000000fc005647323741514c33410a202020000000ff0052414c4d51533139373533370a0111020347f14a90030204014061603f1f230907078301000067030c002000384468d85dc401788003026d1a000002013090f00069096909e305ff01e6060701696900e2006ae20fc0eae70070a0a067500820980455502100001a6fc200a0a0a055503020350055502100001a5aa000a0a0a046503020350055502100001a0000bc";
orchid = device: singleton device "00ffffffffffff0004699a24642900002416010380341d782a2ac5a4564f9e280f5054b7ef00714f814081809500b300d1c081c08100023a801871382d40582c450009252100001e000000ff0043394c4d54463031303539360a000000fd00324b185311000a202020202020000000fc00415355532056533234370a20200173020322714f0102031112130414050e0f1d1e1f10230917078301000065030c0010008c0ad08a20e02d10103e9600092521000018011d007251d01e206e28550009252100001e011d00bc52d01e20b828554009252100001e8c0ad090204031200c4055000925210000180000000000000000000000000000000000000000005d";
amethyst =
device:
singleton device "00ffffffffffff0006b35b27010101012c210103803c22782a29d5ad4f44a7240f5054bfef00714f81809500d1c0d1e8d1fc01010101565e00a0a0a029503020350055502100001a000000fd0030901edf3c000a202020202020000000fc005647323741514c33410a202020000000ff0052414c4d51533139373533370a0111020347f14a90030204014061603f1f230907078301000067030c002000384468d85dc401788003026d1a000002013090f00069096909e305ff01e6060701696900e2006ae20fc0eae70070a0a067500820980455502100001a6fc200a0a0a055503020350055502100001a5aa000a0a0a046503020350055502100001a0000bc";
orchid =
device:
singleton device "00ffffffffffff0004699a24642900002416010380341d782a2ac5a4564f9e280f5054b7ef00714f814081809500b300d1c081c08100023a801871382d40582c450009252100001e000000ff0043394c4d54463031303539360a000000fd00324b185311000a202020202020000000fc00415355532056533234370a20200173020322714f0102031112130414050e0f1d1e1f10230917078301000065030c0010008c0ad08a20e02d10103e9600092521000018011d007251d01e206e28550009252100001e011d00bc52d01e20b828554009252100001e8c0ad090204031200c4055000925210000180000000000000000000000000000000000000000005d";
};
devices = rec {
@ -50,14 +56,16 @@
};
switches = {
setDPI = {dpi}:
setDPI =
{ dpi }:
singleton "10_xrdb-dpi" "${lib.getExe pkgs.xorg.xrdb} -merge ${pkgs.writeText "xrdb-dpi-config" ''
Xcursor.size: 64
Xft.dpi: ${toString dpi}
''}";
# Is scoped to an output device, no need to be called on built-in display
setSoftwareBrightness = {
setSoftwareBrightness =
{
device, # obtain with `xrandr`
brightness, # [0..1]
}:
@ -66,27 +74,35 @@
'';
# Is scoped to an output device, no need to be called on built-in display
setDDCBrightness = {
setDDCBrightness =
{
modelName, # obtain with `ddcutil detect`
brightness, # [0..1]
}:
singleton "10_ddc_brightness" ''
${lib.getExe pkgs.ddcutil} --model ${modelName} setvcp 10 ${toString (builtins.floor (brightness * 100))}
${lib.getExe pkgs.ddcutil} --model ${modelName} setvcp 10 ${
toString (builtins.floor (brightness * 100))
}
'';
setDDCContrast = {
setDDCContrast =
{
modelName, # obtain with `ddcutil detect`
contrast, # [0..1]
}:
singleton "10_ddc_contrast" ''
${lib.getExe pkgs.ddcutil} --model ${modelName} setvcp 12 ${toString (builtins.floor (contrast * 100))}
${lib.getExe pkgs.ddcutil} --model ${modelName} setvcp 12 ${
toString (builtins.floor (contrast * 100))
}
'';
};
# Note: the "position" field corresponds to the "pos" field outputted by autorandr
# To get the current config, run `xrandr --auto` and then `autorandr --config`
configs = {
allOff = lib.genAttrs devices.all (_: {enable = lib.mkDefault false;});
allOff = lib.genAttrs devices.all (_: {
enable = lib.mkDefault false;
});
enableBuiltin = {
eDP-1 = {
enable = true;

View file

@ -2,7 +2,8 @@
config,
pkgs,
...
}: {
}:
{
services.btrfs.autoScrub = {
enable = true;
fileSystems = [
@ -53,7 +54,8 @@
sgbk /dev/disk/by-uuid/21b5207e-c3cf-49da-b944-fb405ae1eee2 ${config.age.secrets.sgbk_pwd.path} noauto
'';
systemd.mounts = let
systemd.mounts =
let
bindToCryptDev = dev: {
what = "/dev/mapper/${dev}";
where = "/mnt/${dev}";
@ -63,7 +65,8 @@
PropagatesStopTo = [ "systemd-cryptsetup@${dev}.service" ];
};
};
in [
in
[
(bindToCryptDev "four")
(bindToCryptDev "two")
(bindToCryptDev "sgbk")

View file

@ -2,7 +2,8 @@
pkgs,
lib,
...
}: {
}:
{
services.xserver.windowManager.xmonad = {
enable = true;
enableContribAndExtras = true;

View file

@ -7,12 +7,17 @@
pkgs,
modulesPath,
...
}: {
}:
{
imports = [
(modulesPath + "/installer/scan/not-detected.nix")
];
boot.initrd.availableKernelModules = ["nvme" "xhci_pci" "thunderbolt"];
boot.initrd.availableKernelModules = [
"nvme"
"xhci_pci"
"thunderbolt"
];
boot.initrd.kernelModules = [ "dm-snapshot" ];
boot.kernelModules = [ "kvm-amd" ];
boot.extraModulePackages = [ ];

View file

@ -1,4 +1,5 @@
{lib, ...}: {
{ lib, ... }:
{
# https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
# `timedatectl list-timezones`
time.timeZone = "Asia/Taipei";

View file

@ -1,4 +1,5 @@
{config, ...}: {
{ config, ... }:
{
system.stateVersion = "24.11";
boot.loader = {

View file

@ -2,7 +2,8 @@
lib,
pkgs,
...
}: {
}:
{
imports = [
#
# Docker

View file

@ -1,12 +1,15 @@
{config, ...}: {
services.restic.backups = let
{ config, ... }:
{
services.restic.backups =
let
pruneOpts = [
"--keep-daily 7"
"--keep-weekly 4"
"--keep-monthly 12"
"--keep-yearly 10"
];
in {
in
{
"backblaze" = {
paths = [
"/home/leana/Documents"

View file

@ -1,6 +1,8 @@
{lib, ...}: {
{ lib, ... }:
{
nixpkgs.config.allowUnfreePredicate = lib.mkDefault (
pkg: let
pkg:
let
name = lib.getName pkg;
in
builtins.elem name [

View file

@ -35,7 +35,8 @@ in
# TODO:
# pinned branch of https://github.com/astrand/xclip/tree/xerror
# use this until #43 gets resolved properly
xclip.__output.src = _:
xclip.__output.src =
_:
final.fetchFromGitHub {
owner = "astrand";
repo = "xclip";
@ -67,13 +68,14 @@ in
# Backport has failed in upstream currently <https://github.com/NixOS/nixpkgs/pull/457804>,
# might as well patch it while people are blogging about it <https://github.com/Xe/site/pull/1062>
# Upstream talks about it here https://lists.x.org/archives/xorg-announce/2025-October/003635.html
xorg.xorgserver.__output.version = oldVersion: let
xorg.xorgserver.__output.version =
oldVersion:
let
version = "21.1.20";
in
if oldVersion == version
then throw "This patch has been merged upstream"
else version;
xorg.xorgserver.__output.src = _:
if oldVersion == version then throw "This patch has been merged upstream" else version;
xorg.xorgserver.__output.src =
_:
final.fetchurl {
url = "mirror://xorg/individual/xserver/xorg-server-21.1.20.tar.xz";
sha256 = "sha256-dpW8YYJLOoG2utL3iwVADKAVAD3kAtGzIhFxBbcC6Tc=";

View file

@ -4,8 +4,11 @@
let
sources = import ../../npins;
in
{pkgs ? import sources.pin-florashell {}}:
pkgs.mkShell (let
{
pkgs ? import sources.pin-florashell { },
}:
pkgs.mkShell (
let
libs = with pkgs; [
zlib
libpq
@ -14,16 +17,21 @@ in
hlib = pkgs.haskell.lib;
callHackage = {
callHackage =
{
name,
version,
}: let
}:
let
pkg = pkgs.haskell.packages.ghc910.callHackage name version { };
in
hlib.dontCheck (hlib.doJailbreak pkg);
in {
in
{
name = "flora";
packages = with pkgs; let
packages =
with pkgs;
let
haskellPackages = haskell.packages.ghc910;
in
# These don't build directly and need to be pinned
@ -56,4 +64,5 @@ in
++ libs;
LD_LIBRARY_PATH = pkgs.lib.makeLibraryPath libs;
})
}
)

View file

@ -1,4 +1,7 @@
{pkgs ? import <nixpkgs> {}}: let
{
pkgs ? import <nixpkgs> { },
}:
let
inherit (pkgs) lib;
in
pkgs.mkShell {
@ -14,7 +17,10 @@ in
nodePackages.npm
];
LD_LIBRARY_PATH = lib.makeLibraryPath (with pkgs; [
LD_LIBRARY_PATH = lib.makeLibraryPath (
with pkgs;
[
libuuid
]);
]
);
}

View file

@ -1,4 +1,6 @@
{pkgs ? import <nixpkgs> {}}:
{
pkgs ? import <nixpkgs> { },
}:
pkgs.mkShell rec {
name = "haddock2";

View file

@ -1,8 +1,11 @@
let
sources = import ../../npins;
in
{pkgs ? import sources.pin-masna3shell {}}:
pkgs.mkShell (let
{
pkgs ? import sources.pin-masna3shell { },
}:
pkgs.mkShell (
let
libs = with pkgs; [
zlib
libpq
@ -11,20 +14,22 @@ in
hlib = pkgs.haskell.lib;
callHackage = {
callHackage =
{
name,
version,
haskellPackages ? pkgs.haskellPackages,
}: let
}:
let
pkg = haskellPackages.callHackage name version { };
in
hlib.dontCheck (hlib.doJailbreak pkg);
haskellPackages = pkgs.haskell.packages.ghc910;
in {
in
{
name = "masna3";
packages =
[
packages = [
pkgs.haskell.packages.ghc9102.ghc
pkgs.haskell.packages.ghc9102.haskell-language-server
@ -50,4 +55,5 @@ in
++ libs;
LD_LIBRARY_PATH = pkgs.lib.makeLibraryPath libs;
})
}
)

View file

@ -1,8 +1,12 @@
let
sources = import ../../npins;
in
{pkgs ? import sources.pin-necro-man-nixpkgs {}}: let
shell = {
{
pkgs ? import sources.pin-necro-man-nixpkgs { },
}:
let
shell =
{
mkShell,
#
pkgs,
@ -16,8 +20,7 @@ in
python310Packages.pygments
(texlive.combine {
inherit
(texlive)
inherit (texlive)
scheme-medium
#
wrapfig

View file

@ -1,7 +1,9 @@
let
sources = import ../../npins;
in
{pkgs ? import sources.pin-vim-tw {}}:
{
pkgs ? import sources.pin-vim-tw { },
}:
pkgs.mkShell {
name = "vim-tw";
packages = with pkgs; [

View file

@ -79,7 +79,10 @@
};
"/nix" = {
mountOptions = ["compress=zstd" "noatime"];
mountOptions = [
"compress=zstd"
"noatime"
];
mountpoint = "/nix";
};
};

View file

@ -80,7 +80,10 @@
};
"/nix" = {
mountOptions = ["compress=zstd" "noatime"];
mountOptions = [
"compress=zstd"
"noatime"
];
mountpoint = "/nix";
};
};

View file

@ -1,12 +1,18 @@
let
hasconfigRemoteCondition = {
hasconfigRemoteCondition =
{
# Custom arguments
url,
path ? "*/**",
...
} @ cfg: let
cfg' = builtins.removeAttrs cfg ["url" "path"];
in [
}@cfg:
let
cfg' = builtins.removeAttrs cfg [
"url"
"path"
];
in
[
(cfg' // { condition = "hasconfig:remote.*.url:git@${url}:${path}"; })
(cfg' // { condition = "hasconfig:remote.*.url:https://${url}/${path}"; })
];

View file

@ -16,7 +16,8 @@ let
blameIgnore = {
blame.ignoreRevsFile = ".git-blame-ignore-revs";
};
in [
in
[
# Univ stuff
{
url = "gitlab.istic.univ-rennes1.fr";

View file

@ -1,4 +1,5 @@
{config, ...}: {
{ config, ... }:
{
programs.btop = {
settings.color_theme = "${config.programs.btop.package}/share/btop/themes/onedark.theme";
extraConfig = builtins.readFile ./btop.conf;

View file

@ -2,8 +2,10 @@
pkgs,
lib,
...
}: {
programs.cmus.extraConfig = let
}:
{
programs.cmus.extraConfig =
let
# dispatch to multiple callbacks
callback-script = pkgs.writeShellApplication {
name = "cmus-callback-script";

View file

@ -1,4 +1,5 @@
{config, ...}: {
{ config, ... }:
{
programs.direnv = {
nix-direnv.enable = true;
config = {

View file

@ -3,9 +3,11 @@
config,
lib,
...
}: let
}:
let
cfg = config.i18n.inputMethod;
in {
in
{
i18n.inputMethod = {
fcitx5.addons = [
pkgs.fcitx5-chinese-addons

View file

@ -3,11 +3,13 @@
config,
lib,
...
}: let
}:
let
inherit (pkgs) nur;
cfg = config.programs.firefox;
in {
in
{
programs.firefox = {
# https://mozilla.github.io/policy-templates
# The following have more complex logic, keep them as policies and not profiles
@ -19,7 +21,14 @@ in {
];
SearchEngines = {
Remove = ["Google" "Bing" "DuckDuckGo" "Qwant" "eBay" "Perplexity"];
Remove = [
"Google"
"Bing"
"DuckDuckGo"
"Qwant"
"eBay"
"Perplexity"
];
Default = "leta";
Add = [
{
@ -102,9 +111,11 @@ in {
"media.peerconnection.enabled" = false;
};
extensions.packages = let
extensions.packages =
let
addons = nur.repos.rycee.firefox-addons;
in [
in
[
addons.ublock-origin
addons.privacy-badger
addons.user-agent-string-switcher

View file

@ -2,7 +2,8 @@
pkgs,
lib,
...
}: {
}:
{
programs.fish = {
shellAbbrs = lib.mkMerge [
(lib.mkIf pkgs.stdenv.isLinux {

View file

@ -2,7 +2,8 @@
lib,
pkgs,
...
}: {
}:
{
imports = [
./aliasesAbbrs.nix
];
@ -24,11 +25,9 @@
#
# Scripts and functions
#
xdg.configFile =
lib.mapAttrs'
(path: _:
lib.nameValuePair "fish/functions/${path}" {source = "${./functions}/${path}";})
(builtins.readDir ./functions);
xdg.configFile = lib.mapAttrs' (
path: _: lib.nameValuePair "fish/functions/${path}" { source = "${./functions}/${path}"; }
) (builtins.readDir ./functions);
programs.fish = {
interactiveShellInit = builtins.readFile ./shellInit.fish;

View file

@ -3,7 +3,8 @@
config,
pkgs,
...
}: {
}:
{
# git plugins
programs.git = {
lfs.enable = true;
@ -11,8 +12,7 @@
# known to fail on aarch64-linux
(lib.mkIf (pkgs.system == "aarch64-linux") (
# TODO: investigate this
lib.warn "patdiff has been forcibly disabled because it has previously failed to build"
lib.mkForce
lib.warn "patdiff has been forcibly disabled because it has previously failed to build" lib.mkForce
false
))
(lib.mkDefault true)
@ -20,7 +20,8 @@
};
# 懶惰鬼賴皮
programs.lazygit = let
programs.lazygit =
let
patdiffCfg = config.programs.git.patdiff;
in
lib.mkIf patdiffCfg.enable {

View file

@ -1,24 +1,26 @@
{pkgs, ...}: {
{ pkgs, ... }:
{
services = {
gpg-agent.defaultCacheTtl = 1209600;
gpg-agent.pinentry.package = pkgs.pinentry-tty;
};
programs.gpg.publicKeys = let
fromUrl = {
programs.gpg.publicKeys =
let
fromUrl =
{
url,
hash,
trust ? 5,
}: {
}:
{
source = pkgs.fetchurl { inherit url hash; };
inherit trust;
};
github = {user, ...} @ args:
fromUrl (
builtins.removeAttrs args ["user"]
// {url = "https://github.com/${user}.gpg";}
);
github =
{ user, ... }@args:
fromUrl (builtins.removeAttrs args [ "user" ] // { url = "https://github.com/${user}.gpg"; });
in
map github [
# Do not depend on my own forgejo instance / self-host server to avoid a single point of failure

View file

@ -3,9 +3,11 @@
lib,
config,
...
}: let
}:
let
cfg = config.programs.kitty;
in {
in
{
config = lib.mkIf cfg.enable {
home.packages = [
pkgs.nerd-fonts.iosevka

View file

@ -2,9 +2,11 @@
config,
lib,
...
}: let
}:
let
cfg = config.programs.lazygit;
in {
in
{
programs.tmux.extraConfig = lib.mkIf cfg.enable ''
bind g run-shell "tmux new-window ${lib.getExe cfg.package}"
'';

View file

@ -3,10 +3,12 @@
lib,
config,
...
}: {
}:
{
home = {
username = lib.mkDefault "leana";
homeDirectory = let
homeDirectory =
let
inherit (config.home) username;
in
lib.mkMerge [

View file

@ -2,7 +2,8 @@
nixosConfig ? null,
lib,
...
}: {
}:
{
home.language = {
base = lib.mkDefault nixosConfig.i18n.defaultLocale or "en_US.UTF-8";
};

View file

@ -2,13 +2,13 @@
pkgs,
lib,
...
}: {
}:
{
programs = {
vim.enable = true;
};
home.packages =
[
home.packages = [
pkgs.file
pkgs.gnused
pkgs.tree

View file

@ -3,9 +3,11 @@
pkgs,
lib,
...
}: let
}:
let
cfg = config.programs.password-store;
in {
in
{
home.packages = lib.mkIf cfg.enable [
pkgs.pwgen
pkgs.diceware

View file

@ -2,7 +2,8 @@
config,
lib,
...
}: {
}:
{
programs.sioyek = {
bindings = {
"move_up" = "k";
@ -18,7 +19,10 @@
"<C-u>"
];
"toggle_two_page_mode" = [ "T" ];
"goto_mark" = ["`" "'"];
"goto_mark" = [
"`"
"'"
];
};
config.should_launch_new_window = "1";

View file

@ -2,9 +2,11 @@
lib,
config,
...
}: let
}:
let
cfg = config.programs.starship;
in {
in
{
xdg.configFile = lib.mkIf cfg.enable {
"starship.toml".source = "${./starship.toml}";
};

View file

@ -2,7 +2,8 @@
pkgs,
lib,
...
}: {
}:
{
programs.tmux.extraConfig =
builtins.readFile ./tmux.conf
+ lib.optionalString pkgs.stdenv.isDarwin ''

View file

@ -3,7 +3,8 @@
lib,
pkgs,
...
}: {
}:
{
nix = {
package = lib.mkDefault (nixosConfig.nix.package or pkgs.nix);

View file

@ -1,7 +1,9 @@
{pkgs, ...}: {
{ pkgs, ... }:
{
programs.vim = {
extraConfig = builtins.readFile ./vimrc;
plugins = let
plugins =
let
vpkgs = pkgs.vimPlugins;
paramount = pkgs.vimUtils.buildVimPlugin {
@ -13,7 +15,8 @@
hash = "sha256-j9nMjKYK7bqrGHprYp0ddLEWs1CNMudxXD13sOROVmY=";
};
};
in [
in
[
vpkgs.vim-sleuth
vpkgs.vim-surround
vpkgs.vim-fugitive

View file

@ -1,4 +1,5 @@
{pkgs, ...}: {
{ pkgs, ... }:
{
home.packages = [ pkgs.iosevka ];
services.wired = {
config = "${./wired.ron}";

View file

@ -4,7 +4,8 @@
lib,
config,
...
}: {
}:
{
assertions = [
{
assertion = config.programs.fish.enable;
@ -22,7 +23,9 @@
WORKTREE_PATH = "wt";
};
programs.direnv.config.whitelist.prefix = [(config.home.sessionVariables.REPO_PATH + "/leana8959")];
programs.direnv.config.whitelist.prefix = [
(config.home.sessionVariables.REPO_PATH + "/leana8959")
];
programs.tmux.extraConfig = lib.mkBefore ''
# sessionizer binds
bind -n C-f run-shell "tmux new-window tmux-sessionizer"

View file

@ -3,7 +3,8 @@
nerd-font-patcher,
parallel,
stdenvNoCC,
}: {
}:
{
font,
extraArgs ? [ ],
useDefaultsArgs ? true,
@ -24,7 +25,8 @@ stdenvNoCC.mkDerivation {
parallel
];
buildPhase = let
buildPhase =
let
args =
lib.optionals useDefaultsArgs [
"--careful"
@ -33,7 +35,8 @@ stdenvNoCC.mkDerivation {
"--no-progressbars"
]
++ extraArgs;
in ''
in
''
mkdir -p nerd-font
find \( -name \*.ttf -o -name \*.otf \) | parallel --jobs=$NIX_BUILD_CORES nerd-font-patcher {} \
--outputdir nerd-font ${builtins.concatStringsSep " " args}

View file

@ -2,7 +2,8 @@ let
preferredPriority = 20;
privatePriority = 10;
limitedPriority = -10;
in [
in
[
{
ssid = "~";
priority = preferredPriority;

View file

@ -8,16 +8,23 @@ let
# wpa_supplicant uses `strchr` to seek to the first `=`, so the only forbidden character is `=`.
escapePwdKey = lib.replaceStrings [ "=" ] [ "_" ];
go = networkArgs @ {
go =
networkArgs@{
ssid,
# Custom fields wrapping nixpkgs module options
hasPassword ? false,
scanOnLowSignal ? false,
randomizeMac ? false,
...
}: {
}:
{
${ssid} = lib.mkMerge [
(builtins.removeAttrs networkArgs ["ssid" "hasPassword" "scanOnLowSignal" "randomizeMac"])
(builtins.removeAttrs networkArgs [
"ssid"
"hasPassword"
"scanOnLowSignal"
"randomizeMac"
])
(lib.optionalAttrs hasPassword {
pskRaw = "ext:${escapePwdKey ssid}";
})

View file

@ -5,15 +5,18 @@
config,
lib,
...
}: let
}:
let
fishNixOSEnabled = config.programs.fish.enable;
fishHMEnabled =
if config ? home-manager
then lib.any (userConfig: userConfig.programs.fish.enable) (lib.attrValues config.home-manager.users)
else false;
if config ? home-manager then
lib.any (userConfig: userConfig.programs.fish.enable) (lib.attrValues config.home-manager.users)
else
false;
fishEnabled = fishNixOSEnabled || fishHMEnabled;
in {
in
{
environment.pathsToLink = lib.mkIf fishEnabled [
"/share/fish/vendor_conf.d"
"/share/fish/vendor_completions.d"

View file

@ -1,4 +1,5 @@
{hostname, ...}: {
{ hostname, ... }:
{
networking.hostName = hostname;
services.openssh = {

View file

@ -1,4 +1,5 @@
{pkgs, ...}: {
{ pkgs, ... }:
{
security.sudo.enable = false;
environment.systemPackages = [

View file

@ -2,7 +2,8 @@
lib,
pkgs,
...
}: {
}:
{
nix = {
package = lib.mkDefault pkgs.nix;

View file

@ -5,9 +5,11 @@
config,
lib,
...
}: let
}:
let
cfg = config.services.xscreensaver;
in {
in
{
options = {
services.xscreensaver.hooks = lib.mkOption {
type = with lib.types; attrsOf str;
@ -20,19 +22,22 @@ in {
systemd.user.services = {
"xscreensaver-hooks" = {
description = "Run commands on xscreensaver events";
after = ["graphical-session.target" "xscreensaver.service"];
after = [
"graphical-session.target"
"xscreensaver.service"
];
partOf = [ "graphical-session.target" ];
wantedBy = [ "graphical-session.target" ];
script = let
handlers =
lib.concatMapAttrsStringSep "\n" (event: action: ''
script =
let
handlers = lib.concatMapAttrsStringSep "\n" (event: action: ''
"${event}")
( ${action}
)
;;
'')
cfg.hooks;
in ''
'') cfg.hooks;
in
''
xscreensaver-command -watch | while read event rest; do
echo "The handler script got \"$event\""
case $event in

View file

@ -2,7 +2,8 @@
config,
pkgs,
...
}: {
}:
{
#
# My user
#

View file

@ -3,10 +3,12 @@
lib,
config,
...
}: let
}:
let
cfg = config.services.parrot;
t = lib.types;
in {
in
{
options = {
services.parrot = {
enable = lib.mkEnableOption "parrot";

View file

@ -1,7 +1,11 @@
# https://nixos.wiki/wiki/Encrypted_DNS
{pkgs, ...}: {
{ pkgs, ... }:
{
networking = {
nameservers = ["127.0.0.1" "::1"];
nameservers = [
"127.0.0.1"
"::1"
];
dhcpcd.extraConfig = "nohook resolv.conf";
# networkmanager.dns = "none";
};

View file

@ -3,10 +3,12 @@
config,
lib,
...
}: let
}:
let
cfg = config.services.typst-bot;
t = lib.types;
in {
in
{
options = {
services.typst-bot = {
enable = lib.mkEnableOption "typst-bot";

View file

@ -4,14 +4,10 @@ in
final: prev: {
fcitx5-table-extra = prev.fcitx5-table-extra.overrideAttrs (oldAttrs: {
src = sources.fcitx5-table-extra;
nativeBuildInputs =
oldAttrs.nativeBuildInputs or []
++ [
nativeBuildInputs = oldAttrs.nativeBuildInputs or [ ] ++ [
final.python3
];
preConfigure =
oldAttrs.preConfigure or ""
+ ''
preConfigure = oldAttrs.preConfigure or "" + ''
python3 ./generate.py
'';
});

View file

@ -1,5 +1,6 @@
final: prev: rec {
nerd-fonts = let
nerd-fonts =
let
mkNerdFont = final.callPackage ../lib/mkNerdFont.nix { };
in
prev.nerd-fonts

View file

@ -3,20 +3,17 @@ let
sources = import ../../npins;
in
final: _: {
nil = let
nil =
let
pkg = sources.nil.asFlake.packages.${final.system}.default;
in
pkg.overrideAttrs (
oldAttrs: {
patches =
oldAttrs.patches or []
++ [
pkg.overrideAttrs (oldAttrs: {
patches = oldAttrs.patches or [ ] ++ [
(final.fetchpatch {
name = "fix-handling-inherit-and-patfield-in-inline-assist";
url = "https://github.com/oxalica/nil/pull/178.patch";
hash = "sha256-4f7DeWJtt63IyOjqlwzz0f05rv1NBYZO4JWEkFeDimk=";
})
];
}
);
});
}

View file

@ -3,9 +3,7 @@ let
in
# The final nix is lix in this case
final: prev: {
nix-monitored =
sources.nix-monitored.asFlake.packages.${final.system}.default
.override {
nix-monitored = sources.nix-monitored.asFlake.packages.${final.system}.default.override {
inherit (final) nix;
withNotify = false; # noisy, spams "command completed" even for nix shells
};

View file

@ -2,7 +2,8 @@
fetchFromGitHub,
stdenvNoCC,
lib,
}: let
}:
let
rev = "9bb188e2701138e03f73bacebd6b19b181ca0012";
in
stdenvNoCC.mkDerivation {

View file

@ -2,10 +2,13 @@
rustPlatform,
fetchFromGitea,
}:
rustPlatform.buildRustPackage (finalAttrs: let
rustPlatform.buildRustPackage (
finalAttrs:
let
cargoToml = fromTOML (builtins.readFile (finalAttrs.src + "/Cargo.toml"));
cargoLock = finalAttrs.src + "/Cargo.lock";
in {
in
{
pname = "audio-lint";
version = cargoToml.package.version;
@ -18,4 +21,5 @@ in {
};
cargoLock.lockFile = cargoLock;
})
}
)

View file

@ -6,10 +6,13 @@
libxcb,
fetchFromGitHub,
}:
rustPlatform.buildRustPackage (finalAttrs: let
rustPlatform.buildRustPackage (
finalAttrs:
let
cargoToml = fromTOML (builtins.readFile (finalAttrs.src + "/Cargo.toml"));
cargoLock = finalAttrs.src + "/Cargo.lock";
in {
in
{
pname = "emoji-picker";
version = cargoToml.package.version;
@ -31,4 +34,5 @@ in {
openssl.dev
libxcb
];
})
}
)

View file

@ -2,7 +2,8 @@
fetchFromGitHub,
stdenvNoCC,
lib,
}: let
}:
let
rev = "cc19c050997d5f54014bb20c764b131e003dfb17";
in
stdenvNoCC.mkDerivation {

View file

@ -3,25 +3,21 @@
haskell,
fetchFromGitea,
installShellFiles,
}: let
}:
let
inherit (haskell.lib.compose) justStaticExecutables overrideCabal;
drv =
haskellPackages.callCabal2nix "hbrainfuck"
(fetchFromGitea {
drv = haskellPackages.callCabal2nix "hbrainfuck" (fetchFromGitea {
domain = "git.confusedcompiler.org";
owner = "leana8959";
repo = "hbrainfuck";
rev = "5eea5ff0d7efc0bd866a2273686032ba9cab5baa";
hash = "sha256-/htXOULUJN8+PsAYaG281Ge/9ULZoWip63IUxuVbTSg=";
})
{};
}) { };
cabalOverrides = o: {
buildTools = o.buildTools or [ ] ++ [ installShellFiles ];
postInstall =
o.postInstall or ""
+ ''
postInstall = o.postInstall or "" + ''
installShellCompletion --cmd hbrainfuck \
--bash <("$out/bin/hbf" --bash-completion-script "$out/bin/hbf") \
--fish <("$out/bin/hbf" --fish-completion-script "$out/bin/hbf") \
@ -29,5 +25,4 @@
'';
};
in
justStaticExecutables
(overrideCabal cabalOverrides drv)
justStaticExecutables (overrideCabal cabalOverrides drv)

View file

@ -2,18 +2,16 @@
haskellPackages,
haskell,
fetchFromGitea,
}: let
}:
let
inherit (haskell.lib.compose) justStaticExecutables;
drv =
haskellPackages.callCabal2nix "hutils"
(fetchFromGitea {
drv = haskellPackages.callCabal2nix "hutils" (fetchFromGitea {
domain = "git.confusedcompiler.org";
owner = "leana8959";
repo = "hutils";
rev = "30b503bec011f8908e26c0e1e961936d56da74cc";
hash = "sha256-lPwqxsz7WXdDMonjdWvTziR5HuE5HY2GyU2rQkwn0VU=";
})
{};
}) { };
in
justStaticExecutables drv

View file

@ -2,7 +2,8 @@
fetchFromGitLab,
ocaml-ng,
ocamlPackages ? ocaml-ng.ocamlPackages_5_1,
}: let
}:
let
version = "v0.16.2";
in
ocamlPackages.buildDunePackage {

View file

@ -2,7 +2,8 @@
writeShellApplication,
which,
lib,
}: let
}:
let
# Use this to not pollute the PATH inside
# Otherwise nix-which which will be an edge case
whichExe = "${lib.getExe which}";

View file

@ -3,25 +3,21 @@
haskell,
fetchFromGitea,
installShellFiles,
}: let
}:
let
inherit (haskell.lib.compose) justStaticExecutables overrideCabal;
drv =
haskellPackages.callCabal2nix "prop-solveur"
(fetchFromGitea {
drv = haskellPackages.callCabal2nix "prop-solveur" (fetchFromGitea {
domain = "git.confusedcompiler.org";
owner = "leana8959";
repo = "prop_solveur";
rev = "cc2430dc5a396b01d02bd925070ce5d009d05bc4";
hash = "sha256-jwNfRBytf/w0d2CWczXp+rVRXYNzptkuFE3OKSdOhLc=";
})
{};
}) { };
cabalOverrides = o: {
buildTools = o.buildTools or [ ] ++ [ installShellFiles ];
postInstall =
o.postInstall or ""
+ ''
postInstall = o.postInstall or "" + ''
installShellCompletion --cmd prop-solveur \
--bash <("$out/bin/prop-solveur" --bash-completion-script "$out/bin/prop-solveur") \
--fish <("$out/bin/prop-solveur" --fish-completion-script "$out/bin/prop-solveur") \
@ -29,5 +25,4 @@
'';
};
in
justStaticExecutables
(overrideCabal cabalOverrides drv)
justStaticExecutables (overrideCabal cabalOverrides drv)

View file

@ -3,25 +3,21 @@
haskell,
fetchFromGitea,
installShellFiles,
}: let
}:
let
inherit (haskell.lib.compose) justStaticExecutables overrideCabal;
drv =
haskellPackages.callCabal2nix "ruler"
(fetchFromGitea {
drv = haskellPackages.callCabal2nix "ruler" (fetchFromGitea {
domain = "git.confusedcompiler.org";
owner = "leana8959";
repo = "ruler";
rev = "f328620a52b25d4c9dea64425afe5995dfb8cb5a";
hash = "sha256-8nSVFckWXkf9dRTdzjbHRhf/qPdbXHEkVI4DyW3zfSo=";
})
{};
}) { };
cabalOverrides = o: {
buildTools = o.buildTools or [ ] ++ [ installShellFiles ];
postInstall =
o.postInstall or ""
+ ''
postInstall = o.postInstall or "" + ''
installShellCompletion --cmd ruler \
--bash <("$out/bin/ruler" --bash-completion-script "$out/bin/ruler") \
--fish <("$out/bin/ruler" --fish-completion-script "$out/bin/ruler") \
@ -29,5 +25,4 @@
'';
};
in
justStaticExecutables
(overrideCabal cabalOverrides drv)
justStaticExecutables (overrideCabal cabalOverrides drv)

View file

@ -6,7 +6,8 @@
gnused,
lib,
symlinkJoin,
}: let
}:
let
tmux-register-session = writeShellApplication {
name = "__tmux-register-session";
runtimeInputs = [ tmux ];
@ -27,7 +28,10 @@
tmux-maybe-create = writeShellApplication {
name = "__tmux-maybe-create";
runtimeInputs = [procps tmux];
runtimeInputs = [
procps
tmux
];
text = ''
session_name="$1"
session_dir="$2"
@ -55,7 +59,10 @@
tmux-sessionizer = writeShellApplication {
name = "tmux-sessionizer";
runtimeInputs = [fzf gnused];
runtimeInputs = [
fzf
gnused
];
text = ''
selected=$(
{

View file

@ -7,10 +7,13 @@
darwin,
zlib,
}:
rustPlatform.buildRustPackage (finalAttrs: let
rustPlatform.buildRustPackage (
finalAttrs:
let
cargoToml = fromTOML (builtins.readFile (finalAttrs.src + "/Cargo.toml"));
cargoLock = finalAttrs.src + "/Cargo.lock";
in {
in
{
pname = "tokei";
version = cargoToml.package.version;
@ -32,4 +35,5 @@ in {
# enable all output formats
buildFeatures = [ "all" ];
})
}
)

View file

@ -2,7 +2,8 @@
lib,
rustPlatform,
fetchFromGitHub,
}: let
}:
let
rev = "c9d4b164ff5dc2567bb0de3876460e51da62ba94";
in
rustPlatform.buildRustPackage (finalAttrs: {

View file

@ -3,10 +3,13 @@
fetchFromGitHub,
fetchpatch,
}:
rustPlatform.buildRustPackage (finalAttrs: let
rustPlatform.buildRustPackage (
finalAttrs:
let
cargoToml = fromTOML (builtins.readFile (finalAttrs.src + "/Cargo.toml"));
cargoLock = finalAttrs.src + "/Cargo.lock";
in {
in
{
pname = "typst-mutilate";
version = cargoToml.package.version;
@ -26,4 +29,5 @@ in {
hash = "sha256-+6DMQo4cjVASgkX4gcYrEkwQ/uxttV/61fDnXBqbNcg=";
})
];
})
}
)

View file

@ -1,11 +1,12 @@
{sources ? import ../../npins}: let
{
sources ? import ../../npins,
}:
let
scopeOverlay = overlay: final: prev: { export = prev.export or { } // overlay final prev; };
in
(
import sources.nixpkgs {
(import sources.nixpkgs {
overlays = map scopeOverlay [
(import ./overlay.nix)
(import ../overlays/iosevka.nix)
];
}
).export
}).export

View file

@ -1,7 +1,7 @@
final: prev: let
final: prev:
let
inherit (prev) lib;
in
lib.mapAttrs (name: _: final.callPackage (./by-name + "/${name}/package.nix") {})
(
lib.mapAttrs (name: _: final.callPackage (./by-name + "/${name}/package.nix") { }) (
lib.filterAttrs (_: type: type == "directory") (builtins.readDir ./by-name)
)

View file

@ -1,6 +1,7 @@
let
all = import ../identities.nix;
in {
in
{
"wpa_password.age".publicKeys = all;
"restic_backblaze_pwd.age".publicKeys = all;

View file

@ -13,10 +13,8 @@ let
version = data.version;
# https://github.com/NixOS/nixpkgs/blob/0258808f5744ca980b9a1f24fe0b1e6f0fecee9c/lib/lists.nix#L295
range = first: last:
if first > last
then []
else builtins.genList (n: first + n) (last - first + 1);
range =
first: last: if first > last then [ ] else builtins.genList (n: first + n) (last - first + 1);
# https://github.com/NixOS/nixpkgs/blob/0258808f5744ca980b9a1f24fe0b1e6f0fecee9c/lib/strings.nix#L257
stringToCharacters = s: map (p: builtins.substring p 1 s) (range 0 (builtins.stringLength s - 1));
@ -29,40 +27,42 @@ let
# If the environment variable NPINS_OVERRIDE_${name} is set, then use
# the path directly as opposed to the fetched source.
# (Taken from Niv for compatibility)
mayOverride = name: path: let
mayOverride =
name: path:
let
envVarName = "NPINS_OVERRIDE_${saneName}";
saneName = stringAsChars (c:
if (builtins.match "[a-zA-Z0-9]" c) == null
then "_"
else c)
name;
saneName = stringAsChars (c: if (builtins.match "[a-zA-Z0-9]" c) == null then "_" else c) name;
ersatz = builtins.getEnv envVarName;
in
if ersatz == ""
then path
if ersatz == "" then
path
else
# this turns the string into an actual Nix path (for both absolute and
# relative paths)
builtins.trace "Overriding path of \"${name}\" with \"${ersatz}\" due to set \"${envVarName}\"" (
if builtins.substring 0 1 ersatz == "/"
then /. + ersatz
else /. + builtins.getEnv "PWD" + "/${ersatz}"
if builtins.substring 0 1 ersatz == "/" then
/. + ersatz
else
/. + builtins.getEnv "PWD" + "/${ersatz}"
);
mkSource = name: spec:
assert spec ? type; let
mkSource =
name: spec:
assert spec ? type;
let
path =
if spec.type == "Git"
then mkGitSource spec
else if spec.type == "GitRelease"
then mkGitSource spec
else if spec.type == "PyPi"
then mkPyPiSource spec
else if spec.type == "Channel"
then mkChannelSource spec
else if spec.type == "Tarball"
then mkTarballSource spec
else builtins.throw "Unknown source type ${spec.type}";
if spec.type == "Git" then
mkGitSource spec
else if spec.type == "GitRelease" then
mkGitSource spec
else if spec.type == "PyPi" then
mkPyPiSource spec
else if spec.type == "Channel" then
mkChannelSource spec
else if spec.type == "Tarball" then
mkTarballSource spec
else
builtins.throw "Unknown source type ${spec.type}";
in
spec
// rec {
@ -71,12 +71,14 @@ let
# Waiting for discussion upstream
# https://github.com/andir/npins/issues/159
asFlake =
if sources ? flake-compat
then (import sources.flake-compat {src = outPath;}).outputs
else throw ".asFlake needs flake-compat as a source";
if sources ? flake-compat then
(import sources.flake-compat { src = outPath; }).outputs
else
throw ".asFlake needs flake-compat as a source";
};
mkGitSource = {
mkGitSource =
{
repository,
revision,
url ? null,
@ -88,35 +90,32 @@ let
assert repository ? type;
# At the moment, either it is a plain git repository (which has an url), or it is a GitHub/GitLab repository
# In the latter case, there we will always be an url to the tarball
if url != null && !submodules
then
if url != null && !submodules then
builtins.fetchTarball {
inherit url;
sha256 = hash; # FIXME: check nix version & use SRI hashes
}
else let
else
let
url =
if repository.type == "Git"
then repository.url
else if repository.type == "GitHub"
then "https://github.com/${repository.owner}/${repository.repo}.git"
else if repository.type == "GitLab"
then "${repository.server}/${repository.repo_path}.git"
else throw "Unrecognized repository type ${repository.type}";
urlToName = url: rev: let
if repository.type == "Git" then
repository.url
else if repository.type == "GitHub" then
"https://github.com/${repository.owner}/${repository.repo}.git"
else if repository.type == "GitLab" then
"${repository.server}/${repository.repo_path}.git"
else
throw "Unrecognized repository type ${repository.type}";
urlToName =
url: rev:
let
matched = builtins.match "^.*/([^/]*)(\\.git)?$" url;
short = builtins.substring 0 7 rev;
appendShort =
if (builtins.match "[a-f0-9]*" rev) != null
then "-${short}"
else "";
in "${
if matched == null
then "source"
else builtins.head matched
}${appendShort}";
appendShort = if (builtins.match "[a-f0-9]*" rev) != null then "-${short}" else "";
in
"${if matched == null then "source" else builtins.head matched}${appendShort}";
name = urlToName url revision;
in
builtins.fetchGit {
@ -126,7 +125,8 @@ let
inherit url submodules;
};
mkPyPiSource = {
mkPyPiSource =
{
url,
hash,
...
@ -136,7 +136,8 @@ let
sha256 = hash;
};
mkChannelSource = {
mkChannelSource =
{
url,
hash,
...
@ -146,7 +147,8 @@ let
sha256 = hash;
};
mkTarballSource = {
mkTarballSource =
{
url,
locked_url ? url,
hash,
@ -158,8 +160,9 @@ let
};
sources =
if version == 5
then builtins.mapAttrs mkSource data.pins
else throw "Unsupported format version ${toString version} in sources.json. Try running `npins upgrade`";
if version == 5 then
builtins.mapAttrs mkSource data.pins
else
throw "Unsupported format version ${toString version} in sources.json. Try running `npins upgrade`";
in
sources

View file

@ -1,17 +1,18 @@
{
sources ? import ./npins,
pkgs ?
import sources.nixpkgs {
pkgs ? import sources.nixpkgs {
overlays = map import [
./nix/overlays/disko.nix
];
},
withGHC ? false,
}: let
}:
let
inherit (pkgs) lib;
in
pkgs.mkShell {
packages = with pkgs;
packages =
with pkgs;
[
just
jq