1
0
mirror of https://github.com/nvbn/thefuck.git synced 2025-01-18 12:06:04 +00:00

support nixos command-not-found, closes #912 (#922)

This commit is contained in:
Tycho Grouwstra 2019-06-26 20:01:02 +02:00 committed by Vladimir Iakovlev
parent 59dc6cbf90
commit 48e1e4217f
4 changed files with 44 additions and 0 deletions

View File

@ -316,6 +316,7 @@ The following rules are enabled by default on specific platforms only:
* `brew_unknown_command` – fixes wrong brew commands, for example `brew docto/brew doctor`;
* `brew_update_formula` &ndash; turns `brew update <formula>` into `brew upgrade <formula>`;
* `dnf_no_such_command` &ndash; fixes mistyped DNF commands;
* `nixos_cmd_not_found` &ndash; installs apps on NixOS;
* `pacman` &ndash; installs app with `pacman` if it is not installed (uses `yay` or `yaourt` if available);
* `pacman_not_found` &ndash; fixes package name with `pacman`, `yay` or `yaourt`.

View File

@ -0,0 +1,25 @@
import pytest
from thefuck.rules.nixos_cmd_not_found import match, get_new_command
from thefuck.types import Command
@pytest.mark.parametrize('command', [
Command('vim', 'nix-env -iA nixos.vim')])
def test_match(mocker, command):
mocker.patch('thefuck.rules.nixos_cmd_not_found', return_value=None)
assert match(command)
@pytest.mark.parametrize('command', [
Command('vim', ''),
Command('', '')])
def test_not_match(mocker, command):
mocker.patch('thefuck.rules.nixos_cmd_not_found', return_value=None)
assert not match(command)
@pytest.mark.parametrize('command, new_command', [
(Command('vim', 'nix-env -iA nixos.vim'), 'nix-env -iA nixos.vim && vim'),
(Command('pacman', 'nix-env -iA nixos.pacman'), 'nix-env -iA nixos.pacman && pacman')])
def test_get_new_command(mocker, command, new_command):
assert get_new_command(command) == new_command

View File

@ -0,0 +1,15 @@
import re
from thefuck.specific.nix import nix_available
from thefuck.shells import shell
regex = re.compile(r'nix-env -iA ([^\s]*)')
enabled_by_default = nix_available
def match(command):
return regex.findall(command.output)
def get_new_command(command):
name = regex.findall(command.output)[0]
return shell.and_('nix-env -iA {}'.format(name), command.script)

3
thefuck/specific/nix.py Normal file
View File

@ -0,0 +1,3 @@
from thefuck.utils import which
nix_available = bool(which('nix'))