aboutsummaryrefslogtreecommitdiffstats
path: root/modules/by-name/ni
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--modules/by-name/ni/nix-index/command_not_found.fish111
-rw-r--r--modules/by-name/ni/nix-index/command_not_found.zsh (renamed from modules/by-name/ni/nix-index/command_not_found.sh)0
-rw-r--r--modules/by-name/ni/nix-index/module.nix6
-rw-r--r--modules/by-name/ni/nix/module.nix89
-rw-r--r--modules/by-name/ni/nixos-shell/module.nix5
-rw-r--r--modules/by-name/ni/nixpkgs/module.nix13
6 files changed, 176 insertions, 48 deletions
diff --git a/modules/by-name/ni/nix-index/command_not_found.fish b/modules/by-name/ni/nix-index/command_not_found.fish
new file mode 100644
index 00000000..bbdb2230
--- /dev/null
+++ b/modules/by-name/ni/nix-index/command_not_found.fish
@@ -0,0 +1,111 @@
+#!/usr/bin/env fish
+
+# nixos-config - My current NixOS configuration
+#
+# Copyright (C) 2025 Benedikt Peetz <benedikt.peetz@b-peetz.de>
+# SPDX-License-Identifier: GPL-3.0-or-later
+#
+# This file is part of my nixos-config.
+#
+# You should have received a copy of the License along with this program.
+# If not, see <https://www.gnu.org/licenses/gpl-3.0.txt>.
+
+# This was taken from the
+# `${pkgs.nix-index}/etc/profile.d/command-not-found.sh` file on 2024-02-28
+
+function _log
+ printf $argv >&2
+end
+
+function _bail
+ __fish_default_command_not_found_handler $argv
+ return "$status"
+end
+
+function _common_prefix
+ set --function prefix
+
+ for str in $argv
+ set position 1
+ for c in (string split '' "$str")
+ if test -z $prefix[$position]
+ set prefix[$position] "$c"
+ else if test $prefix[$position] != "$c"
+ if test $position = 1
+ # The first letter of the prefix mis-matched.
+ # As such there is no shared prefix, and we can simple bail early.
+ echo ""
+ return
+ else
+ set prefix $prefix[1..(math $position - 1)]
+ end
+ break
+ end
+
+ set position (math $position + 1)
+ end
+ end
+
+ echo "$(string join "" $prefix)"
+end
+
+function fish_command_not_found
+ # Only run if it's an interactive shell
+ if not status is-interactive
+ return (_bail $argv)
+ end
+
+ # The nixpkgs flake should always be available on NixOS
+ set --local toplevel nixpkgs
+ set --local cmd "$argv[1]"
+
+ set --local attrs "$(nix-locate --minimal --no-group --type x --type s --whole-name --at-root "/bin/$cmd")"
+
+ if test -n "$attrs"
+ set --function len "$(echo "$attrs" | count)"
+ else
+ set --function len 0
+ end
+
+ switch "$len"
+ case 0
+ case 1 or '*'
+ _log "The program '%s' is currently not installed.\n" "$cmd"
+ end
+
+ switch "$len"
+ case 0
+ return (_bail $argv)
+ case 1
+ # If only one package provides this, then we can invoke it
+ # without asking the user.
+
+ # These will not return 127 if they worked correctly.
+
+ _log "A shell will be opened with it.\n"
+
+ if nix build "$toplevel#$attrs" --no-link
+ nix shell "$toplevel#$attrs"
+ return "$status"
+ else
+ _log "Failed to build: '%s#%s'\n" "$toplevel" "$attrs"
+ return (_bail $argv)
+ end
+ case '*'
+ _log "It is provided by several packages. You can run it load it with:\n"
+
+ set --local counter 0
+ set --local attrs $(echo $attrs)
+ for attr in $attrs
+ _log "%3s)" "$counter"
+ _log " nix shell %s#%s\n" "$toplevel" "$attr";
+
+ set counter "$(math "$counter" + 1)"
+ end
+
+ commandline "nix shell $toplevel#$(_common_prefix $attrs)"
+ end
+
+ # command not found should always exit with 127
+ return 127
+end
diff --git a/modules/by-name/ni/nix-index/command_not_found.sh b/modules/by-name/ni/nix-index/command_not_found.zsh
index 579f9db4..579f9db4 100644
--- a/modules/by-name/ni/nix-index/command_not_found.sh
+++ b/modules/by-name/ni/nix-index/command_not_found.zsh
diff --git a/modules/by-name/ni/nix-index/module.nix b/modules/by-name/ni/nix-index/module.nix
index 5ddaece3..72be6b52 100644
--- a/modules/by-name/ni/nix-index/module.nix
+++ b/modules/by-name/ni/nix-index/module.nix
@@ -20,7 +20,11 @@ in {
};
config = lib.mkIf cfg.enable {
- soispha.programs.zsh.integrations.nix-index = ./command_not_found.sh;
+ soispha.programs = {
+ zsh.integrations.nix-index = ./command_not_found.zsh;
+ fish.integrations.nix-index = ./command_not_found.fish;
+ };
+
home-manager.users.soispha = {
imports = [
modules.nix-index-database.homeModules.nix-index
diff --git a/modules/by-name/ni/nix/module.nix b/modules/by-name/ni/nix/module.nix
index 2b91f59b..b7e64989 100644
--- a/modules/by-name/ni/nix/module.nix
+++ b/modules/by-name/ni/nix/module.nix
@@ -9,63 +9,74 @@
# If not, see <https://www.gnu.org/licenses/gpl-3.0.txt>.
{
pkgs,
+ libraries,
+ config,
+ lib,
# flakes
+ sources,
self,
system,
externalDependencies,
...
-}: {
- # TODO(@bpeetz): Modularize <2025-02-08>
+}: let
+ inherit (sources) nixpkgs;
- nix = {
- package = pkgs.lixPackageSets.latest.lix;
+ cfg = config.soispha.nix;
+in {
+ options.soispha.nix = {
+ enable = libraries.base.options.mkEnable "nix";
+ };
- # Disable nix channels (this is a remnant of old days)
- channel.enable = false;
+ config = lib.mkIf cfg.enable {
+ nix = {
+ package = pkgs.lixPackageSets.latest.lix;
- registry = {
- nixpkgs.flake = self.inputs.nixpkgs;
- n.flake =
- self.inputs.nixpkgs
- // {
- # Otherwise nixpkgs's config and overlays are not available:
+ # Disable nix channels (this is a remnant of old days)
+ channel.enable = false;
- # Both attrs exists, so we just override both and hope
- outputs.legacyPackages."${system}" = pkgs;
- legacyPackages."${system}" = pkgs;
- };
+ registry = {
+ nixpkgs.flake = nixpkgs;
+ n.flake =
+ nixpkgs
+ // {
+ # Otherwise nixpkgs's config and overlays are not available:
- t.flake = externalDependencies.templates;
+ # Both attrs exists, so we just override both and hope
+ outputs.legacyPackages."${system}" = pkgs;
+ legacyPackages."${system}" = pkgs;
+ };
- my_flake.flake = self;
- m.flake = self;
- };
+ t.flake = externalDependencies.templates;
- gc = {
- automatic = true;
- dates = "weekly";
- options = "--delete-older-than 7d";
- };
+ my_flake.flake = self;
+ m.flake = self;
+ };
+
+ gc = {
+ automatic = true;
+ dates = "weekly";
+ options = "--delete-older-than 7d";
+ };
- settings = {
- auto-optimise-store = true;
- experimental-features = [
- "nix-command"
- "flakes"
- #"ca-derivations"
- ];
+ settings = {
+ # Don't warn about dirty git trees (It is usually absolutely useless)
+ warn-dirty = false;
- use-xdg-base-directories = true;
+ auto-optimise-store = true;
+ experimental-features = [
+ "nix-command"
+ "flakes"
+ ];
- #substituters = ["https://cache.ngi0.nixos.org/"];
- #trusted-public-keys = ["cache.ngi0.nixos.org-1:KqH5CBLNSyX184S9BKZJo1LxrxJ9ltnY2uAs5c/f1MA="];
+ use-xdg-base-directories = true;
- fallback = true; # Build from source, if binary can't be substituted
+ fallback = true; # Build from source, if binary can't be substituted
- keep-failed = false; # keep failed tmp build dirs
- pure-eval = true; # restrict file system and network access to hash
+ keep-failed = false; # keep failed tmp build dirs
+ pure-eval = true; # restrict file system and network access to hash
- sandbox-fallback = false; # Don't disable the sandbox, if the kernel doesn't support it
+ sandbox-fallback = false; # Don't disable the sandbox, if the kernel doesn't support it
+ };
};
};
}
diff --git a/modules/by-name/ni/nixos-shell/module.nix b/modules/by-name/ni/nixos-shell/module.nix
index 8dda2890..1a0190c8 100644
--- a/modules/by-name/ni/nixos-shell/module.nix
+++ b/modules/by-name/ni/nixos-shell/module.nix
@@ -11,10 +11,11 @@
lib,
config,
pkgs,
- self,
+ sources,
...
}: let
cfg = config.soispha.nixos-shell;
+ inherit (sources) nixpkgs;
in {
options.soispha.nixos-shell = {
enable = lib.mkEnableOption "nixos-shell";
@@ -85,7 +86,7 @@ in {
};
config = let
- vmSystem = self.inputs.nixpkgs.lib.nixosSystem {
+ vmSystem = nixpkgs.lib.nixosSystem {
inherit (cfg.configuration) specialArgs;
modules = [
diff --git a/modules/by-name/ni/nixpkgs/module.nix b/modules/by-name/ni/nixpkgs/module.nix
index 502bcff2..1ded8444 100644
--- a/modules/by-name/ni/nixpkgs/module.nix
+++ b/modules/by-name/ni/nixpkgs/module.nix
@@ -22,7 +22,13 @@ in {
example = "x86_64-linux";
type = lib.types.str;
};
+ unfreePackageNames = lib.mkOption {
+ description = "Names of unfree packages to allow";
+ example = "[ steam steam-unwrapped ]";
+ type = lib.types.listOf lib.types.str;
+ };
};
+
config = let
myPkgsOverlay = self: super: packageSets.soispha;
in
@@ -36,15 +42,10 @@ in {
];
config = {
- # TODO: this fails because of the root tempsize, which should be increased
- # contentAddressedByDefault = true;
-
hostSystem = cfg.systemName;
allowUnfreePredicate = pkg:
- builtins.elem (lib.getName pkg) [
- "pypemicro" # required by pynitrokey
- ];
+ builtins.elem (lib.getName pkg) cfg.unfreePackageNames;
};
};
};