Skip to content

Commit

Permalink
support nixos command-not-found, closes #912 (#922)
Browse files Browse the repository at this point in the history
  • Loading branch information
KiaraGrouwstra authored and nvbn committed Jun 26, 2019
1 parent 59dc6cb commit 48e1e42
Show file tree
Hide file tree
Showing 4 changed files with 44 additions and 0 deletions.
1 change: 1 addition & 0 deletions README.md
Expand Up @@ -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`.

Expand Down
25 changes: 25 additions & 0 deletions tests/rules/test_nixos_cmd_not_found.py
@@ -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
15 changes: 15 additions & 0 deletions thefuck/rules/nixos_cmd_not_found.py
@@ -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 changes: 3 additions & 0 deletions thefuck/specific/nix.py
@@ -0,0 +1,3 @@
from thefuck.utils import which

nix_available = bool(which('nix'))

0 comments on commit 48e1e42

Please sign in to comment.