init: public
This commit is contained in:
17
modules/cmd/all.nix
Normal file
17
modules/cmd/all.nix
Normal file
@@ -0,0 +1,17 @@
|
||||
{ config, lib, ... }:
|
||||
lib.my.makeSwitch {
|
||||
inherit config;
|
||||
optionName = "all command line tools";
|
||||
optionPath = [
|
||||
"cmd"
|
||||
"all"
|
||||
];
|
||||
config' = {
|
||||
my.cmd = {
|
||||
media.all.enable = true;
|
||||
misc.enable = true;
|
||||
monitor.all.enable = true;
|
||||
shell.all.enable = true;
|
||||
};
|
||||
};
|
||||
}
|
||||
10
modules/cmd/default.nix
Normal file
10
modules/cmd/default.nix
Normal file
@@ -0,0 +1,10 @@
|
||||
{ ... }:
|
||||
{
|
||||
imports = [
|
||||
./all.nix
|
||||
./media
|
||||
./misc
|
||||
./monitor
|
||||
./shell
|
||||
];
|
||||
}
|
||||
18
modules/cmd/media/all.nix
Normal file
18
modules/cmd/media/all.nix
Normal file
@@ -0,0 +1,18 @@
|
||||
{ config, lib, ... }:
|
||||
lib.my.makeSwitch {
|
||||
inherit config;
|
||||
optionName = "all command line media tools";
|
||||
optionPath = [
|
||||
"cmd"
|
||||
"media"
|
||||
"all"
|
||||
];
|
||||
config' = {
|
||||
my.cmd.media = {
|
||||
cava.enable = true;
|
||||
go-musicfox.enable = true;
|
||||
mpd.enable = true;
|
||||
ffmpeg.enable = true;
|
||||
};
|
||||
};
|
||||
}
|
||||
167
modules/cmd/media/cava/config/config
Normal file
167
modules/cmd/media/cava/config/config
Normal file
@@ -0,0 +1,167 @@
|
||||
## Configuration file for CAVA. Default values are commented out. Use either ';' or '#' for commenting.
|
||||
|
||||
|
||||
[general]
|
||||
|
||||
# Smoothing mode. Can be 'normal', 'scientific' or 'waves'.
|
||||
mode = normal
|
||||
|
||||
# Accepts only non-negative values.
|
||||
framerate = 60
|
||||
|
||||
# 'autosens' will attempt to decrease sensitivity if the bars peak. 1 = on, 0 = off
|
||||
# 'overshoot' allows bars to overshoot (in % of terminal height) without initiating autosens.
|
||||
; autosens = 1
|
||||
; overshoot = 20
|
||||
|
||||
# Manual sensitivity in %. Autosens must be turned off for this to take effect.
|
||||
# 200 means double height. Accepts only non-negative values.
|
||||
; sensitivity = 100
|
||||
|
||||
# The number of bars (0-200). 0 sets it to auto (fill up console).
|
||||
# Bars' width and space between bars in number of characters.
|
||||
bars = 0
|
||||
bar_width = 5
|
||||
bar_spacing = 1
|
||||
|
||||
# Lower and higher cutoff frequencies for lowest and highest bars
|
||||
# the bandwidth of the visualizer.
|
||||
# Note: there is a minimum total bandwidth of 43Mhz x number of bars.
|
||||
# Cava will automatically increase the higher cutoff if a too low band is specified.
|
||||
; lower_cutoff_freq = 50
|
||||
; higher_cutoff_freq = 10000
|
||||
|
||||
|
||||
|
||||
[input]
|
||||
|
||||
# Audio capturing method. Possible methods are: 'pulse', 'alsa' or 'fifo'.
|
||||
# Defaults to 'pulse', 'alsa' or 'fifo', in that order, dependent on what support cava was built with.
|
||||
#
|
||||
# All input methods uses the same config variable 'source'
|
||||
# to define where it should get the audio.
|
||||
#
|
||||
# For pulseaudio 'source' will be the source. Default: 'auto', which uses the monitor source of the default sink
|
||||
# (all pulseaudio sinks(outputs) have 'monitor' sources(inputs) associated with them).
|
||||
#
|
||||
# For alsa 'source' will be the capture device.
|
||||
# For fifo 'source' will be the path to fifo-file.
|
||||
method = pulse
|
||||
source = auto
|
||||
|
||||
; method = alsa
|
||||
; source = hw:Loopback,1
|
||||
|
||||
; method = fifo
|
||||
; source = /tmp/mpd.fifo
|
||||
|
||||
|
||||
|
||||
[output]
|
||||
|
||||
# Ouput method. Can be 'ncurses', 'noncurses' or 'raw'.
|
||||
# 'noncurses' is for systems that does not suport ncurses.
|
||||
# 'raw' is a 16 bit data stream of the bar heights that can be used to send to other applications.
|
||||
# 'raw' defaults to 200 bars, which can be adjusted in the 'bars' option above.
|
||||
method = ncurses
|
||||
|
||||
# Visual styles. Can be 'stereo' or 'mono'.
|
||||
# 'stereo' mirrors both channels with low frequencies in center.
|
||||
# 'mono' averages both channels and outputs left to right lowest to highest frequencies.
|
||||
style = mono
|
||||
|
||||
# Raw output target. A fifo will be created if target does not exist.
|
||||
; raw_target = /dev/stdout
|
||||
|
||||
# Raw data format. Can be 'binary' or 'ascii'.
|
||||
; data_format = binary
|
||||
|
||||
# Binary bit format, can be '8bit' (0-255) or '16bit' (0-65530).
|
||||
; bit_format = 16bit
|
||||
|
||||
# Ascii max value. In 'ascii' mode range will run from 0 to value specified here
|
||||
; ascii_max_range = 1000
|
||||
|
||||
# Ascii delimiters. In ascii format each bar and frame is separated by a delimiters.
|
||||
# Use decimal value in ascii table (i.e. 59 = ';' and 10 = '\n' (line feed)).
|
||||
; bar_delimiter = 59
|
||||
; frame_delimiter = 10
|
||||
|
||||
|
||||
|
||||
# [color]
|
||||
|
||||
# # Colors can be one of seven predefined: black, blue, cyan, green, magenta, red, white, yellow.
|
||||
# # Or defined by hex code '#xxxxxx' (hex code must be within ''). User defined colors requires a
|
||||
# # terminal that can change color definitions such as Gnome-terminal or rxvt.
|
||||
# ; background = black
|
||||
# ; foreground = cyan
|
||||
|
||||
# # Gradient mode, only hex defined colors are supported, background must also be defined in hex
|
||||
# # or remain commented out. 1 = on, 0 = off. Warning: for certain terminal emulators cava will
|
||||
# # not able to restore color definitions on exit, simply restart your terminal to restore colors.
|
||||
# gradient = 1
|
||||
# gradient_color_1 = '#0099ff'
|
||||
# gradient_color_2 = '#ff3399'
|
||||
|
||||
|
||||
|
||||
[smoothing]
|
||||
|
||||
# Multiplier for the integral smoothing calculations. Takes values from 0-0.99.
|
||||
# Higher values means smoother, but less precise. Set to 0 to disable.
|
||||
; integral = 0.7
|
||||
|
||||
# Disables or enables the so-called "Monstercat smoothing". Set to 0 to disable.
|
||||
; monstercat = 1
|
||||
; waves = 1
|
||||
|
||||
# Set gravity multiplier for "drop off". Higher values means bars will drop faster.
|
||||
# Accepts only non-negative values. 0.5 means half gravity, 2 means double. Set to 0 to disable "drop off".
|
||||
; gravity = 2
|
||||
|
||||
|
||||
# In bar height, bars that would have been lower that this will not be drawn.
|
||||
; ignore = 0
|
||||
|
||||
|
||||
[eq]
|
||||
|
||||
# This one is tricky. You can have as much keys as you want.
|
||||
# Remember to uncomment more then one key! More keys = more precision.
|
||||
# Look at readme.md on github for further explanations and examples.
|
||||
#; 1 = 1 # bass
|
||||
#; 2 = 1
|
||||
#; 3 = 1 # midtone
|
||||
#; 4 = 1
|
||||
#; 5 = 1 # treble
|
||||
1=1
|
||||
2=1
|
||||
3=2
|
||||
4=1
|
||||
5=1
|
||||
|
||||
[color]
|
||||
|
||||
#background = '#191724'
|
||||
gradient = 1
|
||||
gradient_count = 6
|
||||
gradient_color_1 = '#31748f'
|
||||
gradient_color_2 = '#9ccfd8'
|
||||
gradient_color_3 = '#c4a7e7'
|
||||
gradient_color_4 = '#ebbcba'
|
||||
gradient_color_5 = '#f6c177'
|
||||
gradient_color_6 = '#eb6f92'
|
||||
|
||||
[color]
|
||||
|
||||
gradient = 1
|
||||
|
||||
gradient_color_1 = '#94e2d5'
|
||||
gradient_color_2 = '#89dceb'
|
||||
gradient_color_3 = '#74c7ec'
|
||||
gradient_color_4 = '#89b4fa'
|
||||
gradient_color_5 = '#cba6f7'
|
||||
gradient_color_6 = '#f5c2e7'
|
||||
gradient_color_7 = '#eba0ac'
|
||||
gradient_color_8 = '#f38ba8'
|
||||
167
modules/cmd/media/cava/config/config-applet
Normal file
167
modules/cmd/media/cava/config/config-applet
Normal file
@@ -0,0 +1,167 @@
|
||||
## Configuration file for CAVA. Default values are commented out. Use either ';' or '#' for commenting.
|
||||
|
||||
|
||||
[general]
|
||||
|
||||
# Smoothing mode. Can be 'normal', 'scientific' or 'waves'.
|
||||
mode = normal
|
||||
|
||||
# Accepts only non-negative values.
|
||||
framerate = 60
|
||||
|
||||
# 'autosens' will attempt to decrease sensitivity if the bars peak. 1 = on, 0 = off
|
||||
# 'overshoot' allows bars to overshoot (in % of terminal height) without initiating autosens.
|
||||
; autosens = 1
|
||||
; overshoot = 20
|
||||
|
||||
# Manual sensitivity in %. Autosens must be turned off for this to take effect.
|
||||
# 200 means double height. Accepts only non-negative values.
|
||||
; sensitivity = 100
|
||||
|
||||
# The number of bars (0-200). 0 sets it to auto (fill up console).
|
||||
# Bars' width and space between bars in number of characters.
|
||||
bars = 0
|
||||
bar_width = 2
|
||||
bar_spacing = 1
|
||||
|
||||
# Lower and higher cutoff frequencies for lowest and highest bars
|
||||
# the bandwidth of the visualizer.
|
||||
# Note: there is a minimum total bandwidth of 43Mhz x number of bars.
|
||||
# Cava will automatically increase the higher cutoff if a too low band is specified.
|
||||
; lower_cutoff_freq = 50
|
||||
; higher_cutoff_freq = 10000
|
||||
|
||||
|
||||
|
||||
[input]
|
||||
|
||||
# Audio capturing method. Possible methods are: 'pulse', 'alsa' or 'fifo'.
|
||||
# Defaults to 'pulse', 'alsa' or 'fifo', in that order, dependent on what support cava was built with.
|
||||
#
|
||||
# All input methods uses the same config variable 'source'
|
||||
# to define where it should get the audio.
|
||||
#
|
||||
# For pulseaudio 'source' will be the source. Default: 'auto', which uses the monitor source of the default sink
|
||||
# (all pulseaudio sinks(outputs) have 'monitor' sources(inputs) associated with them).
|
||||
#
|
||||
# For alsa 'source' will be the capture device.
|
||||
# For fifo 'source' will be the path to fifo-file.
|
||||
method = pulse
|
||||
source = auto
|
||||
|
||||
; method = alsa
|
||||
; source = hw:Loopback,1
|
||||
|
||||
; method = fifo
|
||||
; source = /tmp/mpd.fifo
|
||||
|
||||
|
||||
|
||||
[output]
|
||||
|
||||
# Ouput method. Can be 'ncurses', 'noncurses' or 'raw'.
|
||||
# 'noncurses' is for systems that does not suport ncurses.
|
||||
# 'raw' is a 16 bit data stream of the bar heights that can be used to send to other applications.
|
||||
# 'raw' defaults to 200 bars, which can be adjusted in the 'bars' option above.
|
||||
method = ncurses
|
||||
|
||||
# Visual styles. Can be 'stereo' or 'mono'.
|
||||
# 'stereo' mirrors both channels with low frequencies in center.
|
||||
# 'mono' averages both channels and outputs left to right lowest to highest frequencies.
|
||||
style = mono
|
||||
|
||||
# Raw output target. A fifo will be created if target does not exist.
|
||||
; raw_target = /dev/stdout
|
||||
|
||||
# Raw data format. Can be 'binary' or 'ascii'.
|
||||
; data_format = binary
|
||||
|
||||
# Binary bit format, can be '8bit' (0-255) or '16bit' (0-65530).
|
||||
; bit_format = 16bit
|
||||
|
||||
# Ascii max value. In 'ascii' mode range will run from 0 to value specified here
|
||||
; ascii_max_range = 1000
|
||||
|
||||
# Ascii delimiters. In ascii format each bar and frame is separated by a delimiters.
|
||||
# Use decimal value in ascii table (i.e. 59 = ';' and 10 = '\n' (line feed)).
|
||||
; bar_delimiter = 59
|
||||
; frame_delimiter = 10
|
||||
|
||||
|
||||
|
||||
# [color]
|
||||
|
||||
# # Colors can be one of seven predefined: black, blue, cyan, green, magenta, red, white, yellow.
|
||||
# # Or defined by hex code '#xxxxxx' (hex code must be within ''). User defined colors requires a
|
||||
# # terminal that can change color definitions such as Gnome-terminal or rxvt.
|
||||
# ; background = black
|
||||
# ; foreground = cyan
|
||||
|
||||
# # Gradient mode, only hex defined colors are supported, background must also be defined in hex
|
||||
# # or remain commented out. 1 = on, 0 = off. Warning: for certain terminal emulators cava will
|
||||
# # not able to restore color definitions on exit, simply restart your terminal to restore colors.
|
||||
# gradient = 1
|
||||
# gradient_color_1 = '#0099ff'
|
||||
# gradient_color_2 = '#ff3399'
|
||||
|
||||
|
||||
|
||||
[smoothing]
|
||||
|
||||
# Multiplier for the integral smoothing calculations. Takes values from 0-0.99.
|
||||
# Higher values means smoother, but less precise. Set to 0 to disable.
|
||||
; integral = 0.7
|
||||
|
||||
# Disables or enables the so-called "Monstercat smoothing". Set to 0 to disable.
|
||||
; monstercat = 1
|
||||
; waves = 1
|
||||
|
||||
# Set gravity multiplier for "drop off". Higher values means bars will drop faster.
|
||||
# Accepts only non-negative values. 0.5 means half gravity, 2 means double. Set to 0 to disable "drop off".
|
||||
; gravity = 1
|
||||
|
||||
|
||||
# In bar height, bars that would have been lower that this will not be drawn.
|
||||
; ignore = 0
|
||||
|
||||
|
||||
[eq]
|
||||
|
||||
# This one is tricky. You can have as much keys as you want.
|
||||
# Remember to uncomment more then one key! More keys = more precision.
|
||||
# Look at readme.md on github for further explanations and examples.
|
||||
#; 1 = 1 # bass
|
||||
#; 2 = 1
|
||||
#; 3 = 1 # midtone
|
||||
#; 4 = 1
|
||||
#; 5 = 1 # treble
|
||||
1=1
|
||||
2=1
|
||||
3=2
|
||||
4=1
|
||||
5=1
|
||||
|
||||
[color]
|
||||
|
||||
#background = '#191724'
|
||||
gradient = 1
|
||||
gradient_count = 6
|
||||
gradient_color_1 = '#31748f'
|
||||
gradient_color_2 = '#9ccfd8'
|
||||
gradient_color_3 = '#c4a7e7'
|
||||
gradient_color_4 = '#ebbcba'
|
||||
gradient_color_5 = '#f6c177'
|
||||
gradient_color_6 = '#eb6f92'
|
||||
|
||||
[color]
|
||||
|
||||
gradient = 1
|
||||
|
||||
gradient_color_1 = '#94e2d5'
|
||||
gradient_color_2 = '#89dceb'
|
||||
gradient_color_3 = '#74c7ec'
|
||||
gradient_color_4 = '#89b4fa'
|
||||
gradient_color_5 = '#cba6f7'
|
||||
gradient_color_6 = '#f5c2e7'
|
||||
gradient_color_7 = '#eba0ac'
|
||||
gradient_color_8 = '#f38ba8'
|
||||
79
modules/cmd/media/cava/config/shaders/bar_spectrum.frag
Normal file
79
modules/cmd/media/cava/config/shaders/bar_spectrum.frag
Normal file
@@ -0,0 +1,79 @@
|
||||
#version 330
|
||||
|
||||
in vec2 fragCoord;
|
||||
out vec4 fragColor;
|
||||
|
||||
// bar values. defaults to left channels first (low to high), then right (high to low).
|
||||
uniform float bars[512];
|
||||
|
||||
uniform int bars_count; // number of bars (left + right) (configurable)
|
||||
uniform int bar_width; // bar width (configurable), not used here
|
||||
uniform int bar_spacing; // space bewteen bars (configurable)
|
||||
|
||||
uniform vec3 u_resolution; // window resolution
|
||||
|
||||
//colors, configurable in cava config file (r,g,b) (0.0 - 1.0)
|
||||
uniform vec3 bg_color; // background color
|
||||
uniform vec3 fg_color; // foreground color
|
||||
|
||||
uniform int gradient_count;
|
||||
uniform vec3 gradient_colors[8]; // gradient colors
|
||||
|
||||
vec3 normalize_C(float y,vec3 col_1, vec3 col_2, float y_min, float y_max)
|
||||
{
|
||||
//create color based on fraction of this color and next color
|
||||
float yr = (y - y_min) / (y_max - y_min);
|
||||
return col_1 * (1.0 - yr) + col_2 * yr;
|
||||
}
|
||||
|
||||
void main()
|
||||
{
|
||||
// find which bar to use based on where we are on the x axis
|
||||
float x = u_resolution.x * fragCoord.x;
|
||||
int bar = int(bars_count * fragCoord.x);
|
||||
|
||||
//calculate a bar size
|
||||
float bar_size = u_resolution.x / bars_count;
|
||||
|
||||
//the y coordinate and bar values are the same
|
||||
float y = bars[bar];
|
||||
|
||||
// make sure there is a thin line at bottom
|
||||
if (y * u_resolution.y < 1.0)
|
||||
{
|
||||
y = 1.0 / u_resolution.y;
|
||||
}
|
||||
|
||||
//draw the bar up to current height
|
||||
if (y > fragCoord.y)
|
||||
{
|
||||
//make some space between bars basen on settings
|
||||
if (x > (bar + 1) * (bar_size) - bar_spacing)
|
||||
{
|
||||
fragColor = vec4(bg_color,1.0);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (gradient_count == 0)
|
||||
{
|
||||
fragColor = vec4(fg_color,1.0);
|
||||
}
|
||||
else
|
||||
{
|
||||
//find which color in the configured gradient we are at
|
||||
int color = int((gradient_count - 1) * fragCoord.y);
|
||||
|
||||
//find where on y this and next color is supposed to be
|
||||
float y_min = color / (gradient_count - 1.0);
|
||||
float y_max = (color + 1.0) / (gradient_count - 1.0);
|
||||
|
||||
//make color
|
||||
fragColor = vec4(normalize_C(fragCoord.y, gradient_colors[color], gradient_colors[color + 1], y_min, y_max), 1.0);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
fragColor = vec4(bg_color,1.0);
|
||||
}
|
||||
}
|
||||
38
modules/cmd/media/cava/config/shaders/normalized_bars.frag
Normal file
38
modules/cmd/media/cava/config/shaders/normalized_bars.frag
Normal file
@@ -0,0 +1,38 @@
|
||||
#version 330
|
||||
|
||||
in vec2 fragCoord;
|
||||
out vec4 fragColor;
|
||||
|
||||
// bar values. defaults to left channels first (low to high), then right (high to low).
|
||||
uniform float bars[512];
|
||||
|
||||
uniform int bars_count; // number of bars (left + right) (configurable)
|
||||
|
||||
uniform vec3 u_resolution; // window resolution, not used here
|
||||
|
||||
//colors, configurable in cava config file
|
||||
uniform vec3 bg_color; // background color(r,g,b) (0.0 - 1.0), not used here
|
||||
uniform vec3 fg_color; // foreground color, not used here
|
||||
|
||||
float normalize_C(float x, float x_min, float x_max, float r_min, float r_max )
|
||||
{
|
||||
float xr;
|
||||
xr = (r_max-r_min) * (x - x_min) / (x_max - x_min) + r_min;
|
||||
return xr;
|
||||
}
|
||||
|
||||
void main()
|
||||
{
|
||||
// find which bar to use based on where we are on the x axis
|
||||
int bar = int(bars_count * fragCoord.x);
|
||||
|
||||
// create a normal along the y axis based on the bar height
|
||||
float x = normalize_C(fragCoord.y, 1.0, 0.0, 0.0, bars[bar]);
|
||||
|
||||
// set color
|
||||
fragColor.r=fg_color.x*x;
|
||||
fragColor.g=fg_color.y*x;
|
||||
fragColor.b=fg_color.z*x;
|
||||
fragColor.a=1.0;
|
||||
|
||||
}
|
||||
34
modules/cmd/media/cava/config/shaders/northern_lights.frag
Normal file
34
modules/cmd/media/cava/config/shaders/northern_lights.frag
Normal file
@@ -0,0 +1,34 @@
|
||||
#version 330
|
||||
|
||||
in vec2 fragCoord;
|
||||
out vec4 fragColor;
|
||||
|
||||
// bar values. defaults to left channels first (low to high), then right (high to low).
|
||||
uniform float bars[512];
|
||||
|
||||
uniform int bars_count; // number of bars (left + right) (configurable)
|
||||
|
||||
uniform vec3 u_resolution; // window resolution, not used here
|
||||
|
||||
//colors, configurable in cava config file
|
||||
uniform vec3 bg_color; // background color(r,g,b) (0.0 - 1.0), not used here
|
||||
uniform vec3 fg_color; // foreground color, not used here
|
||||
|
||||
void main()
|
||||
{
|
||||
// find which bar to use based on where we are on the x axis
|
||||
int bar = int(bars_count * fragCoord.x);
|
||||
|
||||
float bar_y = 1.0 - abs((fragCoord.y - 0.5)) * 2.0;
|
||||
float y = (bars[bar]) * bar_y;
|
||||
|
||||
float bar_x = (fragCoord.x - float(bar) / float(bars_count)) * bars_count;
|
||||
float bar_r = 1.0 - abs((bar_x - 0.5)) * 2;
|
||||
|
||||
bar_r = bar_r * bar_r * 2;
|
||||
|
||||
// set color
|
||||
fragColor.r = fg_color.x * y * bar_r;
|
||||
fragColor.g = fg_color.y * y * bar_r;
|
||||
fragColor.b = fg_color.z * y * bar_r;
|
||||
}
|
||||
14
modules/cmd/media/cava/config/shaders/pass_through.vert
Normal file
14
modules/cmd/media/cava/config/shaders/pass_through.vert
Normal file
@@ -0,0 +1,14 @@
|
||||
#version 330
|
||||
|
||||
|
||||
// Input vertex data, different for all executions of this shader.
|
||||
layout(location = 0) in vec3 vertexPosition_modelspace;
|
||||
|
||||
// Output data ; will be interpolated for each fragment.
|
||||
out vec2 fragCoord;
|
||||
|
||||
void main()
|
||||
{
|
||||
gl_Position = vec4(vertexPosition_modelspace,1);
|
||||
fragCoord = (vertexPosition_modelspace.xy+vec2(1,1))/2.0;
|
||||
}
|
||||
22
modules/cmd/media/cava/default.nix
Normal file
22
modules/cmd/media/cava/default.nix
Normal file
@@ -0,0 +1,22 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
lib.my.makeHomePackageConfig {
|
||||
inherit config pkgs;
|
||||
packageName = "cava";
|
||||
packagePath = [ "cava" ];
|
||||
optionPath = [
|
||||
"cmd"
|
||||
"media"
|
||||
"cava"
|
||||
];
|
||||
extraConfig = {
|
||||
my.home.xdg.configFile."cava" = {
|
||||
source = ./config;
|
||||
recursive = true;
|
||||
};
|
||||
};
|
||||
}
|
||||
10
modules/cmd/media/default.nix
Normal file
10
modules/cmd/media/default.nix
Normal file
@@ -0,0 +1,10 @@
|
||||
{ ... }:
|
||||
{
|
||||
imports = [
|
||||
./all.nix
|
||||
./ffmpeg.nix
|
||||
./mpd
|
||||
./cava
|
||||
./go-musicfox
|
||||
];
|
||||
}
|
||||
16
modules/cmd/media/ffmpeg.nix
Normal file
16
modules/cmd/media/ffmpeg.nix
Normal file
@@ -0,0 +1,16 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
lib.my.makeHomePackageConfig {
|
||||
inherit config pkgs;
|
||||
packageName = "ffmpeg";
|
||||
packagePath = [ "ffmpeg" ];
|
||||
optionPath = [
|
||||
"cmd"
|
||||
"media"
|
||||
"ffmpeg"
|
||||
];
|
||||
}
|
||||
28
modules/cmd/media/go-musicfox/default.nix
Normal file
28
modules/cmd/media/go-musicfox/default.nix
Normal file
@@ -0,0 +1,28 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
lib.my.makeSwitch {
|
||||
inherit config;
|
||||
optionName = "go-musicfox";
|
||||
optionPath = [
|
||||
"cmd"
|
||||
"media"
|
||||
"go-musicfox"
|
||||
];
|
||||
config' = {
|
||||
my = {
|
||||
home = {
|
||||
home.packages = with pkgs; [
|
||||
playerctl
|
||||
go-musicfox
|
||||
];
|
||||
xdg.configFile."go-musicfox/go-musicfox.ini".source = ./go-musicfox.ini;
|
||||
};
|
||||
|
||||
cmd.media.mpd.enable = true;
|
||||
};
|
||||
};
|
||||
}
|
||||
97
modules/cmd/media/go-musicfox/go-musicfox.ini
Normal file
97
modules/cmd/media/go-musicfox/go-musicfox.ini
Normal file
@@ -0,0 +1,97 @@
|
||||
# 启动页配置
|
||||
[startup]
|
||||
# 是否显示启动页
|
||||
show=false
|
||||
# 启动页进度条是否有回弹效果
|
||||
progressOutBounce=true
|
||||
# 启动页时长
|
||||
loadingSeconds=2
|
||||
# 启动页欢迎语
|
||||
welcome=musicfox
|
||||
# 启动时自动签到
|
||||
signin=false
|
||||
|
||||
# 进度条配置
|
||||
[progress]
|
||||
# 进度条已加载字符
|
||||
fullChar=#
|
||||
# 进度条未加载字符
|
||||
emptyChar=
|
||||
|
||||
# 主页面配置
|
||||
[main]
|
||||
# 是否显示标题
|
||||
showTitle=true
|
||||
# 加载中提示
|
||||
loadingText=[加载中...]
|
||||
# 歌曲音质,可选项:standard, exhigh, lossless, hires, jyeffect(高清环绕声), sky(沉浸环绕声), jymaster(超清母带) 进行音质判断
|
||||
songLevel=hires
|
||||
# 主题颜色
|
||||
# 随机
|
||||
# primaryColor=random
|
||||
# 经典网易云音乐红
|
||||
#primaryColor="#ea403f"
|
||||
primaryColor="#6186D9"
|
||||
# 是否显示歌词
|
||||
showLyric=true
|
||||
# 歌词偏移 ms
|
||||
lyricOffset=0
|
||||
# 显示歌词翻译
|
||||
showLyricTrans=true
|
||||
# 是否显示通知信息
|
||||
showNotify=false
|
||||
# 开启pprof, --pprof时会开启
|
||||
pprofPort=9876
|
||||
# altScreen显示模式
|
||||
altScreen=true
|
||||
# 双列显示,开启务必使用等宽字体
|
||||
doubleColumn=true
|
||||
# 下载目录,默认为$HOME/.go-musicfox/download
|
||||
downloadDir=/home/imxyy/Music/go-musicfox
|
||||
# 缓存目录,默认为${MUSICFOX_ROOT}/cache
|
||||
cacheDir=/home/imxyy/Music/go-musicfox/.cache
|
||||
# 缓存大小(以MB为单位),0为不使用缓存,-1为不限制,默认为0
|
||||
cacheLimit=-1
|
||||
# 是否显示歌单下所有歌曲,默认不开启,仅获取歌单前1000首,开启后可能会占用更多内存(大量歌曲数据)和带宽(会同时发送多个请求获取歌单下歌曲数据)
|
||||
showAllSongsOfPlaylist=false
|
||||
# 动态显示menu行数
|
||||
dynamicMenuRows=true
|
||||
enableMouseEvent = false
|
||||
|
||||
[autoplay]
|
||||
# 是否开启自动播放,默认不开启
|
||||
autoPlay=true
|
||||
# 自动播放歌单,dailyReco,like,no(保持上次退出时的设置,无视offset),name:歌单名,默认dailyReco
|
||||
autoPlayList="no"
|
||||
# 播放偏移,0为第一首,-1为最后一首,默认为0
|
||||
offset=0
|
||||
# 播放模式,listLoop, order, singleLoop, random, intelligent(心动), last(上次退出时的模式),default,默认为last
|
||||
playMode=singleLoop
|
||||
|
||||
[player]
|
||||
# 播放引擎 beep / mpd(需要安装配置mpd) / osx(Mac才可用)
|
||||
# 不填Mac默认使用osx,其他系统默认使用beep(推荐的配置)
|
||||
engine=mpd
|
||||
# beep使用的mp3解码器,可选:go-mp3, minimp3 (minimp3更少的CPU占用,但是稳定性不如go-mp3)
|
||||
#beepMp3Decoder=go-mp3
|
||||
|
||||
# mpd配置
|
||||
mpdBin=mpd
|
||||
# !!!注意!!! 一定要在配置文件中设置pid_file,否则在退出时不会kill掉mpd进程
|
||||
mpdConfigFile=/home/imxyy/.config/mpd/mpd.conf
|
||||
mpdNetwork=tcp
|
||||
mpdAddr=127.0.0.1:6600
|
||||
|
||||
[unm]
|
||||
# UNM开关
|
||||
switch=true
|
||||
# UNM源: kuwo,kugou,migu,qq
|
||||
sources=kuwo,kugou
|
||||
# UNM搜索其他平台限制 0-3
|
||||
searchLimit=0
|
||||
# 解除会员限制
|
||||
enableLocalVip=true
|
||||
# 解除音质限制
|
||||
unlockSoundEffects=true
|
||||
# QQ音乐cookie文件
|
||||
qqCookieFile=
|
||||
25
modules/cmd/media/mpd/default.nix
Normal file
25
modules/cmd/media/mpd/default.nix
Normal file
@@ -0,0 +1,25 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
lib.my.makeSwitch {
|
||||
inherit config;
|
||||
optionName = "mpd";
|
||||
optionPath = [
|
||||
"cmd"
|
||||
"media"
|
||||
"mpd"
|
||||
];
|
||||
config' = {
|
||||
my.home = {
|
||||
home.packages = with pkgs; [
|
||||
mpd
|
||||
mpc-cli
|
||||
];
|
||||
services.mpris-proxy.enable = true;
|
||||
xdg.configFile."mpd/mpd.conf".source = ./mpd.conf;
|
||||
};
|
||||
};
|
||||
}
|
||||
30
modules/cmd/media/mpd/mpd.conf
Normal file
30
modules/cmd/media/mpd/mpd.conf
Normal file
@@ -0,0 +1,30 @@
|
||||
bind_to_address "127.0.0.1"
|
||||
port "6600"
|
||||
music_directory "/home/imxyy/Music/go-musicfox/.cache"
|
||||
pid_file "/home/imxyy/.config/mpd/mpd.pid"
|
||||
db_file "/home/imxyy/.config/mpd/mpd.db"
|
||||
|
||||
input {
|
||||
plugin "file"
|
||||
enabled "yes"
|
||||
}
|
||||
|
||||
input {
|
||||
plugin "curl"
|
||||
enabled "yes"
|
||||
}
|
||||
|
||||
decoder {
|
||||
plugin "ffmpeg"
|
||||
enabled "yes"
|
||||
}
|
||||
|
||||
audio_output {
|
||||
type "pipewire"
|
||||
name "pipewire"
|
||||
}
|
||||
|
||||
audio_output {
|
||||
type "pulse"
|
||||
name "pulseaudio"
|
||||
}
|
||||
88
modules/cmd/misc/default.nix
Normal file
88
modules/cmd/misc/default.nix
Normal file
@@ -0,0 +1,88 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
userfullname,
|
||||
useremail,
|
||||
...
|
||||
}:
|
||||
lib.my.makeSwitch {
|
||||
inherit config;
|
||||
default = true;
|
||||
optionName = "misc command line tools";
|
||||
optionPath = [
|
||||
"cmd"
|
||||
"misc"
|
||||
];
|
||||
config' = {
|
||||
environment.systemPackages = with pkgs; [
|
||||
vim
|
||||
wget
|
||||
git
|
||||
|
||||
file
|
||||
gnused
|
||||
gnutar
|
||||
|
||||
zip
|
||||
unzip
|
||||
xz
|
||||
p7zip
|
||||
rar
|
||||
unrar
|
||||
|
||||
pciutils
|
||||
usbutils
|
||||
|
||||
lsof
|
||||
|
||||
nmap
|
||||
traceroute
|
||||
tcping-go
|
||||
dnsutils
|
||||
|
||||
killall
|
||||
];
|
||||
|
||||
programs.zsh.enable = true;
|
||||
programs.dconf.enable = true;
|
||||
|
||||
my.home = {
|
||||
programs.home-manager.enable = true;
|
||||
programs.git = {
|
||||
enable = true;
|
||||
userName = "${userfullname}";
|
||||
userEmail = "${useremail}";
|
||||
extraConfig = {
|
||||
pull.rebase = true;
|
||||
push.autoSetupRemote = true;
|
||||
};
|
||||
};
|
||||
|
||||
home.packages = with pkgs; [
|
||||
lsd
|
||||
fd
|
||||
neofetch
|
||||
fzf
|
||||
bat
|
||||
ripgrep
|
||||
|
||||
aria2
|
||||
socat
|
||||
|
||||
nix-output-monitor
|
||||
|
||||
tmux
|
||||
|
||||
trash-cli
|
||||
|
||||
cht-sh
|
||||
|
||||
dooit
|
||||
|
||||
# translate-shell
|
||||
];
|
||||
xdg.configFile."tmux/tmux.conf".source = ./tmux.conf;
|
||||
};
|
||||
};
|
||||
}
|
||||
9
modules/cmd/misc/tmux.conf
Normal file
9
modules/cmd/misc/tmux.conf
Normal file
@@ -0,0 +1,9 @@
|
||||
set-option -g mouse on
|
||||
|
||||
set -g @plugin 'tmux-plugins/tpm'
|
||||
set -g @plugin 'tmux-plugins/tmux-sensible'
|
||||
|
||||
set -g @plugin "janoamaral/tokyo-night-tmux#legacy"
|
||||
|
||||
# Initialize TMUX plugin manager (keep this line at the very bottom of tmux.conf)
|
||||
run '~/.config/tmux/plugins/tpm/tpm'
|
||||
15
modules/cmd/monitor/all.nix
Normal file
15
modules/cmd/monitor/all.nix
Normal file
@@ -0,0 +1,15 @@
|
||||
{ config, lib, ... }:
|
||||
lib.my.makeSwitch {
|
||||
inherit config;
|
||||
optionName = "all command line monitor tools";
|
||||
optionPath = [
|
||||
"cmd"
|
||||
"monitor"
|
||||
"all"
|
||||
];
|
||||
config' = {
|
||||
my.cmd.monitor = {
|
||||
btop.enable = true;
|
||||
};
|
||||
};
|
||||
}
|
||||
212
modules/cmd/monitor/btop/config/btop.conf
Normal file
212
modules/cmd/monitor/btop/config/btop.conf
Normal file
@@ -0,0 +1,212 @@
|
||||
#? Config file for btop v. 1.2.13
|
||||
|
||||
#* Name of a btop++/bpytop/bashtop formatted ".theme" file, "Default" and "TTY" for builtin themes.
|
||||
#* Themes should be placed in "../share/btop/themes" relative to binary or "$HOME/.config/btop/themes"
|
||||
color_theme = "nord.theme"
|
||||
|
||||
#* If the theme set background should be shown, set to False if you want terminal background transparency.
|
||||
theme_background = False
|
||||
|
||||
#* Sets if 24-bit truecolor should be used, will convert 24-bit colors to 256 color (6x6x6 color cube) if false.
|
||||
truecolor = True
|
||||
|
||||
#* Set to true to force tty mode regardless if a real tty has been detected or not.
|
||||
#* Will force 16-color mode and TTY theme, set all graph symbols to "tty" and swap out other non tty friendly symbols.
|
||||
force_tty = False
|
||||
|
||||
#* Define presets for the layout of the boxes. Preset 0 is always all boxes shown with default settings. Max 9 presets.
|
||||
#* Format: "box_name:P:G,box_name:P:G" P=(0 or 1) for alternate positions, G=graph symbol to use for box.
|
||||
#* Use whitespace " " as separator between different presets.
|
||||
#* Example: "cpu:0:default,mem:0:tty,proc:1:default cpu:0:braille,proc:0:tty"
|
||||
presets = "cpu:1:default,proc:0:default cpu:0:default,mem:0:default,net:0:default cpu:0:block,net:0:tty"
|
||||
|
||||
#* Set to True to enable "h,j,k,l,g,G" keys for directional control in lists.
|
||||
#* Conflicting keys for h:"help" and k:"kill" is accessible while holding shift.
|
||||
vim_keys = False
|
||||
|
||||
#* Rounded corners on boxes, is ignored if TTY mode is ON.
|
||||
rounded_corners = True
|
||||
|
||||
#* Default symbols to use for graph creation, "braille", "block" or "tty".
|
||||
#* "braille" offers the highest resolution but might not be included in all fonts.
|
||||
#* "block" has half the resolution of braille but uses more common characters.
|
||||
#* "tty" uses only 3 different symbols but will work with most fonts and should work in a real TTY.
|
||||
#* Note that "tty" only has half the horizontal resolution of the other two, so will show a shorter historical view.
|
||||
graph_symbol = "braille"
|
||||
|
||||
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
|
||||
graph_symbol_cpu = "default"
|
||||
|
||||
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
|
||||
graph_symbol_mem = "default"
|
||||
|
||||
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
|
||||
graph_symbol_net = "default"
|
||||
|
||||
# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty".
|
||||
graph_symbol_proc = "default"
|
||||
|
||||
#* Manually set which boxes to show. Available values are "cpu mem net proc", separate values with whitespace.
|
||||
shown_boxes = "cpu mem net proc"
|
||||
|
||||
#* Update time in milliseconds, recommended 2000 ms or above for better sample times for graphs.
|
||||
update_ms = 200
|
||||
|
||||
#* Processes sorting, "pid" "program" "arguments" "threads" "user" "memory" "cpu lazy" "cpu direct",
|
||||
#* "cpu lazy" sorts top process over time (easier to follow), "cpu direct" updates top process directly.
|
||||
proc_sorting = "memory"
|
||||
|
||||
#* Reverse sorting order, True or False.
|
||||
proc_reversed = False
|
||||
|
||||
#* Show processes as a tree.
|
||||
proc_tree = True
|
||||
|
||||
#* Use the cpu graph colors in the process list.
|
||||
proc_colors = True
|
||||
|
||||
#* Use a darkening gradient in the process list.
|
||||
proc_gradient = False
|
||||
|
||||
#* If process cpu usage should be of the core it's running on or usage of the total available cpu power.
|
||||
proc_per_core = False
|
||||
|
||||
#* Show process memory as bytes instead of percent.
|
||||
proc_mem_bytes = True
|
||||
|
||||
#* Show cpu graph for each process.
|
||||
proc_cpu_graphs = True
|
||||
|
||||
#* Use /proc/[pid]/smaps for memory information in the process info box (very slow but more accurate)
|
||||
proc_info_smaps = False
|
||||
|
||||
#* Show proc box on left side of screen instead of right.
|
||||
proc_left = False
|
||||
|
||||
#* (Linux) Filter processes tied to the Linux kernel(similar behavior to htop).
|
||||
proc_filter_kernel = True
|
||||
|
||||
#* Sets the CPU stat shown in upper half of the CPU graph, "total" is always available.
|
||||
#* Select from a list of detected attributes from the options menu.
|
||||
cpu_graph_upper = "total"
|
||||
|
||||
#* Sets the CPU stat shown in lower half of the CPU graph, "total" is always available.
|
||||
#* Select from a list of detected attributes from the options menu.
|
||||
cpu_graph_lower = "total"
|
||||
|
||||
#* Toggles if the lower CPU graph should be inverted.
|
||||
cpu_invert_lower = False
|
||||
|
||||
#* Set to True to completely disable the lower CPU graph.
|
||||
cpu_single_graph = True
|
||||
|
||||
#* Show cpu box at bottom of screen instead of top.
|
||||
cpu_bottom = False
|
||||
|
||||
#* Shows the system uptime in the CPU box.
|
||||
show_uptime = True
|
||||
|
||||
#* Show cpu temperature.
|
||||
check_temp = True
|
||||
|
||||
#* Which sensor to use for cpu temperature, use options menu to select from list of available sensors.
|
||||
cpu_sensor = "Auto"
|
||||
|
||||
#* Show temperatures for cpu cores also if check_temp is True and sensors has been found.
|
||||
show_coretemp = True
|
||||
|
||||
#* Set a custom mapping between core and coretemp, can be needed on certain cpus to get correct temperature for correct core.
|
||||
#* Use lm-sensors or similar to see which cores are reporting temperatures on your machine.
|
||||
#* Format "x:y" x=core with wrong temp, y=core with correct temp, use space as separator between multiple entries.
|
||||
#* Example: "4:0 5:1 6:3"
|
||||
cpu_core_map = ""
|
||||
|
||||
#* Which temperature scale to use, available values: "celsius", "fahrenheit", "kelvin" and "rankine".
|
||||
temp_scale = "celsius"
|
||||
|
||||
#* Use base 10 for bits/bytes sizes, KB = 1000 instead of KiB = 1024.
|
||||
base_10_sizes = False
|
||||
|
||||
#* Show CPU frequency.
|
||||
show_cpu_freq = True
|
||||
|
||||
#* Draw a clock at top of screen, formatting according to strftime, empty string to disable.
|
||||
#* Special formatting: /host = hostname | /user = username | /uptime = system uptime
|
||||
clock_format = "%X"
|
||||
|
||||
#* Update main ui in background when menus are showing, set this to false if the menus is flickering too much for comfort.
|
||||
background_update = True
|
||||
|
||||
#* Custom cpu model name, empty string to disable.
|
||||
custom_cpu_name = ""
|
||||
|
||||
#* Optional filter for shown disks, should be full path of a mountpoint, separate multiple values with whitespace " ".
|
||||
#* Begin line with "exclude=" to change to exclude filter, otherwise defaults to "most include" filter. Example: disks_filter="exclude=/boot /home/user".
|
||||
disks_filter = ""
|
||||
|
||||
#* Show graphs instead of meters for memory values.
|
||||
mem_graphs = True
|
||||
|
||||
#* Show mem box below net box instead of above.
|
||||
mem_below_net = False
|
||||
|
||||
#* Count ZFS ARC in cached and available memory.
|
||||
zfs_arc_cached = True
|
||||
|
||||
#* If swap memory should be shown in memory box.
|
||||
show_swap = False
|
||||
|
||||
#* Show swap as a disk, ignores show_swap value above, inserts itself after first disk.
|
||||
swap_disk = True
|
||||
|
||||
#* If mem box should be split to also show disks info.
|
||||
show_disks = False
|
||||
|
||||
#* Filter out non physical disks. Set this to False to include network disks, RAM disks and similar.
|
||||
only_physical = True
|
||||
|
||||
#* Read disks list from /etc/fstab. This also disables only_physical.
|
||||
use_fstab = False
|
||||
|
||||
#* Setting this to True will hide all datasets, and only show ZFS pools. (IO stats will be calculated per-pool)
|
||||
zfs_hide_datasets = False
|
||||
|
||||
#* Set to true to show available disk space for privileged users.
|
||||
disk_free_priv = False
|
||||
|
||||
#* Toggles if io activity % (disk busy time) should be shown in regular disk usage view.
|
||||
show_io_stat = False
|
||||
|
||||
#* Toggles io mode for disks, showing big graphs for disk read/write speeds.
|
||||
io_mode = True
|
||||
|
||||
#* Set to True to show combined read/write io graphs in io mode.
|
||||
io_graph_combined = False
|
||||
|
||||
#* Set the top speed for the io graphs in MiB/s (100 by default), use format "mountpoint:speed" separate disks with whitespace " ".
|
||||
#* Example: "/mnt/media:100 /:20 /boot:1".
|
||||
io_graph_speeds = ""
|
||||
|
||||
#* Set fixed values for network graphs in Mebibits. Is only used if net_auto is also set to False.
|
||||
net_download = 100
|
||||
|
||||
net_upload = 100
|
||||
|
||||
#* Use network graphs auto rescaling mode, ignores any values set above and rescales down to 10 Kibibytes at the lowest.
|
||||
net_auto = False
|
||||
|
||||
#* Sync the auto scaling for download and upload to whichever currently has the highest scale.
|
||||
net_sync = True
|
||||
|
||||
#* Starts with the Network Interface specified here.
|
||||
net_iface = "eth0"
|
||||
|
||||
#* Show battery stats in top right if battery is present.
|
||||
show_battery = False
|
||||
|
||||
#* Which battery to use if multiple are present. "Auto" for auto detection.
|
||||
selected_battery = "Auto"
|
||||
|
||||
#* Set loglevel for "~/.config/btop/btop.log" levels are: "ERROR" "WARNING" "INFO" "DEBUG".
|
||||
#* The level set includes all lower levels, i.e. "DEBUG" will show all logging info.
|
||||
log_level = "WARNING"
|
||||
89
modules/cmd/monitor/btop/config/themes/nord.theme
Normal file
89
modules/cmd/monitor/btop/config/themes/nord.theme
Normal file
@@ -0,0 +1,89 @@
|
||||
#Bashtop theme with nord palette (https://www.nordtheme.com)
|
||||
#by Justin Zobel <justin.zobel@gmail.com>
|
||||
|
||||
# Colors should be in 6 or 2 character hexadecimal or single spaced rgb decimal: "#RRGGBB", "#BW" or "0-255 0-255 0-255"
|
||||
# example for white: "#ffffff", "#ff" or "255 255 255".
|
||||
|
||||
# All graphs and meters can be gradients
|
||||
# For single color graphs leave "mid" and "end" variable empty.
|
||||
# Use "start" and "end" variables for two color gradient
|
||||
# Use "start", "mid" and "end" for three color gradient
|
||||
|
||||
# Main background, empty for terminal default, need to be empty if you want transparent background
|
||||
theme[main_bg]="#2E3440"
|
||||
|
||||
# Main text color
|
||||
theme[main_fg]="#D8DEE9"
|
||||
|
||||
# Title color for boxes
|
||||
theme[title]="#8FBCBB"
|
||||
|
||||
# Higlight color for keyboard shortcuts
|
||||
theme[hi_fg]="#5E81AC"
|
||||
|
||||
# Background color of selected item in processes box
|
||||
theme[selected_bg]="#4C566A"
|
||||
|
||||
# Foreground color of selected item in processes box
|
||||
theme[selected_fg]="#ECEFF4"
|
||||
|
||||
# Color of inactive/disabled text
|
||||
theme[inactive_fg]="#4C566A"
|
||||
|
||||
# Misc colors for processes box including mini cpu graphs, details memory graph and details status text
|
||||
theme[proc_misc]="#5E81AC"
|
||||
|
||||
# Cpu box outline color
|
||||
theme[cpu_box]="#4C566A"
|
||||
|
||||
# Memory/disks box outline color
|
||||
theme[mem_box]="#4C566A"
|
||||
|
||||
# Net up/down box outline color
|
||||
theme[net_box]="#4C566A"
|
||||
|
||||
# Processes box outline color
|
||||
theme[proc_box]="#4C566A"
|
||||
|
||||
# Box divider line and small boxes line color
|
||||
theme[div_line]="#4C566A"
|
||||
|
||||
# Temperature graph colors
|
||||
theme[temp_start]="#81A1C1"
|
||||
theme[temp_mid]="#88C0D0"
|
||||
theme[temp_end]="#ECEFF4"
|
||||
|
||||
# CPU graph colors
|
||||
theme[cpu_start]="#81A1C1"
|
||||
theme[cpu_mid]="#88C0D0"
|
||||
theme[cpu_end]="#ECEFF4"
|
||||
|
||||
# Mem/Disk free meter
|
||||
theme[free_start]="#81A1C1"
|
||||
theme[free_mid]="#88C0D0"
|
||||
theme[free_end]="#ECEFF4"
|
||||
|
||||
# Mem/Disk cached meter
|
||||
theme[cached_start]="#81A1C1"
|
||||
theme[cached_mid]="#88C0D0"
|
||||
theme[cached_end]="#ECEFF4"
|
||||
|
||||
# Mem/Disk available meter
|
||||
theme[available_start]="#81A1C1"
|
||||
theme[available_mid]="#88C0D0"
|
||||
theme[available_end]="#ECEFF4"
|
||||
|
||||
# Mem/Disk used meter
|
||||
theme[used_start]="#81A1C1"
|
||||
theme[used_mid]="#88C0D0"
|
||||
theme[used_end]="#ECEFF4"
|
||||
|
||||
# Download graph colors
|
||||
theme[download_start]="#81A1C1"
|
||||
theme[download_mid]="#88C0D0"
|
||||
theme[download_end]="#ECEFF4"
|
||||
|
||||
# Upload graph colors
|
||||
theme[upload_start]="#81A1C1"
|
||||
theme[upload_mid]="#88C0D0"
|
||||
theme[upload_end]="#ECEFF4"
|
||||
22
modules/cmd/monitor/btop/default.nix
Normal file
22
modules/cmd/monitor/btop/default.nix
Normal file
@@ -0,0 +1,22 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
lib.my.makeHomePackageConfig {
|
||||
inherit config pkgs;
|
||||
packageName = "btop";
|
||||
packagePath = [ "btop" ];
|
||||
optionPath = [
|
||||
"cmd"
|
||||
"monitor"
|
||||
"btop"
|
||||
];
|
||||
extraConfig = {
|
||||
my.home.xdg.configFile."btop" = {
|
||||
source = ./config;
|
||||
recursive = true;
|
||||
};
|
||||
};
|
||||
}
|
||||
7
modules/cmd/monitor/default.nix
Normal file
7
modules/cmd/monitor/default.nix
Normal file
@@ -0,0 +1,7 @@
|
||||
{ ... }:
|
||||
{
|
||||
imports = [
|
||||
./all.nix
|
||||
./btop
|
||||
];
|
||||
}
|
||||
15
modules/cmd/shell/all.nix
Normal file
15
modules/cmd/shell/all.nix
Normal file
@@ -0,0 +1,15 @@
|
||||
{ config, lib, ... }:
|
||||
lib.my.makeSwitch {
|
||||
inherit config;
|
||||
optionName = "all shells";
|
||||
optionPath = [
|
||||
"cmd"
|
||||
"shell"
|
||||
"all"
|
||||
];
|
||||
config' = {
|
||||
my.cmd.shell = {
|
||||
zsh.enable = true;
|
||||
};
|
||||
};
|
||||
}
|
||||
7
modules/cmd/shell/default.nix
Normal file
7
modules/cmd/shell/default.nix
Normal file
@@ -0,0 +1,7 @@
|
||||
{ ... }:
|
||||
{
|
||||
imports = [
|
||||
./all.nix
|
||||
./zsh.nix
|
||||
];
|
||||
}
|
||||
49
modules/cmd/shell/zsh.nix
Normal file
49
modules/cmd/shell/zsh.nix
Normal file
@@ -0,0 +1,49 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
lib.my.makeSwitch {
|
||||
inherit config;
|
||||
default = true;
|
||||
optionName = "default zsh settings";
|
||||
optionPath = [
|
||||
"cmd"
|
||||
"shell"
|
||||
"zsh"
|
||||
];
|
||||
config' = {
|
||||
my.home =
|
||||
let
|
||||
stateHome = config.my.home.xdg.stateHome;
|
||||
in
|
||||
{
|
||||
home.packages = [ pkgs.omz ];
|
||||
programs.zsh = {
|
||||
enable = true;
|
||||
dotDir = ".config/zsh";
|
||||
history = {
|
||||
path = "${stateHome}/zsh_history";
|
||||
ignorePatterns = [
|
||||
"la"
|
||||
];
|
||||
};
|
||||
initExtra = ''
|
||||
source ${pkgs.omz}/share/omz/omz.zsh
|
||||
'';
|
||||
sessionVariables = {
|
||||
_ZL_DATA = "${stateHome}/zlua";
|
||||
_FZF_HISTORY = "${stateHome}/fzf_history";
|
||||
};
|
||||
shellAliases = {
|
||||
ls = "lsd";
|
||||
svim = "sudoedit";
|
||||
nf = "neofetch";
|
||||
tmux = "tmux -T RGB,focus,overline,mouse,clipboard,usstyle";
|
||||
pastart = "pasuspender true";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
16
modules/coding/all.nix
Normal file
16
modules/coding/all.nix
Normal file
@@ -0,0 +1,16 @@
|
||||
{ config, lib, ... }:
|
||||
lib.my.makeSwitch {
|
||||
inherit config;
|
||||
optionName = "all coding tools";
|
||||
optionPath = [
|
||||
"coding"
|
||||
"all"
|
||||
];
|
||||
config' = {
|
||||
my.coding = {
|
||||
editor.all.enable = true;
|
||||
langs.all.enable = true;
|
||||
misc.enable = true;
|
||||
};
|
||||
};
|
||||
}
|
||||
9
modules/coding/default.nix
Normal file
9
modules/coding/default.nix
Normal file
@@ -0,0 +1,9 @@
|
||||
{ ... }:
|
||||
{
|
||||
imports = [
|
||||
./all.nix
|
||||
./misc.nix
|
||||
./langs
|
||||
./editor
|
||||
];
|
||||
}
|
||||
16
modules/coding/editor/all.nix
Normal file
16
modules/coding/editor/all.nix
Normal file
@@ -0,0 +1,16 @@
|
||||
{ config, lib, ... }:
|
||||
lib.my.makeSwitch {
|
||||
inherit config;
|
||||
optionName = "all coding editors";
|
||||
optionPath = [
|
||||
"coding"
|
||||
"editor"
|
||||
"all"
|
||||
];
|
||||
config' = {
|
||||
my.coding.editor = {
|
||||
neovim.enable = true;
|
||||
vscode.enable = true;
|
||||
};
|
||||
};
|
||||
}
|
||||
8
modules/coding/editor/default.nix
Normal file
8
modules/coding/editor/default.nix
Normal file
@@ -0,0 +1,8 @@
|
||||
{ ... }:
|
||||
{
|
||||
imports = [
|
||||
./all.nix
|
||||
./neovim
|
||||
./vscode
|
||||
];
|
||||
}
|
||||
61
modules/coding/editor/neovim/default.nix
Normal file
61
modules/coding/editor/neovim/default.nix
Normal file
@@ -0,0 +1,61 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
lib.my.makeHomeProgramConfig {
|
||||
inherit config;
|
||||
programName = "neovim";
|
||||
optionPath = [
|
||||
"coding"
|
||||
"editor"
|
||||
"neovim"
|
||||
];
|
||||
extraConfig = {
|
||||
my.home = {
|
||||
xdg.configFile."nvim/init.lua".source = ./nvim/init.lua;
|
||||
xdg.configFile."nvim/lua" = {
|
||||
source = ./nvim/lua;
|
||||
recursive = true;
|
||||
};
|
||||
programs.neovim = {
|
||||
package = pkgs.neovim-unwrapped.overrideAttrs {
|
||||
treesitter-parsers = { };
|
||||
};
|
||||
enable = true;
|
||||
defaultEditor = true;
|
||||
viAlias = true;
|
||||
vimAlias = true;
|
||||
vimdiffAlias = true;
|
||||
extraPackages = with pkgs; [
|
||||
gcc
|
||||
gnumake
|
||||
|
||||
pyright
|
||||
|
||||
clang-tools
|
||||
|
||||
rust-analyzer
|
||||
pest-ide-tools
|
||||
|
||||
nil
|
||||
|
||||
gotools
|
||||
gopls
|
||||
|
||||
stylua
|
||||
lua-language-server
|
||||
|
||||
nodePackages.vscode-langservers-extracted
|
||||
nodePackages.typescript-language-server
|
||||
vue-language-server
|
||||
typescript
|
||||
nodejs
|
||||
|
||||
ripgrep
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
9
modules/coding/editor/neovim/nvim/init.lua
Normal file
9
modules/coding/editor/neovim/nvim/init.lua
Normal file
@@ -0,0 +1,9 @@
|
||||
require("core.options")
|
||||
require("core.keymaps")
|
||||
|
||||
require("langs.langs-setup")
|
||||
|
||||
require("plugins.plugins-setup")
|
||||
|
||||
require("core.autostart")
|
||||
|
||||
7
modules/coding/editor/neovim/nvim/lua/core/autostart.lua
Normal file
7
modules/coding/editor/neovim/nvim/lua/core/autostart.lua
Normal file
@@ -0,0 +1,7 @@
|
||||
-- Open tree when in config dir
|
||||
local configdir = vim.fn.system("echo $HOME/.config")
|
||||
configdir = string.sub(configdir, 1, string.len(configdir) - 1)
|
||||
if string.find(vim.fn.system("pwd"), configdir) ~= nil then
|
||||
vim.cmd("NvimTreeOpen")
|
||||
vim.cmd("NvimTmuxNavigateRight")
|
||||
end
|
||||
113
modules/coding/editor/neovim/nvim/lua/core/globals.lua
Normal file
113
modules/coding/editor/neovim/nvim/lua/core/globals.lua
Normal file
@@ -0,0 +1,113 @@
|
||||
G = {}
|
||||
|
||||
G.keymap_opt = { noremap = true, silent = true }
|
||||
|
||||
function G.close_empty_buffer()
|
||||
local flag = false
|
||||
local cleaned = true
|
||||
local empties = {}
|
||||
for _, b in ipairs(vim.api.nvim_list_bufs()) do
|
||||
local info = vim.fn.getbufinfo(b)[1]
|
||||
if info.loaded == 1 and info.listed == 1 and info.name ~= "" then
|
||||
flag = true
|
||||
elseif info.loaded == 1 and info.name == "" and info.changed == 0 then
|
||||
if flag and not cleaned then
|
||||
for e in table do
|
||||
G.buf_kill("bd", e, false)
|
||||
end
|
||||
cleaned = true
|
||||
elseif cleaned then
|
||||
G.buf_kill("bd", b, false)
|
||||
else
|
||||
table.insert(empties, b)
|
||||
end
|
||||
end
|
||||
end
|
||||
if not flag and #empties == 0 then
|
||||
vim.cmd("enew")
|
||||
end
|
||||
end
|
||||
|
||||
function G.switch_input_method(req)
|
||||
local input_status = tonumber(vim.fn.system("fcitx5-remote"))
|
||||
if input_status ~= req then
|
||||
vim.fn.system("fcitx5-remote -t")
|
||||
end
|
||||
return input_status
|
||||
end
|
||||
|
||||
|
||||
function G.buf_kill(kill_command, bufnr, force)
|
||||
kill_command = kill_command or "bd"
|
||||
|
||||
local bo = vim.bo
|
||||
local api = vim.api
|
||||
local fmt = string.format
|
||||
local fn = vim.fn
|
||||
|
||||
if bufnr == 0 or bufnr == nil then
|
||||
bufnr = api.nvim_get_current_buf()
|
||||
end
|
||||
|
||||
local bufname = api.nvim_buf_get_name(bufnr)
|
||||
|
||||
if not force then
|
||||
local choice
|
||||
if bo[bufnr].modified then
|
||||
choice = fn.confirm(fmt([[Save changes to "%s"?]], bufname), "&Yes\n&No\n&Cancel")
|
||||
if choice == 1 then
|
||||
vim.api.nvim_buf_call(bufnr, function()
|
||||
vim.cmd("w")
|
||||
end)
|
||||
elseif choice == 2 then
|
||||
force = true
|
||||
else return
|
||||
end
|
||||
elseif api.nvim_buf_get_option(bufnr, "buftype") == "terminal" then
|
||||
choice = fn.confirm(fmt([[Close "%s"?]], bufname), "&Yes\n&No\n&Cancel")
|
||||
if choice == 1 then
|
||||
force = true
|
||||
else
|
||||
return
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- Get list of windows IDs with the buffer to close
|
||||
local windows = vim.tbl_filter(function(win)
|
||||
return api.nvim_win_get_buf(win) == bufnr
|
||||
end, api.nvim_list_wins())
|
||||
|
||||
if force then
|
||||
kill_command = kill_command .. "!"
|
||||
end
|
||||
|
||||
-- Get list of active buffers
|
||||
local buffers = vim.tbl_filter(function(buf)
|
||||
return api.nvim_buf_is_valid(buf) and bo[buf].buflisted
|
||||
end, api.nvim_list_bufs())
|
||||
|
||||
-- If there is only one buffer (which has to be the current one), vim will
|
||||
-- create a new buffer on :bd.
|
||||
-- For more than one buffer, pick the previous buffer (wrapping around if necessary)
|
||||
if #buffers > 1 and #windows > 0 then
|
||||
for i, v in ipairs(buffers) do
|
||||
if v == bufnr then
|
||||
local prev_buf_idx = i == 1 and #buffers or (i - 1)
|
||||
local prev_buffer = buffers[prev_buf_idx]
|
||||
for _, win in ipairs(windows) do
|
||||
api.nvim_win_set_buf(win, prev_buffer)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- Check if buffer still exists, to ensure the target buffer wasn't killed
|
||||
-- due to options like bufhidden=wipe.
|
||||
if api.nvim_buf_is_valid(bufnr) and bo[bufnr].buflisted then
|
||||
vim.cmd(string.format("%s %d", kill_command, bufnr))
|
||||
end
|
||||
return true
|
||||
end
|
||||
|
||||
return G
|
||||
71
modules/coding/editor/neovim/nvim/lua/core/keymaps.lua
Normal file
71
modules/coding/editor/neovim/nvim/lua/core/keymaps.lua
Normal file
@@ -0,0 +1,71 @@
|
||||
vim.g.mapleader = " "
|
||||
|
||||
local keymap = vim.keymap
|
||||
local globals = require("core.globals")
|
||||
local opt = globals.keymap_opt
|
||||
local buf_kill = globals.buf_kill
|
||||
|
||||
keymap.set("v", "<S-pageup>", ":m '<-2<CR>gv=gv", opt)
|
||||
keymap.set("v", "<S-pagedown>", ":m '>+1<CR>gv=gv", opt)
|
||||
|
||||
keymap.set("n", "<leader>nh", ":nohl<CR>", opt)
|
||||
|
||||
keymap.set("n", "<leader>sv", "<C-w>v", opt)
|
||||
keymap.set("n", "<leader>sh", "<C-w>s", opt)
|
||||
|
||||
keymap.set("i", "<S-up>", "<ESC>v<up>", opt)
|
||||
keymap.set("i", "<S-down>", "<ESC>v<down>", opt)
|
||||
keymap.set("n", "<S-up>", "v<up>", opt)
|
||||
keymap.set("n", "<S-down>", "v<down>", opt)
|
||||
keymap.set("v", "<S-up>", "<up>", opt)
|
||||
keymap.set("v", "<S-down>", "<down>", opt)
|
||||
|
||||
keymap.set("i", "<S-left>", "<ESC>v<left>", opt)
|
||||
keymap.set("i", "<S-right>", "<ESC>v<right>", opt)
|
||||
keymap.set("n", "<S-left>", "v<left>", opt)
|
||||
keymap.set("n", "<S-right>", "v<right>", opt)
|
||||
keymap.set("v", "<S-left>", "<left>", opt)
|
||||
keymap.set("v", "<S-right>", "<right>", opt)
|
||||
|
||||
keymap.set("v", ".", ">gv", opt)
|
||||
keymap.set("v", ",", "<gv", opt)
|
||||
|
||||
keymap.set({ "n", "v" }, "<pageup>", "9k", opt)
|
||||
keymap.set({ "n", "v" }, "<pagedown>", "9j", opt)
|
||||
keymap.set("i", "<pageup>", "<up><up><up><up><up><up><up><up><up>", opt)
|
||||
keymap.set("i", "<pagedown>", "<down><down><down><down><down><down><down><down><down>", opt)
|
||||
|
||||
keymap.set("n", "<leader>ww", ":w<CR>", opt)
|
||||
keymap.set("n", "<leader>so", ":so<CR>", opt)
|
||||
keymap.set("n", "<leader>qq", ":q<CR>", opt)
|
||||
keymap.set("n", "<leader>qa", ":qa<CR>", opt)
|
||||
keymap.set("n", "<leader>c", function () buf_kill("bd", nil, false) end, opt)
|
||||
|
||||
keymap.set("n", "<C-up>", ":resize +5<CR>", opt)
|
||||
keymap.set("n", "<C-down>", ":resize -5<CR>", opt)
|
||||
keymap.set("n", "<C-right>", ":vert resize +5<CR>", opt)
|
||||
keymap.set("n", "<C-left>", ":vert resize -5<CR>", opt)
|
||||
|
||||
-- buffer
|
||||
keymap.set("n", "H", ":BufferLineCyclePrev<CR>", opt)
|
||||
keymap.set("n", "L", ":BufferLineCycleNext<CR>", opt)
|
||||
keymap.set("n", "<A-h>", ":BufferLineMovePrev<CR>", opt)
|
||||
keymap.set("n", "<A-l>", ":BufferLineMoveNext<CR>", opt)
|
||||
|
||||
-- reload config
|
||||
keymap.set("n", "<leader>rc", ":so ~/.config/nvim/init.lua<CR>", opt)
|
||||
keymap.set("n", "<leader>rp", ":so ~/.config/nvim/lua/plugins/plugins-setup.lua<CR>", opt)
|
||||
|
||||
-- Workspaces
|
||||
keymap.set("n", "<leader>wo", ":Telescope workspaces<CR>", opt)
|
||||
keymap.set("n", "<leader>wa", ":WorkspacesAdd<CR>", opt)
|
||||
keymap.set("n", "<leader>wr", ":WorkspacesRemove<CR>", opt)
|
||||
|
||||
-- Neovide config
|
||||
if vim.g.neovide then
|
||||
keymap.set("v", "<C-C>", "\"+y", opt)
|
||||
keymap.set("n", "<C-V>", "\"+P", opt)
|
||||
keymap.set("i", "<C-V>", "<ESC>l\"+Pli", opt)
|
||||
keymap.set("c", "<C-V>", "<C-R>+", opt)
|
||||
end
|
||||
|
||||
140
modules/coding/editor/neovim/nvim/lua/core/options.lua
Normal file
140
modules/coding/editor/neovim/nvim/lua/core/options.lua
Normal file
@@ -0,0 +1,140 @@
|
||||
local opt = vim.opt
|
||||
|
||||
-- Tab width setting
|
||||
opt.tabstop = 4
|
||||
opt.shiftwidth = 4
|
||||
opt.softtabstop = 4
|
||||
opt.expandtab = true
|
||||
opt.autoindent = true
|
||||
|
||||
-- Linenumber setting
|
||||
opt.number = true
|
||||
opt.relativenumber = true
|
||||
opt.wrap = false
|
||||
opt.cursorline = true
|
||||
|
||||
opt.mouse:append("a")
|
||||
opt.clipboard:append("unnamedplus")
|
||||
opt.splitright = true
|
||||
opt.splitbelow = true
|
||||
opt.ignorecase = true
|
||||
opt.smartcase = true
|
||||
opt.termguicolors = true
|
||||
opt.signcolumn = "yes"
|
||||
opt.colorcolumn = "110"
|
||||
opt.scrolloff = 8
|
||||
opt.sidescrolloff = 8
|
||||
|
||||
opt.updatetime = 500
|
||||
opt.timeoutlen = 500
|
||||
|
||||
opt.completeopt = ""
|
||||
|
||||
opt.autoread = true
|
||||
vim.g.autoread = true
|
||||
|
||||
vim.g.loaded_ruby_provider = 0
|
||||
|
||||
-- Hightlight on yank
|
||||
local highlight_group = vim.api.nvim_create_augroup('YankHighlight', { clear = true })
|
||||
vim.api.nvim_create_autocmd('TextYankPost', {
|
||||
callback = function()
|
||||
vim.highlight.on_yank()
|
||||
end,
|
||||
group = highlight_group,
|
||||
pattern = "*",
|
||||
})
|
||||
|
||||
-- Remember last position
|
||||
vim.cmd([[
|
||||
autocmd BufReadPost *
|
||||
\ if line("'\"") > 0 && line("'\"") <= line("$") |
|
||||
\ exe "normal! g`\"" |
|
||||
\ endif
|
||||
]])
|
||||
|
||||
-- Automaticly switch input method
|
||||
Last_input_method = 1
|
||||
vim.api.nvim_create_augroup("AutoInputMethod", {})
|
||||
vim.api.nvim_create_autocmd("InsertLeave", {
|
||||
pattern = "*",
|
||||
desc = "Automaticly switch input method",
|
||||
callback = function()
|
||||
Last_input_method = require("core.globals").switch_input_method(1)
|
||||
end,
|
||||
group = "AutoInputMethod"
|
||||
})
|
||||
vim.api.nvim_create_autocmd("CmdlineLeave", {
|
||||
pattern = "*",
|
||||
desc = "Automaticly switch input method",
|
||||
callback = function()
|
||||
require("core.globals").switch_input_method(1)
|
||||
end,
|
||||
group = "AutoInputMethod"
|
||||
})
|
||||
vim.api.nvim_create_autocmd("InsertEnter", {
|
||||
pattern = "*",
|
||||
desc = "Automaticly switch input method",
|
||||
callback = function()
|
||||
require("core.globals").switch_input_method(Last_input_method)
|
||||
end,
|
||||
group = "AutoInputMethod"
|
||||
})
|
||||
|
||||
vim.api.nvim_create_autocmd("FileType", {
|
||||
pattern = { "lua" },
|
||||
desc = "fix gf functionality inside .lua files",
|
||||
callback = function()
|
||||
---@diagnostic disable: assign-type-mismatch
|
||||
-- credit: https://github.com/sam4llis/nvim-lua-gf
|
||||
vim.opt_local.include = [[\v<((do|load)file|require|reload)[^''"]*[''"]\zs[^''"]+]]
|
||||
vim.opt_local.includeexpr = "substitute(v:fname,'\\.','/','g')"
|
||||
vim.opt_local.suffixesadd:prepend ".lua"
|
||||
vim.opt_local.suffixesadd:prepend "init.lua"
|
||||
|
||||
for _, path in pairs(vim.api.nvim_list_runtime_paths()) do
|
||||
vim.opt_local.path:append(path .. "/lua")
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
-- fix https://github.com/neovim/neovim/issues/21856
|
||||
vim.api.nvim_create_autocmd({ "VimLeave" }, {
|
||||
callback = function()
|
||||
vim.fn.jobstart("", { detach = true })
|
||||
end,
|
||||
})
|
||||
|
||||
-- MkDir
|
||||
vim.api.nvim_create_user_command("MakeDirectory", function()
|
||||
---@diagnostic disable-next-line: missing-parameter
|
||||
local path = vim.fn.expand("%")
|
||||
local dir = vim.fn.fnamemodify(path, ":p:h")
|
||||
if vim.fn.isdirectory(dir) == 0 then
|
||||
vim.fn.mkdir(dir, "p")
|
||||
else
|
||||
vim.notify("Directory already exists", vim.log.levels.WARN, { title = "Nvim" })
|
||||
end
|
||||
end, { desc = "Create directory if it doesn't exist" })
|
||||
|
||||
-- Neovide config
|
||||
if vim.g.neovide then
|
||||
local global = vim.g
|
||||
vim.o.guifont = "monospace:h14"
|
||||
global.neovide_padding_top = 0
|
||||
global.neovide_padding_bottom = 0
|
||||
global.neovide_padding_right = 0
|
||||
global.neovide_padding_left = 0
|
||||
global.neovide_hide_mouse_when_typing = true
|
||||
global.neovide_cursor_animation_length = 0.05
|
||||
global.neovide_cursor_trail_size = 0.15
|
||||
global.neovide_confirm_quit = true
|
||||
end
|
||||
|
||||
vim.api.nvim_create_autocmd({ "VimEnter" }, {
|
||||
callback = function()
|
||||
-- A dumb way to clear annoying NeoVim startup screen
|
||||
vim.cmd("normal ia")
|
||||
vim.cmd("normal u")
|
||||
end,
|
||||
})
|
||||
13
modules/coding/editor/neovim/nvim/lua/langs/go.lua
Normal file
13
modules/coding/editor/neovim/nvim/lua/langs/go.lua
Normal file
@@ -0,0 +1,13 @@
|
||||
vim.api.nvim_create_augroup("Go", {})
|
||||
vim.api.nvim_create_autocmd("BufWritePre", {
|
||||
pattern = { "*.go" },
|
||||
desc = "auto format Go files",
|
||||
callback = function()
|
||||
vim.lsp.buf.format()
|
||||
-- vim.fn.system("go fmt " .. vim.fn.expand("%:p"))
|
||||
-- vim.fn.system("goimports -w " .. vim.fn.expand("%:p"))
|
||||
-- vim.cmd("edit")
|
||||
end,
|
||||
group = "Go",
|
||||
})
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
require("langs.go")
|
||||
-- require("langs.rust")
|
||||
require("langs.lualang")
|
||||
require("langs.nix")
|
||||
require("langs.markdown")
|
||||
35
modules/coding/editor/neovim/nvim/lua/langs/lualang.lua
Normal file
35
modules/coding/editor/neovim/nvim/lua/langs/lualang.lua
Normal file
@@ -0,0 +1,35 @@
|
||||
vim.api.nvim_create_augroup("Lua", {})
|
||||
|
||||
local old = {}
|
||||
vim.api.nvim_create_autocmd("BufEnter", {
|
||||
pattern = { "*.lua" },
|
||||
desc = "auto lua file indent",
|
||||
callback = function()
|
||||
local opt = vim.opt
|
||||
-- Tab width setting
|
||||
old.tabstop = opt.tabstop
|
||||
old.shiftwidth = opt.shiftwidth
|
||||
old.softtabstop = opt.softtabstop
|
||||
old.expandtab = opt.expandtab
|
||||
opt.tabstop = 2
|
||||
opt.shiftwidth = 2
|
||||
opt.softtabstop = 2
|
||||
opt.expandtab = true
|
||||
opt.autoindent = true
|
||||
end,
|
||||
group = "Lua",
|
||||
})
|
||||
vim.api.nvim_create_autocmd("BufLeave", {
|
||||
pattern = { "*.lua" },
|
||||
desc = "auto lua file indent",
|
||||
callback = function()
|
||||
local opt = vim.opt
|
||||
-- Tab width setting
|
||||
opt.tabstop = old.tabstop
|
||||
opt.shiftwidth = old.shiftwidth
|
||||
opt.softtabstop = old.softtabstop
|
||||
opt.expandtab = old.expandtab
|
||||
end,
|
||||
group = "Lua",
|
||||
})
|
||||
|
||||
35
modules/coding/editor/neovim/nvim/lua/langs/markdown.lua
Normal file
35
modules/coding/editor/neovim/nvim/lua/langs/markdown.lua
Normal file
@@ -0,0 +1,35 @@
|
||||
vim.api.nvim_create_augroup("Markdown", {})
|
||||
|
||||
local old = {}
|
||||
vim.api.nvim_create_autocmd("BufEnter", {
|
||||
pattern = { "*.md" },
|
||||
desc = "auto md file indent",
|
||||
callback = function()
|
||||
local opt = vim.opt
|
||||
-- Tab width setting
|
||||
old.tabstop = opt.tabstop
|
||||
old.shiftwidth = opt.shiftwidth
|
||||
old.softtabstop = opt.softtabstop
|
||||
old.expandtab = opt.expandtab
|
||||
opt.tabstop = 2
|
||||
opt.shiftwidth = 2
|
||||
opt.softtabstop = 2
|
||||
opt.expandtab = true
|
||||
opt.autoindent = true
|
||||
end,
|
||||
group = "Markdown",
|
||||
})
|
||||
vim.api.nvim_create_autocmd("BufLeave", {
|
||||
pattern = { "*.md" },
|
||||
desc = "auto markdown file indent",
|
||||
callback = function()
|
||||
local opt = vim.opt
|
||||
-- Tab width setting
|
||||
opt.tabstop = old.tabstop
|
||||
opt.shiftwidth = old.shiftwidth
|
||||
opt.softtabstop = old.softtabstop
|
||||
opt.expandtab = old.expandtab
|
||||
end,
|
||||
group = "Markdown",
|
||||
})
|
||||
|
||||
35
modules/coding/editor/neovim/nvim/lua/langs/nix.lua
Normal file
35
modules/coding/editor/neovim/nvim/lua/langs/nix.lua
Normal file
@@ -0,0 +1,35 @@
|
||||
vim.api.nvim_create_augroup("Nix", {})
|
||||
|
||||
local old = {}
|
||||
vim.api.nvim_create_autocmd("BufEnter", {
|
||||
pattern = { "*.nix" },
|
||||
desc = "auto nix file indent",
|
||||
callback = function()
|
||||
local opt = vim.opt
|
||||
-- Tab width setting
|
||||
old.tabstop = opt.tabstop
|
||||
old.shiftwidth = opt.shiftwidth
|
||||
old.softtabstop = opt.softtabstop
|
||||
old.expandtab = opt.expandtab
|
||||
opt.tabstop = 2
|
||||
opt.shiftwidth = 2
|
||||
opt.softtabstop = 2
|
||||
opt.expandtab = true
|
||||
opt.autoindent = true
|
||||
end,
|
||||
group = "Nix",
|
||||
})
|
||||
vim.api.nvim_create_autocmd("BufLeave", {
|
||||
pattern = { "*.nix" },
|
||||
desc = "auto nix file indent",
|
||||
callback = function()
|
||||
local opt = vim.opt
|
||||
-- Tab width setting
|
||||
opt.tabstop = old.tabstop
|
||||
opt.shiftwidth = old.shiftwidth
|
||||
opt.softtabstop = old.softtabstop
|
||||
opt.expandtab = old.expandtab
|
||||
end,
|
||||
group = "Nix",
|
||||
})
|
||||
|
||||
11
modules/coding/editor/neovim/nvim/lua/langs/rust.lua
Normal file
11
modules/coding/editor/neovim/nvim/lua/langs/rust.lua
Normal file
@@ -0,0 +1,11 @@
|
||||
vim.api.nvim_create_augroup("Rust", {})
|
||||
vim.api.nvim_create_autocmd("BufWritePost", {
|
||||
pattern = { "*.rs" },
|
||||
desc = "auto format Rust files",
|
||||
callback = function()
|
||||
vim.fn.system("rustfmt " .. vim.fn.expand("%:p"))
|
||||
vim.cmd("edit")
|
||||
end,
|
||||
group = "Rust",
|
||||
})
|
||||
|
||||
26
modules/coding/editor/neovim/nvim/lua/plugins/autopairs.lua
Normal file
26
modules/coding/editor/neovim/nvim/lua/plugins/autopairs.lua
Normal file
@@ -0,0 +1,26 @@
|
||||
M = {
|
||||
check_ts = true,
|
||||
ts_config = {
|
||||
lua = { "string", "source" },
|
||||
javascript = { "string", "template_string" },
|
||||
},
|
||||
fast_wrap = {
|
||||
map = '<M-e>',
|
||||
chars = { '{', '[', '(', '"', "'" },
|
||||
pattern = [=[[%'%"%)%>%]%)%}%,]]=],
|
||||
end_key = '$',
|
||||
keys = 'qwertyuiopzxcvbnmasdfghjkl',
|
||||
check_comma = true,
|
||||
highlight = 'Search',
|
||||
highlight_grey='Comment'
|
||||
},
|
||||
}
|
||||
|
||||
local cmp_autopairs = require("nvim-autopairs.completion.cmp")
|
||||
local ok, cmp = pcall(require, "cmp")
|
||||
if ok then
|
||||
cmp.event:on("confirm_done", cmp_autopairs.on_confirm_done({ map_char = { tex = "" } }))
|
||||
end
|
||||
|
||||
return M
|
||||
|
||||
31
modules/coding/editor/neovim/nvim/lua/plugins/bufferline.lua
Normal file
31
modules/coding/editor/neovim/nvim/lua/plugins/bufferline.lua
Normal file
@@ -0,0 +1,31 @@
|
||||
local buf_kill = require("core.globals").buf_kill
|
||||
|
||||
M = {
|
||||
highlights = {
|
||||
buffer_selected = {
|
||||
bold = true
|
||||
}
|
||||
},
|
||||
options = {
|
||||
diagnostics = "nvim_lsp",
|
||||
offsets = {
|
||||
{
|
||||
filetype = "NvimTree",
|
||||
text = "File Explorer",
|
||||
highlight = "Directory",
|
||||
text_align = "center"
|
||||
},
|
||||
},
|
||||
close_command = function (bufnr)
|
||||
buf_kill("bd", bufnr, false)
|
||||
end,
|
||||
right_mouse_command = function (bufnr)
|
||||
buf_kill("bd", bufnr, true)
|
||||
end
|
||||
}
|
||||
}
|
||||
|
||||
vim.opt.termguicolors = true
|
||||
|
||||
return M
|
||||
|
||||
68
modules/coding/editor/neovim/nvim/lua/plugins/cmp/cmp.lua
Normal file
68
modules/coding/editor/neovim/nvim/lua/plugins/cmp/cmp.lua
Normal file
@@ -0,0 +1,68 @@
|
||||
local cmp = require("cmp")
|
||||
|
||||
M = {
|
||||
window = {
|
||||
completion = {
|
||||
border = 'rounded',
|
||||
scrollbar = '║',
|
||||
},
|
||||
documentation = {
|
||||
border = 'rounded',
|
||||
scrollbar = '║',
|
||||
},
|
||||
},
|
||||
formatting = {
|
||||
format = require('lspkind').cmp_format({
|
||||
mode = "symbol",
|
||||
maxwidth = 50,
|
||||
ellipsis_char = '...',
|
||||
symbol_map = { Codeium = "", }
|
||||
})
|
||||
},
|
||||
snippet = {
|
||||
expand = function(args)
|
||||
require("luasnip").lsp_expand(args.body)
|
||||
end,
|
||||
},
|
||||
mapping = cmp.mapping.preset.insert({
|
||||
["<C-b>"] = cmp.mapping.scroll_docs(-4),
|
||||
["<C-f>"] = cmp.mapping.scroll_docs(4),
|
||||
["<Escape>"] = cmp.mapping.abort(),
|
||||
["<Tab>"] = cmp.mapping.confirm({ select = true }),
|
||||
["<Up>"] = cmp.mapping(function (fallback)
|
||||
if cmp.visible() then
|
||||
cmp.select_prev_item()
|
||||
else
|
||||
fallback()
|
||||
end
|
||||
end, {
|
||||
"i",
|
||||
"s"
|
||||
}),
|
||||
["<Down>"] = cmp.mapping(function (fallback)
|
||||
if cmp.visible() then
|
||||
cmp.select_next_item()
|
||||
else
|
||||
fallback()
|
||||
end
|
||||
end, {
|
||||
"i",
|
||||
"s"
|
||||
}),
|
||||
}),
|
||||
sources = cmp.config.sources({
|
||||
{ name = "nvim_lsp" },
|
||||
{ name = "luasnip" },
|
||||
-- { name = "codeium" },
|
||||
{ name = "path" },
|
||||
}, {
|
||||
{ name = "buffer" },
|
||||
})
|
||||
|
||||
}
|
||||
|
||||
vim.o.wildmenu = true
|
||||
vim.o.pumheight = 10
|
||||
|
||||
return M
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
M = {
|
||||
sources = {
|
||||
friendly_snippets = true
|
||||
},
|
||||
history = true,
|
||||
updateevents = { "TextChanged", "TextChangedI" }
|
||||
}
|
||||
|
||||
-- vscode format
|
||||
require("luasnip.loaders.from_vscode").lazy_load()
|
||||
require("luasnip.loaders.from_vscode").lazy_load { paths = vim.g.vscode_snippets_path or "" }
|
||||
|
||||
-- snipmate format
|
||||
require("luasnip.loaders.from_snipmate").load()
|
||||
require("luasnip.loaders.from_snipmate").lazy_load { paths = vim.g.snipmate_snippets_path or "" }
|
||||
|
||||
-- lua format
|
||||
require("luasnip.loaders.from_lua").load()
|
||||
require("luasnip.loaders.from_lua").lazy_load { paths = vim.g.lua_snippets_path or "" }
|
||||
|
||||
local luasnip = require("luasnip")
|
||||
vim.api.nvim_create_autocmd("InsertLeave", {
|
||||
callback = function()
|
||||
if
|
||||
luasnip.session.current_nodes[vim.api.nvim_get_current_buf()]
|
||||
and not luasnip.session.jump_active
|
||||
then
|
||||
luasnip.unlink_current()
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
return M
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
M = {}
|
||||
|
||||
return M
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
local keymap = vim.keymap
|
||||
local opt = require("core.globals").keymap_opt
|
||||
|
||||
keymap.set("n", "<leader>tt", ":FloatermNew<CR>", opt)
|
||||
19
modules/coding/editor/neovim/nvim/lua/plugins/gitsigns.lua
Normal file
19
modules/coding/editor/neovim/nvim/lua/plugins/gitsigns.lua
Normal file
@@ -0,0 +1,19 @@
|
||||
M = {
|
||||
signs = {
|
||||
add = { text = '▎', color = "green" },
|
||||
change = { text = '▎', color = "blue" },
|
||||
delete = { text = '_' },
|
||||
topdelete = { text = '‾' },
|
||||
changedelete = { text = '~' },
|
||||
},
|
||||
current_line_blame = true,
|
||||
current_line_blame_opts = {
|
||||
virt_text = true,
|
||||
virt_text_pos = 'eol',
|
||||
delay = 0,
|
||||
ignore_whitespace = false,
|
||||
},
|
||||
}
|
||||
|
||||
return M
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
M = {
|
||||
enabled = true,
|
||||
indent = {
|
||||
tab_char = "▎"
|
||||
},
|
||||
scope = {
|
||||
enabled = true,
|
||||
show_start = false,
|
||||
}
|
||||
}
|
||||
|
||||
vim.opt.list = true
|
||||
|
||||
return M
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
M = {}
|
||||
|
||||
return M
|
||||
|
||||
@@ -0,0 +1,88 @@
|
||||
local servers = {
|
||||
"lua_ls",
|
||||
"pyright",
|
||||
"gopls",
|
||||
"clangd",
|
||||
"rust_analyzer",
|
||||
"ts_ls",
|
||||
"jsonls",
|
||||
"cssls",
|
||||
"nil_ls",
|
||||
"html",
|
||||
}
|
||||
|
||||
local extra_config = {
|
||||
lua_ls = {
|
||||
settings = {
|
||||
Lua = {
|
||||
workspace = {
|
||||
library = {
|
||||
vim.api.nvim_get_runtime_file("", true),
|
||||
"${3rd}/luv/library",
|
||||
"${3rd}/luassert/library",
|
||||
}
|
||||
},
|
||||
diagnostics = {
|
||||
globals = {
|
||||
"vim"
|
||||
}
|
||||
},
|
||||
completion = {
|
||||
callSnippet = "Replace"
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
rust_analyzer = {
|
||||
settings = {
|
||||
rust_analyzer = {
|
||||
check = {
|
||||
command = "clippy"
|
||||
},
|
||||
formatting = {
|
||||
command = { "rustfmt" },
|
||||
},
|
||||
}
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
local on_attach = function(client, bufnr)
|
||||
vim.api.nvim_create_autocmd("CursorHold", {
|
||||
buffer = bufnr,
|
||||
callback = function()
|
||||
local opts = {
|
||||
focusable = false,
|
||||
close_events = { "BufLeave", "CursorMoved", "InsertEnter", "FocusLost" },
|
||||
border = "rounded",
|
||||
source = "always",
|
||||
prefix = " ",
|
||||
scope = "line",
|
||||
}
|
||||
vim.diagnostic.open_float(nil, opts)
|
||||
end,
|
||||
})
|
||||
end
|
||||
local capabilities = require("cmp_nvim_lsp").default_capabilities()
|
||||
capabilities = vim.lsp.protocol.make_client_capabilities()
|
||||
capabilities.textDocument.foldingRange = {
|
||||
dynamicRegistration = false,
|
||||
lineFoldingOnly = true,
|
||||
}
|
||||
local lspconfig = require("lspconfig")
|
||||
for _, server in ipairs(servers) do
|
||||
local extra = extra_config[server] or {}
|
||||
local config = {
|
||||
on_attach = on_attach,
|
||||
capabilities = capabilities
|
||||
}
|
||||
for k, v in pairs(extra) do
|
||||
config[k] = v
|
||||
end
|
||||
lspconfig[server].setup(config)
|
||||
end
|
||||
|
||||
vim.diagnostic.config({
|
||||
virtual_lines = true
|
||||
})
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
M = {
|
||||
-- ensure_installed = require("plugins.lsp.servers")
|
||||
ensure_installed = {}
|
||||
}
|
||||
|
||||
return M
|
||||
|
||||
12
modules/coding/editor/neovim/nvim/lua/plugins/lsp/mason.lua
Normal file
12
modules/coding/editor/neovim/nvim/lua/plugins/lsp/mason.lua
Normal file
@@ -0,0 +1,12 @@
|
||||
M = {
|
||||
ui = {
|
||||
icons = {
|
||||
package_installed = "✓",
|
||||
package_pending = "➜",
|
||||
package_uninstalled = "✗"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return M
|
||||
|
||||
29
modules/coding/editor/neovim/nvim/lua/plugins/lsp/others.lua
Normal file
29
modules/coding/editor/neovim/nvim/lua/plugins/lsp/others.lua
Normal file
@@ -0,0 +1,29 @@
|
||||
-- Keymaps
|
||||
local opt = require("core.globals").keymap_opt
|
||||
|
||||
vim.keymap.set("n", "K", vim.lsp.buf.hover, opt)
|
||||
vim.keymap.set("n", "<leader>lR", vim.lsp.buf.rename, opt)
|
||||
|
||||
vim.diagnostic.config({
|
||||
virtual_text = { spacing = 4, prefix = "●" },
|
||||
signs = true,
|
||||
underline = true,
|
||||
update_in_insert = true,
|
||||
severity_sort = true,
|
||||
})
|
||||
|
||||
local signs = { Error = " ", Warn = " ", Hint = " ", Info = " " }
|
||||
for type, icon in pairs(signs) do
|
||||
local hl = "DiagnosticSign" .. type
|
||||
vim.fn.sign_define(hl, { text = icon, texthl = hl, numhl = hl })
|
||||
end
|
||||
|
||||
vim.lsp.handlers["textDocument/hover"] = vim.lsp.with(vim.lsp.handlers.hover, {
|
||||
border = "single",
|
||||
})
|
||||
--[[ vim.lsp.handlers["textDocument/signatureHelp"] = vim.lsp.with(vim.lsp.handlers.signature_help, {
|
||||
border = "single",
|
||||
focusable = false,
|
||||
relative = "cursor",
|
||||
}) ]]
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
M = {}
|
||||
|
||||
vim.keymap.set("n", "<leader>o", "<cmd>Outline<CR>",
|
||||
{ desc = "Toggle Outline" })
|
||||
|
||||
return M
|
||||
@@ -0,0 +1,15 @@
|
||||
M = {
|
||||
"lua_ls",
|
||||
"pyright",
|
||||
"gopls",
|
||||
"clangd",
|
||||
"rust_analyzer",
|
||||
"ts_ls",
|
||||
"jsonls",
|
||||
"cssls",
|
||||
"nil_ls",
|
||||
"html",
|
||||
}
|
||||
|
||||
return M
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
M = {
|
||||
bind = true, -- This is mandatory, otherwise border config won't get registered.
|
||||
handler_opts = {
|
||||
border = "rounded"
|
||||
},
|
||||
hint_prefix = "^ ",
|
||||
toggle_key = "<C-k>",
|
||||
}
|
||||
|
||||
vim.keymap.set({ 'n' }, '<leader>k', require('lsp_signature').toggle_float_win,
|
||||
{ silent = true, noremap = true, desc = 'toggle signature' })
|
||||
|
||||
vim.keymap.set({ 'n' }, 'K', vim.lsp.buf.signature_help,
|
||||
{ silent = true, noremap = true, desc = 'toggle signature' })
|
||||
|
||||
return M
|
||||
28
modules/coding/editor/neovim/nvim/lua/plugins/lualine.lua
Normal file
28
modules/coding/editor/neovim/nvim/lua/plugins/lualine.lua
Normal file
@@ -0,0 +1,28 @@
|
||||
M = {
|
||||
options = {
|
||||
theme = "tokyonight"
|
||||
},
|
||||
sections = {
|
||||
lualine_y = {
|
||||
'encoding', 'fileformat', 'filetype',
|
||||
},
|
||||
lualine_x = {
|
||||
{
|
||||
require("noice").api.status.message.get_hl,
|
||||
cond = require("noice").api.status.message.has,
|
||||
},
|
||||
{
|
||||
require("noice").api.status.command.get,
|
||||
cond = require("noice").api.status.command.has,
|
||||
color = { fg = "#ff9e64" },
|
||||
},
|
||||
{
|
||||
require("noice").api.status.search.get,
|
||||
cond = require("noice").api.status.search.has,
|
||||
color = { fg = "#ff9e64" },
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
return M
|
||||
@@ -0,0 +1,31 @@
|
||||
M = {}
|
||||
|
||||
vim.api.nvim_create_augroup("MarkdownPreviewAuto", {})
|
||||
|
||||
vim.api.nvim_create_user_command("MarkdownPreviewAutoEnable", function()
|
||||
vim.api.nvim_create_autocmd("BufEnter", {
|
||||
group = "MarkdownPreviewAuto",
|
||||
pattern = { "*.md" },
|
||||
desc = "Auto enable MarkdownPreview",
|
||||
callback = function()
|
||||
vim.cmd("MarkdownPreview")
|
||||
end,
|
||||
})
|
||||
vim.api.nvim_create_autocmd("BufLeave", {
|
||||
group = "MarkdownPreviewAuto",
|
||||
pattern = { "*.md" },
|
||||
desc = "Auto disable MarkdownPreview",
|
||||
callback = function()
|
||||
vim.cmd("MarkdownPreviewStop")
|
||||
end,
|
||||
})
|
||||
end, { desc = "Auto enable MarkdownPreview" })
|
||||
|
||||
vim.api.nvim_create_user_command("MarkdownPreviewAutoDisable",
|
||||
function()
|
||||
vim.api.nvim_clear_autocmds({ group = "MarkdownPreviewAuto" })
|
||||
end, {}
|
||||
)
|
||||
|
||||
return M
|
||||
|
||||
4
modules/coding/editor/neovim/nvim/lua/plugins/neodev.lua
Normal file
4
modules/coding/editor/neovim/nvim/lua/plugins/neodev.lua
Normal file
@@ -0,0 +1,4 @@
|
||||
M = {}
|
||||
|
||||
return M
|
||||
|
||||
21
modules/coding/editor/neovim/nvim/lua/plugins/nvim-tree.lua
Normal file
21
modules/coding/editor/neovim/nvim/lua/plugins/nvim-tree.lua
Normal file
@@ -0,0 +1,21 @@
|
||||
M = {
|
||||
sync_root_with_cwd = true,
|
||||
diagnostics = {
|
||||
enable = false,
|
||||
debounce_delay = 50,
|
||||
show_on_dirs = true
|
||||
},
|
||||
filters = {
|
||||
git_ignored = false
|
||||
}
|
||||
}
|
||||
|
||||
vim.g.loaded_netrw = 1
|
||||
vim.g.loaded_netrwPlugin = 1
|
||||
|
||||
local opt = require("core.globals").keymap_opt
|
||||
vim.keymap.set("n", "<leader>e", ":NvimTreeToggle<CR>", opt)
|
||||
vim.keymap.set("n", "<leader>te", ":NvimTreeFocus<CR>", opt)
|
||||
|
||||
return M
|
||||
|
||||
302
modules/coding/editor/neovim/nvim/lua/plugins/plugins-setup.lua
Normal file
302
modules/coding/editor/neovim/nvim/lua/plugins/plugins-setup.lua
Normal file
@@ -0,0 +1,302 @@
|
||||
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
|
||||
if not vim.loop.fs_stat(lazypath) then
|
||||
vim.fn.system({
|
||||
"git",
|
||||
"clone",
|
||||
"--filter=blob:none",
|
||||
"https://github.com/folke/lazy.nvim.git",
|
||||
lazypath
|
||||
})
|
||||
end
|
||||
vim.opt.rtp:prepend(lazypath)
|
||||
package.path = package.path .. ";" .. vim.fn.stdpath("config") .. "/lua/"
|
||||
|
||||
local plugins = {
|
||||
{
|
||||
"folke/tokyonight.nvim",
|
||||
lazy = false,
|
||||
priority = 1000,
|
||||
config = function()
|
||||
vim.cmd.colorscheme("tokyonight-storm")
|
||||
end
|
||||
},
|
||||
{
|
||||
"nvim-lualine/lualine.nvim",
|
||||
lazy = false,
|
||||
dependencies = { { "nvim-tree/nvim-web-devicons", lazy = true } },
|
||||
config = function()
|
||||
require("lualine").setup(require("plugins.lualine"))
|
||||
end
|
||||
},
|
||||
{
|
||||
"nvim-tree/nvim-tree.lua",
|
||||
lazy = false,
|
||||
dependencies = { { "nvim-tree/nvim-web-devicons", lazy = true } },
|
||||
config = function()
|
||||
require("nvim-tree").setup(require("plugins.nvim-tree"))
|
||||
end
|
||||
},
|
||||
{
|
||||
"nvim-treesitter/nvim-treesitter",
|
||||
lazy = false,
|
||||
event = "VeryLazy",
|
||||
dependencies = {
|
||||
"nvim-treesitter/nvim-treesitter-textobjects",
|
||||
"nushell/tree-sitter-nu"
|
||||
},
|
||||
config = function()
|
||||
require("nvim-treesitter.configs").setup(require("plugins.treesitter"))
|
||||
end,
|
||||
build = ":TSUpdate"
|
||||
},
|
||||
{
|
||||
url = "https://gitlab.com/HiPhish/rainbow-delimiters.nvim",
|
||||
lazy = false,
|
||||
event = "VeryLazy",
|
||||
config = function()
|
||||
require("plugins.rainbow-delimiters")
|
||||
end
|
||||
},
|
||||
{
|
||||
"lukas-reineke/indent-blankline.nvim",
|
||||
lazy = false,
|
||||
event = "VeryLazy",
|
||||
config = function()
|
||||
require("ibl").setup(require("plugins.indent-blankline"))
|
||||
end
|
||||
},
|
||||
{
|
||||
"neovim/nvim-lspconfig",
|
||||
dependencies = { "hrsh7th/cmp-nvim-lsp" },
|
||||
lazy = false,
|
||||
config = function()
|
||||
require("plugins.lsp.lspconfig")
|
||||
require("plugins.lsp.others")
|
||||
end
|
||||
},
|
||||
{
|
||||
"folke/trouble.nvim",
|
||||
dependencies = { "nvim-tree/nvim-web-devicons" },
|
||||
cmd = "Trouble",
|
||||
keys = {
|
||||
{
|
||||
"<leader>xx",
|
||||
"<cmd>Trouble diagnostics toggle<cr>",
|
||||
desc = "Diagnostics (Trouble)",
|
||||
},
|
||||
{
|
||||
"<leader>xX",
|
||||
"<cmd>Trouble diagnostics toggle filter.buf=0<cr>",
|
||||
desc = "Buffer Diagnostics (Trouble)",
|
||||
},
|
||||
{
|
||||
"<leader>cs",
|
||||
"<cmd>Trouble symbols toggle focus=false<cr>",
|
||||
desc = "Symbols (Trouble)",
|
||||
},
|
||||
{
|
||||
"<leader>cl",
|
||||
"<cmd>Trouble lsp toggle focus=false win.position=right<cr>",
|
||||
desc = "LSP Definitions / references / ... (Trouble)",
|
||||
},
|
||||
{
|
||||
"<leader>xL",
|
||||
"<cmd>Trouble loclist toggle<cr>",
|
||||
desc = "Location List (Trouble)",
|
||||
},
|
||||
{
|
||||
"<leader>xQ",
|
||||
"<cmd>Trouble qflist toggle<cr>",
|
||||
desc = "Quickfix List (Trouble)",
|
||||
},
|
||||
},
|
||||
opts = {}
|
||||
},
|
||||
{
|
||||
"MysticalDevil/inlay-hints.nvim",
|
||||
event = "LspAttach",
|
||||
dependencies = { "neovim/nvim-lspconfig" },
|
||||
config = function()
|
||||
require("inlay-hints").setup()
|
||||
end
|
||||
},
|
||||
{
|
||||
"hedyhli/outline.nvim",
|
||||
event = "LspAttach",
|
||||
config = function()
|
||||
require("outline").setup(require("plugins.lsp.outline"))
|
||||
end,
|
||||
},
|
||||
{
|
||||
"L3MON4D3/LuaSnip",
|
||||
lazy = false,
|
||||
dependencies = { { "rafamadriz/friendly-snippets", lazy = true } },
|
||||
build = "make install_jsregexp",
|
||||
config = function()
|
||||
require("luasnip").setup(require("plugins.cmp.luasnip"))
|
||||
end
|
||||
},
|
||||
{
|
||||
"hrsh7th/nvim-cmp",
|
||||
dependencies = {
|
||||
"hrsh7th/cmp-nvim-lsp",
|
||||
"L3MON4D3/LuaSnip",
|
||||
"saadparwaiz1/cmp_luasnip",
|
||||
"rafamadriz/friendly-snippets",
|
||||
"hrsh7th/cmp-path",
|
||||
"onsails/lspkind.nvim"
|
||||
},
|
||||
lazy = false,
|
||||
config = function()
|
||||
require("cmp").setup(require("plugins.cmp.cmp"))
|
||||
end
|
||||
},
|
||||
{
|
||||
"numToStr/Comment.nvim",
|
||||
lazy = false,
|
||||
event = "VeryLazy",
|
||||
config = function()
|
||||
require("Comment").setup(require("plugins.comment"))
|
||||
end
|
||||
},
|
||||
{
|
||||
"windwp/nvim-autopairs",
|
||||
lazy = false,
|
||||
event = "VeryLazy",
|
||||
dependencies = { "hrsh7th/nvim-cmp" },
|
||||
config = function()
|
||||
require("nvim-autopairs").setup(require("plugins.autopairs"))
|
||||
end
|
||||
},
|
||||
{
|
||||
"akinsho/bufferline.nvim",
|
||||
lazy = false,
|
||||
config = function()
|
||||
require("bufferline").setup(require("plugins.bufferline"))
|
||||
end
|
||||
},
|
||||
{
|
||||
"lewis6991/gitsigns.nvim",
|
||||
lazy = false,
|
||||
event = "VeryLazy",
|
||||
config = function()
|
||||
require("gitsigns").setup(require("plugins.gitsigns"))
|
||||
end
|
||||
},
|
||||
{
|
||||
"nvim-telescope/telescope.nvim",
|
||||
tag = "0.1.2",
|
||||
dependencies = { "nvim-lua/plenary.nvim", "BurntSushi/ripgrep" },
|
||||
config = function()
|
||||
require("telescope").setup(require("plugins.telescope"))
|
||||
end
|
||||
},
|
||||
{
|
||||
"alexghergh/nvim-tmux-navigation",
|
||||
lazy = false,
|
||||
event = "VeryLazy",
|
||||
config = function()
|
||||
require("nvim-tmux-navigation").setup(require("plugins.tmuxnav"))
|
||||
end
|
||||
},
|
||||
{
|
||||
"natecraddock/sessions.nvim",
|
||||
lazy = false,
|
||||
event = "VeryLazy",
|
||||
config = function()
|
||||
require("sessions").setup(require("plugins.sessions"))
|
||||
end
|
||||
},
|
||||
{
|
||||
"natecraddock/workspaces.nvim",
|
||||
lazy = false,
|
||||
event = "VeryLazy",
|
||||
dependencies = { "nvim-telescope/telescope.nvim", "natecraddock/sessions.nvim" },
|
||||
config = function()
|
||||
require("workspaces").setup(require("plugins.workspaces"))
|
||||
require("telescope").load_extension("workspaces")
|
||||
end
|
||||
},
|
||||
--[[ {
|
||||
"iamcco/markdown-preview.nvim",
|
||||
cmd = { "MarkdownPreviewToggle", "MarkdownPreview", "MarkdownPreviewStop", "MarkdownPreviewAutoEnable", "MarkdownPreviewAutoDisable" },
|
||||
ft = { "markdown" },
|
||||
build = function()
|
||||
vim.fn["mkdp#util#install"]()
|
||||
end,
|
||||
config = function()
|
||||
require("plugins.markdown-preview")
|
||||
end
|
||||
}, ]]
|
||||
--[[ {
|
||||
"dhruvasagar/vim-table-mode",
|
||||
lazy = true,
|
||||
event = "BufEnter *.md",
|
||||
config = function()
|
||||
require("plugins.table-mode")
|
||||
end
|
||||
}, ]]
|
||||
{
|
||||
"lukas-reineke/headlines.nvim",
|
||||
dependencies = "nvim-treesitter/nvim-treesitter",
|
||||
config = true, -- or `opts = {}`
|
||||
},
|
||||
{
|
||||
"folke/noice.nvim",
|
||||
lazy = false,
|
||||
event = "VeryLazy",
|
||||
dependencies = {
|
||||
"MunifTanjim/nui.nvim",
|
||||
"rcarriga/nvim-notify",
|
||||
},
|
||||
opts = {
|
||||
override = {
|
||||
["vim.lsp.util.convert_input_to_markdown_lines"] = true,
|
||||
["vim.lsp.util.stylize_markdown"] = true,
|
||||
["cmp.entry.get_documentation"] = true,
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"voldikss/vim-floaterm",
|
||||
lazy = false,
|
||||
event = "VeryLazy",
|
||||
config = function()
|
||||
require("plugins.floaterm")
|
||||
end
|
||||
},
|
||||
{
|
||||
"folke/todo-comments.nvim",
|
||||
lazy = false,
|
||||
event = "VeryLazy",
|
||||
opts = {},
|
||||
},
|
||||
{
|
||||
"ojroques/nvim-osc52",
|
||||
event = "BufEnter",
|
||||
config = function()
|
||||
require("osc52").setup({
|
||||
tmux_passthrough = true
|
||||
})
|
||||
local function copy()
|
||||
if vim.v.event.operator == "y" and vim.v.event.regname == "+" then
|
||||
require("osc52").copy_register("+")
|
||||
end
|
||||
end
|
||||
vim.api.nvim_create_autocmd("TextYankPost", {callback = copy})
|
||||
end
|
||||
},
|
||||
{
|
||||
"pest-parser/pest.vim",
|
||||
event = "VeryLazy",
|
||||
opts = {}
|
||||
}
|
||||
}
|
||||
|
||||
local opts = {
|
||||
rocks = {
|
||||
enabled = false
|
||||
}
|
||||
}
|
||||
|
||||
require("lazy").setup(plugins, opts)
|
||||
@@ -0,0 +1,21 @@
|
||||
local rainbow_delimiters = require("rainbow-delimiters")
|
||||
vim.g.rainbow_delimiters = {
|
||||
strategy = {
|
||||
[''] = rainbow_delimiters.strategy['global'],
|
||||
vim = rainbow_delimiters.strategy['local'],
|
||||
},
|
||||
query = {
|
||||
[''] = 'rainbow-delimiters',
|
||||
lua = 'rainbow-blocks',
|
||||
},
|
||||
highlight = {
|
||||
'RainbowDelimiterRed',
|
||||
'RainbowDelimiterYellow',
|
||||
'RainbowDelimiterBlue',
|
||||
'RainbowDelimiterOrange',
|
||||
'RainbowDelimiterGreen',
|
||||
'RainbowDelimiterViolet',
|
||||
'RainbowDelimiterCyan',
|
||||
},
|
||||
}
|
||||
|
||||
10
modules/coding/editor/neovim/nvim/lua/plugins/sessions.lua
Normal file
10
modules/coding/editor/neovim/nvim/lua/plugins/sessions.lua
Normal file
@@ -0,0 +1,10 @@
|
||||
M = {
|
||||
events = { "VimLeavePre" },
|
||||
indent = {
|
||||
tab_char = "▏"
|
||||
},
|
||||
session_filepath = vim.fn.stdpath("data") .. "/session",
|
||||
}
|
||||
|
||||
return M
|
||||
|
||||
34
modules/coding/editor/neovim/nvim/lua/plugins/table-mode.lua
Normal file
34
modules/coding/editor/neovim/nvim/lua/plugins/table-mode.lua
Normal file
@@ -0,0 +1,34 @@
|
||||
M = {}
|
||||
|
||||
vim.g.table_mode_corner = "|"
|
||||
|
||||
vim.api.nvim_create_augroup("TableModeAuto", {})
|
||||
|
||||
vim.api.nvim_create_user_command("TableModeAutoEnable", function()
|
||||
vim.api.nvim_clear_autocmds({ group = "TableModeAuto" })
|
||||
vim.api.nvim_create_autocmd("BufEnter", {
|
||||
group = "TableModeAuto",
|
||||
pattern = { "*.md" },
|
||||
desc = "Auto enable TableMode",
|
||||
callback = function()
|
||||
vim.cmd("TableModeEnable")
|
||||
end,
|
||||
})
|
||||
vim.api.nvim_create_autocmd("BufWrite", {
|
||||
group = "TableModeAuto",
|
||||
pattern = { "*.md" },
|
||||
desc = "Auto enable TableMode",
|
||||
callback = function()
|
||||
vim.cmd("TableModeRealign")
|
||||
end,
|
||||
})
|
||||
end, { desc = "Auto enable TableMode" })
|
||||
|
||||
vim.api.nvim_create_user_command("TableModeAutoDisable",
|
||||
function()
|
||||
vim.api.nvim_clear_autocmds({ group = "TableModeAuto" })
|
||||
end, {}
|
||||
)
|
||||
|
||||
return M
|
||||
|
||||
45
modules/coding/editor/neovim/nvim/lua/plugins/telescope.lua
Normal file
45
modules/coding/editor/neovim/nvim/lua/plugins/telescope.lua
Normal file
@@ -0,0 +1,45 @@
|
||||
M = {
|
||||
defaults = {
|
||||
winblend = 50,
|
||||
path_display = {
|
||||
"smart",
|
||||
shorten = 3
|
||||
}
|
||||
},
|
||||
pickers = {
|
||||
lsp_definitions = {
|
||||
theme = "cursor",
|
||||
layout_config = { width = 0.6, height = 0.3},
|
||||
},
|
||||
lsp_references = {
|
||||
theme = "cursor",
|
||||
layout_config = { width = 0.6, height = 0.3 },
|
||||
},
|
||||
current_buffer_fuzzy_find = {
|
||||
theme = "dropdown",
|
||||
layout_config = { height = 0.7, width = 0.55, preview_cutoff = 0 ,prompt_position = "top" }
|
||||
},
|
||||
lsp_document_symbols = {
|
||||
theme = "ivy",
|
||||
layout_config = { height = 0.25 }
|
||||
}
|
||||
},
|
||||
}
|
||||
|
||||
local opt = require("core.globals").keymap_opt
|
||||
local keymap = vim.keymap
|
||||
local builtin = require('telescope.builtin')
|
||||
|
||||
keymap.set('n', '<leader>ff', builtin.find_files, opt)
|
||||
keymap.set('n', '<leader>gf', builtin.git_files, opt)
|
||||
keymap.set('n', '<leader>fg', builtin.live_grep, opt)
|
||||
keymap.set('n', '<leader>fb', builtin.buffers, opt)
|
||||
keymap.set('n', '<leader>fh', builtin.help_tags, opt)
|
||||
-- keymap.set('n', '<leader>lD', builtin.diagnostics, opt)
|
||||
keymap.set('n', '<leader>ld', builtin.lsp_definitions, opt)
|
||||
keymap.set('n', '<leader>lr', builtin.lsp_references, opt)
|
||||
keymap.set('n', '<leader>ls', builtin.lsp_document_symbols, opt)
|
||||
keymap.set('n', '<leader>/', builtin.current_buffer_fuzzy_find, opt)
|
||||
|
||||
return M
|
||||
|
||||
14
modules/coding/editor/neovim/nvim/lua/plugins/tmuxnav.lua
Normal file
14
modules/coding/editor/neovim/nvim/lua/plugins/tmuxnav.lua
Normal file
@@ -0,0 +1,14 @@
|
||||
M = {}
|
||||
|
||||
local tmuxnav = require("nvim-tmux-navigation")
|
||||
local keymap = vim.keymap
|
||||
|
||||
keymap.set("n", "<C-H>", tmuxnav.NvimTmuxNavigateLeft)
|
||||
keymap.set("n", "<C-J>", tmuxnav.NvimTmuxNavigateDown)
|
||||
keymap.set("n", "<C-K>", tmuxnav.NvimTmuxNavigateUp)
|
||||
keymap.set("n", "<C-L>", tmuxnav.NvimTmuxNavigateRight)
|
||||
keymap.set("n", "<C-\\>", tmuxnav.NvimTmuxNavigateLastActive)
|
||||
keymap.set("n", "<C-Space>", tmuxnav.NvimTmuxNavigateNext)
|
||||
|
||||
return M
|
||||
|
||||
20
modules/coding/editor/neovim/nvim/lua/plugins/treesitter.lua
Normal file
20
modules/coding/editor/neovim/nvim/lua/plugins/treesitter.lua
Normal file
@@ -0,0 +1,20 @@
|
||||
M = {
|
||||
auto_install = true,
|
||||
parser_install_dir = "$HOME/.local/share/nvim/lazy/nvim-treesitter",
|
||||
sync_install = true,
|
||||
modules = {},
|
||||
ignore_install = {},
|
||||
|
||||
highlight = { enable = true },
|
||||
indent = { enable = true }
|
||||
}
|
||||
|
||||
vim.filetype.add({
|
||||
pattern = {
|
||||
[".*/hypr/.*%.conf"] = "hyprlang",
|
||||
[".*%.hl"] = "hyprlang"
|
||||
},
|
||||
})
|
||||
|
||||
return M
|
||||
|
||||
14
modules/coding/editor/neovim/nvim/lua/plugins/workspaces.lua
Normal file
14
modules/coding/editor/neovim/nvim/lua/plugins/workspaces.lua
Normal file
@@ -0,0 +1,14 @@
|
||||
M = {
|
||||
hooks = {
|
||||
open = function ()
|
||||
require("core.globals").close_empty_buffer()
|
||||
vim.cmd("enew")
|
||||
vim.cmd("bufdo bd")
|
||||
require("sessions").load(nil, { silent = true })
|
||||
vim.cmd("NvimTreeFocus")
|
||||
end
|
||||
},
|
||||
}
|
||||
|
||||
return M
|
||||
|
||||
30
modules/coding/editor/vscode/default.nix
Normal file
30
modules/coding/editor/vscode/default.nix
Normal file
@@ -0,0 +1,30 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
lib.my.makeHomeProgramConfig {
|
||||
inherit config;
|
||||
programName = "neovim";
|
||||
optionPath = [
|
||||
"coding"
|
||||
"editor"
|
||||
"vscode"
|
||||
];
|
||||
extraConfig = {
|
||||
my.home = {
|
||||
programs.vscode = {
|
||||
enable = true;
|
||||
package = pkgs.vscodium;
|
||||
profiles.default = {
|
||||
extensions = with pkgs.open-vsx; [
|
||||
eamodio.gitlens
|
||||
rust-lang.rust-analyzer
|
||||
dbaeumer.vscode-eslint
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
205
modules/coding/github-cli-comp
Normal file
205
modules/coding/github-cli-comp
Normal file
@@ -0,0 +1,205 @@
|
||||
#compdef gh
|
||||
|
||||
# zsh completion for gh -*- shell-script -*-
|
||||
|
||||
__gh_debug()
|
||||
{
|
||||
local file="$BASH_COMP_DEBUG_FILE"
|
||||
if [[ -n ${file} ]]; then
|
||||
echo "$*" >> "${file}"
|
||||
fi
|
||||
}
|
||||
|
||||
_gh()
|
||||
{
|
||||
local shellCompDirectiveError=1
|
||||
local shellCompDirectiveNoSpace=2
|
||||
local shellCompDirectiveNoFileComp=4
|
||||
local shellCompDirectiveFilterFileExt=8
|
||||
local shellCompDirectiveFilterDirs=16
|
||||
|
||||
local lastParam lastChar flagPrefix requestComp out directive comp lastComp noSpace
|
||||
local -a completions
|
||||
|
||||
__gh_debug "\n========= starting completion logic =========="
|
||||
__gh_debug "CURRENT: ${CURRENT}, words[*]: ${words[*]}"
|
||||
|
||||
# The user could have moved the cursor backwards on the command-line.
|
||||
# We need to trigger completion from the $CURRENT location, so we need
|
||||
# to truncate the command-line ($words) up to the $CURRENT location.
|
||||
# (We cannot use $CURSOR as its value does not work when a command is an alias.)
|
||||
words=("${=words[1,CURRENT]}")
|
||||
__gh_debug "Truncated words[*]: ${words[*]},"
|
||||
|
||||
lastParam=${words[-1]}
|
||||
lastChar=${lastParam[-1]}
|
||||
__gh_debug "lastParam: ${lastParam}, lastChar: ${lastChar}"
|
||||
|
||||
# For zsh, when completing a flag with an = (e.g., gh -n=<TAB>)
|
||||
# completions must be prefixed with the flag
|
||||
setopt local_options BASH_REMATCH
|
||||
if [[ "${lastParam}" =~ '-.*=' ]]; then
|
||||
# We are dealing with a flag with an =
|
||||
flagPrefix="-P ${BASH_REMATCH}"
|
||||
fi
|
||||
|
||||
# Prepare the command to obtain completions
|
||||
requestComp="${words[1]} __complete ${words[2,-1]}"
|
||||
if [ "${lastChar}" = "" ]; then
|
||||
# If the last parameter is complete (there is a space following it)
|
||||
# We add an extra empty parameter so we can indicate this to the go completion code.
|
||||
__gh_debug "Adding extra empty parameter"
|
||||
requestComp="${requestComp} \"\""
|
||||
fi
|
||||
|
||||
__gh_debug "About to call: eval ${requestComp}"
|
||||
|
||||
# Use eval to handle any environment variables and such
|
||||
out=$(eval ${requestComp} 2>/dev/null)
|
||||
__gh_debug "completion output: ${out}"
|
||||
|
||||
# Extract the directive integer following a : from the last line
|
||||
local lastLine
|
||||
while IFS='\n' read -r line; do
|
||||
lastLine=${line}
|
||||
done < <(printf "%s\n" "${out[@]}")
|
||||
__gh_debug "last line: ${lastLine}"
|
||||
|
||||
if [ "${lastLine[1]}" = : ]; then
|
||||
directive=${lastLine[2,-1]}
|
||||
# Remove the directive including the : and the newline
|
||||
local suffix
|
||||
(( suffix=${#lastLine}+2))
|
||||
out=${out[1,-$suffix]}
|
||||
else
|
||||
# There is no directive specified. Leave $out as is.
|
||||
__gh_debug "No directive found. Setting do default"
|
||||
directive=0
|
||||
fi
|
||||
|
||||
__gh_debug "directive: ${directive}"
|
||||
__gh_debug "completions: ${out}"
|
||||
__gh_debug "flagPrefix: ${flagPrefix}"
|
||||
|
||||
if [ $((directive & shellCompDirectiveError)) -ne 0 ]; then
|
||||
__gh_debug "Completion received error. Ignoring completions."
|
||||
return
|
||||
fi
|
||||
|
||||
local activeHelpMarker="_activeHelp_ "
|
||||
local endIndex=${#activeHelpMarker}
|
||||
local startIndex=$((${#activeHelpMarker}+1))
|
||||
local hasActiveHelp=0
|
||||
while IFS='\n' read -r comp; do
|
||||
# Check if this is an activeHelp statement (i.e., prefixed with $activeHelpMarker)
|
||||
if [ "${comp[1,$endIndex]}" = "$activeHelpMarker" ];then
|
||||
__gh_debug "ActiveHelp found: $comp"
|
||||
comp="${comp[$startIndex,-1]}"
|
||||
if [ -n "$comp" ]; then
|
||||
compadd -x "${comp}"
|
||||
__gh_debug "ActiveHelp will need delimiter"
|
||||
hasActiveHelp=1
|
||||
fi
|
||||
|
||||
continue
|
||||
fi
|
||||
|
||||
if [ -n "$comp" ]; then
|
||||
# If requested, completions are returned with a description.
|
||||
# The description is preceded by a TAB character.
|
||||
# For zsh's _describe, we need to use a : instead of a TAB.
|
||||
# We first need to escape any : as part of the completion itself.
|
||||
comp=${comp//:/\\:}
|
||||
|
||||
local tab="$(printf '\t')"
|
||||
comp=${comp//$tab/:}
|
||||
|
||||
__gh_debug "Adding completion: ${comp}"
|
||||
completions+=${comp}
|
||||
lastComp=$comp
|
||||
fi
|
||||
done < <(printf "%s\n" "${out[@]}")
|
||||
|
||||
# Add a delimiter after the activeHelp statements, but only if:
|
||||
# - there are completions following the activeHelp statements, or
|
||||
# - file completion will be performed (so there will be choices after the activeHelp)
|
||||
if [ $hasActiveHelp -eq 1 ]; then
|
||||
if [ ${#completions} -ne 0 ] || [ $((directive & shellCompDirectiveNoFileComp)) -eq 0 ]; then
|
||||
__gh_debug "Adding activeHelp delimiter"
|
||||
compadd -x "--"
|
||||
hasActiveHelp=0
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ $((directive & shellCompDirectiveNoSpace)) -ne 0 ]; then
|
||||
__gh_debug "Activating nospace."
|
||||
noSpace="-S ''"
|
||||
fi
|
||||
|
||||
if [ $((directive & shellCompDirectiveFilterFileExt)) -ne 0 ]; then
|
||||
# File extension filtering
|
||||
local filteringCmd
|
||||
filteringCmd='_files'
|
||||
for filter in ${completions[@]}; do
|
||||
if [ ${filter[1]} != '*' ]; then
|
||||
# zsh requires a glob pattern to do file filtering
|
||||
filter="\*.$filter"
|
||||
fi
|
||||
filteringCmd+=" -g $filter"
|
||||
done
|
||||
filteringCmd+=" ${flagPrefix}"
|
||||
|
||||
__gh_debug "File filtering command: $filteringCmd"
|
||||
_arguments '*:filename:'"$filteringCmd"
|
||||
elif [ $((directive & shellCompDirectiveFilterDirs)) -ne 0 ]; then
|
||||
# File completion for directories only
|
||||
local subdir
|
||||
subdir="${completions[1]}"
|
||||
if [ -n "$subdir" ]; then
|
||||
__gh_debug "Listing directories in $subdir"
|
||||
pushd "${subdir}" >/dev/null 2>&1
|
||||
else
|
||||
__gh_debug "Listing directories in ."
|
||||
fi
|
||||
|
||||
local result
|
||||
_arguments '*:dirname:_files -/'" ${flagPrefix}"
|
||||
result=$?
|
||||
if [ -n "$subdir" ]; then
|
||||
popd >/dev/null 2>&1
|
||||
fi
|
||||
return $result
|
||||
else
|
||||
__gh_debug "Calling _describe"
|
||||
if eval _describe "completions" completions $flagPrefix $noSpace; then
|
||||
__gh_debug "_describe found some completions"
|
||||
|
||||
# Return the success of having called _describe
|
||||
return 0
|
||||
else
|
||||
__gh_debug "_describe did not find completions."
|
||||
__gh_debug "Checking if we should do file completion."
|
||||
if [ $((directive & shellCompDirectiveNoFileComp)) -ne 0 ]; then
|
||||
__gh_debug "deactivating file completion"
|
||||
|
||||
# We must return an error code here to let zsh know that there were no
|
||||
# completions found by _describe; this is what will trigger other
|
||||
# matching algorithms to attempt to find completions.
|
||||
# For example zsh can match letters in the middle of words.
|
||||
return 1
|
||||
else
|
||||
# Perform file completion
|
||||
__gh_debug "Activating file completion"
|
||||
|
||||
# We must return the result of this command, so it must be the
|
||||
# last command, or else we must store its result to return it.
|
||||
_arguments '*:filename:_files'" ${flagPrefix}"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# don't run the completion function when being source-ed or eval-ed
|
||||
if [ "$funcstack[1]" = "_gh" ]; then
|
||||
_gh
|
||||
fi
|
||||
20
modules/coding/langs/all.nix
Normal file
20
modules/coding/langs/all.nix
Normal file
@@ -0,0 +1,20 @@
|
||||
{ config, lib, ... }:
|
||||
lib.my.makeSwitch {
|
||||
inherit config;
|
||||
optionName = "all coding langs";
|
||||
optionPath = [
|
||||
"coding"
|
||||
"langs"
|
||||
"all"
|
||||
];
|
||||
config' = {
|
||||
my.coding.langs = {
|
||||
c.enable = true;
|
||||
go.enable = true;
|
||||
js.enable = true;
|
||||
python.enable = true;
|
||||
rust.enable = true;
|
||||
lua.enable = true;
|
||||
};
|
||||
};
|
||||
}
|
||||
22
modules/coding/langs/c.nix
Normal file
22
modules/coding/langs/c.nix
Normal file
@@ -0,0 +1,22 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
lib.my.makeSwitch {
|
||||
inherit config;
|
||||
optionName = "c";
|
||||
optionPath = [
|
||||
"coding"
|
||||
"langs"
|
||||
"c"
|
||||
];
|
||||
config' = {
|
||||
my.home.home.packages = with pkgs; [
|
||||
gcc
|
||||
clang-tools
|
||||
cmake
|
||||
];
|
||||
};
|
||||
}
|
||||
12
modules/coding/langs/default.nix
Normal file
12
modules/coding/langs/default.nix
Normal file
@@ -0,0 +1,12 @@
|
||||
{ ... }:
|
||||
{
|
||||
imports = [
|
||||
./all.nix
|
||||
./c.nix
|
||||
./go.nix
|
||||
./js.nix
|
||||
./rust.nix
|
||||
./python.nix
|
||||
./lua.nix
|
||||
];
|
||||
}
|
||||
21
modules/coding/langs/go.nix
Normal file
21
modules/coding/langs/go.nix
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
lib.my.makeHomePackageConfig {
|
||||
inherit config pkgs;
|
||||
packageName = "go";
|
||||
packagePath = [ "go" ];
|
||||
optionPath = [
|
||||
"coding"
|
||||
"langs"
|
||||
"go"
|
||||
];
|
||||
extraConfig = {
|
||||
my.persist.homeDirs = [
|
||||
"go"
|
||||
];
|
||||
};
|
||||
}
|
||||
33
modules/coding/langs/js.nix
Normal file
33
modules/coding/langs/js.nix
Normal file
@@ -0,0 +1,33 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
lib.my.makeSwitch {
|
||||
inherit config;
|
||||
optionName = "js";
|
||||
optionPath = [
|
||||
"coding"
|
||||
"langs"
|
||||
"js"
|
||||
];
|
||||
config' = {
|
||||
my.home = {
|
||||
home.packages = with pkgs; [
|
||||
nodejs
|
||||
nodePackages.npm
|
||||
|
||||
typescript
|
||||
];
|
||||
home.file.".npmrc".text = ''
|
||||
prefix = ''${HOME}/.npm-global
|
||||
registry = https://registry.npmmirror.com
|
||||
'';
|
||||
};
|
||||
my.persist.homeDirs = [
|
||||
".npm"
|
||||
".npm-global"
|
||||
];
|
||||
};
|
||||
}
|
||||
20
modules/coding/langs/lua.nix
Normal file
20
modules/coding/langs/lua.nix
Normal file
@@ -0,0 +1,20 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
lib.my.makeSwitch {
|
||||
inherit config;
|
||||
optionName = "lua";
|
||||
optionPath = [
|
||||
"coding"
|
||||
"langs"
|
||||
"lua"
|
||||
];
|
||||
config' = {
|
||||
my.home.home.packages = with pkgs; [
|
||||
luajit
|
||||
];
|
||||
};
|
||||
}
|
||||
21
modules/coding/langs/python.nix
Normal file
21
modules/coding/langs/python.nix
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
lib.my.makeHomePackageConfig {
|
||||
inherit config pkgs;
|
||||
packageName = "python3";
|
||||
packagePath = [ "python3" ];
|
||||
optionPath = [
|
||||
"coding"
|
||||
"langs"
|
||||
"python"
|
||||
];
|
||||
extraConfig = {
|
||||
my.home.home.packages = with pkgs; [
|
||||
uv
|
||||
];
|
||||
};
|
||||
}
|
||||
42
modules/coding/langs/rust.nix
Normal file
42
modules/coding/langs/rust.nix
Normal file
@@ -0,0 +1,42 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
lib.my.makeSwitch {
|
||||
inherit config;
|
||||
optionName = "rust";
|
||||
optionPath = [
|
||||
"coding"
|
||||
"langs"
|
||||
"rust"
|
||||
];
|
||||
config' = {
|
||||
my.home = {
|
||||
home.packages = with pkgs; [
|
||||
(fenix.stable.withComponents [
|
||||
"cargo"
|
||||
"clippy"
|
||||
"rust-src"
|
||||
"rustc"
|
||||
"rustfmt"
|
||||
])
|
||||
evcxr # rust repl
|
||||
];
|
||||
home.file.".cargo/config.toml".text = ''
|
||||
[source.crates-io]
|
||||
replace-with = 'rsproxy-sparse'
|
||||
|
||||
[source.rsproxy-sparse]
|
||||
registry = "sparse+https://rsproxy.cn/index/"
|
||||
|
||||
[net]
|
||||
git-fetch-with-cli = true
|
||||
'';
|
||||
};
|
||||
my.persist.homeDirs = [
|
||||
".cargo"
|
||||
];
|
||||
};
|
||||
}
|
||||
29
modules/coding/misc.nix
Normal file
29
modules/coding/misc.nix
Normal file
@@ -0,0 +1,29 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
lib.my.makeSwitch {
|
||||
inherit config;
|
||||
optionName = "misc";
|
||||
optionPath = [
|
||||
"coding"
|
||||
"misc"
|
||||
];
|
||||
config' = {
|
||||
my.home = {
|
||||
home.packages = with pkgs; [
|
||||
gnumake
|
||||
github-cli # gh
|
||||
];
|
||||
programs.zsh.initExtraFirst = ''
|
||||
source ${./github-cli-comp}
|
||||
'';
|
||||
programs.direnv.enable = true;
|
||||
};
|
||||
my.persist.homeDirs = [
|
||||
".local/share/direnv"
|
||||
];
|
||||
};
|
||||
}
|
||||
24
modules/default.nix
Normal file
24
modules/default.nix
Normal file
@@ -0,0 +1,24 @@
|
||||
{
|
||||
lib,
|
||||
username,
|
||||
...
|
||||
}:
|
||||
{
|
||||
imports = [
|
||||
./cmd
|
||||
./coding
|
||||
./virt
|
||||
./desktop
|
||||
./i18n
|
||||
./nix.nix
|
||||
./sops.nix
|
||||
./gpg.nix
|
||||
./time.nix
|
||||
./user.nix
|
||||
./xdg.nix
|
||||
./persist.nix
|
||||
./getty-autologin.nix
|
||||
|
||||
(lib.mkAliasOptionModule [ "my" "home" ] [ "home-manager" "users" username ])
|
||||
];
|
||||
}
|
||||
22
modules/desktop/all.nix
Normal file
22
modules/desktop/all.nix
Normal file
@@ -0,0 +1,22 @@
|
||||
{ config, lib, ... }:
|
||||
lib.my.makeSwitch {
|
||||
inherit config;
|
||||
optionName = "all desktop things";
|
||||
optionPath = [
|
||||
"desktop"
|
||||
"all"
|
||||
];
|
||||
config' = {
|
||||
my.desktop = {
|
||||
browser.all.enable = true;
|
||||
gaming.all.enable = true;
|
||||
media.all.enable = true;
|
||||
notify.all.enable = true;
|
||||
screencast.all.enable = true;
|
||||
terminal.all.enable = true;
|
||||
wm.all.enable = true;
|
||||
style.enable = true;
|
||||
quickshell.enable = true;
|
||||
};
|
||||
};
|
||||
}
|
||||
17
modules/desktop/browser/all.nix
Normal file
17
modules/desktop/browser/all.nix
Normal file
@@ -0,0 +1,17 @@
|
||||
{ config, lib, ... }:
|
||||
lib.my.makeSwitch {
|
||||
inherit config;
|
||||
optionName = "all desktop browsers";
|
||||
optionPath = [
|
||||
"desktop"
|
||||
"browser"
|
||||
"all"
|
||||
];
|
||||
config' = {
|
||||
my.desktop.browser = {
|
||||
firefox.enable = true;
|
||||
librewolf.enable = true;
|
||||
chromium.enable = true;
|
||||
};
|
||||
};
|
||||
}
|
||||
54
modules/desktop/browser/chromium.nix
Normal file
54
modules/desktop/browser/chromium.nix
Normal file
@@ -0,0 +1,54 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
lib.my.makeHomeProgramConfig {
|
||||
inherit config;
|
||||
programName = "chromium";
|
||||
optionPath = [
|
||||
"desktop"
|
||||
"browser"
|
||||
"chromium"
|
||||
];
|
||||
extraConfig = {
|
||||
my.home.programs.chromium = {
|
||||
package = pkgs.ungoogled-chromium;
|
||||
extensions = [
|
||||
{
|
||||
id = "jokpcbcafcbkjgcbjdcbadhfhimkafab"; # BitWarden
|
||||
}
|
||||
{
|
||||
id = "ipgcaebkhediiaeinmmaneoehfjpjkle"; # Dark Reader
|
||||
}
|
||||
{
|
||||
id = "leehfofbonhkmfimcelojmjnccdfemhl"; # New Tab
|
||||
}
|
||||
{
|
||||
id = "padekgcemlokbadohgkifijomclgjgif"; # SwitchyOmega
|
||||
}
|
||||
{
|
||||
id = "bgnkhhnnamicmpeenaelnjfhikgbkllg"; # AdGuard
|
||||
}
|
||||
{
|
||||
id = "ocaahdebbfolfmndjeplogmgcagdmblk"; # Web Store
|
||||
}
|
||||
{
|
||||
id = "pinabllndpmfdcknifcfcmdgdngjcfii"; # Firefox Dark Theme
|
||||
}
|
||||
{
|
||||
id = "bpoadfkcbjbfhfodiogcnhhhpibjhbnh"; # Immersive Translate
|
||||
}
|
||||
{
|
||||
id = "fnaicdffflnofjppbagibeoednhnbjhg"; # Floccus Bookmarks Sync
|
||||
}
|
||||
];
|
||||
commandLineArgs = [
|
||||
"--ozone-platform=wayland"
|
||||
"--enable-wayland-ime"
|
||||
"--wayland-text-input-version=3"
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
9
modules/desktop/browser/default.nix
Normal file
9
modules/desktop/browser/default.nix
Normal file
@@ -0,0 +1,9 @@
|
||||
{ ... }:
|
||||
{
|
||||
imports = [
|
||||
./all.nix
|
||||
./firefox.nix
|
||||
./librewolf.nix
|
||||
./chromium.nix
|
||||
];
|
||||
}
|
||||
15
modules/desktop/browser/firefox.nix
Normal file
15
modules/desktop/browser/firefox.nix
Normal file
@@ -0,0 +1,15 @@
|
||||
{ config, lib, ... }:
|
||||
lib.my.makeHomeProgramConfig {
|
||||
inherit config;
|
||||
programName = "firefox";
|
||||
optionPath = [
|
||||
"desktop"
|
||||
"browser"
|
||||
"firefox"
|
||||
];
|
||||
extraConfig = {
|
||||
my.persist.homeDirs = [
|
||||
".mozilla"
|
||||
];
|
||||
};
|
||||
}
|
||||
15
modules/desktop/browser/librewolf.nix
Normal file
15
modules/desktop/browser/librewolf.nix
Normal file
@@ -0,0 +1,15 @@
|
||||
{ config, lib, ... }:
|
||||
lib.my.makeHomeProgramConfig {
|
||||
inherit config;
|
||||
programName = "librewolf";
|
||||
optionPath = [
|
||||
"desktop"
|
||||
"browser"
|
||||
"librewolf"
|
||||
];
|
||||
extraConfig = {
|
||||
my.persist.homeDirs = [
|
||||
".librewolf"
|
||||
];
|
||||
};
|
||||
}
|
||||
15
modules/desktop/default.nix
Normal file
15
modules/desktop/default.nix
Normal file
@@ -0,0 +1,15 @@
|
||||
{ ... }:
|
||||
{
|
||||
imports = [
|
||||
./all.nix
|
||||
./browser
|
||||
./gaming
|
||||
./media
|
||||
./notify
|
||||
./screencast
|
||||
./terminal
|
||||
./wm
|
||||
./style
|
||||
./quickshell
|
||||
];
|
||||
}
|
||||
16
modules/desktop/gaming/all.nix
Normal file
16
modules/desktop/gaming/all.nix
Normal file
@@ -0,0 +1,16 @@
|
||||
{ config, lib, ... }:
|
||||
lib.my.makeSwitch {
|
||||
inherit config;
|
||||
optionName = "all desktop gaming things";
|
||||
optionPath = [
|
||||
"desktop"
|
||||
"gaming"
|
||||
"all"
|
||||
];
|
||||
config' = {
|
||||
my.desktop.gaming = {
|
||||
minecraft.enable = true;
|
||||
steam.enable = true;
|
||||
};
|
||||
};
|
||||
}
|
||||
8
modules/desktop/gaming/default.nix
Normal file
8
modules/desktop/gaming/default.nix
Normal file
@@ -0,0 +1,8 @@
|
||||
{ ... }:
|
||||
{
|
||||
imports = [
|
||||
./all.nix
|
||||
./minecraft.nix
|
||||
./steam.nix
|
||||
];
|
||||
}
|
||||
27
modules/desktop/gaming/minecraft.nix
Normal file
27
modules/desktop/gaming/minecraft.nix
Normal file
@@ -0,0 +1,27 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
lib.my.makeSwitch {
|
||||
inherit config;
|
||||
optionName = "minecraft";
|
||||
optionPath = [
|
||||
"desktop"
|
||||
"gaming"
|
||||
"minecraft"
|
||||
];
|
||||
config' = {
|
||||
my.home.home.packages = with pkgs; [
|
||||
hmcl
|
||||
|
||||
openjdk21
|
||||
];
|
||||
|
||||
my.persist.homeDirs = [
|
||||
".minecraft"
|
||||
".local/share/hmcl"
|
||||
];
|
||||
};
|
||||
}
|
||||
24
modules/desktop/gaming/steam.nix
Normal file
24
modules/desktop/gaming/steam.nix
Normal file
@@ -0,0 +1,24 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
lib.my.makeSwitch {
|
||||
inherit config;
|
||||
optionName = "steam";
|
||||
optionPath = [
|
||||
"desktop"
|
||||
"gaming"
|
||||
"steam"
|
||||
];
|
||||
config' = {
|
||||
programs.steam = {
|
||||
enable = true;
|
||||
package = pkgs.steam;
|
||||
extraPackages = with pkgs; [
|
||||
gamescope
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
20
modules/desktop/media/all.nix
Normal file
20
modules/desktop/media/all.nix
Normal file
@@ -0,0 +1,20 @@
|
||||
{ config, lib, ... }:
|
||||
lib.my.makeSwitch {
|
||||
inherit config;
|
||||
optionName = "all desktop media things";
|
||||
optionPath = [
|
||||
"desktop"
|
||||
"media"
|
||||
"all"
|
||||
];
|
||||
config' = {
|
||||
my.desktop.media = {
|
||||
mpv.enable = true;
|
||||
shotwell.enable = true;
|
||||
thunderbird.enable = true;
|
||||
vlc.enable = true;
|
||||
spotify.enable = true;
|
||||
spotube.enable = true;
|
||||
};
|
||||
};
|
||||
}
|
||||
12
modules/desktop/media/default.nix
Normal file
12
modules/desktop/media/default.nix
Normal file
@@ -0,0 +1,12 @@
|
||||
{ ... }:
|
||||
{
|
||||
imports = [
|
||||
./all.nix
|
||||
./mpv.nix
|
||||
./shotwell.nix
|
||||
./thunderbird.nix
|
||||
./vlc.nix
|
||||
./spotify.nix
|
||||
./spotube.nix
|
||||
];
|
||||
}
|
||||
16
modules/desktop/media/mpv.nix
Normal file
16
modules/desktop/media/mpv.nix
Normal file
@@ -0,0 +1,16 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
lib.my.makeHomePackageConfig {
|
||||
inherit config pkgs;
|
||||
packageName = "mpv";
|
||||
packagePath = [ "mpv" ];
|
||||
optionPath = [
|
||||
"desktop"
|
||||
"media"
|
||||
"mpv"
|
||||
];
|
||||
}
|
||||
16
modules/desktop/media/shotwell.nix
Normal file
16
modules/desktop/media/shotwell.nix
Normal file
@@ -0,0 +1,16 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
lib.my.makeHomePackageConfig {
|
||||
inherit config pkgs;
|
||||
packageName = "shotwell";
|
||||
packagePath = [ "shotwell" ];
|
||||
optionPath = [
|
||||
"desktop"
|
||||
"media"
|
||||
"shotwell"
|
||||
];
|
||||
}
|
||||
16
modules/desktop/media/spotify.nix
Normal file
16
modules/desktop/media/spotify.nix
Normal file
@@ -0,0 +1,16 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
lib.my.makeHomePackageConfig {
|
||||
inherit config pkgs;
|
||||
packageName = "spotify";
|
||||
packagePath = [ "spotify" ];
|
||||
optionPath = [
|
||||
"desktop"
|
||||
"media"
|
||||
"spotify"
|
||||
];
|
||||
}
|
||||
16
modules/desktop/media/spotube.nix
Normal file
16
modules/desktop/media/spotube.nix
Normal file
@@ -0,0 +1,16 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
lib.my.makeHomePackageConfig {
|
||||
inherit config pkgs;
|
||||
packageName = "spotube";
|
||||
packagePath = [ "spotube" ];
|
||||
optionPath = [
|
||||
"desktop"
|
||||
"media"
|
||||
"spotube"
|
||||
];
|
||||
}
|
||||
21
modules/desktop/media/thunderbird.nix
Normal file
21
modules/desktop/media/thunderbird.nix
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
lib.my.makeHomePackageConfig {
|
||||
inherit config pkgs;
|
||||
packageName = "thunderbird";
|
||||
packagePath = [ "thunderbird" ];
|
||||
optionPath = [
|
||||
"desktop"
|
||||
"media"
|
||||
"thunderbird"
|
||||
];
|
||||
extraConfig = {
|
||||
my.persist.homeDirs = [
|
||||
".thunderbird"
|
||||
];
|
||||
};
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user