commit 38337e482ae20b6727a99c9d04b587e9bd70e334 Author: Paul-Henri Froidmont Date: Thu Feb 20 03:10:43 2020 +0100 Initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c38fa4e --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +.idea +*.iml diff --git a/conf/ncmpcpp/bindings b/conf/ncmpcpp/bindings new file mode 100644 index 0000000..5ec8932 --- /dev/null +++ b/conf/ncmpcpp/bindings @@ -0,0 +1,611 @@ +############################################################## +## This is the example bindings file. Copy it to ## +## ~/.ncmpcpp/bindings or $XDG_CONFIG_HOME/ncmpcpp/bindings ## +## and set up your preferences ## +############################################################## +## +##### General rules ##### +## +## 1) Because each action has runtime checks whether it's +## ok to run it, a few actions can be bound to one key. +## Actions will be bound in order given in configuration +## file. When a key is pressed, first action in order +## will test itself whether it's possible to run it. If +## test succeeds, action is executed and other actions +## bound to this key are ignored. If it doesn't, next +## action in order tests itself etc. +## +## 2) It's possible to bind more that one action at once +## to a key. It can be done using the following syntax: +## +## def_key "key" +## action1 +## action2 +## ... +## +## This creates a chain of actions. When such chain is +## executed, each action in chain is run until the end of +## chain is reached or one of its actions fails to execute +## due to its requirements not being met. If multiple actions +## and/or chains are bound to the same key, they will be +## consecutively run until one of them gets fully executed. +## +## 3) When ncmpcpp starts, bindings configuration file is +## parsed and then ncmpcpp provides "missing pieces" +## of default keybindings. If you want to disable some +## bindings, there is a special action called 'dummy' +## for that purpose. Eg. if you want to disable ability +## to crop playlists, you need to put the following +## into configuration file: +## +## def_key "C" +## dummy +## +## After that ncmpcpp will not bind any default action +## to this key. +## +## 4) To let you write simple macros, the following special +## actions are provided: +## +## - push_character "character" - pushes given special +## character into input queue, so it will be immediately +## picked by ncmpcpp upon next call to readKey function. +## Accepted values: mouse, up, down, page_up, page_down, +## home, end, space, enter, insert, delete, left, right, +## tab, ctrl-a, ctrl-b, ..., ctrl-z, ctrl-[, ctrl-\\, +## ctrl-], ctrl-^, ctrl-_, f1, f2, ..., f12, backspace. +## In addition, most of these names can be prefixed with +## alt-/ctrl-/shift- to be recognized with the appropriate +## modifier key(s). +## +## - push_characters "string" - pushes given string into +## input queue. +## +## - require_runnable "action" - checks whether given action +## is runnable and fails if it isn't. This is especially +## useful when mixed with previous two functions. Consider +## the following macro definition: +## +## def_key "key" +## push_characters "custom_filter" +## apply_filter +## +## If apply_filter can't be currently run, we end up with +## sequence of characters in input queue which will be +## treated just as we typed them. This may lead to unexpected +## results (in this case 'c' will most likely clear current +## playlist, 'u' will trigger database update, 's' will stop +## playback etc.). To prevent such thing from happening, we +## need to change above definition to this one: +## +## def_key "key" +## require_runnable "apply_filter" +## push_characters "custom_filter" +## apply_filter +## +## Here, first we test whether apply_filter can be actually run +## before we stuff characters into input queue, so if condition +## is not met, whole chain is aborted and we're fine. +## +## - require_screen "screen" - checks whether given screen is +## currently active. accepted values: browser, clock, help, +## media_library, outputs, playlist, playlist_editor, +## search_engine, tag_editor, visualizer, last_fm, lyrics, +## selected_items_adder, server_info, song_info, +## sort_playlist_dialog, tiny_tag_editor. +## +## - run_external_command "command" - runs given command using +## system() function. +## +## 5) In addition to binding to a key, you can also bind actions +## or chains of actions to a command. If it comes to commands, +## syntax is very similar to defining keys. Here goes example +## definition of a command: +## +## def_command "quit" [deferred] +## stop +## quit +## +## If you execute the above command (which can be done by +## invoking action execute_command, typing 'quit' and pressing +## enter), ncmpcpp will stop the player and then quit. Note the +## presence of word 'deferred' enclosed in square brackets. It +## tells ncmpcpp to wait for confirmation (ie. pressing enter) +## after you typed quit. Instead of 'deferred', 'immediate' +## could be used. Then ncmpcpp will not wait for confirmation +## (enter) and will execute the command the moment it sees it. +## +## Note: while command chains are executed, internal environment +## update (which includes current window refresh and mpd status +## update) is not performed for performance reasons. However, it +## may be desirable to do so in some situration. Therefore it's +## possible to invoke by hand by performing 'update enviroment' +## action. +## +## Note: There is a difference between: +## +## def_key "key" +## action1 +## +## def_key "key" +## action2 +## +## and +## +## def_key "key" +## action1 +## action2 +## +## First one binds two single actions to the same key whilst +## second one defines a chain of actions. The behavior of +## these two is different and is described in (1) and (2). +## +## Note: Function def_key accepts non-ascii characters. +## +##### List of unbound actions ##### +## +## The following actions are not bound to any key/command: +## +## - set_volume +## +# +#def_key "mouse" +# mouse_event +# +#def_key "up" +# scroll_up +# +#def_key "shift-up" +# select_item +# scroll_up +# +#def_key "down" +# scroll_down +# +#def_key "shift-down" +# select_item +# scroll_down +# +#def_key "[" +# scroll_up_album +# +#def_key "]" +# scroll_down_album +# +#def_key "{" +# scroll_up_artist +# +#def_key "}" +# scroll_down_artist +# +#def_key "page_up" +# page_up +# +#def_key "page_down" +# page_down +# +#def_key "home" +# move_home +# +#def_key "end" +# move_end +# +#def_key "insert" +# select_item +# +#def_key "enter" +# enter_directory +# +#def_key "enter" +# toggle_output +# +#def_key "enter" +# run_action +# +#def_key "enter" +# play_item +# +#def_key "space" +# add_item_to_playlist +# +#def_key "space" +# toggle_lyrics_update_on_song_change +# +#def_key "space" +# toggle_visualization_type +# +#def_key "delete" +# delete_playlist_items +# +#def_key "delete" +# delete_browser_items +# +#def_key "delete" +# delete_stored_playlist +# +#def_key "right" +# next_column +# +#def_key "right" +# slave_screen +# +#def_key "right" +# volume_up +# +#def_key "+" +# volume_up +# +#def_key "left" +# previous_column +# +#def_key "left" +# master_screen +# +#def_key "left" +# volume_down +# +#def_key "-" +# volume_down +# +#def_key ":" +# execute_command +# +#def_key "tab" +# next_screen +# +#def_key "shift-tab" +# previous_screen +# +#def_key "f1" +# show_help +# +#def_key "1" +# show_playlist +# +#def_key "2" +# show_browser +# +#def_key "2" +# change_browse_mode +# +#def_key "3" +# show_search_engine +# +#def_key "3" +# reset_search_engine +# +#def_key "4" +# show_media_library +# +#def_key "4" +# toggle_media_library_columns_mode +# +#def_key "5" +# show_playlist_editor +# +#def_key "6" +# show_tag_editor +# +#def_key "7" +# show_outputs +# +#def_key "8" +# show_visualizer +# +#def_key "=" +# show_clock +# +#def_key "@" +# show_server_info +# +#def_key "s" +# stop +# +#def_key "p" +# pause +# +#def_key ">" +# next +# +#def_key "<" +# previous +# +#def_key "ctrl-h" +# jump_to_parent_directory +# +#def_key "ctrl-h" +# replay_song +# +#def_key "backspace" +# jump_to_parent_directory +# +#def_key "backspace" +# replay_song +# +#def_key "f" +# seek_forward +# +#def_key "b" +# seek_backward +# +#def_key "r" +# toggle_repeat +# +#def_key "z" +# toggle_random +# +#def_key "y" +# save_tag_changes +# +#def_key "y" +# start_searching +# +#def_key "y" +# toggle_single +# +#def_key "R" +# toggle_consume +# +#def_key "Y" +# toggle_replay_gain_mode +# +#def_key "T" +# toggle_add_mode +# +#def_key "|" +# toggle_mouse +# +#def_key "#" +# toggle_bitrate_visibility +# +#def_key "Z" +# shuffle +# +#def_key "x" +# toggle_crossfade +# +#def_key "X" +# set_crossfade +# +#def_key "u" +# update_database +# +#def_key "ctrl-s" +# sort_playlist +# +#def_key "ctrl-s" +# toggle_browser_sort_mode +# +#def_key "ctrl-s" +# toggle_media_library_sort_mode +# +#def_key "ctrl-r" +# reverse_playlist +# +#def_key "ctrl-f" +# apply_filter +# +#def_key "ctrl-_" +# select_found_items +# +#def_key "/" +# find +# +#def_key "/" +# find_item_forward +# +#def_key "?" +# find +# +#def_key "?" +# find_item_backward +# +#def_key "." +# next_found_item +# +#def_key "," +# previous_found_item +# +#def_key "w" +# toggle_find_mode +# +#def_key "e" +# edit_song +# +#def_key "e" +# edit_library_tag +# +#def_key "e" +# edit_library_album +# +#def_key "e" +# edit_directory_name +# +#def_key "e" +# edit_playlist_name +# +#def_key "e" +# edit_lyrics +# +#def_key "i" +# show_song_info +# +#def_key "I" +# show_artist_info +# +#def_key "g" +# jump_to_position_in_song +# +#def_key "l" +# show_lyrics +# +#def_key "ctrl-v" +# select_range +# +#def_key "v" +# reverse_selection +# +#def_key "V" +# remove_selection +# +#def_key "B" +# select_album +# +#def_key "a" +# add_selected_items +# +#def_key "c" +# clear_playlist +# +#def_key "c" +# clear_main_playlist +# +#def_key "C" +# crop_playlist +# +#def_key "C" +# crop_main_playlist +# +#def_key "m" +# move_sort_order_up +# +#def_key "m" +# move_selected_items_up +# +#def_key "n" +# move_sort_order_down +# +#def_key "n" +# move_selected_items_down +# +#def_key "M" +# move_selected_items_to +# +#def_key "A" +# add +# +#def_key "S" +# save_playlist +# +#def_key "o" +# jump_to_playing_song +# +#def_key "G" +# jump_to_browser +# +#def_key "G" +# jump_to_playlist_editor +# +#def_key "~" +# jump_to_media_library +# +#def_key "E" +# jump_to_tag_editor +# +#def_key "U" +# toggle_playing_song_centering +# +#def_key "P" +# toggle_display_mode +# +#def_key "\\" +# toggle_interface +# +#def_key "!" +# toggle_separators_between_albums +# +#def_key "L" +# toggle_lyrics_fetcher +# +#def_key "F" +# fetch_lyrics_in_background +# +#def_key "alt-l" +# toggle_fetching_lyrics_in_background +# +#def_key "ctrl-l" +# toggle_screen_lock +# +#def_key "`" +# toggle_library_tag_type +# +#def_key "`" +# refetch_lyrics +# +#def_key "`" +# add_random_items +# +#def_key "ctrl-p" +# set_selected_items_priority +# +#def_key "q" +# quit +# +# +def_key "f" + find +def_key "f" + find_item_forward + +def_key "+" + show_clock +def_key "=" + volume_up + +def_key "j" + scroll_down +def_key "k" + scroll_up + +def_key "ctrl-u" + page_up +#push_characters "kkkkkkkkkkkkkkk" +def_key "ctrl-d" + page_down +#push_characters "jjjjjjjjjjjjjjj" +def_key "u" + page_up +#push_characters "kkkkkkkkkkkkkkk" +def_key "d" + page_down +#push_characters "jjjjjjjjjjjjjjj" +def_key "h" + previous_column +def_key "l" + next_column + +def_key "." + show_lyrics + +def_key "n" + next_found_item +def_key "N" + previous_found_item + +# not used but bound +def_key "J" + move_sort_order_down +def_key "K" + move_sort_order_up +def_key "h" + jump_to_parent_directory +def_key "l" + enter_directory +def_key "l" + run_action +def_key "l" + play_item +def_key "m" + show_media_library +def_key "m" + toggle_media_library_columns_mode +def_key "t" + show_tag_editor +def_key "v" + show_visualizer +def_key "G" + move_end +def_key "g" + move_home +def_key "U" + update_database diff --git a/conf/ncmpcpp/config b/conf/ncmpcpp/config new file mode 100644 index 0000000..8386e50 --- /dev/null +++ b/conf/ncmpcpp/config @@ -0,0 +1,546 @@ +############################################################################## +## This is the example configuration file. Copy it to $HOME/.ncmpcpp/config ## +## or $XDG_CONFIG_HOME/ncmpcpp/config and set up your preferences. ## +############################################################################## +# +##### directories ###### +## +## Directory for storing ncmpcpp related files. Changing it is useful if you +## want to store everything somewhere else and provide command line setting for +## alternative location to config file which defines that while launching +## ncmpcpp. +## +# +#ncmpcpp_directory = ~/.ncmpcpp +# +## +## Directory for storing downloaded lyrics. It defaults to ~/.lyrics since other +## MPD clients (eg. ncmpc) also use that location. +## +# +#lyrics_directory = ~/.lyrics +# +##### connection settings ##### +# +#mpd_host = localhost +# +#mpd_port = 6600 +# +#mpd_connection_timeout = 5 +# +## Needed for tag editor and file operations to work. +## +mpd_music_dir = "~/Nextcloud/Media/Music" +# +#mpd_crossfade_time = 5 +# +##### music visualizer ##### +## +## Note: In order to make music visualizer work you'll need to use mpd fifo +## output, whose format parameter has to be set to 44100:16:1 for mono +## visualization or 44100:16:2 for stereo visualization. Example configuration +## (it has to be put into mpd.conf): +## +## audio_output { +## type "fifo" +## name "Visualizer feed" +## path "/tmp/mpd.fifo" +## format "44100:16:2" +## } +## +# +#visualizer_fifo_path = /tmp/mpd.fifo +# +## +## Note: Below parameter is needed for ncmpcpp to determine which output +## provides data for visualizer and thus allow syncing between visualization and +## sound as currently there are some problems with it. +## +# +#visualizer_output_name = Visualizer feed +# +## +## If you set format to 44100:16:2, make it 'yes'. +## +#visualizer_in_stereo = yes +# +## +## Note: Below parameter defines how often ncmpcpp has to "synchronize" +## visualizer and audio outputs. 30 seconds is optimal value, but if you +## experience synchronization problems, set it to lower value. Keep in mind +## that sane values start with >=10. +## +# +#visualizer_sync_interval = 30 +# +## +## Note: To enable spectrum frequency visualization you need to compile ncmpcpp +## with fftw3 support. +## +# +## Available values: spectrum, wave, wave_filled, ellipse. +## +visualizer_type = spectrum +# +#visualizer_look = ●卐 +#visualizer_look = 卐 +# +#visualizer_color = blue, cyan, green, yellow, magenta, red +# +## Alternative subset of 256 colors for terminals that support it. +## +#visualizer_color = 41, 83, 119, 155, 185, 215, 209, 203, 197, 161 +# +##### system encoding ##### +## +## ncmpcpp should detect your charset encoding but if it failed to do so, you +## can specify charset encoding you are using here. +## +## Note: You can see whether your ncmpcpp build supports charset detection by +## checking output of `ncmpcpp --version`. +## +## Note: Since MPD uses UTF-8 by default, setting this option makes sense only +## if your encoding is different. +## +# +#system_encoding = "" +# +##### delays ##### +# +## Time of inactivity (in seconds) after playlist highlighting will be disabled +## (0 = always on). +## +#playlist_disable_highlight_delay = 5 +# +## Defines how long messages are supposed to be visible. +## +message_delay_time = 1 +# +##### song format ##### +## +## For a song format you can use: +## +## %l - length +## %f - filename +## %D - directory +## %a - artist +## %A - album artist +## %t - title +## %b - album +## %y - date +## %n - track number (01/12 -> 01) +## %N - full track info (01/12 -> 01/12) +## %g - genre +## %c - composer +## %p - performer +## %d - disc +## %C - comment +## %P - priority +## $R - begin right alignment +## +## If you want to make sure that a part of the format is displayed only when +## certain tags are present, you can archieve it by grouping them with brackets, +## e.g. '{%a - %t}' will be evaluated to 'ARTIST - TITLE' if both tags are +## present or '' otherwise. It is also possible to define a list of +## alternatives by providing several groups and separating them with '|', +## e.g. '{%t}|{%f}' will be evaluated to 'TITLE' or 'FILENAME' if the former is +## not present. +## +## Note: If you want to set limit on maximal length of a tag, just put the +## appropriate number between % and character that defines tag type, e.g. to +## make album take max. 20 terminal cells, use '%20b'. +## +## In addition, formats support markers used for text attributes. They are +## followed by character '$'. After that you can put: +## +## - 0 - default window color (discards all other colors) +## - 1 - black +## - 2 - red +## - 3 - green +## - 4 - yellow +## - 5 - blue +## - 6 - magenta +## - 7 - cyan +## - 8 - white +## - 9 - end of current color +## - b - bold text +## - u - underline text +## - r - reverse colors +## - a - use alternative character set +## +## If you don't want to use a non-color attribute anymore, just put it again, +## but this time insert character '/' between '$' and attribute character, +## e.g. {$b%t$/b}|{$r%f$/r} will display bolded title tag or filename with +## reversed colors. +## +## If you want to use 256 colors and/or background colors in formats (the naming +## scheme is described below in section about color definitions), it can be done +## with the syntax $(COLOR), e.g. to set the artist tag to one of the +## non-standard colors and make it have yellow background, you need to write +## $(197_yellow)%a$(end). Note that for standard colors this is interchangable +## with attributes listed above. +## +## Note: colors can be nested. +## +# +song_list_format = {$4%a - }{%t}|{$8%f$9}$R{$3(%l)$9} +# +song_status_format = $b{{$8"%t"}} $3by {$4%a{ $3in $7%b{ (%y)}} $3}|{$8%f} +# +song_library_format = {%n - }{%t}|{%f} +# +alternative_header_first_line_format = $b$1$aqqu$/a$9 {%t}|{%f} $1$atqq$/a$9$/b +# +alternative_header_second_line_format = {{$4$b%a$/b$9}{ - $7%b$9}{ ($4%y$9)}}|{%D} +# +current_item_prefix = $(cyan)$r$b +# +current_item_suffix = $/r$(end)$/b +# +current_item_inactive_column_prefix = $(magenta)$r +# +current_item_inactive_column_suffix = $/r$(end) +# +#now_playing_prefix = $b +# +#now_playing_suffix = $/b +# +#browser_playlist_prefix = "$2playlist$9 " +# +#selected_item_prefix = $6 +# +#selected_item_suffix = $9 +# +#modified_item_prefix = $3> $9 +# +## +## Note: attributes are not supported for the following variables. +## +#song_window_title_format = {%a - }{%t}|{%f} +## +## Note: Below variables are used for sorting songs in browser. The sort mode +## determines how songs are sorted, and can be used in combination with a sort +## format to specify a custom sorting format. Available values for +## browser_sort_mode are "name", "mtime", "format" and "noop". +## +# +#browser_sort_mode = name +# +#browser_sort_format = {%a - }{%t}|{%f} {(%l)} +# +##### columns settings ##### +## +## syntax of song columns list format is "column column etc." +## +## - syntax for each column is: +## +## (width of the column)[color of the column]{displayed tag} +## +## Note: Width is by default in %, if you want a column to have fixed size, add +## 'f' after the value, e.g. (10)[white]{a} will be the column that take 10% of +## screen (so the real width will depend on actual screen size), whereas +## (10f)[white]{a} will take 10 terminal cells, no matter how wide the screen +## is. +## +## - color is optional (if you want the default one, leave the field empty). +## +## Note: You can give a column additional attributes by putting appropriate +## character after displayed tag character. Available attributes are: +## +## - r - column will be right aligned +## - E - if tag is empty, empty tag marker won't be displayed +## +## You can also: +## +## - give a column custom name by putting it after attributes, separated with +## character ':', e.g. {lr:Length} gives you right aligned column of lengths +## named "Length". +## +## - define sequence of tags, that have to be displayed in case predecessor is +## empty in a way similar to the one in classic song format, i.e. using '|' +## character, e.g. {a|c|p:Owner} creates column named "Owner" that tries to +## display artist tag and then composer and performer if previous ones are not +## available. +## +# +#song_columns_list_format = (20)[]{a} (6f)[green]{NE} (50)[white]{t|f:Title} (20)[cyan]{b} (7f)[magenta]{l} +# +##### various settings ##### +# +## +## Note: Custom command that will be executed each time song changes. Useful for +## notifications etc. +## +#execute_on_song_change = "" +# +## +## Note: Custom command that will be executed each time player state +## changes. The environment variable MPD_PLAYER_STATE is set to the current +## state (either unknown, play, pause, or stop) for its duration. +## +# +#execute_on_player_state_change = "" +# +#playlist_show_mpd_host = no +# +#playlist_show_remaining_time = no +# +#playlist_shorten_total_times = no +# +#playlist_separate_albums = no +# +## +## Note: Possible display modes: classic, columns. +## +#playlist_display_mode = columns +# +browser_display_mode = columns +# +#search_engine_display_mode = classic +# +#playlist_editor_display_mode = classic +# +#discard_colors_if_item_is_selected = yes +# +#show_duplicate_tags = true +# +#incremental_seeking = yes +# +#seek_time = 1 +# +#volume_change_step = 2 +# +#autocenter_mode = no +# +#centered_cursor = no +# +## +## Note: You can specify third character which will be used to build 'empty' +## part of progressbar. +## +progressbar_look = -> +# +## Available values: database, playlist. +## +#default_place_to_search_in = database +# +## Available values: classic, alternative. +## +#user_interface = classic +# +#data_fetching_delay = yes +# +## Available values: artist, album_artist, date, genre, composer, performer. +## +media_library_primary_tag = album_artist +# +media_library_albums_split_by_date = no +# +## Available values: wrapped, normal. +## +#default_find_mode = wrapped +# +#default_tag_editor_pattern = %n - %t +# +#header_visibility = yes +# +#statusbar_visibility = yes +# +#titles_visibility = yes +# +#header_text_scrolling = yes +# +#cyclic_scrolling = no +# +#lines_scrolled = 2 +# +#lyrics_fetchers = lyricwiki, azlyrics, genius, sing365, lyricsmania, metrolyrics, justsomelyrics, jahlyrics, plyrics, tekstowo, internet +# +#follow_now_playing_lyrics = no +# +#fetch_lyrics_for_current_song_in_background = no +# +#store_lyrics_in_song_dir = no +# +#generate_win32_compatible_filenames = yes +# +#allow_for_physical_item_deletion = no +# +## +## Note: If you set this variable, ncmpcpp will try to get info from last.fm in +## language you set and if it fails, it will fall back to english. Otherwise it +## will use english the first time. +## +## Note: Language has to be expressed as an ISO 639 alpha-2 code. +## +#lastfm_preferred_language = en +# +#space_add_mode = add_remove +# +#show_hidden_files_in_local_browser = no +# +## +## How shall screen switcher work? +## +## - "previous" - switch between the current and previous screen. +## - "screen1,...,screenN" - switch between given sequence of screens. +## +## Screens available for use: help, playlist, browser, search_engine, +## media_library, playlist_editor, tag_editor, outputs, visualizer, clock, +## lyrics, last_fm. +## +#screen_switcher_mode = playlist, browser +# +## +## Note: You can define startup screen by choosing screen from the list above. +## +startup_screen = media_library +# +## +## Note: You can define startup slave screen by choosing screen from the list +## above or an empty value for no slave screen. +## +#startup_slave_screen = "" +# +#startup_slave_screen_focus = no +# +## +## Default width of locked screen (in %). Acceptable values are from 20 to 80. +## +# +#locked_screen_width_part = 50 +# +#ask_for_locked_screen_width_part = yes +# +#jump_to_now_playing_song_at_start = yes +# +#ask_before_clearing_playlists = yes +# +#clock_display_seconds = no +# +display_volume_level = no +# +#display_bitrate = no +# +#display_remaining_time = no +# +## Available values: none, basic, extended, perl. +## +#regular_expressions = perl +# +## +## Note: if below is enabled, ncmpcpp will ignore leading "The" word while +## sorting items in browser, tags in media library, etc. +## +ignore_leading_the = yes +# +## +## Note: if below is enabled, ncmpcpp will ignore diacritics while searching and +## filtering lists. This takes an effect only if boost was compiled with ICU +## support. +## +#ignore_diacritics = no +# +#block_search_constraints_change_if_items_found = yes +# +#mouse_support = yes +# +#mouse_list_scroll_whole_page = yes +# +#empty_tag_marker = +# +#tags_separator = " | " +# +#tag_editor_extended_numeration = no +# +#media_library_sort_by_mtime = no +# +#enable_window_title = yes +# +## +## Note: You can choose default search mode for search engine. Available modes +## are: +## +## - 1 - use mpd built-in searching (no regexes, pattern matching) +## +## - 2 - use ncmpcpp searching (pattern matching with support for regexes, but +## if your mpd is on a remote machine, downloading big database to process +## it can take a while +## +## - 3 - match only exact values (this mode uses mpd function for searching in +## database and local one for searching in current playlist) +## +# +#search_engine_default_search_mode = 1 +# +external_editor = nvim +# +## Note: set to yes if external editor is a console application. +## +use_console_editor = yes +# +##### colors definitions ##### +## +## It is possible to set a background color by setting a color value +## "_", e.g. red_black will set foregound color to red +## and background color to black. +## +## In addition, for terminals that support 256 colors it is possible to set one +## of them by using a number in range [1, 256] instead of color name, +## e.g. numerical value corresponding to red_black is 2_1. To find out if the +## terminal supports 256 colors, run ncmpcpp and check out the bottom of the +## help screen for list of available colors and their numerical values. +## +## What is more, there are two special values for the background color: +## "transparent" and "current". The first one explicitly sets the background to +## be transparent, while the second one allows you to preserve current +## background color and change only the foreground one. It's used implicitly +## when background color is not specified. +## +## Moreover, it is possible to attach format information to selected color +## variables by appending to their end a colon followed by one or more format +## flags, e.g. black:b or red:ur. The following variables support this syntax: +## visualizer_color, color1, color2, empty_tag_color, volume_color, +## state_line_color, state_flags_color, progressbar_color, +## progressbar_elapsed_color, player_state_color, statusbar_time_color, +## alternative_ui_separator_color. +## +## Note: due to technical limitations of older ncurses version, if 256 colors +## are used there is a possibility that you'll be able to use only colors with +## transparent background. +# +#colors_enabled = yes +# +empty_tag_color = magenta +# +#header_window_color = magenta +# +#volume_color = default +# +#state_line_color = default +# +#state_flags_color = default:b +# +#main_window_color = white +# +#color1 = white +# +#color2 = green +# +progressbar_color = black:b +# +progressbar_elapsed_color = blue:b +# +statusbar_color = red +# +statusbar_time_color = cyan:b +# +#player_state_color = default:b +# +#alternative_ui_separator_color = black:b +# +#window_border_color = green +# +#active_window_border = red +# + diff --git a/conf/scripts/mpd_status.sh b/conf/scripts/mpd_status.sh new file mode 100755 index 0000000..805d6f4 --- /dev/null +++ b/conf/scripts/mpd_status.sh @@ -0,0 +1,20 @@ +#! /usr/bin/env bash +# +# Writes the title and artist of the song currently being played by MPD or MOC to STDOUT, formatted for xmobar +# If MPD is playing a song or is paused, its information will be written. If not, MOC will be checked similarly. +# If neither are playing a song or are paused, nothing will be written. +# Note: if MPD isn't playing some errors will be written to STDERR; don't worry - xmobar only looks at STDOUT + +TCOL="cyan" # The colour to be used to draw the song title when playing +ACOL="lightblue" # The colour to be used to draw the song artist when playing +PCOL="#928374" # The colour to be used to draw both the song title and artist when paused + +MPDSTATE=$(mpc | sed -e '2 !d' -e 's/^.*\[//' -e 's/\].*$//') + +if [ $MPDSTATE == "playing" ]; then + # MPD is playing + echo "$(mpc current | sed "s/ - /\<\/fc\> - \/")" +elif [ $MPDSTATE == "paused" ]; then + # MPD is paused + echo "$(mpc current)" +fi diff --git a/conf/xmobarrc b/conf/xmobarrc new file mode 100644 index 0000000..9818c89 --- /dev/null +++ b/conf/xmobarrc @@ -0,0 +1,73 @@ +Config { + font = "xft:monospace:size=9.5:bold:antialias=true" + additionalFonts= ["xft:monospace:size=12:normal:antialias=true"] + , bgColor = "#282828" + , fgColor = "#ebdbb2" + , position = TopW L 94 + , alpha = 150 + , commands = [ Run Cpu [ "-t", "\xe266 %" + , "-L", "3","-H","50" + , "-l", "#ebdbb2" + , "-n", "#ebdbb2" + , "-h", "#fb4934" + , "-p", "2" + , "-c", "0" + ] 10 + , Run Memory [ "-t", "\xf85a %" + , "-H", "80" + , "-L", "10" + , "-l" ,"#ebdbb2" + , "-n", "#ebdbb2" + , "-h", "#fb4934" + , "-p", "2" + , "-c", "0" + ] 10 + , Run Date "%a %b %_d %k:%M" + "date" + 10 + , Run DynNetwork [ "-t", "\xf6d9 \xfa51 " + , "-H", "200" + , "-L", "10" + , "-h", "#ebdbb2" + , "-l", "#ebdbb2" + , "-n", "#ebdbb2" + , "-S", "True" + , "-p", "3" + , "-c", "0" + ] 10 + , Run CoreTemp [ "-t", "\xf2c8 °" + , "-L", "30" + , "-H", "75" + , "-l", "lightblue" + , "-n", "#ebdbb2" + , "-h", "#aa4450" + , "-p", "2" + , "-c", "0" + ] 50 + , Run Com ".xmonad/scripts/mpd_status.sh" + [] + "mpdstatus" + 10 + --, Run Com "network-check.sh" [] "netcheck" 5 + , Run BatteryP [ "BAT0" ] + [ "--template" , "\xf240 " + , "--Low" , "10" -- units: % + , "--High" , "80" -- units: % + , "--low" , "#fb4934" -- #ff5555 + , "--normal" , "#ebdbb2" + , "--high" , "#98be65" + + , "--" -- battery specific options + -- discharging status + , "-o" , "% ()" + -- AC "on" status + , "-O" , "% (Charging)" -- 50fa7b + -- charged status + , "-i" , "Charged" + ] 50 + , Run StdinReader + ] + , sepChar = "%" + , alignSep = "}{" + , template = "%StdinReader% }{%dynnetwork% %mpdstatus% %cpu% %coretemp% %memory% %battery% %date% " -- #69DFFA + } diff --git a/conf/xmonad.hs b/conf/xmonad.hs new file mode 100644 index 0000000..547209b --- /dev/null +++ b/conf/xmonad.hs @@ -0,0 +1,138 @@ +import System.Exit +import Data.Maybe (Maybe, isNothing, fromJust) +import qualified Data.List as L +import qualified Data.Map as M +import GHC.IO.Handle +-- Xmonad Core +import XMonad +import qualified XMonad.StackSet as W +import XMonad.Config.Desktop +import XMonad.Config.Azerty + +-- Layouts +import XMonad.Layout.LayoutModifier +import XMonad.Layout.Gaps +import XMonad.Layout.Spacing +import XMonad.Layout.MultiToggle +import XMonad.Layout.NoBorders +import XMonad.Layout.MultiToggle.Instances +import XMonad.Layout.ResizableTile +import XMonad.Layout.BinarySpacePartition +import XMonad.Layout.SimpleFloat +import XMonad.Layout.PerWorkspace (onWorkspace) +import XMonad.Layout.Minimize +import XMonad.Layout.Fullscreen + +-- Actions +import XMonad.Actions.Navigation2D +import XMonad.Actions.GridSelect +import XMonad.Actions.UpdatePointer +import XMonad.Actions.SpawnOn +import XMonad.Actions.CycleWS + +-- Hooks +import XMonad.Hooks.DynamicLog +import XMonad.Hooks.ManageHelpers +import XMonad.Hooks.SetWMName +import XMonad.Hooks.EwmhDesktops +import XMonad.Hooks.ManageDocks + +-- Utils +import XMonad.Util.NamedScratchpad +import XMonad.Util.WorkspaceCompare +import XMonad.Util.Run +import XMonad.Util.EZConfig + +myTerminal = "urxvt" +mySelectScreenshot = "scrot -s" +myScreenshot = "scrot" + +myWorkspaces = ["1","2","3","4","5","6"] ++ map show [7..9] +myModMask = mod4Mask + +myFocusFollowsMouse :: Bool +myFocusFollowsMouse = True + +main = do + xmproc <- spawnPipe "xmobar .xmonad/xmobarrc" + xmonad $ docks $ myConfig xmproc + +myConfig xmproc = azertyConfig { + terminal = myTerminal, + focusFollowsMouse = True, + borderWidth = 1, + modMask = mod4Mask, + workspaces = myWorkspaces, + normalBorderColor = "#474646", + focusedBorderColor = "#83a598", + layoutHook = myLayout, + manageHook = manageDocks <+> (isFullscreen --> doFullFloat) <+> manageHook defaultConfig, + --handleEventHook = myEventHook <+> handleEventHook defaultConfig, + logHook = (myLogHook xmproc) <+> logHook defaultConfig, + --keys = \c -> mkKeymap c myAdditionalKeys, + startupHook = myStartupHook xmproc +} `removeKeysP` myRemoveKeys `additionalKeysP` myAdditionalKeys + +myLogHook xmproc = dynamicLogWithPP xmobarPP { + ppOutput = hPutStrLn xmproc, + ppCurrent = xmobarColor "#83a598" "" . wrap "[" "]", -- #9BC1B2 #69DFFA + ppTitle = xmobarColor "#d3869b" "" . shorten 100, -- #9BC1B2 #69DFFA + ppSort = fmap (.namedScratchpadFilterOutWorkspace) getSortByTag + --ppLayout = xmobarColor "#fabd2f" "" . myIcons +} >> updatePointer (0.75, 0.75) (0.75, 0.75) + +myRemoveKeys = [ + ] + +myAdditionalKeys = [ + ("M-q", kill), + ("M-x", spawn "~/.xmonad/scripts/lock.sh"), + ("M-S-h", sendMessage (IncMasterN 1)), + ("M-S-l", sendMessage (IncMasterN (-1))), + ("M-S-", windows W.swapMaster), + ("M-d", spawn "rofi -show run"), + ("M-s", spawn "rofi -show ssh"), + ("M-w", spawn "firefox"), + ("M-i", spawn $ myTerminal ++ " -e htop"), + ("M-e", spawn $ myTerminal ++ " -e neomutt"), + ("M-r", spawn $ myTerminal ++ " -e ranger"), + ("M-y", spawn $ myTerminal ++ " -e calcurse"), + ("M-v", spawn $ myTerminal ++ " -e ncmpcpp -s visualizer"), + ("M-m", spawn $ myTerminal ++ " -e ncmpcpp"), + ("M-n", spawn $ myTerminal ++ " -e newsboat"), + ("M-c", spawn $ myTerminal ++ " -e weechat"), + ("", spawn "scrot -e 'mv $f ~/Pictures/Screenshots'"), + ("S-", spawn "~/.xmonad/scripts/screenshot.sh"), + ("M-S-a", spawn $ myTerminal ++ " -e pulsemixer"), + ("M-", spawn myTerminal), + ("M-f", sendMessage $ Toggle FULL), + -- Switch workspaces and screens + --("M-", moveTo Next (WSIs hiddenNotNSP)), + --("M-", moveTo Prev (WSIs hiddenNotNSP)), + --("M-S-", shiftTo Next (WSIs hiddenNotNSP)), + --("M-S-", shiftTo Prev (WSIs hiddenNotNSP)), + ("M-", nextScreen), + ("M-", prevScreen), + ("M-S-", shiftNextScreen), + ("M-S-", shiftPrevScreen), + ("M-S-r", spawn "xmonad --recompile; xmonad --restart"), + ("" ,spawn "pulsemixer --change-volume -5"), + ("" ,spawn "pulsemixer --change-volume +5"), + ("" ,spawn "pulsemixer --toggle-mute"), + ("" ,spawn "xbacklight -dec 5"), + ("" ,spawn "xbacklight -inc 5"), + ("" ,spawn "mpc toggle"), + ("M-p" ,spawn "mpc toggle"), + ("" ,spawn "mpc prev"), + ("" ,spawn "mpc next") + ] + +myLayout = smartSpacing 5 + $ smartBorders + $ mkToggle (NOBORDERS ?? FULL ?? EOT) + $ avoidStruts + $ layoutHook defaultConfig + +myStartupHook xmproc = do + setWMName "LG3D" + return () >> checkKeymap (myConfig xmproc) myAdditionalKeys diff --git a/copyToEtc.sh b/copyToEtc.sh new file mode 100755 index 0000000..7783f03 --- /dev/null +++ b/copyToEtc.sh @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +sudo cp -r conf machines main.nix /etc/nixos/ \ No newline at end of file diff --git a/machines/nixos-desktop/configuration.nix b/machines/nixos-desktop/configuration.nix new file mode 100644 index 0000000..f9c83e7 --- /dev/null +++ b/machines/nixos-desktop/configuration.nix @@ -0,0 +1,33 @@ +{ config, lib, pkgs, ... }: +{ + imports = [ + ./hardware-configuration.nix + ../../main.nix + ]; + + fileSystems."/home/froidmpa/Nextcloud" = { + device = "/dev/disk/by-uuid/a4ba8b21-ea33-4487-b6f6-9bb7470a0acb"; + fsType = "ext4"; + }; + + boot.loader.systemd-boot.enable = true; + boot.loader.efi.canTouchEfiVariables = true; + + networking.hostName = "nixos-desktop"; + networking.interfaces.enp31s0.useDHCP = true; + + console = { + font = "Lat2-Terminus16"; + keyMap = "fr"; + }; + + i18n = { + defaultLocale = "en_US.UTF-8"; + }; + + time.timeZone = "Europe/Amsterdam"; + + services.xserver.videoDrivers = ["amdgpu"]; + environment.systemPackages = with pkgs; [ + ]; +} \ No newline at end of file diff --git a/machines/nixos-desktop/hardware-configuration.nix b/machines/nixos-desktop/hardware-configuration.nix new file mode 100644 index 0000000..86cf562 --- /dev/null +++ b/machines/nixos-desktop/hardware-configuration.nix @@ -0,0 +1,33 @@ +# Do not modify this file! It was generated by ‘nixos-generate-config’ +# and may be overwritten by future invocations. Please make changes +# to /etc/nixos/configuration.nix instead. +{ config, lib, pkgs, ... }: + +{ + imports = + [ + ]; + + boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "usb_storage" "usbhid" "sd_mod" ]; + boot.initrd.kernelModules = [ ]; + boot.kernelModules = [ "kvm-amd" ]; + boot.extraModulePackages = [ ]; + + fileSystems."/" = + { device = "/dev/disk/by-uuid/4ea0fdb5-aabf-422c-af50-df48098a3609"; + fsType = "ext4"; + }; + + fileSystems."/boot" = + { device = "/dev/disk/by-uuid/933D-0D92"; + fsType = "vfat"; + }; + + swapDevices = + [ { device = "/dev/disk/by-uuid/534957d8-8b79-44cf-98f5-dd2af917d7a0"; } + ]; + + nix.maxJobs = lib.mkDefault 16; + # High-DPI console + i18n.consoleFont = lib.mkDefault "${pkgs.terminus_font}/share/consolefonts/ter-u28n.psf.gz"; +} diff --git a/main.nix b/main.nix new file mode 100644 index 0000000..3f212e4 --- /dev/null +++ b/main.nix @@ -0,0 +1,285 @@ +{ config, pkgs, ... }: +{ + imports = [ + + ]; + + + # List packages installed in system profile. To search, run: + # $ nix search wget + environment.systemPackages = with pkgs; [ + wget + inetutils + + man + + vim + git + + htop + ncdu + ]; + fonts = { + fonts = with pkgs; [ + meslo-lg + nerdfonts + ]; + fontconfig.defaultFonts = { + monospace = [ "MesloLGMDZ Nerd Font Mono" ]; + }; + }; + + sound.enable = true; + hardware.pulseaudio.enable = true; + hardware.opengl.driSupport32Bit = true; + hardware.pulseaudio.support32Bit = true; + + services.xserver = { + enable = true; + layout = "fr"; + desktopManager.xterm.enable = false; + windowManager.xmonad.enable = true; + }; + + users.users.froidmpa = { + isNormalUser = true; + extraGroups = [ "wheel" ]; + shell = pkgs.zsh; + }; + + home-manager.users.froidmpa = {pkgs, config, ...}: { + xsession = { + enable = true; + windowManager.xmonad = { + enable = true; + enableContribAndExtras = true; + config = ./conf/xmonad.hs; + }; + }; + nixpkgs.config.allowUnfree = true; + nixpkgs.config.packageOverrides = pkgs: { + ncmpcpp = pkgs.ncmpcpp.override {visualizerSupport = true;}; + nur = import (builtins.fetchTarball "https://github.com/nix-community/NUR/archive/master.tar.gz") { + inherit pkgs; + }; + }; + home.packages = with pkgs; [ + jetbrains.idea-ultimate + haskellPackages.xmobar + keepassxc + zsh-syntax-highlighting + ncmpcpp + mpc_cli + pulsemixer + krita + feh + riot-desktop + steam + xorg.xinit + xorg.xwininfo + xorg.xkill + mpv + ]; + home.keyboard = { + layout = "fr"; + options = ["caps:escape"]; + }; + home.file.".xmonad/xmobarrc".source = ./conf/xmobarrc; + home.file.".config/ncmpcpp" = { + source = ./conf/ncmpcpp; + recursive = true; + }; + home.file.".xmonad/scripts" = { + source = ./conf/scripts; + recursive = true; + }; + + programs.firefox = { + enable = true; + extensions = with pkgs.nur.repos.rycee.firefox-addons; [ + keepassxc-browser + ublock-origin + umatrix + cookie-autodelete + dark-night-mode + ]; + }; + + programs.rofi = { + enable = true; + theme = "gruvbox-dark"; + terminal = "urxvt"; + }; + + programs.urxvt = { + enable = true; + fonts = ["xft:monospace:size=11:antialias=true"]; + scroll = { + bar.enable = false; + lines = 65535; + }; + extraConfig = { + "background" = "rgba:28ff/28ff/28ff/cf00"; + "foreground" = "#ebdbb2"; + "color0" = "#282828"; + "color8" = "#928374"; + "color1" = "#cc241d"; + "color9" = "#fb4934"; + "color2" = "#98971a"; + "color10" = "#b8bb26"; + "color3" = "#d79921"; + "color11" = "#fabd2f"; + "color4" = "#458588"; + "color12" = "#83a598"; + "color5" = "#b16286"; + "color13" = "#d3869b"; + "color6" = "#689d6a"; + "color14" = "#8ec07c"; + "color7" = "#a89984"; + "color15" = "#ebdbb2"; + "termName" = "rxvt-256color"; + "letterSpace" = "-1"; + "internalBorder" = "10"; + "depth" = "32"; + }; + }; + programs.neovim = { + enable = true; + vimAlias = true; + plugins = with pkgs; [ + vimPlugins.gruvbox-community + vimPlugins.vim-airline + vimPlugins.vim-airline-themes + vimPlugins.vim-gitgutter + vimPlugins.nerdtree + vimPlugins.nerdtree-git-plugin + vimPlugins.ctrlp-vim + vimPlugins.tabular + ]; + extraConfig = '' + let g:gruvbox_italic=1 + colorscheme gruvbox + set background=dark + let g:airline_powerline_fonts = 1 + autocmd VimEnter * hi Normal ctermbg=NONE guibg=NONE + + "Toggle NERDTree with Ctrl-N + map :NERDTreeToggle + + "Show hidden files in NERDTree + let NERDTreeShowHidden=1 + + set number relativenumber + + " Run xrdb whenever Xdefaults or Xresources are updated. + autocmd BufWritePost ~/.Xresources,~/.Xdefaults !xrdb % + ''; + }; + programs.broot = { + enable = true; + enableZshIntegration = true; + enableFishIntegration = true; + }; + programs.zsh = { + enable = true; + history = { + save = 10000; + size = 10000; + }; + enableAutosuggestions = true; + initExtra = '' + autoload -Uz up-line-or-beginning-search down-line-or-beginning-search + zle -N up-line-or-beginning-search + zle -N down-line-or-beginning-search + + [[ -n "$key[Up]" ]] && bindkey -- "$key[Up]" up-line-or-beginning-search + [[ -n "$key[Down]" ]] && bindkey -- "$key[Down]" down-line-or-beginning-search + ''; + oh-my-zsh = { + enable = true; + plugins = [ + "git" + ]; + theme = "robbyrussell"; + }; + plugins = [ + { + name = "zsh-syntax-highlighting"; + file = "share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh"; + src = "${pkgs.zsh-syntax-highlighting}"; + } + ]; + }; + programs.command-not-found.enable = true; + services.compton.enable = true; + services.stalonetray = { + enable = true; + config = { + geometry = "1x1-50+0"; + background = "#000000"; + transparent = true; + grow_gravity = "E"; + icon_gravity = "NE"; + icon_size = "20"; + }; + }; + services.unclutter.enable = true; + services.pasystray.enable = true; + services.mpd = { + enable = true; + musicDirectory = "${config.home.homeDirectory}/Nextcloud/Media/Music"; + }; + services.dunst = { + enable = true; + settings = { + global = { + monitor = 0; + geometry = "350x5-30+50"; + transparency = 10; + font = "monospace 14"; + idle_threshold = 120; + allow_markup = "yes"; + format = "%s\n%b"; + show_age_threshold = 300; + word_wrap = "yes"; + sticky_history = "yes"; + sort = "yes"; + }; + frame = { + width = 3; + color = "#ebdbb2"; + }; + shortcuts = { + close = "ctrl+space"; + close_all = "ctrl+shift+space"; + history = "ctrl+grave"; + context = "ctrl+shift+period"; + }; + urgency_low = { + foreground = "#ebdbb2"; + background = "#32302f"; + timeout = 10; + }; + urgency_normal = { + foreground = "#ebdbb2"; + background = "#32302f"; + timeout = 10; + }; + urgency_critical = { + foreground = "#ebdbb2"; + background = "#32302f"; + timeout = 10; + }; + }; + }; + services.nextcloud-client.enable = true; + services.gpg-agent = { enable = true; enableSshSupport = true; }; + services.gnome-keyring = { + enable = true; + components = ["pkcs11" "secrets"]; + }; + }; + + system.stateVersion = "19.09"; +} +