about summary refs log tree commit diff stats
path: root/pkgs/by-name/lf/lf-make-map/src/cli.rs
blob: 707469846aebf3475e297e9a4b275a538906aac3 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
// 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>.

use std::path::PathBuf;

use clap::{ArgAction, Parser, Subcommand};

/// An automatic lf cd mapping generator
#[derive(Parser, Debug)]
#[clap(author, version, about, long_about = None)]
#[command(next_line_help = true)]
pub struct Args {
    /// The directory to treat as home
    #[arg(long, short = 'n', env = "HOME")]
    pub home_name: PathBuf,

    /// The number of directories to generate mappings for, starting from each `relevant_directory`
    #[arg(long, short, default_value = "2")]
    pub depth: usize,

    /// Increase message verbosity
    #[arg(long="verbose", short = 'v', action = ArgAction::Count)]
    pub verbosity: u8,

    /// Silence all output
    #[arg(long, short = 'q')]
    pub quiet: bool,

    #[command(subcommand)]
    pub command: Command,
}

#[derive(Subcommand, Debug)]
pub enum Command {
    /// Visualize the generated mappings in a tree
    Visualize {
        #[command(flatten)]
        options: CommandOptions,
    },

    /// Output the generated mappings in a format suitable for the lf config file
    Generate {
        #[command(flatten)]
        options: CommandOptions,
    },
}

#[derive(Debug, Parser)]
pub struct CommandOptions {
    /// The directories to generate mappings for
    pub relevant_directories: Vec<PathBuf>,
}