aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristopher R. Nelson <christopher.nelson@languidnights.com>2023-05-11 08:05:14 -0400
committerChristopher R. Nelson <christopher.nelson@languidnights.com>2023-05-11 08:05:14 -0400
commit60f7bde7e10af2727e86faa3e027c1de43617161 (patch)
treeb46b87ec09bcb759f1473af2d92f801e0167da56
initial import
-rwxr-xr-x.config/khal/config12
-rwxr-xr-x.config/khard/khard.conf19
-rw-r--r--.config/todoman/todoman.conf6
-rw-r--r--.mpdconf415
-rw-r--r--COPYING145
-rw-r--r--README.rst53
-rw-r--r--linked_files4
-rwxr-xr-xmake_links128
8 files changed, 782 insertions, 0 deletions
diff --git a/.config/khal/config b/.config/khal/config
new file mode 100755
index 0000000..67242bb
--- /dev/null
+++ b/.config/khal/config
@@ -0,0 +1,12 @@
+[calendars]
+
+[[private]]
+path = .calendar/calendar
+type = calendar
+
+[locale]
+timeformat = %H:%M
+dateformat = %Y-%m-%d
+longdateformat = %Y-%m-%d
+datetimeformat = %Y-%m-%d %H:%M
+longdatetimeformat = %Y-%m-%d %H:%M
diff --git a/.config/khard/khard.conf b/.config/khard/khard.conf
new file mode 100755
index 0000000..67c4dcf
--- /dev/null
+++ b/.config/khard/khard.conf
@@ -0,0 +1,19 @@
+[addressbooks]
+[[l_addressbook_local]]
+path = ~/.addressbook/addressbook
+
+[general]
+debug = no
+default_action = list
+editor = nvim, -i, NONE
+merge_editor = vimdiff
+
+[contact table]
+display = formatted_name
+group_by_addressbook = no
+show_nicknames = no
+show_uids = no
+sort = last_name
+
+[vcard]
+skip_unparesable = yes
diff --git a/.config/todoman/todoman.conf b/.config/todoman/todoman.conf
new file mode 100644
index 0000000..1060931
--- /dev/null
+++ b/.config/todoman/todoman.conf
@@ -0,0 +1,6 @@
+[main]
+path = "~/.calendar/calendar/"
+date_format = "%Y-%m-%d"
+default_list = "calendar"
+default_due = 48
+humanize = true
diff --git a/.mpdconf b/.mpdconf
new file mode 100644
index 0000000..12d79ce
--- /dev/null
+++ b/.mpdconf
@@ -0,0 +1,415 @@
+# An example configuration file for MPD.
+# Read the user manual for documentation: http://www.musicpd.org/doc/user/
+
+
+# Files and directories #######################################################
+#
+# This setting controls the top directory which MPD will search to discover the
+# available audio files and add them to the daemon's online database. This
+# setting defaults to the XDG directory, otherwise the music directory will be
+# be disabled and audio files will only be accepted over ipc socket (using
+# file:// protocol) or streaming files over an accepted protocol.
+#
+music_directory "/home/christopher/Music"
+#
+# This setting sets the MPD internal playlist directory. The purpose of this
+# directory is storage for playlists created by MPD. The server will use
+# playlist files not created by the server but only if they are in the MPD
+# format. This setting defaults to playlist saving being disabled.
+#
+playlist_directory "/home/christopher/.mpd/playlists"
+#
+# This setting sets the location of the MPD database. This file is used to
+# load the database at server start up and store the database while the
+# server is not up. This setting defaults to disabled which will allow
+# MPD to accept files over ipc socket (using file:// protocol) or streaming
+# files over an accepted protocol.
+#
+db_file "/home/christopher/.mpd/database"
+#
+# These settings are the locations for the daemon log files for the daemon.
+# These logs are great for troubleshooting, depending on your log_level
+# settings.
+#
+# The special value "syslog" makes MPD use the local syslog daemon. This
+# setting defaults to logging to syslog.
+#
+log_file "/home/christopher/.mpd/log"
+#
+# This setting sets the location of the file which stores the process ID
+# for use of mpd --kill and some init scripts. This setting is disabled by
+# default and the pid file will not be stored.
+#
+pid_file "/run/user/1000/mpd.pid"
+#
+# This setting sets the location of the file which contains information about
+# most variables to get MPD back into the same general shape it was in before
+# it was brought down. This setting is disabled by default and the server
+# state will be reset on server start up.
+#
+state_file "/home/christopher/.mpd/state"
+#
+# The location of the sticker database. This is a database which
+# manages dynamic information attached to songs.
+#
+sticker_file "/home/christopher/.mpd/sticker.sql"
+#
+###############################################################################
+
+
+# General music daemon options ################################################
+#
+# This setting specifies the user that MPD will run as. MPD should never run as
+# root and you may use this setting to make MPD change its user ID after
+# initialization. This setting is disabled by default and MPD is run as the
+# current user.
+#
+#user "nobody"
+#
+# This setting specifies the group that MPD will run as. If not specified
+# primary group of user specified with "user" setting will be used (if set).
+# This is useful if MPD needs to be a member of group such as "audio" to
+# have permission to use sound card.
+#
+#group "nogroup"
+#
+# This setting sets the address for the daemon to listen on. Careful attention
+# should be paid if this is assigned to anything other than the default, any.
+# This setting can deny access to control of the daemon. Not effective if
+# systemd socket activiation is in use.
+#
+# For network
+bind_to_address "any"
+#
+# And for Unix Socket
+#bind_to_address "~/.mpd/socket"
+#
+# This setting is the TCP port that is desired for the daemon to get assigned
+# to.
+#
+port "6600"
+#
+# Suppress all messages below the given threshold. Use "verbose" for
+# troubleshooting. Available setting arguments are "notice", "info", "verbose",
+# "warning" and "error".
+#
+#log_level "notice"
+#
+# Setting "restore_paused" to "yes" puts MPD into pause mode instead
+# of starting playback after startup.
+#
+restore_paused "yes"
+#
+# This setting enables MPD to create playlists in a format usable by other
+# music players.
+#
+#save_absolute_paths_in_playlists "no"
+#
+# This setting defines a list of tag types that will be extracted during the
+# audio file discovery process. The complete list of possible values can be
+# found in the user manual.
+#metadata_to_use "artist,album,title,track,name,genre,date,composer,performer,disc"
+#
+# This example just enables the "comment" tag without disabling all
+# the other supported tags:
+#metadata_to_use "+comment"
+#
+# This setting enables automatic update of MPD's database when files in
+# music_directory are changed.
+#
+#auto_update "yes"
+#
+# Limit the depth of the directories being watched, 0 means only watch
+# the music directory itself. There is no limit by default.
+#
+#auto_update_depth "3"
+#
+###############################################################################
+
+
+# Symbolic link behavior ######################################################
+#
+# If this setting is set to "yes", MPD will discover audio files by following
+# symbolic links outside of the configured music_directory.
+#
+#follow_outside_symlinks "yes"
+#
+# If this setting is set to "yes", MPD will discover audio files by following
+# symbolic links inside of the configured music_directory.
+#
+#follow_inside_symlinks "yes"
+#
+###############################################################################
+
+
+# Zeroconf / Avahi Service Discovery ##########################################
+#
+# If this setting is set to "yes", service information will be published with
+# Zeroconf / Avahi.
+#
+zeroconf_enabled "yes"
+#
+# The argument to this setting will be the Zeroconf / Avahi unique name for
+# this MPD server on the network. %h will be replaced with the hostname.
+#
+zeroconf_name "Music Player @ %h"
+#
+###############################################################################
+
+
+# Permissions #################################################################
+#
+# If this setting is set, MPD will require password authorization. The password
+# setting can be specified multiple times for different password profiles.
+#
+#password "password@read,add,control,admin"
+#
+# This setting specifies the permissions a user has who has not yet logged in.
+#
+#default_permissions "read,add,control,admin"
+#
+###############################################################################
+
+
+# Database #######################################################################
+#
+# An example of a database section instead of the old 'db_file' setting.
+# It enables mounting other storages into the music directory.
+#
+#database {
+# plugin "simple"
+# path "~/.local/share/mpd/db
+# cache_directory "~/.local/share/mpd/cache"
+#}
+#
+# An example of database config for a sattelite setup
+#
+#music_directory "nfs://fileserver.local/srv/mp3"
+#database {
+# plugin "proxy"
+# host "other.mpd.host"
+# port "6600"
+#}
+
+# Input #######################################################################
+#
+input {
+ plugin "curl"
+# proxy "proxy.isp.com:8080"
+# proxy_user "user"
+# proxy_password "password"
+}
+
+#
+###############################################################################
+
+# Audio Output ################################################################
+#
+# MPD supports various audio output types, as well as playing through multiple
+# audio outputs at the same time, through multiple audio_output settings
+# blocks. Setting this block is optional, though the server will only attempt
+# autodetection for one sound card.
+#
+# An example of an ALSA output:
+#
+#audio_output {
+# type "alsa"
+# name "My ALSA Device"
+## device "hw:0,0" # optional
+## mixer_type "hardware" # optional
+## mixer_device "default" # optional
+## mixer_control "PCM" # optional
+## mixer_index "0" # optional
+#}
+#
+# An example of an OSS output:
+#
+#audio_output {
+# type "oss"
+# name "My OSS Device"
+## device "/dev/dsp" # optional
+## mixer_type "hardware" # optional
+## mixer_device "/dev/mixer" # optional
+## mixer_control "PCM" # optional
+#}
+#
+# An example of a shout output (for streaming to Icecast):
+#
+#audio_output {
+# type "shout"
+# encoder "vorbis" # optional
+# name "My Shout Stream"
+# host "localhost"
+# port "8000"
+# mount "/mpd.ogg"
+# password "hackme"
+# quality "5.0"
+# bitrate "128"
+# format "44100:16:1"
+## protocol "icecast2" # optional
+## user "source" # optional
+## description "My Stream Description" # optional
+## url "http://example.com" # optional
+## genre "jazz" # optional
+## public "no" # optional
+## timeout "2" # optional
+## mixer_type "software" # optional
+#}
+#
+# An example of a recorder output:
+#
+#audio_output {
+# type "recorder"
+# name "My recorder"
+# encoder "vorbis" # optional, vorbis or lame
+# path "/var/lib/mpd/recorder/mpd.ogg"
+## quality "5.0" # do not define if bitrate is defined
+# bitrate "128" # do not define if quality is defined
+# format "44100:16:1"
+#}
+#
+# An example of a httpd output (built-in HTTP streaming server):
+#
+#audio_output {
+# type "httpd"
+# name "My HTTP Stream"
+# encoder "vorbis" # optional, vorbis or lame
+# port "8000"
+# bind_to_address "0.0.0.0" # optional, IPv4 or IPv6
+## quality "5.0" # do not define if bitrate is defined
+# bitrate "128" # do not define if quality is defined
+# format "44100:16:1"
+# max_clients "0" # optional 0=no limit
+#}
+#
+# An example of a pulseaudio output (streaming to a remote pulseaudio server)
+#
+audio_output {
+ type "pulse"
+ name "My Pulse Output"
+## server "remote_server" # optional
+## sink "remote_server_sink" # optional
+## media_role "media_role" #optional
+}
+#
+# An example of a winmm output (Windows multimedia API).
+#
+#audio_output {
+# type "winmm"
+# name "My WinMM output"
+## device "Digital Audio (S/PDIF) (High Definition Audio Device)" # optional
+# or
+## device "0" # optional
+## mixer_type "hardware" # optional
+#}
+#
+# An example of a wasapi output (Windows multimedia API).
+#
+#audio_output {
+# type "wasapi"
+# name "My WASAPI output"
+## device "Digital Audio (S/PDIF) (High Definition Audio Device)" # optional
+# or
+## device "0" # optional
+## Exclusive mode blocks all other audio source, and get best audio quality without resampling.
+## exclusive "no" # optional
+## Enumerate all devices in log.
+## enumerate "no" # optional
+#}
+#
+# An example of an openal output.
+#
+#audio_output {
+# type "openal"
+# name "My OpenAL output"
+## device "Digital Audio (S/PDIF) (High Definition Audio Device)" # optional
+#}
+#
+# An example of an sndio output.
+#
+#audio_output {
+# type "sndio"
+# name "sndio output"
+# mixer_type "hardware"
+#}
+#
+# An example of an OS X output:
+#
+#audio_output {
+# type "osx"
+# name "My OS X Device"
+## device "Built-in Output" # optional
+## channel_map "-1,-1,0,1" # optional
+#}
+#
+## Example "pipe" output:
+#
+#audio_output {
+# type "pipe"
+# name "my pipe"
+# command "aplay -f cd 2>/dev/null"
+## Or if you're want to use AudioCompress
+# command "AudioCompress -m | aplay -f cd 2>/dev/null"
+## Or to send raw PCM stream through PCM:
+# command "nc example.org 8765"
+# format "44100:16:2"
+#}
+#
+## An example of a null output (for no audio output):
+#
+#audio_output {
+# type "null"
+# name "My Null Output"
+# mixer_type "none" # optional
+#}
+#
+###############################################################################
+
+
+# Normalization automatic volume adjustments ##################################
+#
+# This setting specifies the type of ReplayGain to use. This setting can have
+# the argument "off", "album", "track" or "auto". "auto" is a special mode that
+# chooses between "track" and "album" depending on the current state of
+# random playback. If random playback is enabled then "track" mode is used.
+# See <https://wiki.hydrogenaud.io/index.php?title=Replaygain> for
+# more details about ReplayGain.
+# This setting is off by default.
+#
+#replaygain "album"
+#
+# This setting sets the pre-amp used for files that have ReplayGain tags. By
+# default this setting is disabled.
+#
+#replaygain_preamp "0"
+#
+# This setting sets the pre-amp used for files that do NOT have ReplayGain tags.
+# By default this setting is disabled.
+#
+#replaygain_missing_preamp "0"
+#
+# This setting enables or disables ReplayGain limiting.
+# MPD calculates actual amplification based on the ReplayGain tags
+# and replaygain_preamp / replaygain_missing_preamp setting.
+# If replaygain_limit is enabled MPD will never amplify audio signal
+# above its original level. If replaygain_limit is disabled such amplification
+# might occur. By default this setting is enabled.
+#
+#replaygain_limit "yes"
+#
+# This setting enables on-the-fly normalization volume adjustment. This will
+# result in the volume of all playing audio to be adjusted so the output has
+# equal "loudness". This setting is disabled by default.
+#
+#volume_normalization "no"
+#
+###############################################################################
+
+# Character Encoding ##########################################################
+#
+# If file or directory names do not display correctly for your locale then you
+# may need to modify this setting.
+#
+filesystem_charset "UTF-8"
+#
+###############################################################################
diff --git a/COPYING b/COPYING
new file mode 100644
index 0000000..46c1bab
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,145 @@
+make_links code
+
+Copyright 2021 Christopher Nelson <christopher.nelson@languidnights.com>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+wallpapers files and dotfiles
+
+CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
+LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN
+ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION
+ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE
+USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED HEREUNDER, AND
+DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM THE USE OF THIS DOCUMENT
+OR THE INFORMATION OR WORKS PROVIDED HEREUNDER.
+
+Statement of Purpose
+
+The laws of most jurisdictions throughout the world automatically confer
+exclusive Copyright and Related Rights (defined below) upon the creator
+and subsequent owner(s) (each and all, an "owner") of an original work
+of authorship and/or a database (each, a "Work").
+
+Certain owners wish to permanently relinquish those rights to a Work for
+the purpose of contributing to a commons of creative, cultural and
+scientific works ("Commons") that the public can reliably and without
+fear of later claims of infringement build upon, modify, incorporate in
+other works, reuse and redistribute as freely as possible in any form
+whatsoever and for any purposes, including without limitation commercial
+purposes. These owners may contribute to the Commons to promote the
+ideal of a free culture and the further production of creative, cultural
+and scientific works, or to gain reputation or greater distribution for
+their Work in part through the use and efforts of others.
+
+For these and/or other purposes and motivations, and without any
+expectation of additional consideration or compensation, the person
+associating CC0 with a Work (the "Affirmer"), to the extent that he or
+she is an owner of Copyright and Related Rights in the Work, voluntarily
+elects to apply CC0 to the Work and publicly distribute the Work under
+its terms, with knowledge of his or her Copyright and Related Rights in
+the Work and the meaning and intended legal effect of CC0 on those
+rights.
+
+1. Copyright and Related Rights. A Work made available under CC0 may be
+protected by copyright and related or neighboring rights ("Copyright and
+Related Rights"). Copyright and Related Rights include, but are not
+limited to, the following:
+
+ the right to reproduce, adapt, distribute, perform, display,
+ communicate, and translate a Work;
+ moral rights retained by the original author(s) and/or performer(s);
+ publicity and privacy rights pertaining to a person's image or
+ likeness depicted in a Work;
+ rights protecting against unfair competition in regards to a Work,
+ subject to the limitations in paragraph 4(a), below;
+ rights protecting the extraction, dissemination, use and reuse of
+ data in a Work;
+ database rights (such as those arising under Directive 96/9/EC of
+ the European Parliament and of the Council of 11 March 1996 on
+ the legal protection of databases, and under any national
+ implementation thereof, including any amended or successor
+ version of such directive); and
+ other similar, equivalent or corresponding rights throughout
+ the world based on applicable law or treaty, and any
+ national implementations thereof.
+
+2. Waiver. To the greatest extent permitted by, but not in contravention
+of, applicable law, Affirmer hereby overtly, fully, permanently,
+irrevocably and unconditionally waives, abandons, and surrenders all of
+Affirmer's Copyright and Related Rights and associated claims and causes
+of action, whether now known or unknown (including existing as well as
+future claims and causes of action), in the Work (i) in all territories
+worldwide, (ii) for the maximum duration provided by applicable law or
+treaty (including future time extensions), (iii) in any current or
+future medium and for any number of copies, and (iv) for any purpose
+whatsoever, including without limitation commercial, advertising or
+promotional purposes (the "Waiver"). Affirmer makes the Waiver for the
+benefit of each member of the public at large and to the detriment of
+Affirmer's heirs and successors, fully intending that such Waiver shall
+not be subject to revocation, rescission, cancellation, temination, or
+any other legal or equitable action to disrupt the quiet enjoyment of
+the Work by the public as contemplated by Affirmer's express Statement
+of Purpose.
+
+3. Public License Fallback. Should any part of the Waiver for any reason
+be judged legally invalid or ineffective under applicable law, then the
+Waiver shall be preserved to the maximum extent permitted taking into
+account Affirmer's express Statement of Purpose. In addition, to the
+extent the Waiver is so judged Affirmer hereby grants to each affected
+person a royalty-free, non transferable, non sublicensable, non
+exclusive, irrevocable and unconditional license to exercise Affirmer's
+Copyright and Related Rights in the Work (i) in all territories
+worldwide, (ii) for the maximum duration provided by applicable law or
+treaty (including future time extensions), (iii) in any current or
+future medium and for any number of copies, and (iv) for any purpose
+whatsoever, including without limitation commercial, advertising or
+promotional purposes (the "License"). The License shall be deemed
+effective as of the date CC0 was applied by Affirmer to the Work. Should
+any part of the License for any reason be judged legally invalid or
+ineffective under applicable law, such partial invalidity or
+ineffectiveness shall not invalidate the remainder of the License, and
+in such case Affirmer hereby affirms that he or she will not (i)
+exercise any of his or her remaining Copyright and Related Rights in the
+Work or (ii) assert any associated claims and causes of action with
+respect to the Work, in either case contrary to Affirmer's express
+Statement of Purpose.
+
+4. Limitations and Disclaimers.
+
+ No trademark or patent rights held by Affirmer are waived,
+ abandoned, surrendered, licensed or otherwise affected by this
+ document.
+ Affirmer offers the Work as-is and makes no representations or
+ warranties of any kind concerning the Work, express, implied,
+ statutory or otherwise, including without limitation warranties
+ of title, merchantability, fitness for a particular purpose,
+ non infringement, or the absence of latent or other defects,
+ accuracy, or the present or absence of errors, whether or not
+ discoverable, all to the greatest extent permissible under
+ applicable law.
+ Affirmer disclaims responsibility for clearing rights of other
+ persons that may apply to the Work or any use thereof,
+ including without limitation any person's Copyright and
+ Related Rights in the Work. Further, Affirmer disclaims
+ responsibility for obtaining any necessary consents,
+ permissions or other rights required for any use of the Work.
+ Affirmer understands and acknowledges that Creative Commons is
+ not a party to thisdocument and has no duty or obligation
+ with respect to this CC0 or use of the Work.
diff --git a/README.rst b/README.rst
new file mode 100644
index 0000000..536e149
--- /dev/null
+++ b/README.rst
@@ -0,0 +1,53 @@
+L's Dotfile Repository
+----------------------
+
+This repo is intended to contain all the configurations I require to get
+my environment setup on a new install. It is secondarily a template for
+other people to use who might have an interest in doing so.
+
+How does this differ from `GNU Stow`_, other than being less featured? NIH,
+mostly.
+
+.. contents::
+ :backlinks: top
+
+Howto
+=====
+
+| Move any desired files in your home directory into the git directory.
+| Add the filename to "linked_files", each on its own line.
+| Run "./make_links"
+| The output should indicate any links made ("linked ...") or files
+ that already existed ("... already exists, skipping") or removed
+ ("... removed")
+
+make_links usage
+================
+
+| make_links will link out the contents of \"linked_files\" to your home dir
+|
+| Syntax: make_links [-d|-h|-l|-n|-m]
+| options:
+| -d, --destructive Destructively link (removes existing symlinks AND regular files)
+| -h, --help Print this help
+| -l, --license Print the license for make_links
+| -n, --nondestructive Non-destructively link (existing files and links will be left alone)
+| -m, --make-documentation Converts documentation READMEs from rst to HTML
+
+Prerequisites
+=============
+
+make_links *should* not require bash, just the standard posix sh
+
+Required Modifications
+======================
+
+.mpdconf
+ update the directory paths at the top (/home/christopher) to
+ the home directory of your machine, as well as the run directory
+ uid if you're not user 1000
+
+:Authors: Christopher R Nelson
+:Version: 1.0.2
+
+.. _GNU Stow: https://www.gnu.org/software/stow/
diff --git a/linked_files b/linked_files
new file mode 100644
index 0000000..0b80ef6
--- /dev/null
+++ b/linked_files
@@ -0,0 +1,4 @@
+.config/khard
+.config/khal
+.config/todoman
+.mpdconf \ No newline at end of file
diff --git a/make_links b/make_links
new file mode 100755
index 0000000..4b6babb
--- /dev/null
+++ b/make_links
@@ -0,0 +1,128 @@
+#!/bin/sh
+# vim: ts=4:sw=4:sts=4
+#############################################################################
+# Copyright 2021 Christopher Nelson <christopher.nelson@languidnights.com>
+#
+# Permission is hereby granted, free of charge, to any person obtaining
+# a copy of this software and associated documentation files (the
+# "Software"), to deal in the Software without restriction, including
+# without limitation the rights to use, copy, modify, merge, publish,
+# distribute, sublicense, and/or sell copies of the Software, and to
+# permit persons to whom the Software is furnished to do so, subject to
+# the following conditions:
+#
+# The above copyright notice and this permission notice shall be
+# included in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#############################################################################
+
+BASEDIR="$(cd "$(dirname "$0")" && pwd )"
+
+mkdir -p $HOME/.config
+mkdir -p $HOME/.local/share
+mkdir -p $HOME/.local/bin
+
+linker()
+{
+ local destroy="$1"
+
+ while read -r dotfile
+ do
+ # Skip blank lines
+ [ -z "$dotfile" ] && continue
+
+ initial_char=$(echo $dotfile | cut -c1-1)
+ # Skip lines with a '#'
+ [ $initial_char = '#' ] && continue
+ echo "linking $BASEDIR/$dotfile to $HOME/$dotfile"
+ if [ -f "$HOME/$dotfile" ]; then
+ if [ $destroy = "true" ]; then
+ echo "removing $HOME/$dotfile"
+ rm "$HOME/$dotfile"
+ elif [ -L $HOME/$dotfile ]; then
+ echo "$HOME/$dotfile is already a link, skipping"
+ continue
+ else
+ echo "$HOME/$dotfile is a regular file, skipping"
+ continue
+ fi
+ elif [ -d "$HOME/$dotfile" ]; then
+ if [ -L "$HOME/$dotfile" ]; then
+ if [ $destroy = "true" ]; then
+ echo "removing $HOME/$dotfile"
+ rm "$HOME/$dotfile"
+ else [ -L "$HOME/$dotfile" ]
+ echo "$HOME/$dotfile is already a link, skipping"
+ continue
+ fi
+ elif [ $destroy = "true" ]; then
+ echo "removing $HOME/$dotfile"
+ rm -r "$HOME/$dotfile"
+ else
+ echo "$HOME/$dotfile already exists, skipping"
+ continue
+ fi
+ fi
+
+ if [ ! -d $(dirname "$HOME/$dotfile") ]; then
+ echo "dir does not exist $(dirname "$HOME/$dotfile")"
+ mkdir -p $(dirname "$HOME/$dotfile")
+ echo "creating directory"
+ fi
+
+ ln -s $BASEDIR/$dotfile $HOME/$dotfile
+ echo "linked $BASEDIR/$dotfile to $HOME/$dotfile"
+
+ done < $BASEDIR/linked_files
+}
+
+convert_readme()
+{
+ if [ $(command -v rst2html5) != "" ]; then
+ rst2html5 $BASEDIR/README.rst > $BASEDIR/README.html
+ fi
+}
+
+help()
+{
+ echo "make_links will link out the contents of \"linked_files\" to your home dir"
+ echo
+ echo "Syntax: make_links [-d|-h|-l|-n|-m]"
+ echo "options:"
+ echo " -d, --destructive Destructively link (removes existing symlinks)"
+ echo " -h, --help Print this help"
+ echo " -l, --license Print the license for make_links"
+ echo " -n, --nondestructive Non-destructively link (existing files and links will be left alone)"
+ echo " -m, --make-documentation Converts documentation READMEs from rst to HTML"
+ echo
+}
+
+license()
+{
+ $PAGER $BASEDIR/COPYING
+}
+
+for arg in "$@"; do
+ shift
+ case "$arg" in
+ "--help") help; exit 0;;
+ "-h") help; exit 0;;
+ "--destructive") linker true; exit 0;;
+ "-d") linker true; exit 0;;
+ "--nondestructive") linker false; exit 0;;
+ "-n") linker false; exit 0;;
+ "--license") license; exit 0;;
+ "-l") license; exit 0;;
+ "--make-documentation") convert_readme; exit 0;;
+ "-m") convert_readme; exit 0;;
+ esac
+done
+
+help